A comprehensive web application for the Pleasanton Unified School District's culinary department, featuring online ordering, reservations, custom requests, and a full admin dashboard.
- Online Menu & Ordering: Browse menu items, customize orders, and place orders online
- Reservations: Make dining reservations at any school location
- Custom Requests: Submit special meal requests
- Order Tracking: Track order status and history
- School Selection: Choose from multiple school locations
- User Profiles: Manage personal information and preferences
- Admin Dashboard: Comprehensive overview with analytics and statistics
- Order Management: View, update, and manage all orders
- Menu Management: Add, edit, and manage menu items and categories
- Reservation Management: Handle reservations and availability
- User Management: Manage user accounts and permissions
- Analytics: View sales reports and performance metrics
- Calendar Management: Block out availability and manage schedules
- Frontend: Next.js 15, React 19, TypeScript
- Styling: Tailwind CSS, shadcn/ui components
- Authentication: NextAuth.js with Google OAuth
- Database: PostgreSQL with Drizzle ORM
- Payments: Stripe integration
- Email: Resend for notifications
- Deployment: Vercel-ready
- Node.js 18+
- pnpm (recommended) or npm
- PostgreSQL database (Neon, Supabase, or self-hosted)
- Google OAuth credentials
- Stripe account (for payments)
- Resend account (for emails)
Create a .env.local file in the root directory with the following variables:
# Database
DATABASE_URL="postgresql://username:password@localhost:5432/pleasanton_culinary"
# NextAuth
NEXTAUTH_URL="http://localhost:3000"
NEXTAUTH_SECRET="your-nextauth-secret-key-here"
# Google OAuth
GOOGLE_CLIENT_ID="your-google-client-id"
GOOGLE_CLIENT_SECRET="your-google-client-secret"
# Stripe (for payments)
STRIPE_PUBLISHABLE_KEY="pk_test_your-stripe-publishable-key"
STRIPE_SECRET_KEY="sk_test_your-stripe-secret-key"
STRIPE_WEBHOOK_SECRET="whsec_your-stripe-webhook-secret"
# Email (Resend)
RESEND_API_KEY="your-resend-api-key"
# App Configuration
NEXT_PUBLIC_APP_URL="http://localhost:3000"-
Clone the repository
git clone <repository-url> cd culinary
-
Install dependencies
pnpm install
-
Set up environment variables
cp .env.example .env.local # Edit .env.local with your actual values -
Set up the database
# Push the schema to your database pnpm db:push # (Optional) Open Drizzle Studio to view/edit data pnpm db:studio
-
Run the development server
pnpm dev
-
Open your browser Navigate to http://localhost:3000
- Create a Neon account at neon.tech
- Create a new project
- Copy the connection string to your
.env.local - Run
pnpm db:pushto create tables
- Create a Supabase account at supabase.com
- Create a new project
- Get your database connection string
- Run
pnpm db:pushto create tables
- Go to Google Cloud Console
- Create a new project or select existing one
- Enable the Google+ API
- Create OAuth 2.0 credentials
- Add authorized redirect URIs:
http://localhost:3000/api/auth/callback/google(development)https://yourdomain.com/api/auth/callback/google(production)
- Copy Client ID and Client Secret to your
.env.local
- Create a Stripe account at stripe.com
- Get your API keys from the dashboard
- Set up webhooks for payment events
- Add keys to your
.env.local
- Push your code to GitHub
- Connect your repository to Vercel
- Add environment variables in Vercel dashboard
- Deploy
The app is compatible with any platform that supports Next.js:
- Netlify
- Railway
- DigitalOcean App Platform
- AWS Amplify
culinary/
├── app/ # Next.js app directory
│ ├── admin/ # Admin dashboard pages
│ ├── auth/ # Authentication pages
│ ├── menu/ # Menu and ordering
│ ├── reservations/ # Reservation system
│ ├── api/ # API routes
│ └── globals.css # Global styles
├── components/ # React components
│ ├── ui/ # shadcn/ui components
│ └── providers/ # Context providers
├── lib/ # Utility functions
│ ├── auth.ts # NextAuth configuration
│ ├── db.ts # Database connection
│ └── schema.ts # Database schema
├── hooks/ # Custom React hooks
├── public/ # Static assets
└── drizzle/ # Database migrations
pnpm dev- Start development serverpnpm build- Build for productionpnpm start- Start production serverpnpm lint- Run ESLintpnpm db:push- Push schema to databasepnpm db:studio- Open Drizzle Studio
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is licensed under the MIT License.
For support, email culinary@pleasantonusd.net or create an issue in the repository.
- Mobile app development
- Advanced analytics dashboard
- Integration with school management systems
- Multi-language support
- Advanced customization options
- Real-time order notifications
- Inventory management system