-
-
Notifications
You must be signed in to change notification settings - Fork 1
Home
symonbaikov edited this page Apr 23, 2026
·
2 revisions
Open-source financial data platform for importing, processing, and analyzing bank statements.
Documentation: symonbaikov.github.io/lumio/
Lumio turns unstructured financial documents (PDFs, CSVs, email receipts, scanned images) into clean, queryable data. It is self-hosted, open-source, and built for finance teams, accountants, and developers who need full control over their financial data pipeline without proprietary SaaS lock-in.
| Capability | Description |
|---|---|
| Multi-format Import | PDF, CSV, XLSX, and image files. Native parsers for Kaspi Bank and Bereke Bank. Generic AI PDF parser for any other bank. |
| OCR | Tesseract.js text extraction from scanned documents and photos. |
| Idempotent Uploads | SHA-256 file hashing prevents duplicate imports. |
| Transaction Deduplication | Fingerprint-based duplicate detection with confidence scoring, merge, and mark-as-duplicate workflows. |
| AI Auto-Categorization | Gemini / OpenRouter-backed categorization with per-workspace learning rules. |
| Multi-Tenant Workspaces | Unlimited workspaces with invitation flows and per-workspace data isolation. |
| Granular RBAC | Roles: owner, admin, member, viewer. Per-user permission overrides. |
| Dashboard & Reports | Cash flow, top categories, trends, custom report builder with CSV/XLSX export. |
| Audit Log | Complete event trail with one-click rollback for supported operations. |
| Docker Ready | One-command deployment with Docker Compose. |
| Layer | Technology |
|---|---|
| Backend | NestJS (TypeScript), TypeORM, PostgreSQL, Redis |
| Frontend | Next.js (TypeScript), MUI, TanStack Query, ECharts |
| AI / ML | Google Gemini, OpenRouter, Tesseract.js |
| Realtime | Socket.IO |
| Auth | JWT (HttpOnly cookies), refresh token rotation |
| Infra | Docker Compose, Railway |
Lumio follows Clean Architecture with strict layer separation:
- Domain β business entities and repository interfaces (no framework dependencies)
- Application β use cases and service logic, communicates via DTOs
- Infrastructure β TypeORM repositories, external API clients, configuration
- Interface β NestJS controllers, WebSocket gateways, input validation via class-validator
# Clone the repository
git clone https://github.com/symonbaikov/lumio.git
cd lumio
# Start everything in one command
make quick-devServices start at:
- Frontend β http://localhost:3000
- Backend API β http://localhost:3001
- API Docs (Swagger) β http://localhost:3001/api/docs
- Security β HttpOnly JWT cookies, AES-256 encryption at rest, strict CORS, Helmet.js headers, rate limiting on sensitive endpoints.
- Idempotency β All critical write operations use idempotency keys and SHA-256-based duplicate guards.
- Financial Integrity β Immutable ledger records; corrections via reversal entries only; optimistic locking on balance updates.
-
Observability β Structured JSON logs, correlation IDs, Prometheus metrics, Grafana dashboards,
/healthand/readyendpoints. -
Database β Migrations only (no direct schema edits), foreign key constraints, soft deletes (
deletedAt).
# Production (Docker Compose)
docker compose up -d --build
# Railway β push to main, Railway deploys automaticallySee RAILWAY.md for step-by-step Railway deployment.
| Resource | Link |
|---|---|
| Full Documentation | symonbaikov.github.io/lumio/ |
| Contributing Guide | CONTRIBUTING.md |
| Security Policy | SECURITY.md |
| Changelog | CHANGELOG.md |
| Feature Plans | docs/plans/ |
| API Docs (Swagger) | http://localhost:3001/api/docs (local) |
- Fork the repository
- Create a feature branch:
git checkout -b feat/my-feature - Run
make lintandmake testβ both must pass - Commit using Conventional Commits
- Open a Pull Request against
main
MIT β see LICENSE.