Passport MRZ scanner and personal vault. Upload a passport photo, crop the Machine Readable Zone in the browser, extract structured fields, save them to your account, and export PDFs.
Live demo: pass-sense.vercel.app
| Layer | Tech |
|---|---|
| Frontend | React, Tailwind CSS, Framer Motion, Tesseract.js, Cropper.js |
| Backend | Node.js, Express, Prisma, JWT cookies, Nodemailer |
| Database | PostgreSQL (Supabase) |
OCR runs in the browser. Only the fields you choose to save are sent to the API.
- Account signup, sign-in, password reset
- Email OTP verification before saving scans / opening the library
- Client-side MRZ scan flow (upload → crop → extract → review)
- Passport library with search, filters, edit, delete
- Bulk and single-passport PDF export
- Public marketing pages (home, guide, privacy, terms); library requires a verified account
PassSense/
├── backend/ # Express API + Prisma
│ ├── config/ # Env loader (config/.env)
│ ├── controller/
│ ├── prisma/
│ └── ...
├── frontend/ # React app
├── images/ # README screenshots
└── README.md
- Node.js 18+
- npm
- A Postgres database (e.g. Supabase) with connection strings
cd backend
npm install
cp config/.env.example config/.env
cp .env.example .envEdit both env files with your secrets and database URLs (see below). Then:
npm run db:generate
npm run db:push
npm run devAPI defaults to http://localhost:5000.
cd frontend
npm install
cp .env.example .env
npm startApp runs at http://localhost:3000.
Loaded by the Express app in development:
PORT=5000
NODE_ENV=DEVELOPMENT
Client_URL=http://localhost:3000
JWT_SECRET=change-me-to-a-long-random-string
JWT_EXPIRES_IN=7d
DATABASE_URL=postgresql://USER:PASSWORD@HOST:6543/postgres?pgbouncer=true
DIRECT_URL=postgresql://USER:PASSWORD@HOST:5432/postgres
SMTP_HOST=smtp.gmail.com
SMTP_PORT=465
SMTP_EMAIL=
SMTP_PASSWORD=
FROM_NAME=PassSense
FROM_EMAIL=Used by the Prisma CLI (db:push, generate). Keep DATABASE_URL / DIRECT_URL aligned with config/.env.
REACT_APP_API_URL=http://localhost:5000Copy from the *.env.example files. Never commit real .env files.
Backend
| Command | Description |
|---|---|
npm run dev |
Start API with nodemon |
npm start |
Start API |
npm run db:generate |
Generate Prisma client |
npm run db:push |
Push schema to the database |
Frontend
| Command | Description |
|---|---|
npm start |
Dev server |
npm run build |
Production build |
Issues and pull requests are welcome. Open an issue to discuss larger changes first.
MIT — see LICENSE.



