Recipeli is a web-first recipe app inspired by the strongest Beli mechanic: expressing taste through rankings. It pairs a personal ranking board with social discovery, cookbook saving, and curated collections.
- Next.js 16 (App Router)
- React 19 and TypeScript (strict)
- Tailwind CSS v4
- NextAuth (credentials) for authentication
- SQLite via
better-sqlite3(database atdata/recipeli.db)
- Email/password auth with per-user profiles (src/app/login/page.tsx, src/app/profile/page.tsx)
- Landing page with ranking-first product pitch (src/app/page.tsx)
- Discovery and trending feeds (src/app/discover/page.tsx, src/app/explore/page.tsx)
- Personal ranking flow with pairwise comparisons (src/components/rank-flow.tsx, src/components/comparison-panel.tsx, src/lib/ranking.ts)
- Recipe detail pages with save, like, and ranking actions (src/app/recipes/[slug]/page.tsx, src/components/recipe-actions.tsx)
- Cookbook of saved recipes (src/app/cookbook/page.tsx, src/lib/cookbook.ts)
- User-curated collections (src/app/collections/page.tsx, src/app/collections/[id]/page.tsx, src/lib/collections.ts)
- Social graph: follow users, like recipes, view public profiles (src/app/u/[handle]/page.tsx, src/lib/social.ts)
- URL-assisted recipe submission with server-side import (src/app/submit/page.tsx, src/app/api/recipes/import/route.ts, src/lib/recipe-import.ts)
src/app/— App Router pages and REST-style API handlers undersrc/app/api/src/components/— shared React components (cards, nav, rank flow, action buttons)src/lib/— domain logic and SQLite access (db.ts, auth.ts, recipes.ts, ranking.ts, cookbook.ts, collections.ts, social.ts, recipe-import.ts, users.ts, password.ts)src/types/— type augmentations (e.g. NextAuth session)data/— SQLite database files (created at runtime)
npm install
npm run devThen open http://localhost:3000.
Environment variables needed for auth:
NEXTAUTH_SECRET— required by NextAuthNEXTAUTH_URL— e.g.http://localhost:3000in development
npm run dev— start the Next.js dev servernpm run build— production buildnpm run start— start the production servernpm run lint— ESLint (the main automated quality gate; no test script yet)
- Recipe imports run server-side and prioritize schema.org Recipe JSON-LD when available.
- If structured schema is missing, metadata and HTML heuristics provide best-effort field extraction.
- Imported recipes are persisted to the SQLite database alongside user-created recipes.
- Add automated tests around ranking, import, and social flows.
- Replace SQLite with a hosted database for multi-instance deployments.
- Expand social features (comments, activity feed, notifications).
- Richer recipe editing and media uploads on the submit flow.