304 lines
6.7 KiB
Markdown
304 lines
6.7 KiB
Markdown
# Recipe Manager
|
|
|
|
**Self-hosted, privacy-first recipe management app**
|
|
|
|
Built with ❤️ by autonomous AI agents for the Huliganga family.
|
|
|
|
**Repository:** https://paje.ca/git/paulh/recipe-manager
|
|
|
|
---
|
|
|
|
## Status
|
|
|
|
🚧 **In Development** — MVP phase
|
|
📋 See [ROADMAP.md](ROADMAP.md) for current milestone
|
|
|
|
---
|
|
|
|
## What Is This?
|
|
|
|
A modern, self-hosted alternative to services like CopyMeThat. Store, organize, and cook from your recipes with full data ownership.
|
|
|
|
### Key Features (MVP)
|
|
- ✅ Manual recipe entry
|
|
- ✅ Tag-based organization
|
|
- ✅ Text search
|
|
- ✅ Cook mode (ingredient checklist + step tracking)
|
|
- ✅ Self-hosted deployment (Docker)
|
|
|
|
### Planned Features
|
|
- Recipe scraping (browser extension)
|
|
- Serving size scaling
|
|
- Meal planning & shopping lists
|
|
- AI-powered ingredient substitutions
|
|
- Integration with Fintrove (cost tracking)
|
|
|
|
---
|
|
|
|
## Quick Start
|
|
|
|
### Prerequisites
|
|
- Node.js 22+
|
|
- Docker & Docker Compose (for deployment)
|
|
- npm or pnpm
|
|
|
|
### Development Setup
|
|
|
|
```bash
|
|
# Clone the repo
|
|
cd /home/paulh/.openclaw/workspace/projects/recipe-manager
|
|
|
|
# Install dependencies
|
|
npm install
|
|
|
|
# Start backend (development mode)
|
|
npm run dev:backend
|
|
|
|
# Start frontend (separate terminal)
|
|
npm run dev:frontend
|
|
|
|
# Run tests
|
|
npm test
|
|
```
|
|
|
|
### Production Deployment
|
|
|
|
```bash
|
|
# Build and start containers
|
|
docker-compose up -d
|
|
|
|
# View logs
|
|
docker-compose logs -f
|
|
|
|
# Stop
|
|
docker-compose down
|
|
```
|
|
|
|
Access at `http://localhost:3000` (or `https://recipes.paje.ca` in production).
|
|
|
|
---
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
recipe-manager/
|
|
├── src/
|
|
│ ├── backend/ # Express API
|
|
│ │ ├── routes/ # API endpoints
|
|
│ │ ├── services/ # Business logic
|
|
│ │ ├── repositories/ # Database access
|
|
│ │ └── types/ # TypeScript types
|
|
│ ├── frontend/ # React app
|
|
│ │ ├── components/ # UI components
|
|
│ │ ├── hooks/ # React hooks
|
|
│ │ ├── pages/ # Route pages
|
|
│ │ └── services/ # API client
|
|
│ └── shared/ # Shared types/utilities
|
|
├── tests/
|
|
│ ├── unit/ # Unit tests
|
|
│ ├── integration/ # API integration tests
|
|
│ └── e2e/ # End-to-end tests
|
|
├── docs/
|
|
│ ├── api.md # API documentation
|
|
│ ├── user-guide.md # User manual
|
|
│ └── ADR-*.md # Architecture decision records
|
|
├── data/ # SQLite database (gitignored)
|
|
├── PROJECT.md # Product vision
|
|
├── ARCHITECTURE.md # Technical design
|
|
├── ROADMAP.md # Development milestones
|
|
├── AGENT_INSTRUCTIONS.md # How agents work on this project
|
|
└── docker-compose.yml # Deployment config
|
|
```
|
|
|
|
---
|
|
|
|
## Technology Stack
|
|
|
|
### Backend
|
|
- **Node.js** + **TypeScript** — Modern, type-safe JavaScript
|
|
- **Express** — Minimal, flexible web framework
|
|
- **SQLite** (better-sqlite3) — Fast, embedded database
|
|
- **Zod** — Runtime type validation
|
|
|
|
### Frontend
|
|
- **React 18** — Component-based UI
|
|
- **Vite** — Lightning-fast dev server
|
|
- **Tailwind CSS** — Utility-first styling
|
|
- **React Router** — Client-side routing
|
|
|
|
### DevOps
|
|
- **Docker Compose** — Container orchestration
|
|
- **Caddy** — Reverse proxy with auto-HTTPS
|
|
- **Vitest** — Fast, modern test runner
|
|
|
|
---
|
|
|
|
## Documentation
|
|
|
|
- [Project Vision](PROJECT.md) — Why we're building this
|
|
- [Architecture Guide](ARCHITECTURE.md) — Technical decisions & patterns
|
|
- [Roadmap](ROADMAP.md) — Planned features & milestones
|
|
- [Agent Instructions](AGENT_INSTRUCTIONS.md) — How AI agents contribute
|
|
- [API Docs](docs/api.md) — Endpoint reference *(coming soon)*
|
|
- [User Guide](docs/user-guide.md) — How to use the app *(coming soon)*
|
|
|
|
---
|
|
|
|
## Development Workflow
|
|
|
|
This project is built **agent-first** using OpenClaw autonomous agents:
|
|
|
|
1. **Agent reads context** — PROJECT.md, ARCHITECTURE.md, ROADMAP.md
|
|
2. **Agent picks next task** — From the current milestone
|
|
3. **Agent implements & tests** — Following coding standards
|
|
4. **Agent commits & documents** — Conventional commits + ADRs
|
|
5. **Agent reports completion** — Or escalates if blocked
|
|
|
|
Human oversight at milestone boundaries.
|
|
|
|
---
|
|
|
|
## Contributing
|
|
|
|
This is a personal/family project, but contributions welcome!
|
|
|
|
### For Humans
|
|
1. Read [PROJECT.md](PROJECT.md) and [ARCHITECTURE.md](ARCHITECTURE.md)
|
|
2. Check [ROADMAP.md](ROADMAP.md) for open tasks
|
|
3. Follow patterns in [AGENT_INSTRUCTIONS.md](AGENT_INSTRUCTIONS.md)
|
|
4. Submit PRs with tests + documentation
|
|
|
|
### For AI Agents
|
|
Read [AGENT_INSTRUCTIONS.md](AGENT_INSTRUCTIONS.md) — it's your operating manual.
|
|
|
|
---
|
|
|
|
## Testing
|
|
|
|
```bash
|
|
# Run all tests
|
|
npm test
|
|
|
|
# Run tests in watch mode
|
|
npm run test:watch
|
|
|
|
# Generate coverage report
|
|
npm run test:coverage
|
|
|
|
# Run specific test file
|
|
npm test -- RecipeService.test.ts
|
|
|
|
# E2E tests (requires app running)
|
|
npm run test:e2e
|
|
```
|
|
|
|
**Coverage goal:** >80% on core business logic.
|
|
|
|
---
|
|
|
|
## Deployment
|
|
|
|
### Local Development
|
|
```bash
|
|
npm run dev
|
|
```
|
|
Access at http://localhost:5173 (frontend) and http://localhost:3000 (API).
|
|
|
|
### Production (paje.ca)
|
|
```bash
|
|
# On server
|
|
docker-compose up -d
|
|
|
|
# Check status
|
|
docker-compose ps
|
|
|
|
# View logs
|
|
docker-compose logs -f recipe-manager
|
|
```
|
|
|
|
### Backup & Restore
|
|
```bash
|
|
# Backup database
|
|
cp data/recipes.db data/recipes-backup-$(date +%Y%m%d).db
|
|
|
|
# Restore
|
|
cp data/recipes-backup-20260323.db data/recipes.db
|
|
docker-compose restart
|
|
```
|
|
|
|
---
|
|
|
|
## Environment Variables
|
|
|
|
Create `.env` file:
|
|
|
|
```env
|
|
# Backend
|
|
NODE_ENV=production
|
|
PORT=3000
|
|
DATABASE_PATH=/app/data/recipes.db
|
|
|
|
# Frontend (build-time)
|
|
VITE_API_URL=https://recipes.paje.ca/api
|
|
```
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### Database locked
|
|
```bash
|
|
# Check for stale locks
|
|
fuser data/recipes.db
|
|
# Kill if needed, then restart
|
|
docker-compose restart
|
|
```
|
|
|
|
### Port already in use
|
|
```bash
|
|
# Find process using port 3000
|
|
lsof -i :3000
|
|
# Kill it
|
|
kill -9 <PID>
|
|
```
|
|
|
|
### Tests failing
|
|
```bash
|
|
# Clear node_modules and reinstall
|
|
rm -rf node_modules package-lock.json
|
|
npm install
|
|
npm test
|
|
```
|
|
|
|
---
|
|
|
|
## License
|
|
|
|
Private project — All rights reserved (for now).
|
|
May open-source later.
|
|
|
|
---
|
|
|
|
## Credits
|
|
|
|
**Product Owner:** Paul Huliganga
|
|
**Primary Users:** Anne & Elizabeth
|
|
**Development:** Autonomous AI agents (Codex 5.2) via OpenClaw
|
|
**Human Oversight:** Paul
|
|
|
|
Built as a learning project for agentic engineering and modern web development.
|
|
|
|
---
|
|
|
|
## Roadmap Highlights
|
|
|
|
- **MVP (v0.1):** Manual entry, tags, search, cook mode ← *You are here*
|
|
- **v1.0:** Recipe scraping, advanced search, multi-device sync
|
|
- **v2.0:** AI features (meal planning, cost tracking, substitutions)
|
|
|
|
See [ROADMAP.md](ROADMAP.md) for details.
|
|
|
|
---
|
|
|
|
**Questions?** Check [docs/](docs/) or ask Paul.
|