An interactive food discovery platform where users swipe through restaurant and recipe suggestions that adapt to their personal tastes.
Binge-SWE/
└── my-app/ # Next.js 14 (App Router, TypeScript, Tailwind, Supabase)
Most food discovery platforms rely on manual searching. Binge introduces a discovery-first approach: users swipe through curated food cards and the system learns from their reactions.
The platform adapts to:
- Likes / skips / super-likes
- Dietary restrictions and allergies
- Cuisine preferences
- Past activity
| Feature | Status |
|---|---|
| Swipe-based food discovery | In progress |
| Personalized onboarding | Planned |
| Restaurant recommendations | Planned |
| Recipe discovery | Planned |
| Favorites system | Planned |
| AI food assistant | Planned |
┌──────────────────────────────────────────┐
│ Next.js (my-app/) │
│ │
│ Pages / Components (React) │
│ ↕ │
│ /app/api/* (Next.js Route Handlers) │
│ ↕ │
│ Supabase JS client (server-side) │
└──────────────────┬───────────────────────┘
│
┌────────────▼────────────┐
│ Supabase (PostgreSQL) │
│ │
│ profiles │
│ user_preferences │
│ foods │
│ swipes │
│ favorites │
│ RLS enabled │
└─────────────────────────┘
| Method | Route | Description |
|---|---|---|
| GET | /api/users/me |
Get current user profile |
| PUT | /api/users/me |
Update profile |
| GET | /api/users/me/preferences |
Get dietary/cuisine preferences |
| PUT | /api/users/me/preferences |
Save preferences |
| POST | /api/swipes |
Record a swipe |
| GET | /api/swipes |
Swipe history (paginated) |
| GET | /api/favorites |
List favorites |
| POST | /api/favorites |
Add a favorite |
| DELETE | /api/favorites/:foodId |
Remove a favorite |
| GET | /api/recommendations |
Get personalized food recommendations |
git clone https://github.com/GGlencoe/Binge-SWE
cd Binge-SWE/my-app- Create a free project at supabase.com
- Open SQL Editor in your Supabase dashboard
- Run each file in
my-app/db/in order (001 → 005) - Optionally run
db/seed.sqlfor sample data
cp .env.local.example .env.local
# Fill in your Supabase credentials (see .env.local.example for field descriptions)npm install
npm run dev # http://localhost:3000| Command | Description |
|---|---|
npm run dev |
Start local development server at http://localhost:3000 |
npm run build |
Build for production |
npm run start |
Start production server |
npm run lint |
Run ESLint |
npm run seed-recipes |
Fetch recipes from Spoonacular and upsert into Supabase |
npm run seed-recipes -- --dry-run |
Preview what would be seeded without writing to the DB |
Spoonacular's free tier allows 50 API points per day. The script requests the maximum (100 recipes per cuisine) and lets Spoonacular's daily quota naturally stop it with a 402 — no point estimation needed. Run once daily via the GitHub Action.
Use --dry-run to verify output without consuming your write quota or hitting the database. The flag still fetches from Spoonacular, so avoid running it repeatedly.
The script checks how many Spoonacular recipes are already in the DB before fetching. If the count is at or above the limit (default: 500), it exits early without making any API calls. Override the limit with the SEED_MAX env var:
SEED_MAX=1000 npm run seed-recipesDuplicate recipes are also handled at the DB level — upsert on external_id ensures the same recipe is never inserted twice regardless of how many times you run the script.
| Area | Technology |
|---|---|
| Framework | Next.js 14 (App Router) |
| Language | TypeScript |
| Styling | Tailwind CSS |
| Animation | Framer Motion |
| Database | PostgreSQL via Supabase |
| Auth | Supabase Auth |
| Icons | Lucide React |
- Build a modern, engaging food discovery experience
- Apply recommendation system concepts
- Practice full-stack development with Next.js and Supabase
- Learn collaborative software development
https://github.com/GGlencoe/Binge-SWE
Developed as part of CSCI-3300 Software Engineering at Saint Louis University.
TBD