Oracle3
Open-source trading engine and MCP server for prediction markets. Fee-aware no-arbitrage trading across related contracts, live on Kalshi, Polymarket and Solana or on paper.
Foto struk belanja, langsung jadi catatan keuangan.
Translation pending
FinanceTypeScript · CSSGitHub @jirogembulOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
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).Read the full 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.