You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.7 KiB

Progress

Catatan sementara untuk melanjutkan pekerjaan di komputer lain. Hapus file ini kalau halaman login sudah selesai.

Terakhir diperbarui: 2026-10-20.

Sudah selesai

  • Drizzle ORM + pg ke Postgres (db/, drizzle.config.ts, script db:*).
  • Better Auth 1.7: login pakai username, tabel auth sudah di-migrate, sign-up publik ditutup. Endpoint di app/api/auth/[...all]/route.ts.
  • shadcn/ui preset base-nova, komponen: button, input, label, card, field, separator.
  • old-source/ di-commit tanpa db_login.inc.php (kredensial).
  • Halaman login, langkah 1 sampai 3 dari 7:
    1. zod terpasang.
    2. data/auth.ts: getCurrentUser() cek session, redirect ke /login kalau belum login.
    3. app/(auth)/login/actions.ts: server action login (validasi zod, lalu auth.api.signInUsername, lalu redirect("/")).

Berikutnya: halaman login, langkah 4 sampai 7

  1. Form login (client component) app/(auth)/login/_components/login-form.tsx, diawali "use client". Pakai useActionState(login, {}). Isinya Card berisi FieldGroup dengan dua Field (username dan password, name="username" / name="password"), FieldError untuk state.error, dan Button type="submit" yang disabled saat pending. Input username diberi defaultValue={state.username} supaya tidak kosong setelah gagal login.

  2. Halaman login app/(auth)/login/page.tsx: Server Component yang menampilkan <LoginForm /> di tengah layar.

  3. Pindahkan halaman utama ke grup dashboard Hapus app/page.tsx (bawaan create-next-app), lalu buat app/(dashboard)/page.tsx. Komponen yang memanggil getCurrentUser() harus dibungkus <Suspense> karena cacheComponents aktif (tanpa itu build gagal). Tampilkan nama user yang login.

  4. Logout app/(dashboard)/actions.ts dengan "use server": action logout memanggil auth.api.signOut({ headers: await headers() }) lalu redirect("/login"). Pasang lewat <form action={logout}><Button type="submit">Keluar</Button></form> di halaman dashboard.

Cek akhir: buka / saat belum login, harus diarahkan ke /login. Login sebagai admin, nama tampil di /. Klik Keluar, kembali ke /login. Lalu pnpm exec tsc --noEmit dan pnpm lint.

Setelah itu: commit, lalu rencana berikutnya (belum dimulai):

  • User read-only (hanya SELECT) di MariaDB untuk AMIGO_DATABASE_URL, menggantikan root.
  • Koneksi Drizzle ke MariaDB di db/amigo/ dengan drizzle-kit pull (jangan pernah migrate/push).
  • proxy.ts untuk redirect cepat ke /login kalau tidak ada cookie session.

Menyiapkan komputer lain

Ikuti bagian "Setup di laptop baru" di README.md (docker compose up -d, pnpm db:migrate, pnpm db:seed).