--- title: OmniParse AI emoji: 📄 sdk: docker colorFrom: blue colorTo: blue license: mit tags: - invoice - ocr - ai - api - saas - automation - finance - billing - nextjs --- ## Overview AI-powered invoice processing SaaS. Upload PDFs or images and extract vendor details, amounts, dates, and line items as structured data. Export to CSV, JSON, or Excel — or integrate via REST API. ## Features - **Smart OCR Extraction** — AI-powered data extraction with high accuracy - **Duplicate Detection** — Automatic flagging of potential duplicate invoices - **AI Chat Assistant** — Ask questions about your invoices (Pro+) - **Dashboard** — Upload, invoices, analytics, chat, export, profile, settings - **Bank-Level Security** — Bcrypt passwords, HttpOnly cookies, rate limiting, activity logging - **REST API** — Integrate with ERP systems (Pro+) - **Multi-format Export** — CSV, JSON, Excel - **Dark/Light Theme** — Smooth animated transition - **Forgot Password** — Reset flow for logged-out users - **Responsive** — Works on mobile and desktop ## Demo Account - **Email:** `demo@omniparse.ai` - **Password:** `demo1234` - **Plan:** Pro (20 seeded invoices) ## Tech Stack - **Framework:** Next.js 16 (App Router) - **Language:** TypeScript - **Styling:** Tailwind CSS 4 + shadcn/ui - **Database:** SQLite via Prisma ORM - **Auth:** Custom session-based (cookies) - **Runtime:** Node.js 20 Alpine (Docker) ## Deployment This Space uses a 3-stage Docker build: 1. **deps** — Install npm dependencies 2. **builder** — Generate Prisma client + `next build` 3. **runner** — Production standalone server on port 7860 The database is automatically initialized on first startup via `prisma db push`. ## API Endpoints | Method | Path | Description | |--------|------|-------------| | POST | `/api/auth/login` | Login | | POST | `/api/auth/signup` | Create account | | POST | `/api/auth/logout` | Logout | | GET | `/api/auth/me` | Current user | | GET | `/api/invoices` | List invoices | | DELETE | `/api/invoices` | Delete invoice | | POST | `/api/auth/forgot-password` | Request reset code | | POST | `/api/auth/reset-password` | Reset password with code | | GET | `/api/health` | Health check |