A modern recipe management web application built with SolidStart, Drizzle ORM, and Turso. Organize, discover, and curate your favorite recipes with ease.
- 🌐 Recipe Import: Automatically scrape recipes from any website URL
- 📝 Manual Recipe Creation: Add your own recipes from scratch
- 🏷️ Tag Organization: Categorize recipes with custom tags
- 🔍 Search & Filter: Find recipes by title, tags, cuisine, and more
- ✏️ Recipe Editing: Modify all aspects of your recipes
- 📱 Responsive Design: Works seamlessly on desktop and mobile
- 🔐 User Authentication: Secure email/password authentication
- 📧 Email Notifications: Welcome emails via Resend
- Frontend: SolidStart, Solid.js, TailwindCSS
- Backend: SolidStart API routes
- Database: Turso (SQLite)
- ORM: Drizzle ORM
- Email: Resend
- Scraping: Cheerio
- Authentication: Custom email/password with sessions
- Node.js 20+ (though the project specifies Node.js 22+)
- A Turso database
- A Resend account (optional, for welcome emails)
- 
Clone and install dependencies git clone <your-repo-url> cd cookbook pnpm install 
- 
Set up environment variables cp .env.example .env 
- 
Configure your .envfile# Turso Database (Required) TURSO_DATABASE_URL=your_turso_database_url TURSO_AUTH_TOKEN=your_turso_auth_token # Resend API for emails (Optional) RESEND_API_KEY=your_resend_api_key # Session secret (Required - generate a secure random string) SESSION_SECRET=your_very_long_session_secret_key AUTH_SECRET=your_secret_key_for_sessions 
- 
Create a Turso database # Install Turso CLI curl -sSfL https://get.tur.so/install.sh | bash # Create database turso db create cookbook # Get database URL and auth token turso db show cookbook turso db tokens create cookbook 
- 
Generate and run migrations pnpm db:generate pnpm db:push 
Start the development server:
pnpm devThe app will be available at http://localhost:3000
- pnpm db:generate- Generate migrations from schema changes
- pnpm db:push- Push schema changes to database
- pnpm db:studio- Open Drizzle Studio for database management
src/
├── components/          # Reusable UI components
├── db/                 # Database schema and configuration
│   ├── schema.ts       # Drizzle schema definitions
│   └── index.ts        # Database connection
├── lib/                # Utility functions and services
│   ├── auth.ts         # Authentication utilities
│   ├── auth-context.tsx # Authentication context
│   ├── email.ts        # Email service
│   ├── middleware.ts   # API middleware
│   ├── recipe-scraper.ts # Recipe scraping logic
│   └── recipe-service.ts # Recipe CRUD operations
├── routes/             # File-based routing
│   ├── api/            # API endpoints
│   │   ├── auth/       # Authentication routes
│   │   ├── recipes/    # Recipe CRUD routes
│   │   └── tags/       # Tag management routes
│   ├── recipe/         # Recipe detail pages
│   ├── dashboard.tsx   # Main dashboard
│   ├── login.tsx       # Login page
│   ├── register.tsx    # Registration page
│   └── index.tsx       # Landing page
└── app.tsx             # Root application component
- POST /api/auth/register- Create new user account
- POST /api/auth/login- Authenticate user
- POST /api/auth/logout- Sign out user
- GET /api/auth/me- Get current user
- GET /api/recipes- List user's recipes (with filtering)
- POST /api/recipes- Create new recipe
- GET /api/recipes/:id- Get recipe by ID
- PUT /api/recipes/:id- Update recipe
- DELETE /api/recipes/:id- Delete recipe
- POST /api/recipes/scrape- Scrape recipe from URL
- GET /api/tags- List all tags
- POST /api/tags- Create new tag
- DELETE /api/tags/:id- Delete tag
The app can automatically extract recipe data from most recipe websites using:
- JSON-LD structured data (preferred)
- Microdata markup (fallback)
- HTML parsing (fallback)
Supported recipe properties:
- Title and description
- Ingredients and instructions
- Cooking times (prep, cook, total)
- Servings, difficulty, cuisine
- Images and nutrition info
- Connect your repository to Vercel
- Set environment variables in Vercel dashboard
- Deploy
The app can be deployed to any Node.js hosting platform. Make sure to:
- Set all required environment variables
- Ensure your Turso database is accessible
- Run database migrations if needed
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
MIT License - see LICENSE file for details
If you encounter any issues or have questions:
- Check the existing issues on GitHub
- Create a new issue with detailed information
- Include error messages and steps to reproduce
Built with ❤️ using SolidStart and modern web technologies.