14 KiB
14 KiB
Codex Handoff - 2026-05-23
Dokumen ini adalah snapshot terbaru setelah penambahan halaman profile user, perapihan dashboard, penyiapan deploy Alpine Linux tanpa compile di server, release artifact amd64 untuk Alpine x86_64, export master data lokal ke SQL, dan pemisahan alur purchase submit dari finalisasi penerimaan/lot.
Status Umum
- App aktif dikembangkan di
Next.js + Prisma + PostgreSQL. - Branch aktif:
main - Repo remote utama:
https://git.iptek.co/wirabasalamah/AbelBirdNest-Stock.git - Local workspace:
/Users/wirabasalamah/Documents/Codex/abelbirdnest-web - Server deploy terbaru yang sedang dibahas:
Alpine Linux
x86_64, RAM1 GB, tanpa compile di server.
Ringkasan Perubahan Terbaru
0. Alur Purchase, Penerimaan, Lot, dan Realisasi Dipisah
- Alur lama:
- klik
Ajukandi purchase langsung membuatreceipts,receipt_lines,inventory_lots, allocation, dan ledger realisasi. - efek sampingnya, purchase yang sudah diajukan tidak aman diedit karena
receipt_lines.purchase_line_idmasih mengarah kepurchase_lineslama.
- klik
- Alur baru:
Purchasedibuat/edit dulu seperti biasa.- Klik
Ajukanhanya mengubah status purchase menjadiSUBMITTED. - Menu
Penerimaandipakai untuk membuatreceiptdanreceipt_linesdari purchase yang sudahSUBMITTED. - Tombol
Buat lotdi detail receipt yang membuat:inventory_lotslot_purchase_allocationspurchase_realization_entriespurchase_realization_summaries
- Receipt ikut berubah menjadi
FINALIZED.
- Purchase masih bisa diedit selama belum punya
receiptataulot. - Jika purchase sudah punya
receiptataulot, endpoint update purchase sekarang menolak dengan pesan domain yang jelas, bukan error Prisma foreign key mentah. - Menu
Penerimaansekarang tampil di sidebar pada grupPembelian. - Akses
Penerimaandibuka untuk:ADMINSYSTEM_ADMINOWNERPURCHASINGWAREHOUSE
- Label dan copy halaman
Penerimaansudah dirapikan agar mengikuti dictionary dua bahasaID/EN, termasuk label tabel, tombolBuat lot/Generate lots, detail receipt, dan teks kosong lot. - Commit terkait:
44146a4 Split purchase submit from receipt finalization57896d3 Add receipt menu access1217529 Complete receipt translations
- File utama:
- src/app/api/v1/purchases/[id]/route.ts
- src/app/api/v1/purchases/[id]/submit/route.ts
- src/app/api/v1/receipts/route.ts
- src/app/api/v1/receipts/[id]/generate-lots/route.ts
- src/features/receipts/components/receipts-client.tsx
- src/features/purchases/components/purchases-client.tsx
- src/config/navigation.ts
- src/config/access-control.ts
- src/lib/i18n.ts
- src/types/purchase.ts
1. Halaman Profile User
- Area nama/avatar di topbar sekarang menjadi link ke
/profile. - Halaman profile baru memungkinkan user update:
nameemailphone
usernamesengaja dibuat read-only, tampil sebagai informasi akun tapi tidak bisa diedit.- Halaman profile juga menampilkan:
- role
- status akun
- status verifikasi email
user id- waktu
created_at - waktu
updated_at
- Setelah profile diupdate, session cookie ikut di-refresh agar nama di topbar langsung sinkron tanpa logout-login ulang.
- File utama:
2. Dashboard Spacing Fix
- Dashboard sebelumnya punya section yang saling menempel vertikal.
- Perbaikan dilakukan dengan wrapper
space-y-6dan sedikit memperbesar gap pada grid metric. - Tujuannya murni visual: card-card lebih lega dan border panel tidak menumpuk.
- File utama:
3. Deploy Alpine Linux Kosong
- Sudah disiapkan panduan deploy khusus untuk server Alpine Linux kosong dengan RAM kecil.
- Asumsi utama:
- server
x86_64 - tidak ada build di server
- release diupload sebagai artifact siap jalan
- service manager memakai
OpenRC
- server
- Dokumen baru:
- Service OpenRC baru:
- Service ini me-load
.envsebelum menjalankannode server.js.
4. Workflow Build Artifact Alpine
- Ditambahkan script build artifact khusus Alpine:
- Script ini:
- build di Docker
node:22-alpine - copy output
standalone - memasukkan
.next/static,public,prisma,deploy, dan doc deploy - tidak membawa
.envproduction nyata
- build di Docker
- Script sekarang mendukung:
DOCKER_PLATFORM=linux/amd64
- Ini penting karena server target adalah Alpine
x86_64.
5. Prisma Binary Targets untuk Alpine
- Error deploy sempat muncul:
- Prisma client di artifact lama terbentuk untuk
linux-musl-arm64-openssl-3.0.x - server nyata butuh
linux-musl-openssl-3.0.x
- Prisma client di artifact lama terbentuk untuk
binaryTargetsPrisma sekarang mencakup:nativedarwin-arm64debian-openssl-3.0.xlinux-musl-openssl-3.0.xlinux-musl-arm64-openssl-3.0.x
- File utama:
6. User Production Awal SYSTEM_ADMIN
- Sudah disiapkan SQL khusus untuk membuat user awal production:
- email:
wirabasalamah@gmail.com - username:
wirabasalamah - role:
SYSTEM_ADMIN - password:
P@ssw0rd
- email:
- File:
- Di server, user ini sudah diverifikasi ada,
ACTIVE, danemail_verified_atterisi.
7. Master Data Lokal Dibawa ke Server via SQL
- Diputuskan tidak perlu build ulang hanya untuk membawa bank, currency, dan grade.
- Data master lokal sudah diexport ke file SQL:
- Isi dump saat dibuat:
147bank48currency348grade0grade buy price standards0grade sell price standards
- Tabel yang dibawa:
bankscurrenciesgradesgrade_buy_price_standardsgrade_sell_price_standards
Artifact Release Penting
- Artifact Linux historis:
abelbirdnest-release.tar.gzabelbirdnest-release-20260521-0841.tar.gz
- Artifact Alpine musl awal:
abelbirdnest-release-alpine-20260522-0508.tar.gzCatatan: ini masih belum aman untuk serverx86_64karena mismatch Prisma engine.
- Artifact Alpine final yang benar untuk server
x86_64:abelbirdnest-release-alpine-amd64-20260522-0635.tar.gz
- File ini yang harus dipakai untuk deploy Alpine
x86_64.
Temuan Deploy Server Alpine
1. Port Runtime
- Di lapangan, app berjalan di
3000, bukan3007. - Redirect root
/ke/loginlalu setelah login aktif,/loginakan redirect ke/dashboard. - Jadi jika
curl https://abelbirdnest.id/menghasilkan payload redirect ke dashboard/login, itu berarti app sebenarnya hidup.
2. Perilaku /login
/loginmemang otomatis redirect ke/dashboardkalau cookie session valid.- File:
3. Certbot di Alpine
- Untuk Alpine, pendekatan yang dipakai:
apk add certbot certbot-nginx
- Jika repo
communitybelum aktif, perlu ditambahkan dulu di/etc/apk/repositories.
Verifikasi yang Sudah Dilakukan
npm run typechecklolos setelah patch profile dan dashboard.npm run typecheck -- --pretty falselolos setelah patch purchase/receipt/menu/translasi.npm run buildlokal Mac lolos.- Build artifact Alpine
amd64melalui Docker emulasi berhasil dibuat. - Artifact
amd64diverifikasi mengandung Prisma engine:libquery_engine-linux-musl-openssl-3.0.x.so.node
- File SQL master data berhasil dibuat dari DB lokal.
- User
wirabasalamah@gmail.comdi server sudah dicek via SQL dan memang ada.
Risiko / Catatan Penting
- Jangan menghapus
purchase_linesdari purchase yang sudah punyareceipt_lines; gunakan flow baru lewat menuPenerimaanatau koreksi stok/reversal jika barang sudah masuk. - Untuk membersihkan satu purchase test beserta lot/receipt terkait, gunakan SQL transaksi terkontrol dan biarkan proses rollback jika lot sudah dipakai transaksi lain.
psqltidak menerima query param Prisma?schema=public; untuk akses manual gunakan URL DB tanpa query param itu, atauoptions=-csearch_path%3Dpublic.- Jangan pakai artifact Alpine non-
amd64di serverx86_64. - Jangan pakai artifact lama yang hanya punya engine
linux-musl-arm64. - Untuk import master data:
- paling aman di database fresh
- kalau tabel sudah terisi, bisa bentrok
idatauunique key
- Build Alpine di Mac via emulasi
amd64sangat lambat, jadi hindari rebuild jika cukup dengan upload SQL. - Build Next standalone masih mengeluarkan warning Prisma saat static generation jika DB lokal di builder tidak hidup; warning ini tidak menggagalkan artifact.
File yang Perlu Diperhatikan Pada Turn Berikutnya
- src/app/api/v1/purchases/[id]/submit/route.ts
- src/app/api/v1/receipts/[id]/generate-lots/route.ts
- src/features/receipts/components/receipts-client.tsx
- src/config/navigation.ts
- src/config/access-control.ts
- prisma/schema.prisma
- src/app/api/v1/auth/profile/route.ts
- src/features/auth/components/profile-client.tsx
- src/app/dashboard/page.tsx
- deploy/scripts/build-alpine-release.sh
- deploy/openrc/abelbirdnest-web
- deploy/sql/master-seed-from-local-20260522.sql
- deploy/sql/seed-system-admin-wirabasalamah.sql
- docs/deploy-alpine-empty-server.md
Langkah Lanjutan Paling Masuk Akal
- Untuk server dev, update dari Git dan rebuild:
git pull origin mainnpm install --include=devnpx prisma generatenpm run build- restart service dev.
- Verifikasi flow baru:
- buat/edit purchase
- klik
Ajukan - buka
Pembelian -> Penerimaan - buat receipt
- klik
Buat lot - cek lot dan realisasi terbentuk.
- Jika server Alpine belum diupdate, upload:
abelbirdnest-release-alpine-amd64-20260522-0635.tar.gzmaster-seed-from-local-20260522.sqlseed-system-admin-wirabasalamah.sql
- Import master data lokal jika database fresh.
- Verifikasi login
SYSTEM_ADMIN. - Verifikasi halaman
/profile:name,email,phoneeditableusernamereadonly
- Verifikasi dashboard spacing.
- Kalau perlu artifact baru lagi, pakai script Alpine dengan
DOCKER_PLATFORM=linux/amd64.
Catatan Penutup
- Handoff sebelumnya:
- Handoff
2026-05-23ini adalah konteks terbaru dan seharusnya dipakai sebagai acuan utama lanjutan.