Anton 975f2c4fd2 feat: adds PDF import with conversion to JSON 1.0
- Accept only PDF and JSON files in import modal and API
- Convert PDF statements to JSON 1.0 via LLM (OpenAI-compatible)
- Use multipart/form-data for file upload (multer, 15 MB limit)
- Add LLM_API_KEY and LLM_API_BASE_URL for configurable LLM endpoint
- Update ImportModal to validate type and send FormData
- Add postFormData to API client for file upload
2026-03-13 13:38:02 +03:00
2026-03-02 00:34:40 +03:00
2026-03-02 00:35:39 +03:00
2026-03-02 23:22:40 +03:00

Family Budget

Local SPA for family budget tracking: import bank statements, categorize transactions, view analytics.

Monorepo structure

family_budget/
├── backend/     — Node.js API server (Express + TypeScript)
├── frontend/    — React SPA (Vite + TypeScript)
├── shared/      — Shared TypeScript types (API contracts, entities)
├── docs/        — Specifications and backlog
└── package.json — npm workspaces root

Tech stack

Layer Choice Rationale
Backend Express + TypeScript Simple, well-known, sufficient for a small local app
Frontend React + Vite + TS Fast dev experience, modern tooling
Database PostgreSQL Deployed on Synology NAS
Migrations Knex Lightweight, SQL-close, supports seeds
Shared Pure TypeScript types Zero-runtime, imported by both backend and frontend

Prerequisites

  • Node.js >= 20
  • PostgreSQL >= 15
  • npm >= 10

Getting started

# Install all workspace dependencies
npm install

# Build shared types (must be done before backend/frontend)
npm run build -w shared

See backend/README.md and frontend/README.md for per-package instructions.

Description
No description provided
Readme 757 KiB
Languages
TypeScript 84.6%
CSS 15%
HTML 0.4%