Scan And Action

<div align="center"> <img src="https://capsule-render.vercel.app/api?type=waving&amp;color=0:0a1628,50:1e3a5f,100:0ea5e9&amp;height=160&amp;section=header&amp;text=Scan%20%2526%20Action&amp;fontSize=52&amp;fontColor=ffffff&amp;fontAlignY=40&amp;desc=AI-Powered%20Invoice%20Processing&amp;descAlignY=62&amp;descColor=7dd3fc&amp;animation=fadeIn" width="100%"/> <br/>

Live Launch App Gemini Vision Next.js 14 License

Automatically extract, classify, and act on invoice data using Gemini Vision AI.

</div>

What it does

Scan & Action reads invoice images and PDFs, extracts structured data via Gemini Vision, and automatically classifies each entry as APPROVED, NEEDS REVIEW, or FLAGGED — with a human-in-the-loop correction panel for edge cases.

Key Features

  • 📄 AI Extraction — Gemini Vision pulls line items, totals, vendors, and dates
  • Smart Classification — Rule engine assigns APPROVED / NEEDS REVIEW / FLAGGED
  • 🔧 Fix Action Panel — Users correct AI mistakes directly in the UI
  • 🌐 Multilingual — Arabic & English support with full RTL layout
  • 💳 Freemium — Free tier + $9/month Pro via Lemon Squeezy

Tech Stack

LayerTechnology
FrontendNext.js 14 (App Router)
StylingTailwind CSS
DatabasePostgreSQL + Prisma
AI EngineGoogle Gemini Vision
PaymentsLemon Squeezy
DeployVercel + Render

Getting Started

git clone https://github.com/tornidomaroc-web/scan-and-action.git
cd scan-and-action
npm install
cp .env.example .env.local
npm run dev

Environment Variables

VariableDescription
DATABASE_URLPostgreSQL connection string
GEMINI_API_KEYGoogle AI Studio API key
LEMON_SQUEEZY_WEBHOOK_SECRETLemon Squeezy webhook secret
NEXTAUTH_SECRETAuth secret key

Project Structure

apps/
  web/          # Next.js frontend + API routes
  backend/      # Express/Node processing service
packages/       # Shared types and utilities
docs/           # Documentation

Contributing

PRs are welcome. Please open an issue first to discuss what you'd like to change.

License

MIT © 2025 Scan & Action


<div align="center"> <img src="https://capsule-render.vercel.app/api?type=waving&color=0:0a1628,50:1e3a5f,100:0ea5e9&height=100&section=footer&animation=fadeIn" width="100%"/> </div>