个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证iPhone-first meal planning, recipes and grocery price tracking for a couple. Next.js 16, Supabase Postgres with RLS, Google Gemini; built with Claude Code.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Plan it, price it, cook it. An iPhone-first web app (installable PWA) that a couple uses every day to plan meals, cook from recipes, track grocery prices across stores and build the shopping list, with AI that reads recipes from photos and estimates nutrition.
Live: dialed-kitchen.vercel.app · Status: in daily use; all roadmap milestones shipped.
Try it: open the app and tap Try the demo: a shared demo kitchen with sample recipes, a planned week and price history, reset daily (how it's built).
I built Dialed Kitchen with Claude Code as an AI pair programmer. I owned the product and the engineering decisions:
Inside the product, AI is used where it earns its place, with guard rails: Google Gemini reads recipe photos and estimates nutrition (see AI features).
| Layer | Choice | Why |
|---|---|---|
| UI and server | Next.js 16 (App Router), React 19 Server Components and Server Actions, TypeScript (strict) | One codebase; data access and secrets stay on the server, and little JavaScript ships to phones |
| Styling | Tailwind CSS v4 with named design tokens | One source of truth for colors; text contrast is checked by a test |
| Database and auth | Supabase: Postgres, row-level security, Google sign-in (PKCE) | Real relational data; the database itself enforces who can see what |
| AI | Google Gemini (server-side only), structured JSON output, model fallback chain | Reads recipe photos and estimates nutrition on the free tier |
| Validation | Zod at every trust boundary: forms, URL parameters, fetched pages, AI replies, database rows | Types aren't validation |
| Hosting and CI | Vercel (Node 24), GitHub Actions, Dependabot | Every push is checked; every merge to main deploys |
Request flow, with a check at each layer: UI → Server Action (Zod validation and sign-in check) → server-only data access (the user's own session, never a service key) → Postgres row-level security, the final guard even if app code has a bug.
Code layout: features/<feature>/ holds each feature's components, actions (writes), queries (reads) and schemas. lib/ holds pure, unit-tested logic (pricing, units, nutrition, plan rules). lib/server/ holds server-only infrastructure. supabase/migrations/ holds versioned SQL.
households ──< household_members household_invites (hashed, single-use, 7 days)
│
├──< stores (fixed six) ──< item_prices >── items ──< grocery_list_items
├──< pantry_items (In stock) │
└──< recipes ──< recipe_ingredients ──────────┘
└──< meal_plan_entries
ai_requests (per-person daily AI limit)
Every table carries household_id with row-level security. Composite foreign keys ((id, household_id)) stop rows from pointing at another household's data. Unit price and best price are computed from history, never stored, so they can't go stale. The week's shopping list, its cost and the meal-prep totals come from one SQL function, so they always agree.
household_id), and check constraints for every invariant (46 in all).| Feature | How |
|---|---|
| Recipe from photos | Up to 3 photos, resized on the phone, sent to Gemini (multimodal) with a JSON schema; the answer is validated with Zod and fills an editable form; nothing saves on its own |
| Nutrition estimate | Gemini estimates per-serving calories and macros from the ingredients; any impossible value rejects the whole estimate |
| Reliability | A chain of free models: overloaded or slow models fall through to the next, a bad key stops at once, with per-model timeouts and a total time budget |
| Cost control | A shared 40-a-day limit per person, counted in Postgres |
Requires Node.js 24 and a Supabase project.
cp .env.example .env.local # fill in the Supabase URL and publishable key (and optionally a Gemini key)
npm install
npx supabase link --project-ref <your-project-ref>
npx supabase db push # applies the migrations in supabase/migrations
npm run dev # http://localhost:3000
npm test # unit and database tests
npm run lint && npm run typecheck && npm run build
See SECURITY.md.
Copyright © 2026 Tyler Clark. All rights reserved. The code is public to be read and evaluated; see LICENSE.