- Dockerfile: add COPY db/ /app/db/ so migrations are available at
runtime (server/src/db.js requires ../../db/migrations at startup)
- vite.config.js: fix dev proxy port from 3001 to 3000 to match
server's default PORT
Docker build passes; server starts and connects to DB correctly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- One-time expenses: paid toggle, delete, and inline add form in
paycheck columns (wired to POST/DELETE/PATCH /api/one-time-expenses)
- Variable spending actuals section with category select, amount,
note, date fields; actuals included in remaining balance
- Both Phase 3 features fully integrated into PaycheckView
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sets up the full monorepo structure with:
- Multi-stage Dockerfile (client-build + production stages)
- docker-compose.yml for production, docker-compose.dev.yml overlay for development
- Express server (port 3000) with pg pool, health route, and SPA static file serving
- React 18 + Vite client with react-router-dom v6, nav bar, and placeholder page components
- .env.example with PostgreSQL and app config
- Empty db/migrations/ directory for future migrations
- CLAUDE.md updated with development workflow commands
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>