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
41 lines
983 B
JSON
41 lines
983 B
JSON
{
|
|
"name": "backend",
|
|
"version": "1.0.0",
|
|
"description": "",
|
|
"main": "index.js",
|
|
"scripts": {
|
|
"dev": "tsx watch src/index.ts",
|
|
"build": "tsc",
|
|
"start": "node dist/index.js",
|
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
"db:import": "tsx src/db/import-sqlite-data.ts"
|
|
},
|
|
"keywords": [],
|
|
"author": "",
|
|
"license": "ISC",
|
|
"dependencies": {
|
|
"@fastify/cookie": "^11.0.2",
|
|
"@fastify/cors": "^11.2.0",
|
|
"@fastify/jwt": "^10.0.0",
|
|
"@fastify/multipart": "^9.4.0",
|
|
"@fastify/static": "^9.0.0",
|
|
"@types/pg": "^8.16.0",
|
|
"@types/sharp": "^0.31.1",
|
|
"bcrypt": "^6.0.0",
|
|
"dotenv": "^17.3.1",
|
|
"fastify": "^5.7.4",
|
|
"jsonwebtoken": "^9.0.3",
|
|
"pg": "^8.18.0",
|
|
"sharp": "^0.34.5",
|
|
"ulid": "^3.0.2",
|
|
"zod": "^4.3.6"
|
|
},
|
|
"devDependencies": {
|
|
"@types/bcrypt": "^6.0.0",
|
|
"@types/jsonwebtoken": "^9.0.10",
|
|
"@types/node": "^25.2.3",
|
|
"tsx": "^4.21.0",
|
|
"typescript": "^5.9.3"
|
|
}
|
|
}
|