Forkcast is a web application that digitizes and simplifies meal planning. Instead of juggling paper lists, it combines a drag-and-drop weekly calendar with a smart shopping list, recipe discovery, and a small social layer around friends.
| Dashboard | Weekly Schedule | Shopping List |
|---|---|---|
![]() |
![]() |
![]() |
| Discovery | Friends | Cooking |
|---|---|---|
![]() |
![]() |
![]() |
- Interactive weekly calendar as the core of the app.
- Drag & drop recipes onto a weekday.
- Categorize each entry: breakfast, lunch, dinner, or a free-text label (e.g. "Snack").
- Portions scale ingredient amounts to the number of people.
- Generated automatically from the weekly plan.
- Identical ingredients across recipes (e.g. onions) are merged and summed.
- Stock check: tick off or reduce quantities for items already at home.
- Home page acts as an inspiration feed with a daily highlight.
- Friend network: add friends by username, send/accept/decline requests.
- Privacy: each user chooses whether their weekly plan is public (visible to friends) or private.
- Spoonacular API as recipe data source, with detailed ingredients and nutrition.
- Search with filters; favorites and per-recipe ratings.
- Allergy / dietary filters applied to recommendations.
- 9 UI languages incl. right-to-left (Arabic, Hebrew).
Monorepo with two independently deployed apps:
| Part | Stack | Deploy |
|---|---|---|
frontend/ |
Nuxt 4 (Vue 3), Pinia, TailwindCSS 4 + DaisyUI, i18n | Static site → GitHub Pages |
backend/ |
Express 5, better-sqlite3, JWT, Spoonacular | Docker image → GHCR |
The frontend is a static SPA: it talks to the backend REST API at /api, holds the
JWT in sessionStorage, and renders the dashboard client-side only. The backend owns
auth, the SQLite database, recipe caching from Spoonacular, and email (verification /
password reset).
sommerprojekt-wmc-forkcast/
├── frontend/ # Nuxt 4 client
├── backend/ # Express REST API + SQLite
├── .github/ # CI: Pages deploy, backend Docker build
└── erd.puml # entity-relationship diagram source
Run the backend and frontend in two terminals.
# 1. Backend (REST API on :3000)
cd backend
cp example.env .env # then fill in JWT_SECRET, SPOONACULAR_API_KEY, ...
npm install
npm start
# 2. Frontend (Nuxt dev server on :8080 — matches the backend's default CORS_ORIGIN)
cd frontend
npm install
npm run dev -- --port 8080The frontend reads the API base URL from API_BASE_URL (defaults to
http://localhost:3000/api), so no override is needed with the backend on :3000.
See backend/README.md and frontend/README.md for details.
- Frontend —
.github/workflows/deploy-nuxt.yamlbuilds the static site (npm run generate) and publishesfrontend/.output/publicto GitHub Pages on every push tomain. Base URL:/sommerprojekt-wmc-forkcast. - Backend —
.github/workflows/backend-docker.ymlbuilds and pushes a Docker image toghcr.io/<owner>/forkcast-backendon changes underbackend/.
Kerimcan Yagci, Lukas Grünzweil, Erik Reitbauer, Nico Haider
https://coolors.co/e8f1f2-b3efb2-7a9e7e-31493c-001a23
Core tables: User, Friend, FriendRequest, CalenderEntry, Recipe,
RecipeDetails, RecipeIngredient, RecipeInstruction, RecipeRating,
FavoriteFood, FilterGroup, Filter.





