尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Prototype/foundation Next.js untuk mengubah foto struk belanja menjadi catatan keuangan terstruktur. Dibangun sebagai pondasi yang akan diperluas ke pelaporan keuangan perusahaan (multi-akun, multi-user, laporan periodik, dst).檢視完整 README ↗
Prototype/foundation Next.js untuk mengubah foto struk belanja menjadi catatan keuangan terstruktur. Dibangun sebagai pondasi yang akan diperluas ke pelaporan keuangan perusahaan (multi-akun, multi-user, laporan periodik, dst).
@anthropic-ai/sdk) untuk
diekstrak jadi data terstruktur (merchant, tanggal, item, total).Next.js 16 (App Router, TypeScript, Tailwind v4)
Prisma 7 + SQLite (@prisma/adapter-libsql — dipilih karena binary-nya
prebuilt per platform, jadi npm install tidak butuh Python/C++ build tools
di Windows) — lihat
src/lib/db.ts dan src/lib/receipts.ts. Semua akses data lewat
src/lib/receipts.ts; ganti ke Postgres nanti cukup ubah DATABASE_URL,
adapter di db.ts, dan datasource.provider di prisma/schema.prisma.
LLM provider pluggable — lihat src/lib/llm/. getReceiptParser()
memilih implementasi berdasarkan env var LLM_PROVIDER:
gemini → @google/genai, butuh GEMINI_API_KEY
(free tier, tanpa kartu kredit)anthropic → @anthropic-ai/sdk, butuh ANTHROPIC_API_KEYUntuk menambah provider lain, buat adapter baru yang mengimplementasikan
ReceiptParser (satu method: parseReceipt), pakai normalizeReceipt() dari
src/lib/llm/normalize.ts untuk merapikan hasilnya, lalu daftarkan di
src/lib/llm/index.ts. Tidak ada file lain yang perlu disentuh.
cp .env.example .env
# isi GEMINI_API_KEY (atau ANTHROPIC_API_KEY, sesuai LLM_PROVIDER)
npm install # postinstall otomatis menjalankan `prisma generate`
npx prisma migrate dev # sekali di awal / setiap ubah schema
npm run dev
Di Windows PowerShell, pakai npm.cmd / npx.cmd kalau kena error execution
policy, atau jalankan Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser.
Buka http://localhost:3000.
Serverless punya filesystem read-only, jadi SQLite di disk tidak bisa dipakai di produksi. Databasenya pindah ke Turso (SQLite yang di-host, adapter-nya sama).
Buat database di turso.tech (free tier), catat URL
libsql://... dan auth token-nya.
Terapkan skema sekali. prisma migrate deploy tidak bisa dipakai di sini
karena Prisma 7 hanya menerima URL biasa untuk migration, jadi jalankan isi
prisma/migrations/20260918164830_init/migration.sql langsung:
turso db shell <nama-db> < .../migration.sql
di bash/zsh. Di PowerShell operator < tidak ada, pakai:
Get-Content .../migration.sql | turso db shell <nama-db>Di Vercel, isi environment variables:
| Key | Value |
|---|---|
DATABASE_URL | libsql://...turso.io |
TURSO_AUTH_TOKEN | token dari Turso (tandai sensitif) |
LLM_PROVIDER | gemini |
GEMINI_API_KEY | API key kamu (tandai sensitif) |
Biarkan Build/Output/Install Command memakai default Vercel.
Foto struk tidak tersimpan di produksi. saveReceiptImage() gagal diam-diam
di filesystem read-only dan struk tetap tercatat tanpa foto — saat ini tidak ada
bagian UI yang menampilkan foto tersimpan, jadi tidak ada fitur yang hilang.
Untuk menyimpannya secara permanen, ganti isi src/lib/image.ts ke object
storage (Vercel Blob / S3).
prisma/schema.prisma # model Receipt & ReceiptItem
src/lib/db.ts # Prisma client singleton + driver adapter
src/lib/receipts.ts # satu-satunya modul yang bicara ke database
src/lib/llm/ # interface ReceiptParser + adapter Claude
src/lib/image.ts # simpan foto struk ke public/uploads/receipts
src/app/api/receipts/parse/ # POST: foto -> data terstruktur (belum disimpan)
src/app/api/receipts/ # GET: daftar struk, POST: simpan struk
src/components/receipt-app.tsx # UI: upload -> review/edit -> riwayat
public/uploads/receipts), cukup untuk
prototype single-instance. Pindah ke object storage (S3, dll) kalau app
sudah jalan di lebih dari satu instance.category di ReceiptItem), belum ada
taksonomi/master data kategori — ditambahkan saat kebutuhan pelaporan jadi
jelas, bukan diasumsikan sekarang.public/uploads/receipts/. Belum ada
pembersihan otomatis — cukup untuk prototype, perlu ditangani sebelum produksi.