- Upload a receipt or invoice (JPEG/PNG/WebP/PDF, ≤10 MB).
- Extract — Gemini Vision pulls merchant, total, date, and currency, in Arabic, French, or English.
- Decide — built-in business rules return one of three verdicts:
| 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) |
- 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.
| 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 migrate deploy
npm run dev # http://localhost:3001
# Frontend (apps/frontend)
npm install # set VITE_ vars in .env
npm run dev # http://localhost:5173See .env.example for every required variable.
AboJad — Full Stack AI Engineer, Marrakesh 🇲🇦