723df494ca2e8fc5feb63cd492cd5f7665de700c
pdf-parse@2.4.5 depends on @napi-rs/canvas (native Skia binary compiled with AVX instructions) which crashes with SIGILL on the Synology NAS CPU. Version 1.1.1 is pure JavaScript and works on any architecture.
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
Languages
TypeScript
84.6%
CSS
15%
HTML
0.4%