╔══════════════════════════════════════════════════════════════════╗
║ ║
║ ██╗ ███████╗████████╗███████╗ ██████╗ ██████╗ ██████╗ ██╗ ██╗ ██╗ ║
║ ██║ ██╔════╝╚══██╔══╝██╔════╝ ██╔════╝██╔═══██╗██╔══██╗██║ ██╔╝ ╚██╗██╔╝ ║
║ ██║ █████╗ ██║ ███████╗ ██║ ██║ ██║██║ ██║█████╔╝ ╚███╔╝ ║
║ ██║ ██╔══╝ ██║ ╚════██║ ██║ ██║ ██║██║ ██║██╔═██╗ ██╔██╗ ║
║ ███████╗███████╗ ██║ ███████║ ╚██████╗╚██████╔╝██████╔╝██║ ██╗██╗██╔╝ ██╗ ║
║ ╚══════╝╚══════╝ ╚═╝ ╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═╝ ║
║ ║
╚══════════════════════════════════════════════════════════════════╝
An Overcooked-inspired co-op cooking chaos game — built with Next.js & Phaser 3
🧑🍳 P1: WASD + F 🧑🍳 P2: Arrows + Enter ⏱ 3 Minutes 💰 Score Big!
Let's Cook! is a frantic, co-operative top-down cooking game where two players must work together in a chaotic kitchen to prep ingredients, assemble dishes, and serve orders — all against the clock.
No talking. No mercy. Only salads.
Inspired by the legendary Overcooked series, rebuilt from scratch using web technologies.
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 🥬 Pick Up │────▶│ 🔪 Chop It │────▶│ 🍽️ Plate It │────▶│ ⭐ Serve It │
│ Ingredient │ │ (hold key) │ │ + Assemble │ │ for Points! │
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
The only recipe (for now):
🥗 SALAD = Chopped Lettuce + Chopped Tomato → Plate → Serving Window
Every order has a countdown timer. Serve fast for bonus points. Let orders expire and cry.
# Clone the kitchen
git clone https://github.com/your-username/lets-cook.git
cd lets-cook
# Stock the pantry
npm install
# Fire up the stove
npm run devThen open http://localhost:3000 and start cooking.
| Action | Key |
|---|---|
| Move | W A S D |
| Interact / Pick Up / Drop | F |
| Chop Ingredient | Hold F at chopping board |
| Action | Key |
|---|---|
| Move | ↑ ↓ ← → |
| Interact / Pick Up / Drop | Enter |
| Chop Ingredient | Hold Enter at chopping board |
| Action | Key |
|---|---|
| Quit to Menu | ESC or QUIT button |
| Play Again (Game Over) | Space or PLAY AGAIN button |
- Orders appear on the right side — each has a countdown timer bar.
- Grab ingredients from the colored stations (green = lettuce, red = tomato).
- Place on a chopping board, then hold your interact key to chop. Let go = stops chopping.
- Pick up a plate from the plate station, then interact with counters to add chopped ingredients.
- Run to a Serving Window (★ SERVE ★) and interact to deliver.
- Score: 100 pts per order + up to 50 speed bonus points.
- 3 minutes on the clock — then time's up!
- If an order expires, you get nothing. Don't let that happen.
| Score | Rating |
|---|---|
| 1000+ | ⭐⭐⭐ Master Chef |
| 500–999 | ⭐⭐ Sous Chef |
| 0–499 | ⭐ Kitchen Apprentice |
| Layer | Tech |
|---|---|
| Framework | Next.js 15 (App Router) |
| Game Engine | Phaser 3.90 |
| Language | TypeScript 5 |
| Styling | Tailwind CSS |
| Physics | Phaser Arcade Physics |
| Graphics | Procedurally generated (canvas) |
lets_cook/
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── page.tsx # Home / landing
│ │ └── game/page.tsx # Game page
│ ├── components/
│ │ └── GameComponent.tsx # Phaser ↔ React bridge
│ └── game/
│ ├── config.ts # Phaser game config
│ ├── constants.ts # Game constants & colors
│ ├── scenes/
│ │ ├── BootScene.ts # Initialization
│ │ ├── MenuScene.ts # Main menu + rules
│ │ ├── GameScene.ts # Core gameplay
│ │ └── UIScene.ts # HUD overlay
│ ├── objects/
│ │ ├── Chef.ts # Player character
│ │ ├── Station.ts # Kitchen stations
│ │ ├── ChoppingBoard.ts
│ │ └── Ingredient.ts
│ └── systems/
│ └── OrderSystem.ts # Order & scoring logic
└── public/
npm run dev # Dev server with hot reload (localhost:3000)
npm run build # Production build
npm run start # Serve production build
npm run lint # ESLint╔══════════════════════════════════════════════════════╗
║ [🥬] [ ] [🍅] [ ] [ ] [🔪] [ ] [🔪] [ ] [🍽️] ║
║ ║
║ [⭐SERVE] ║
║ ║
║ [ ][ ][ ][ ][ ][ ][ ][ ][ ] [⭐SERVE] ║
║ COUNTER ISLAND ║
║ ║
║ [🥬] [ ] [🍅] [ ] [ ] [🔪] [ ] [🔪] [ ] [🍽️] ║
╚══════════════════════════════════════════════════════╝
🔵 P1 spawns top-left 🟠 P2 spawns bottom-left
The easiest way to deploy is with Vercel:
npx vercelOr connect your GitHub repo to Vercel for automatic deploys on every push.
Made with 🔥 and way too much stress
The kitchen never sleeps. Neither should you.