Add download page and wire site navigation

This commit is contained in:
Dwindi Ramadhana
2026-02-19 23:08:50 +07:00
parent d9f326d1d6
commit 22011513c8
11 changed files with 344 additions and 0 deletions

View File

@@ -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.