The go to app for all of your bartending, barkeeping, and mixologist needs.
Live Demo: https://bar-tender-app.vercel.app
- Next.js 16 - React framework with App Router
- Convex - Serverless database and API
- Clerk - User authentication (proxy.ts for Next.js 16)
- shadcn UI - Accessible component library
- Tailwind CSS - Styling
- Inventory Tracker - CRUD for ingredients with quantity, unit, and category
- Drinks Catalog - Browse 100+ IBA official cocktails
- What Can I Make? - Filter drinks by your current inventory
- Drink Detail - Ingredients, preparation steps, collapsible history
- Make This Drink - Subtract ingredients from inventory
- Saved Drinks - Save favorites for quick access
- Dark/Light Mode - Theme toggle in header
npm installnpx convex devThis will:
- Prompt you to log in or create a Convex account
- Create a new project or link to existing
- Generate
convex/_generatedand add env vars to.env.local
- Create an account at clerk.com
- Create a new application
- Add your keys to
.env.local:NEXT_PUBLIC_CLERK_PUBLISHABLE_KEYCLERK_SECRET_KEY
- In Clerk Dashboard → JWT Templates → New template → Convex
- Copy the Issuer URL
- In Convex Dashboard → Settings → Environment Variables, add:
CLERK_JWT_ISSUER_DOMAIN= your Clerk Issuer URL
After Convex is running, open the Convex Dashboard and run the seed:seedDrinks action to populate the IBA cocktails catalog.
npm run devOpen http://localhost:3000.
Copy .env.example to .env.local and fill in:
NEXT_PUBLIC_CONVEX_URL= # From `npx convex dev`
CONVEX_DEPLOYMENT= # From `npx convex dev`
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=
CLERK_SECRET_KEY=
NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
When deploying to Vercel, add @vercel/analytics for analytics:
npm install @vercel/analyticsThen add <Analytics /> from @vercel/analytics/react to your root layout.
npm run dev- Start development servernpm run build- Build for productionnpm run start- Start production servernpm run lint- Run ESLintnpm run test- Run Vitest unit testsnpm run test:e2e- Run Playwright E2E tests
src/
├── app/ # Next.js App Router pages
├── components/ # React components
├── lib/ # Utilities
└── providers/ # Context providers
convex/
├── schema.ts # Database schema
├── ingredients.ts # Inventory CRUD
├── drinks.ts # Drinks queries
├── savedDrinks.ts # Saved drinks
└── seed.ts # IBA drinks seeder