74b644702a10400bf0c2d62fe62e6fb4c0e42a71
Here is dummy ai explanation for you my friend
Stack
- Backend: Node + Fastify + Prisma (Postgres)
- Frontend: React + Vite
- Scheduler: separate worker container (cron tasks)
- Reverse proxy (prod)
- Default: Nginx (skymoneybudget.com.conf)
- Alternative: Caddy (Caddyfile.prod)
- API is under /api path
- Web is static from /var/www/skymoney/dist
- HTTPS + HSTS already configured in the prod config
Required env vars (production)
- DATABASE_URL
- JWT_SECRET (32+ chars)
- COOKIE_SECRET (32+ chars)
- CORS_ORIGIN (set to https://skymoneybudget.com)
- Optional: COOKIE_DOMAIN=skymoneybudget.com
- Cookies + Security
- HttpOnly + Secure in prod
- CSRF protection required for non‑GET
Other Features
- /auth/logout requires CSRF now
- Mutation endpoints rate‑limited
- Cron jobs
- rollover worker (6 AM user time)
- auto‑payment worker (9 AM user time)
- Jobs run every 15 minutes and only process users whose local time has reached the threshold
- DB / Prisma
- Postgres required
- Prisma migrations must be applied before running
- The app blocks default secrets in prod
- Build + deploy
- web/ builds to web/dist
- API runs on port 8080 internally (exposed as 8081 in compose)
- Nginx proxies /api to 127.0.0.1:8081
- Logs
- Prod logs are limited (PII reduced)
- Key logging: job success/failure counts
- Backups
- Scripts exist: backup.sh, restore.sh
- Restore requires admin DB privileges (created DB)
- Optional but recommended to test once (tested, backup worked restore failed)
Description
Languages
TypeScript
89.6%
CSS
6%
JavaScript
3.4%
Shell
0.6%
HTML
0.2%
Other
0.2%