Food Tracker is a pnpm/Turborepo monorepo. The existing Next.js application lives in apps/web and deploys to Cloudflare Workers through OpenNext.
See apps/mobile/README.md for the Swift app and docs/mobile-sync.md for the authenticated offline-sync contract.
apps/
web/ Next.js, OpenNext, Wrangler, D1 migrations, and web assets
mobile/ Native Apple application
Run pnpm install once at the repository root. Existing root commands such as pnpm dev, pnpm build, pnpm deploy, and the pnpm db:* scripts continue to target the web application. To run a web-only command directly, use pnpm --filter @food-tracker/web <command>.
Have a look at the project plan to get an overview of the project.
Tip
This template is brought to you by 👉 AgenticDev 👈 - where we help businesses automate operations and boost productivity through custom AI implementations. Just like this open-source project demonstrates technical excellence, we deliver:
- Process automation with LLM-powered workflows
- AI strategy consulting for sustainable scaling
- Custom SaaS development using cutting-edge stacks
Hundrets of developers already trust our codebase - Just Imagine what we could build for your business.
- 🔐 Authentication with Lucia Auth
- 📧 Email/Password Sign In
- 📝 Email/Password Sign Up
- 🔑 WebAuthn/Passkey Authentication
- 🌐 Google OAuth/SSO Integration
- 🔄 Forgot Password Flow
- 🔒 Change Password
- ✉️ Email Verification
- 🗝️ Session Management with Cloudflare KV
- 🤖 Turnstile Captcha Integration
- ⚡ Rate Limiting for Auth Endpoints
- 🛡️ Protected Routes and Layouts
- 📋 Session Listing and Management
- 🔒 Anti-Disposable Email Protection
- 💾 Database with Drizzle and Cloudflare D1
- 🏗️ Type-safe Database Operations
- 🔄 Automatic Migration Generation
- 💻 SQLite for Local Development
- ⚡ Efficient Data Fetching
- 🔍 Type-safe Queries
- 📨 Email Service with React Email and Resend or Brevo
- 🎨 Beautiful Email Templates
- 👀 Email Preview Mode
- 🔧 Local Email Development Server
- 📬 Transactional Emails
- ✉️ Email Verification Flow
- 📱 Responsive Email Templates
- 🚀 Deployment with Github Actions
- ⚙️ Automatic Deployments
- 🔐 Environment Variables Management
- 📦 Database Migrations
- 🔄 Comprehensive CI/CD Pipeline
- 🧹 Cache Purging
- ✅ Type Checking
- 🎨 Modern UI
- 🎨 Tailwind CSS
- 🧩 Shadcn UI Components
- 🌓 Dark/Light Mode
- 📱 Responsive Design
- ⚡ Loading States and Animations
- 🔔 Toast Notifications
- ⚙️ Settings Dashboard
- 🏠 Landing Page
- ✨ Beautiful Email Templates
- 👤 Profile Settings Page
- 🎯 Form Validation States
- 💳 Credit Billing System
- 💰 Credit-based Pricing Model
- 🔄 Monthly Credit Refresh
- 📊 Credit Usage Tracking
- 💳 Stripe Payment Integration
- 📜 Transaction History
- 📦 Credit Package Management
- 💸 Pay-as-you-go Model
- 📈 Usage Analytics
- 👑 Admin Dashboard
- 👥 User Management
- ✨ Validations with Zod and React Hook Form
- 🛡️ Type-safe Form Validations
- 🔒 Server-side Validations
- 🔍 Client-side Validations
- 🧹 Input Sanitization
- ⚡ Real-time Validation
- 🔄 Form State Management
- 👨💻 Developer Experience
- 🧪 Local Development Setup
- 📘 TypeScript Support
- 🔍 ESLint Configuration
- ✨ Prettier Configuration
- 🔐 Type-safe Environment Variables
- 🏗️ Cloudflare Types Generation
- 🤖 AI-powered Development with Cursor
- 📚 Comprehensive Documentation
- 📐 Project Structure Best Practices
- ⚡ Edge Computing
- 🌍 Global Deployment with Cloudflare Workers
- 🚀 Zero Cold Starts
- 💨 Edge Caching
- ⚛️ React Server Components
- 🖥️ Server-side Rendering
- 💾 Edge Database with D1
- 🗄️ Session Storage with KV
- ⚡ API Rate Limiting
- 🏢 Multi-tenancy Support
- 👥 Organization Management
- 👤 User Roles and Permissions
- 🔍 Tenant Isolation
- 🔄 Resource Sharing Controls
- 📊 Per-tenant Analytics
- 🔐 Tenant-specific Configurations
- 💼 Team Collaboration Features
- Add an eslint rule to check for unused imports and exports
- Add an eslint rule to check for unused variables and functions
- Upgrade to Tailwind 4 and fix the errors and visual regressions. Already started here https://github.com/LubomirGeorgiev/cloudflare-workers-nextjs-saas-template/tree/tailwind-4-upgrade
- Update Meta SEO tags 🔍
- Dynamic OpenGraph images 📸
- sitemap.xml 📄
- robots.txt 📄
- Multi-language support (i18n) 🌐
- Notifications 🔔
- Webhooks 🔗
pnpm install- Copy
apps/web/.dev.vars.exampletoapps/web/.dev.varsand fill in the values. - Copy
apps/web/.env.exampletoapps/web/.envand fill in the values. pnpm db:migrate:local- Creates a local SQLite database and applies migrationspnpm dev- Open http://localhost:3000
After making a change to apps/web/wrangler.jsonc, run pnpm cf-typegen to generate the new types.
- Go to
apps/web/src/constants.tsand update it with your project details - Update
.cursor/rules/001-main-project-context.mdcwith your project specification so that Cursor AI can give you better suggestions - Update the footer in
apps/web/src/components/footer.tsxwith your project details and links - Optional: Update the color palette in
apps/web/src/app/globals.css - Update the metadata in
apps/web/src/app/layout.tsxwith your project details
- Create D1 and KV namespaces
- Set either
RESEND_API_KEYorBREVO_API_KEYas a secret in your Cloudflare Worker depending on which email service you want to use. - Create a Turnstile catcha in your Cloudflare account, and set the
NEXT_PUBLIC_TURNSTILE_SITE_KEYas a Github Actions variable. - Set
TURNSTILE_SECRET_KEYas a secret in your Cloudflare Worker. - Update
apps/web/wrangler.jsoncwith the new database and KV namespaces, environment variables, and account ID. The Worker name must matchservices->[0]->servicein the same file. - Go to https://dash.cloudflare.com/profile/api-tokens and click on "Use template" next to "Edit Cloudflare Workers". On the next, page add the following permissions in addition to the ones from the template:
- Account:AI Gateway:Edit
- Account:Workers AI:Edit
- Account:Workers AI:Read
- Account:Queues:Edit
- Account:Vectorize:Edit
- Account:D1:Edit
- Account:Cloudflare Images:Edit
- Account:Workers KV Storage:Edit
- Zone:Cache Purge:Purge
- Add the API token to the Github repository secrets as
CLOUDFLARE_API_TOKEN - Add the Cloudflare account id to the Github repository variables as
CLOUDFLARE_ACCOUNT_ID - Optional: If you want clear the CDN cache on deploy, add
CLOUDFLARE_ZONE_IDto the Github repository variables for the zone id of your domain. This is the zone id of your domain, not the account id. - Push to the main branch
If you want to preview and edit the email templates you can:
pnpm email:dev- Open http://localhost:3001
- Edit the email templates in
apps/web/src/react-email - For inspiration you can checkout https://react.email/templates