尚未检测到更新。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.