- TypeScript 91.1%
- CSS 8.7%
- Dockerfile 0.1%
- JavaScript 0.1%
The trial writes a report from a database copy. The apply script updates the database you pass in. |
||
|---|---|---|
| docs | ||
| e2e | ||
| scripts | ||
| src | ||
| tests | ||
| .dockerignore | ||
| .gitignore | ||
| AGENTS.md | ||
| CONTEXT.md | ||
| docker-compose.yml | ||
| Dockerfile | ||
| drizzle.config.ts | ||
| eslint.config.mjs | ||
| next-env.d.ts | ||
| next.config.ts | ||
| package-lock.json | ||
| package.json | ||
| playwright.config.ts | ||
| README.md | ||
| tsconfig.json | ||
| vitest.config.ts | ||
Statement Insights
A private, localhost-only UOB One Account statement analyzer. It imports monthly PDF statements, verifies every running balance, supports manual recognition corrections, and generates monthly income and expense reports without external services.
Requirements
- Node.js 22+
- Text-based, unencrypted UOB One Account PDF statements
Run locally
npm install
npm run dev
Open http://127.0.0.1:3000. Application data is stored under ./data by default. Override it with STATEMENT_INSIGHTS_DATA_DIR=/path/to/data.
For a production-mode local process:
npm run build
npm start
Run with Docker
docker compose up --build
The port is bound to 127.0.0.1 and the database/PDFs are stored in a named volume. Do not expose the service remotely without adding authentication and TLS.
Validate
npm test
npm run typecheck
npm run build
npm run test:e2e
When the private PDFs exist under examples/, the unit suite also validates all six statements locally. Those files are ignored by Git and must never be committed.
Privacy
- No runtime calls to cloud APIs, telemetry, CDNs, or remote fonts
- Full account number and holder contact details are not stored as structured data
- Original PDFs remain in the local data directory
- Backup ZIPs are not encrypted; handle them as sensitive financial files
V1 boundaries
Only SGD UOB One Account statements matching the supplied text-based format are supported. Scanned and password-protected PDFs, annual reports, budgets, transaction splitting, and remote hosting are outside v1.