Arsip teknis

Lihat sumber

Roadmap Implementasi

Arsip perencanaan awal. Beberapa item di bawah (misalnya Drizzle/PostgreSQL) tidak mencerminkan implementasi Convex saat ini dan bukan instruksi setup. Lihat arsitektur, ADR, dan UAT untuk kondisi sekarang.

Cara memakai roadmap

  • Satu item idealnya selesai dalam satu pull request kecil.
  • Kerjakan item hanya jika seluruh dependensinya sudah selesai.
  • Owner adalah penanggung jawab utama, bukan satu-satunya orang yang boleh membantu.
  • Reviewer mengikuti matriks di TEAM-WORK.md.
  • Jangan menggabungkan perubahan database, API, dan beberapa halaman besar dalam satu PR.

Urutan delivery

flowchart LR
    D[Dokumentasi] --> C[Contracts dan validasi]
    C --> DB[Database foundation]
    DB --> F[Facility vertical slice]
    DB --> A[Auth dan session]
    F --> R[Reservation workflow]
    A --> R
    F --> P[Report workflow]
    A --> P
    R --> S[Staff dan admin workflow]
    P --> S
    S --> X[Analytics, export, hardening]

Alur tersebut sengaja membuat fasilitas sebagai vertical slice pertama. Tim dapat belajar pola schema → service → Route Handler → UI pada domain yang paling sederhana sebelum mengerjakan autentikasi dan workflow transaksi.

Milestone 0 — Fondasi bersama

Tujuan: semua anggota memiliki bahasa domain, aturan validasi, dan lingkungan pengembangan yang sama.

IDOwnerPekerjaan atomikOutputDependensi
D-01Tech LeadRapikan dokumen proyekRequirements, diagram, pembagian tim, dan roadmap—
C-01Tech LeadDefinisikan enum dan tipe domainsrc/lib/contracts/domain.ts untuk role dan seluruh statusD-01
C-02Tech LeadDefinisikan schema fasilitasZod schema input/output fasilitas beserta unit testC-01
C-03Tech LeadDefinisikan format response APIHelper success dan error envelope beserta testC-01
DB-01Tech LeadPasang Drizzle dan PostgreSQLDependency, config, dan .env.example tanpa tabel domainC-01
DB-02Tech LeadTambahkan utilitas koneksi databaseKoneksi lazy yang tidak berjalan saat buildDB-01
Q-01Anggota 2Buat shell halaman publikHeader, navigation, container, dan responsive statesD-01
Q-02Anggota 3Buat shell portal penggunaSidebar/header placeholder dan responsive statesD-01
Q-03Anggota 4Buat shell portal petugas/adminNavigation terpisah untuk staff dan adminD-01

Exit criteria:

  • Kontrak dasar dapat diimpor dari server maupun komponen client.
  • Database lokal dapat dinyalakan dan migration kosong dapat dijalankan.
  • Ketiga shell tidak mengandung data palsu yang menyerupai fitur selesai.

Milestone 1 — Fasilitas read-only

Tujuan: menghasilkan vertical slice pertama dari database sampai halaman publik.

IDOwnerPekerjaan atomikOutputDependensi
F-01Tech LeadBuat tabel fasilitasSchema dan migration facilitiesDB-02, C-02
F-02Tech LeadBuat seed fasilitasBeberapa fasilitas lokal yang representatifF-01
F-03Tech LeadBuat query daftar fasilitasDAL read-only dengan testF-02
F-04Tech LeadBuat endpoint daftar fasilitasGET /api/facilities dengan validasi responseF-03, C-03
F-05Anggota 2Buat kartu fasilitasKomponen reusable untuk nama, tipe, lokasi, kapasitas, dan statusQ-01, C-02
F-06Anggota 2Hubungkan halaman /facilitiesDaftar fasilitas, empty state, loading, dan error stateF-03, F-05
F-07Anggota 2Tambahkan filter tampilanFilter tipe/lokasi tanpa mengubah data serverF-06
F-08Tech LeadIntegration test fasilitasTest DAL, endpoint, serta akses halaman anonimF-04, F-06

