A Personal Finance App for Frz
cp .env.example .env
npm install
npx prisma generate
npx prisma migrate dev
npm run devOpen http://localhost:3000.
cp .env.example .env
docker compose upcp .env.example .env # fill in all secrets
docker compose -f docker-compose.prod.yml up -dThe production image in this repository is configured for SQLite/libSQL URLs.
Set DATABASE_URL_PROD to a value such as file:/app/data/prod.db (this is the compose default).
On container startup, the app initializes SQLite schema from prisma/migrations automatically.
# Run all tests
npm test
# Run with watch mode
npm run test:watch
# Run with coverage report (enforces ≥95% thresholds)
npm run test:coverageCurrent coverage: 100% statements · 98.9% branches · 100% functions (234 tests across 19 test files).
| Script | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Production build |
npm run lint |
ESLint |
npm test |
Vitest (single run) |
npm run test:watch |
Vitest (watch mode) |
npm run test:coverage |
Vitest + V8 coverage |
- Framework: Next.js 16 (App Router) · next-intl
- Database: SQLite via Prisma ORM
- Auth: Custom session-based auth with bcrypt
- Email: Resend
- UI: shadcn/ui · Tailwind CSS
- Testing: Vitest · @vitest/coverage-v8
- Containerisation: Docker (multi-stage) · Docker Compose
