Files
luna-recipes/docker-compose.yml
clawd 301e42b1dc v2.1.2026 — PostgreSQL, Auth, Household, Shopping Smart-Add, Docker
Backend:
- SQLite → PostgreSQL (pg_trgm search, async services)
- All services rewritten to async with pg Pool
- Data imported (50 recipes, 8 categories)
- better-sqlite3 removed

Frontend:
- ProfilePage complete (edit profile, change password, no more stubs)
- HouseholdCard (create, join via code, manage members, leave)
- Shopping scope toggle (personal/household)
- IngredientPickerModal (smart add with basics filter)
- Auth token auto-attached to all API calls (token.ts)
- Removed PlaceholderPage

Infrastructure:
- Docker Compose (backend + frontend + postgres)
- Dockerfile for backend (node:22-alpine + tsx)
- Dockerfile for frontend (vite build + nginx)
- nginx.conf with API proxy + SPA fallback
- .env.example for production secrets

Spec:
- AUTH-V2-SPEC updated: household join flow, manual shopping items
2026-02-18 17:26:24 +00:00

45 lines
1.1 KiB
YAML

version: '3.8'
services:
db:
image: postgres:17-alpine
restart: unless-stopped
environment:
POSTGRES_DB: luna_recipes
POSTGRES_USER: luna
POSTGRES_PASSWORD: ${DB_PASSWORD:-luna-recipes-secret-2026}
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U luna -d luna_recipes"]
interval: 5s
timeout: 3s
retries: 5
backend:
build: ./backend
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
DATABASE_URL: postgresql://luna:${DB_PASSWORD:-luna-recipes-secret-2026}@db:5432/luna_recipes
JWT_SECRET: ${JWT_SECRET:-luna-jwt-change-in-prod}
JWT_REFRESH_SECRET: ${JWT_REFRESH_SECRET:-luna-refresh-change-in-prod}
COOKIE_SECRET: ${COOKIE_SECRET:-luna-cookie-change-in-prod}
PORT: "6001"
NODE_ENV: production
ports:
- "127.0.0.1:6001:6001"
frontend:
build: ./frontend
restart: unless-stopped
depends_on:
- backend
ports:
- "80:80"
volumes:
pgdata: