Derive status from app.active flag instead of maintenance/bugs heuristic.
Remove version, minVersion, and maintenance from list/detail response
as these are fetched separately via the grid overview endpoint.
Apply uniform design system across all routes and components:
- Consistent header pattern with gradient-text titles, dimmed subtitles
- Loader type="dots" replacing text-based loading states
- Icon + text empty/error states with Paper+glass containers
- Full STATUS_COLOR/STATUS_LABEL maps for all BugStatus values
- dayjs timestamps, Tooltip on action icons, size="sm" on badges/pagination
- Modals with overlayProps blur and gradient save buttons
- Replace left-border Papers with clean Stack headers
- Translate all remaining Indonesian UI strings to English
- New monitoring-themed SVG logo and redesigned splash screen
Remove global API_KEY env var and its validation in checkAuth.
Auth via x-api-key now exclusively uses clientApiKey per-app
validated inline on POST /api/bugs.
Sebelumnya pipeline dibatalkan saat ada pending migrations.
Sekarang langsung deploy migrations lalu lanjut ke step berikutnya.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Tool baru `deploy` menjalankan full pipeline:
1. Cek pending migrations → batalkan jika ada
2. Version bump package.json ke tag baru
3. Commit + push ke build/stg
4. Trigger publish.yml → polling hingga selesai
5. Trigger re-pull.yml → polling hingga selesai
6. Cek version di STG_URL vs local untuk konfirmasi
Env baru: STG_URL (staging app URL), VERSION_PATH (default /api/system/version)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Tambah kolom API_KEY_DESA_PLUS di CONFIG_DEFINITIONS (ditampilkan sebagai password field)
- Proxy otomatis menyertakan X-API-Key header jika API key sudah dikonfigurasi
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>