vakabunga 8b57dd987e Revert SSE streaming for PDF import, use synchronous flow
SSE streaming added unnecessary complexity and latency due to
buffering issues across Node.js event loop, Nginx proxy, and
Docker layers. Reverted to a simple synchronous request/response
for PDF conversion. Kept extractLlmErrorMessage for user-friendly
LLM errors, lazy-loaded pdf-parse, and extended Nginx timeout.
2026-03-14 20:12:27 +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%