Exit criteria:

  • Pengunjung dapat melihat fasilitas nyata dari database tanpa login.
  • UI tidak menampilkan detail pemohon atau tujuan reservasi.
  • API dan halaman memiliki empty/error state yang dapat diuji.

Milestone 2 — Autentikasi dan otorisasi

Tujuan: menyediakan identitas pengguna dan pembatasan route berdasarkan role.

IDOwnerPekerjaan atomikOutputDependensi
A-01Tech LeadBuat tabel users dan sessionsSchema, migration, constraint, dan indexDB-02, C-01
A-02Tech LeadBuat password utilitiesHash dan verify password beserta unit testA-01
A-03Tech LeadBuat session serviceCookie aman, create/read/delete session, expiry testA-01
A-04Tech LeadBuat endpoint registrasiValidasi, duplicate email handling, dan error envelopeA-02, A-03, C-03
A-05Tech LeadBuat endpoint login/logout/sessionRoute Handlers dan integration testA-02, A-03, C-03
A-06Anggota 3Buat form registrasiAccessible form dengan client validationQ-02, A-04
A-07Anggota 3Buat form loginError state, pending state, dan redirect suksesQ-02, A-05
A-08Tech LeadPasang route guardRedirect anonim dan forbidden untuk role salahA-03, A-05
A-09Anggota 3Hubungkan user portalSession-aware navigation dan logoutA-05, A-07, A-08

Exit criteria:

  • Registrasi, login, logout, dan session persistence bekerja.
  • Route user, staff, dan admin memiliki guard server-side.
  • Password tidak pernah disimpan atau dikirim kembali sebagai response.

Milestone 3 — Reservasi

Tujuan: pengguna dapat membuat, melihat, dan membatalkan reservasi; petugas dapat memprosesnya.

IDOwnerPekerjaan atomikOutputDependensi
R-01Tech LeadDefinisikan contract reservasiZod schema dengan aturan tanggal dan slot 30 menitC-01, F-01
R-02Tech LeadBuat tabel reservasiSchema, migration, relasi, dan indexA-01, F-01, R-01
R-03Tech LeadBuat availability serviceDeteksi bentrok dan status fasilitasR-02
R-04Tech LeadBuat endpoint reservasi penggunaCreate/list/detail/cancel milik penggunaR-03, A-08, C-03
R-05Anggota 3Buat form reservasiPilihan fasilitas, tanggal, slot, tujuan, dan error stateR-01, R-04
R-06Anggota 3Buat riwayat dan detail reservasiList, status badge, detail, dan aksi pembatalanR-04
R-07Tech LeadBuat endpoint keputusan petugasApprove/reject/cancel dengan transaksiR-03, R-04
R-08Anggota 4Buat antrean reservasi petugasFilter, detail, approve/reject/cancel statesQ-03, R-07
R-09Tech LeadTambahkan concurrency testDua approval tidak dapat menghasilkan jadwal bentrokR-07

Exit criteria:

  • Aturan jam 07.00–20.00 WIB dan slot 30 menit dipastikan di server.
  • Bentrok dicegah dalam transaksi, bukan hanya melalui UI.
  • Pengguna hanya dapat membaca dan membatalkan reservasinya sendiri.

Milestone 4 — Laporan kerusakan

Tujuan: pengguna dapat membuat laporan dan petugas dapat menangani lifecycle laporan.

IDOwnerPekerjaan atomikOutputDependensi
P-01Tech LeadDefinisikan contract laporanZod schema kategori, deskripsi, foto, dan statusC-01, F-01
P-02Tech LeadBuat tabel laporanSchema, migration, relasi, dan indexA-01, F-01, P-01
P-03Tech LeadPutuskan dan dokumentasikan penyimpanan fotoAdapter storage serta batas tipe/ukuran fileP-01
P-04Tech LeadBuat endpoint laporan penggunaCreate/list/detail milik penggunaP-02, P-03, A-08
P-05Anggota 3Buat form dan status laporanUpload state, validasi, daftar, dan detailP-04
P-06Tech LeadBuat endpoint proses laporanStart/resolve dengan catatan resolusi dan transaksi status fasilitasP-04
P-07Anggota 4Buat antrean laporan petugasFilter, detail foto, start, dan resolve statesQ-03, P-06
P-08Tech LeadIntegration test lifecycle laporanStatus laporan dan fasilitas tetap sinkronP-06, P-07

