feat: same as initial commit

This commit is contained in:
vakabunga
2026-03-02 00:35:39 +03:00
parent ad4ad55e35
commit b0e557885c
4 changed files with 4071 additions and 0 deletions

17
.gitignore vendored Normal file
View File

@@ -0,0 +1,17 @@
node_modules/
dist/
build/
.env
.env.local
.env.*.local
*.log
npm-debug.log*
*.tsbuildinfo
.DS_Store
Thumbs.db
coverage/

42
README.md Normal file
View File

@@ -0,0 +1,42 @@
# 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
```bash
# 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.

4002
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

10
package.json Normal file
View File

@@ -0,0 +1,10 @@
{
"name": "family-budget",
"version": "0.1.0",
"private": true,
"workspaces": [
"shared",
"backend",
"frontend"
]
}