Konsol admin Kamus Digital Sambas-Indonesia. Dipakai verifikator dan admin untuk mengelola kata, antrean kontribusi, moderasi, dan pengguna.
| Layer | Pilihan |
|---|---|
| Framework | React 19 + Vite (SPA) |
| UI | Ant Design 6, TanStack Router / Query / Table |
| HTTP | Axios (/api di-proxy ke API staging saat pnpm dev) |
| Deploy | Cloudflare Pages |
Acuan tetap: docs/admin/admin-base-stack.md di repo
sambasku-docs.
Kontrak API: envelope, cursor pagination, role matrix di docs/api/*.
| Area | Rute |
|---|---|
| Dashboard | /dashboard |
| Kata (list, buat, edit, detail) | /words, /words/new, /words/$id |
| Antrean kontribusi | /contributions |
| Moderasi komentar + blocklist | /comments, /comment-blocklist |
| Search miss | /search-misses |
| Moderasi vote | /vote-moderation |
| Usulan edit kata | /word-suggestions |
| Laporan kata / bug | /word-reports, /bug-reports |
| Pengguna + pengajuan verifikator | /users, /verifier-applications |
| Audit log | /audit-logs |
Auth: login email/password. Access token di memori; refresh token di
cookie HttpOnly (SameSite=Strict) dari API.
| Jenis | Alur |
|---|---|
| Gambar kata / avatar | Multipart ke API → repo sambasku/images (jsDelivr + wsrv) |
| Audio pelafalan | Multipart ke API → repo sambasku/audios |
| Bukti verifikator / lampiran bug | Token ImageKit (privat), bukan GitHub |
src/
├── app/ # router, providers
├── features/<fitur>/ # domain → application → infrastructure → presentation
├── shared/ # api client, layouts, hooks, utils
└── styles/
| Perintah | Fungsi |
|---|---|
pnpm install |
Pasang dependensi |
pnpm dev |
Vite (proxy /api → API staging) |
pnpm build:staging |
Build mode staging |
pnpm build |
Build mode production |
pnpm lint / pnpm test / pnpm typecheck |
Quality gate |
Hosting: Cloudflare Pages - project sambasku-admin-staging, custom
domain https://console-sambasku-staging.iamutaki.com.
Deploy murni lewat CI/CD (.github/workflows/deploy-staging.yml):
push ke branch staging (atau jalankan manual dari tab Actions) →
lint + test + build → wrangler pages deploy dist.
- Tambah secret repo (Settings → Secrets and variables → Actions):
CLOUDFLARE_API_TOKEN- izin Cloudflare Pages: EditCLOUDFLARE_ACCOUNT_ID
- Push ke
staging- job membuat project Pages otomatis, lalu deploy. - Attach custom domain di dashboard Cloudflare:
Workers & Pages →
sambasku-admin-staging→ Custom domains → tambahconsole-sambasku-staging.iamutaki.com(DNS + sertifikat otomatis, satu akun/zone). - Pastikan
CORS_ALLOWED_ORIGINSAPI staging (api/wrangler.toml→env.staging.vars) memuat origin di atas.
Cookie refresh_token API ber-SameSite=Strict. Admin dan API harus
satu registrable domain (iamutaki.com di staging / sambasku.com di
production) supaya cookie terkirim saat auto-refresh sesi. Domain
*.pages.dev adalah situs berbeda → sesi "amnesia" ke halaman login.
Hosting: Cloudflare Pages - project sambasku-admin, custom domain
https://console.sambasku.com. API: https://api.sambasku.com/api/v1.
Deploy: .github/workflows/deploy-production.yml - push ke branch
main (atau Run workflow manual) → lint + test + build → Pages deploy.
Setup sekali: attach console.sambasku.com ke project sambasku-admin,
pastikan CORS API production memuat https://console.sambasku.com dan
https://sambasku.com.
public/_redirects berisi /* /index.html 200 - deep-link / refresh
pada rute history-mode TanStack Router tetap dilayani index.html,
bukan 404.
