Appearance
Deployment
Platform
Semua apps deploy ke Cloudflare:
| App | Platform | URL Pattern |
|---|---|---|
apps/web | Cloudflare Pages | https://xprivate.pages.dev |
apps/api | Cloudflare Workers | https://api.xprivate.workers.dev |
apps/docs | Cloudflare Pages | https://docs.xprivate.pages.dev |
Wrangler Configuration
Setiap app punya wrangler.jsonc sendiri. File ini adalah JSON with comments.
apps/api/wrangler.jsonc
jsonc
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "xprivate-api",
"main": "src/index.ts",
"compatibility_date": "2025-04-01",
"compatibility_flags": ["nodejs_compat"],
"d1_databases": [
{
"binding": "DB",
"database_name": "xprivate-db",
"database_id": "..."
}
],
"r2_buckets": [
{
"binding": "STORAGE_BUCKET",
"bucket_name": "xprivate-storage"
}
]
}apps/web/wrangler.jsonc
jsonc
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "xprivate-web",
"compatibility_date": "2025-04-01",
"pages_build_output_dir": "dist"
}apps/docs/wrangler.jsonc
jsonc
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "xprivate-docs",
"compatibility_date": "2025-04-01",
"pages_build_output_dir": ".vitepress/dist"
}Secrets
Secrets di-set via wrangler secret put atau Cloudflare dashboard. Jangan commit secrets ke repo.
| Secret | App | Purpose |
|---|---|---|
BETTER_AUTH_SECRET | api | Session signing |
GOOGLE_CLIENT_ID | api | Google OAuth |
GOOGLE_CLIENT_SECRET | api | Google OAuth |
RESEND_API_KEY | api | Email sending |
RESEND_FROM_EMAIL | api | From address email |
Local development menggunakan .dev.vars (sudah di-gitignore).
CI/CD
Pipeline yang direkomendasikan:
- Build:
pnpm builddi root - Test:
pnpm test(jika ada) - Deploy API:
cd apps/api && wrangler deploy - Deploy Web:
cd apps/web && wrangler pages deploy dist - Deploy Docs:
cd apps/docs && wrangler pages deploy .vitepress/dist
Prefer GitHub Actions dengan cloudflare/wrangler-action.
Environment Strategy
| Environment | D1 DB | R2 Bucket | Purpose |
|---|---|---|---|
| Local | --local D1 | emulated atau skip | Development |
| Staging | xprivate-db-staging | xprivate-storage-staging | Pre-prod testing |
| Production | xprivate-db | xprivate-storage | Live |
Setiap environment punya wrangler config terpisah atau gunakan wrangler deploy --env.
worker-configuration.d.ts
File ini di-generate otomatis oleh wrangler types. Jangan commit file ini — sudah di-gitignore. Root prepare script harus menjalankan wrangler types setelah pnpm install.
R2 Storage
@packages/storagemenggunakan R2 bindings untuk upload photo evidence dan payment proofs.- Validasi file: image only, max 5MB.
- Public access ke R2 objects via signed URLs atau Cloudflare Images — jangan expose raw R2 URLs langsung.
Email (Resend)
- Resend API key disimpan sebagai Cloudflare secret.
- Email sending logic di
@packages/email. - Magic link email template dikelola di sini.