Exit criteria:

  • Foto divalidasi di server dan disimpan melalui adapter yang disepakati.
  • Fasilitas menjadi maintenance saat laporan ditangani dan kembali active setelah selesai.
  • Pengguna hanya dapat melihat laporan miliknya sendiri.

Milestone 5 — Administrasi

Tujuan: admin dapat mengelola master fasilitas, akun, dan verifikasi registrasi.

IDOwnerPekerjaan atomikOutputDependensi
M-01Tech LeadBuat endpoint CRUD fasilitas adminCreate/update/deactivate dengan audit fieldsF-04, A-08
M-02Anggota 4Buat halaman kelola fasilitasTabel dan form tambah/edit/nonaktifkanQ-03, M-01
M-03Tech LeadBuat endpoint provisioning akunAdmin membuat user/officer dan meninjau registrasiA-04, A-08
M-04Anggota 4Buat halaman kelola penggunaDaftar, tambah akun, verify, dan reject statesQ-03, M-03
M-05Tech LeadTambahkan audit dan authorization testsRole matrix untuk seluruh endpoint adminM-01, M-03

Exit criteria:

  • Hanya admin yang dapat memanggil endpoint administrasi.
  • Fasilitas yang memiliki histori tidak dihapus secara destruktif.
  • Semua aksi sensitif tervalidasi ulang di server.

Milestone 6 — Rekap, kualitas, dan penyerahan

Tujuan: menutup kebutuhan tugas kuliah dan menyiapkan demo yang stabil.

IDOwnerPekerjaan atomikOutputDependensi
X-01Tech LeadBuat query rekap okupansiAgregasi per fasilitas dan periodeR-09
X-02Tech LeadBuat query frekuensi kerusakanAgregasi laporan per fasilitas/lokasiP-08
X-03Anggota 4Buat tampilan rekap adminFilter, summary, table, dan empty stateX-01, X-02
X-04Tech LeadBuat export CSV/Excel/PDFEndpoint export dengan authorization dan testX-01, X-02
X-05SemuaAccessibility dan responsive passKeyboard, labels, contrast, desktop/mobileSeluruh UI selesai
X-06Tech LeadSecurity dan error-handling passRate limit decision, upload checks, safe errorsSeluruh API selesai
X-07SemuaSiapkan data demo dan skenario presentasiSeed final dan alur demo per aktorX-03, X-04
X-08SemuaSiapkan dokumen pengumpulanWord, screenshot, setup, akun demo, dan link sourceX-05, X-06, X-07

Jalur kerja paralel

Setelah fondasi untuk suatu milestone tersedia, UI dapat dikerjakan paralel dengan test dan endpoint berikutnya.

flowchart TB
    L[Tech Lead: contract, DB, API] --> H{Handoff contract stabil}
    H --> U2[Anggota 2: public UI]
    H --> U3[Anggota 3: auth dan user UI]
    H --> U4[Anggota 4: staff dan admin UI]
    U2 --> I[Integrasi dan review silang]
    U3 --> I
    U4 --> I
    L --> I

Handoff dianggap stabil ketika schema input/output sudah disepakati, contoh response tersedia, dan perubahan breaking diumumkan kepada seluruh tim.

Definition of Done per item

Sebuah item baru boleh ditandai selesai jika:

  • scope item dan acceptance criteria terpenuhi;
  • tidak mengambil ownership folder anggota lain tanpa koordinasi;
  • loading, empty, error, dan permission state yang relevan ditangani;
  • test ditambahkan sesuai risiko perubahan;
  • pnpm format:check, pnpm lint, dan pnpm typecheck lulus;
  • pnpm build lulus untuk perubahan yang memengaruhi runtime;
  • dokumentasi/API contract diperbarui jika interface berubah;
  • minimal satu anggota lain sudah melakukan review;
  • commit message menjelaskan satu perubahan yang bermakna.

Pekerjaan berikutnya yang direkomendasikan

Fokus berikutnya adalah review silang, browser test untuk tiga role, accessibility/responsive pass, penyiapan akun demo final, lalu deployment production terkontrol.

Semua dokumentasi