From 22011513c8c033ab3abd200d900e3104f59a5051 Mon Sep 17 00:00:00 2001 From: Dwindi Ramadhana Date: Thu, 19 Feb 2026 23:08:50 +0700 Subject: [PATCH] Add download page and wire site navigation --- .../Http/Controllers/Web/SiteController.php | 5 + app/resources/views/site/api-docs.blade.php | 1 + app/resources/views/site/download.blade.php | 123 +++++++++++ app/resources/views/site/home.blade.php | 4 + app/resources/views/site/layout.blade.php | 3 + app/resources/views/site/pricing.blade.php | 3 + app/resources/views/site/privacy.blade.php | 1 + app/resources/views/site/support.blade.php | 1 + app/resources/views/site/terms.blade.php | 1 + app/routes/web.php | 1 + deployment-live-walkthrough.md | 201 ++++++++++++++++++ 11 files changed, 344 insertions(+) create mode 100644 app/resources/views/site/download.blade.php create mode 100644 deployment-live-walkthrough.md diff --git a/app/app/Http/Controllers/Web/SiteController.php b/app/app/Http/Controllers/Web/SiteController.php index 6cae4cc..bf6736d 100644 --- a/app/app/Http/Controllers/Web/SiteController.php +++ b/app/app/Http/Controllers/Web/SiteController.php @@ -262,6 +262,11 @@ class SiteController extends Controller return view('site.support'); } + public function download(): View + { + return view('site.download'); + } + public function privacy(): View { return view('site.privacy'); diff --git a/app/resources/views/site/api-docs.blade.php b/app/resources/views/site/api-docs.blade.php index 55e18cc..f07598a 100644 --- a/app/resources/views/site/api-docs.blade.php +++ b/app/resources/views/site/api-docs.blade.php @@ -52,6 +52,7 @@ + diff --git a/app/resources/views/site/download.blade.php b/app/resources/views/site/download.blade.php new file mode 100644 index 0000000..7f2df26 --- /dev/null +++ b/app/resources/views/site/download.blade.php @@ -0,0 +1,123 @@ +@extends('site.layout') + +@section('title', 'Download - Dewemoji') +@section('meta_description', 'Download Dewemoji for Chrome and get notified when Android app is available.') + +@push('jsonld') + +@endpush + +@section('content') +
+ + +
+
+
+
Public / Download
+

Get Dewemoji

+
+ +
+ +
+
+
+
Available now
+

Chrome Extension

+

Fast emoji search and copy workflow directly in your browser.

+ + + Install for Chrome + +

Existing extension URL stays the same on updates.

+
+ +
+
Coming soon
+

Android App

+

Native app release is in progress. We will launch internal testing first, then public release.

+
+ + Android release in preparation +
+
+ Recommended for now: use web dashboard + Chrome extension. +
+
+ +
+

Platform Status

+
+
+
+ + Chrome +
+
Available
+
+
+
+ + Android +
+
In progress
+
+
+
+ + Web +
+
Available
+
+
+
+
+
+
+
+@endsection diff --git a/app/resources/views/site/home.blade.php b/app/resources/views/site/home.blade.php index 8556309..cdf02fb 100644 --- a/app/resources/views/site/home.blade.php +++ b/app/resources/views/site/home.blade.php @@ -42,6 +42,10 @@ + + + + diff --git a/app/resources/views/site/layout.blade.php b/app/resources/views/site/layout.blade.php index 1ee2dcf..e24e51a 100644 --- a/app/resources/views/site/layout.blade.php +++ b/app/resources/views/site/layout.blade.php @@ -406,6 +406,9 @@ Login @endguest + + Download + Support diff --git a/app/resources/views/site/pricing.blade.php b/app/resources/views/site/pricing.blade.php index 0eea75c..ae92a80 100644 --- a/app/resources/views/site/pricing.blade.php +++ b/app/resources/views/site/pricing.blade.php @@ -66,6 +66,9 @@ + + + diff --git a/app/resources/views/site/privacy.blade.php b/app/resources/views/site/privacy.blade.php index cd5bb22..6819ba7 100644 --- a/app/resources/views/site/privacy.blade.php +++ b/app/resources/views/site/privacy.blade.php @@ -26,6 +26,7 @@ + diff --git a/app/resources/views/site/support.blade.php b/app/resources/views/site/support.blade.php index 43378ad..2b19825 100644 --- a/app/resources/views/site/support.blade.php +++ b/app/resources/views/site/support.blade.php @@ -31,6 +31,7 @@ + diff --git a/app/resources/views/site/terms.blade.php b/app/resources/views/site/terms.blade.php index 9f29b45..4d33a24 100644 --- a/app/resources/views/site/terms.blade.php +++ b/app/resources/views/site/terms.blade.php @@ -25,6 +25,7 @@ + diff --git a/app/routes/web.php b/app/routes/web.php index 944a372..30a1da0 100644 --- a/app/routes/web.php +++ b/app/routes/web.php @@ -16,6 +16,7 @@ Route::get('/emoji/{slug}', [SiteController::class, 'emojiDetail'])->name('emoji Route::get('/pricing', [SiteController::class, 'pricing'])->name('pricing'); Route::post('/pricing/currency', [SiteController::class, 'setPricingCurrency'])->name('pricing.currency'); +Route::get('/download', [SiteController::class, 'download'])->name('download'); Route::get('/support', [SiteController::class, 'support'])->name('support'); Route::get('/privacy', [SiteController::class, 'privacy'])->name('privacy'); Route::get('/terms', [SiteController::class, 'terms'])->name('terms'); diff --git a/deployment-live-walkthrough.md b/deployment-live-walkthrough.md new file mode 100644 index 0000000..6367af0 --- /dev/null +++ b/deployment-live-walkthrough.md @@ -0,0 +1,201 @@ +# Dewemoji Live Deployment Walkthrough + +This is the production rollout checklist for the `dewemoji` app. + +Use this in order: +1. Prepare env +2. Deploy code +3. Run post-deploy commands +4. Ensure admin access +5. Verify billing/webhooks/search/auth + +--- + +## 1) Pre-Deploy (Env + Infra) + +Set these in live environment first: + +```env +APP_ENV=production +APP_DEBUG=false +APP_URL=https://your-live-domain.com +``` + +Core requirements: +1. Database points to live DB (`DB_*`). +2. `APP_KEY` is set and stable. +3. `SESSION_DRIVER`, `CACHE_STORE`, `QUEUE_CONNECTION` configured. +4. Billing provider secrets are set (PayPal/Pakasir). +5. Allowed origins include live domain. + +Recommended billing cooldown config: + +```env +DEWEMOJI_BILLING_PENDING_COOLDOWN_SECONDS=120 +``` + +Webhook URLs: +1. PayPal webhook: `https://your-live-domain.com/v1/paypal/webhook` +2. Pakasir webhook: `https://your-live-domain.com/webhooks/pakasir` + +--- + +## 2) Deploy Code + +From your server app directory (example `/var/www/html`): + +```bash +git fetch --all +git checkout main +git pull origin main +``` + +Install dependencies if needed: + +```bash +composer install --no-dev --optimize-autoloader +``` + +--- + +## 3) Post-Deploy Commands (Required) + +Run in this exact sequence: + +```bash +php artisan optimize:clear +php artisan migrate --force +php artisan config:cache +``` + +Optional but recommended: + +```bash +php artisan route:cache +php artisan view:cache +``` + +If you use queue workers: + +```bash +php artisan queue:restart +``` + +Check migration status: + +```bash +php artisan migrate:status +``` + +--- + +## 4) Ensure Admin User + +Admin access is role-based (`users.role = admin`). + +### Option A: Promote existing user (recommended) + +```bash +php artisan tinker --execute="\App\Models\User::where('email','dewemoji@gmail.com')->update(['role'=>'admin']);" +``` + +### Option B: Create admin user if missing + +```bash +php artisan tinker --execute=" +\$u=\App\Models\User::firstOrCreate( + ['email'=>'dewemoji@gmail.com'], + ['name'=>'Dewemoji Admin','password'=>\Illuminate\Support\Facades\Hash::make('ChangeMeNow123!'),'tier'=>'free','email_verified_at'=>now()] +); +\$u->role='admin'; +\$u->save(); +" +``` + +Verify: + +```bash +php artisan tinker --execute="dump(\App\Models\User::where('email','dewemoji@gmail.com')->first(['id','email','role','tier']));" +``` + +--- + +## 5) Smoke Test Checklist (Live) + +### A. Core App +1. Login/register works over HTTPS with no insecure form warnings. +2. Dashboard loads. +3. Discover search returns emojis. +4. Emoji detail page loads. + +### B. Skin Tone +1. Discover: change skin tone selector and verify toneable emoji changes. +2. Detail: tone chips update hero emoji and copy behavior. +3. Refresh page: tone preference persists. + +### C. Account + Keywords +1. Free account can create up to active limit. +2. Active/inactive keyword behavior reflected in search. +3. Private keyword search appears in Discover after creation. + +### D. Billing +1. PayPal checkout starts and returns. +2. Pakasir QRIS starts and modal polls. +3. Pending payment can be resumed. +4. Cooldown prevents immediate repeated checkout spam. + +### E. Webhooks +1. PayPal event recorded and payment status updates. +2. Pakasir event recorded and payment status updates. + +Useful checks: + +```bash +tail -n 200 storage/logs/laravel.log +php artisan tinker --execute="dump(\App\Models\WebhookEvent::latest()->take(10)->get(['id','provider','event_type','status','created_at'])->toArray());" +php artisan tinker --execute="dump(\App\Models\Payment::latest()->take(10)->get(['id','provider','plan_code','status','created_at'])->toArray());" +``` + +--- + +## 6) Optional: PayPal Plan Sync (Admin) + +From admin dashboard: +1. Open pricing admin page. +2. Click sync PayPal plans. +3. Confirm plan IDs are written and no 500. + +If there is failure, check: + +```bash +tail -n 300 storage/logs/laravel.log | grep -Ei "paypal|sync|webhook|error|exception" +``` + +--- + +## 7) Extension Release Order + +Release order: +1. Site/backend live first. +2. Verify API/auth on live domain. +3. Update extension default API base to live. +4. Publish extension update. + +This avoids extension users hitting endpoints that are not ready. + +--- + +## 8) Rollback Strategy + +If release is broken: +1. Re-deploy previous known-good git commit. +2. Run: + +```bash +php artisan optimize:clear +php artisan config:cache +php artisan queue:restart +``` + +3. If issue is emoji dataset, use snapshot activation in admin catalog. +