Busabase
Busabase is an open-source (MIT) database and workspace for AI agents — data, docs, skills, and apps in one place. Run it locally, self-host it inside your network, or use Busabase Cloud, and turn age
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Upload a receipt or invoice. Get structured data and a decision in seconds.
1. Upload a receipt or invoice (JPEG/PNG/WebP/PDF, ≤10 MB).
2. Extract — Gemini Vision pulls merchant, total, date, and currency, in Arabic, French, or English.
3. Decide — built-in business rules return one of three verdicts:
4. Act — review queue with a fix panel (correct amount, justify, re-evaluate), natural-language search (EN/FR/AR keywords), CSV export.
The UI is localized in English, French, and Arabic with automatic RTL switching.
Pricing: free tier (10 scans) · PRO at $9/month or $59/year via Paddle.檢視完整 README ↗Upload a receipt or invoice. Get structured data and a decision.
| Status | Meaning |
|---|---|
✅ APPROVED | Data complete, rules passed |
⚠️ NEEDS_REVIEW | Partial data or ambiguous fields |
🚫 FLAGGED | Rule violation (high amount, food expense over limit, possible duplicate) |
The UI is localized in English, French, and Arabic with automatic RTL switching.
Pricing: free tier (10 scans) · PRO at $9/month or $59/year via Paddle.
| Layer | Technology |
|---|---|
| Frontend | React 18 · Vite · Tailwind CSS · react-router |
| Backend | Express 5 · Prisma · PostgreSQL |
| Auth & storage | Supabase (JWT auth, private file bucket) |
| Extraction | Gemini Flash (vision, JSON mode) |
| Billing | Paddle (webhook-driven plan upgrades) |
| Hosting | Vercel (frontend) · Railway (backend) |
apps/
backend/ Express API — auth, upload pipeline, rule engine, search, webhook
frontend/ React SPA — dashboard, review queue, document detail, settings
# Backend (apps/backend)
npm install
cp ../../.env.example .env # fill in real values
npx prisma generate # generates the client only; does NOT touch any database
npm run dev # http://localhost:3001
# Frontend (apps/frontend)
npm install # set VITE_ vars in .env
npm run dev # http://localhost:5173
See .env.example for every required variable.
Do not run migrations from your machine. These steps deliberately stop at
prisma generate.DATABASE_URLpoints at the only reachable database, which is production, soprisma migrate deployfrom a fresh clone would apply migrations straight to prod. Migrations are applied by the Railway pre-deploy command and by nothing else — see Deployment — database migrations.
There is exactly one reachable database: production (Supabase). There is no staging or throwaway database in this project. Every rule below follows from that.
How migrations are applied. Migrations are applied by prisma migrate deploy, which
runs as the pre-deploy command on the Railway backend service. Railway runs it to
completion before the new container starts serving traffic, so schema application strictly
precedes the code that depends on it. A failing migration fails the deploy — the new
container is not promoted and the previous one keeps serving — rather than shipping new
code onto an old schema.
Where to find the output. Railway does not render a separate "Pre-deploy" row in the
stage list; it still reads Initialization / Build / Deploy / Post-deploy. The
migrate deploy output appears inside the Deploy logs, above the
Stopping Container / Starting Container lines. Look there — there is no stage to
click on.
CI does not apply migrations, and must not. .github/workflows/ci.yml only
typechecks, tests, and builds. It has no database credentials and must never be given
any. Applying schema changes is the deploy path's job, not CI's.
Never run against production:
prisma db push — applies the schema with no migration history and will drop
columns or tables it considers drift. The db:push npm script was removed for this
reason.prisma migrate reset — drops and recreates the database. It destroys all
production data.Before merging any migration. Run prisma migrate diff read-only and confirm it
comes back empty — an empty diff means the committed migrations fully describe the
schema and nothing will be silently applied or skipped at deploy time. A non-empty diff
means the migration set and the schema disagree; resolve that before merging, never at
deploy time.
Abdelfettah Amellah — Full Stack AI Engineer, Marrakesh 🇲🇦