first commit
This commit is contained in:
229
README.md
Normal file
229
README.md
Normal file
@@ -0,0 +1,229 @@
|
||||
# Basil 🌿
|
||||
|
||||
A modern, full-stack recipe manager with web and mobile support. Import recipes from any URL, manage your recipe collection, and access them from anywhere.
|
||||
|
||||
## Features
|
||||
|
||||
- **Recipe Import**: Automatically import recipes from URLs using schema.org markup
|
||||
- **Full Recipe Management**: Create, read, update, and delete recipes
|
||||
- **Rich Recipe Data**: Store ingredients, instructions, prep/cook times, servings, images, and more
|
||||
- **Search & Filter**: Find recipes by title, cuisine, category, or tags
|
||||
- **Multiple Images**: Add multiple images to each recipe
|
||||
- **Flexible Storage**: Local filesystem storage by default, optional S3 support
|
||||
- **Docker Support**: Easy deployment with Docker Compose
|
||||
- **API-First Design**: RESTful API for web and future mobile apps
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- **Backend**: Node.js, TypeScript, Express, Prisma ORM, PostgreSQL
|
||||
- **Frontend**: React, TypeScript, Vite, React Router
|
||||
- **Infrastructure**: Docker, Docker Compose, nginx
|
||||
- **Monorepo**: npm workspaces with shared types
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Node.js 20+
|
||||
- PostgreSQL 16+ (or use Docker)
|
||||
- Docker (optional, for containerized deployment)
|
||||
|
||||
### Development Setup
|
||||
|
||||
1. **Clone the repository**
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd basil
|
||||
```
|
||||
|
||||
2. **Install dependencies**
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
3. **Set up environment variables**
|
||||
```bash
|
||||
cp packages/api/.env.example packages/api/.env
|
||||
# Edit packages/api/.env with your database credentials
|
||||
```
|
||||
|
||||
4. **Start PostgreSQL** (if not using Docker)
|
||||
```bash
|
||||
# Create a database named 'basil'
|
||||
createdb basil
|
||||
```
|
||||
|
||||
5. **Run database migrations**
|
||||
```bash
|
||||
cd packages/api
|
||||
npm run prisma:migrate
|
||||
npm run prisma:generate
|
||||
cd ../..
|
||||
```
|
||||
|
||||
6. **Start development servers**
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
|
||||
This starts:
|
||||
- API server at http://localhost:3001
|
||||
- Web frontend at http://localhost:5173
|
||||
|
||||
### Docker Deployment
|
||||
|
||||
For production or easy local setup:
|
||||
|
||||
```bash
|
||||
# Start all services
|
||||
docker-compose up -d
|
||||
|
||||
# View logs
|
||||
docker-compose logs -f
|
||||
|
||||
# Stop services
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
Services will be available at:
|
||||
- Web: http://localhost:5173
|
||||
- API: http://localhost:3001
|
||||
- PostgreSQL: localhost:5432
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
basil/
|
||||
├── packages/
|
||||
│ ├── api/ # Backend API server
|
||||
│ │ ├── prisma/ # Database schema and migrations
|
||||
│ │ └── src/ # Express routes, services, config
|
||||
│ ├── web/ # React web application
|
||||
│ │ └── src/ # Components, pages, services
|
||||
│ └── shared/ # Shared TypeScript types
|
||||
├── docker-compose.yml
|
||||
└── package.json # Workspace root
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### Importing a Recipe
|
||||
|
||||
1. Navigate to "Import Recipe" in the web app
|
||||
2. Paste a recipe URL (from sites like AllRecipes, Food Network, etc.)
|
||||
3. Preview the imported recipe
|
||||
4. Save to your collection
|
||||
|
||||
### API Examples
|
||||
|
||||
**Import recipe from URL:**
|
||||
```bash
|
||||
curl -X POST http://localhost:3001/api/recipes/import \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"url": "https://example.com/recipe"}'
|
||||
```
|
||||
|
||||
**Get all recipes:**
|
||||
```bash
|
||||
curl http://localhost:3001/api/recipes
|
||||
```
|
||||
|
||||
**Create a recipe:**
|
||||
```bash
|
||||
curl -X POST http://localhost:3001/api/recipes \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"title": "Chocolate Chip Cookies",
|
||||
"ingredients": [
|
||||
{"name": "flour", "amount": "2", "unit": "cups", "order": 0}
|
||||
],
|
||||
"instructions": [
|
||||
{"step": 1, "text": "Preheat oven to 350°F"}
|
||||
]
|
||||
}'
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
### Storage Options
|
||||
|
||||
**Local Storage (Default):**
|
||||
```env
|
||||
STORAGE_TYPE=local
|
||||
LOCAL_STORAGE_PATH=./uploads
|
||||
```
|
||||
|
||||
**S3 Storage:**
|
||||
```env
|
||||
STORAGE_TYPE=s3
|
||||
S3_BUCKET=your-bucket-name
|
||||
S3_REGION=us-east-1
|
||||
S3_ACCESS_KEY_ID=your-access-key
|
||||
S3_SECRET_ACCESS_KEY=your-secret-key
|
||||
```
|
||||
|
||||
### Database
|
||||
|
||||
Default PostgreSQL connection:
|
||||
```env
|
||||
DATABASE_URL=postgresql://basil:basil@localhost:5432/basil?schema=public
|
||||
```
|
||||
|
||||
For external database services (AWS RDS, DigitalOcean, etc.), update the connection string.
|
||||
|
||||
## Development
|
||||
|
||||
### Commands
|
||||
|
||||
```bash
|
||||
# Install dependencies
|
||||
npm install
|
||||
|
||||
# Start all services in development mode
|
||||
npm run dev
|
||||
|
||||
# Build all packages
|
||||
npm run build
|
||||
|
||||
# Lint all packages
|
||||
npm run lint
|
||||
|
||||
# Docker commands
|
||||
npm run docker:up
|
||||
npm run docker:down
|
||||
npm run docker:build
|
||||
```
|
||||
|
||||
### Database Migrations
|
||||
|
||||
```bash
|
||||
cd packages/api
|
||||
|
||||
# Create a new migration
|
||||
npm run prisma:migrate
|
||||
|
||||
# Generate Prisma client
|
||||
npm run prisma:generate
|
||||
|
||||
# Open Prisma Studio (GUI for database)
|
||||
npm run prisma:studio
|
||||
```
|
||||
|
||||
## Future Enhancements
|
||||
|
||||
- [ ] Mobile apps (React Native for iOS and Android)
|
||||
- [ ] User authentication and multi-user support
|
||||
- [ ] Recipe sharing and social features
|
||||
- [ ] Meal planning and grocery lists
|
||||
- [ ] Nutritional information calculation
|
||||
- [ ] Recipe scaling (adjust servings)
|
||||
- [ ] Print-friendly recipe view
|
||||
- [ ] Recipe collections and cookbooks
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
|
||||
## Contributing
|
||||
|
||||
Contributions are welcome! Please feel free to submit a Pull Request.
|
||||
Reference in New Issue
Block a user