Set up your free household app
Your Grok Bot walks you through it, one step at a time. You’ll need a Grok Bot plus free GitHub, Cloudflare and Supabase accounts. The app runs in your own accounts, and it’s free.
What you’ll have
- Your own app, in your own free accounts, that everyone at home opens on their own device.
- Your Grok Bot connected to the app, so it hears when you ask for a new week.
- Create this week’s meals. Recipes and a store list after approval.
- Add other people with an invite link when you want them. No codes to type.
- Just you? Approve on your own. Sharing? Everyone approves before the week locks.
- Cook this week and plan next when you’re ready.
Add other people
Optional when more than one person should vote. Share the invite link. Links only. They open that invite in any browser, on any device, and sign up with their own email.
Prefer to paste the prompt yourself?
Use this template or fork https://github.com/timdoes/bot-my-meals.
Paste this to your Grok Bot — never invent grocery prices; cart adds only where the store actually supports them.
Set up Bot My Meals for our household. Use only free Cloudflare Workers + Supabase Free — no localStorage/demo-only path.
Do this, one decision at a time if you need me to click:
1) Help me make my own copy of the app: on GitHub, use the template (or fork) https://github.com/timdoes/bot-my-meals into my own GitHub account. Then help me create my own free Cloudflare account and deploy my copy as a Worker named bot-my-meals via Workers Builds (Cloudflare dashboard → connect my GitHub repo). Terminal npm run deploy only if I already develop. Everything runs in my own GitHub, Cloudflare and Supabase accounts. Never deploy to or change the original timdoes repo, its Worker, or its Supabase project.
2) Create my own new Supabase Free project.
3) Run every file in supabase/migrations/ in filename order (SQL editor or supabase db push).
4) Turn on Email sign-in. Turn Confirm email OFF so people create an account and stay in the app. It works in a browser or installed on any device. Set Site URL to our HTTPS origin, and add /auth/callback and /login/new-password (our workers.dev or our own domain — not {handle}.botmymeals.com). People use email + password in the app — not a magic link. If a password minimum is shown, set it to at least 8. Optional later: custom SMTP + a code in the email template ({{ .Token }}) for sign-in codes. Do not turn on Apple or Google for Install. Passkeys later. Do not require custom SMTP to install.
5) Set only these two public Worker env vars, then redeploy: NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_ANON_KEY. Never use the service-role key.
6) Give me the HTTPS link, walk me through adding it to the home screen or installing it from the browser on any device, create the household Admin, walk house setup (required Wake your Bot before Create this week's meals), then add other people (share the /join/<token> link; House → People still works).
Sign-in: Create account or Sign in with email and password in the app. You stay in the app. Do not finish sign-in by tapping a link in Mail.
After Create household, walk through house setup (no Seed/sample week):
1) Invite people — share https://<our-host>/join/<token> (invite links only). Each person opens that invite in any browser, on any device, then creates their own account with their email and password, or signs in. There is no shared household password.
2) How many people? — household size stepper.
3) Which nights? — Sun–Sat toggles, all on by default. Easy off per day.
4) Optional: adjust plates on On nights (guests / smaller nights).
5) Stores — enter zip/postal, multi-select regional grocers, or type in a store. No default stores. Labels only — never invent grocery prices; cart adds only where the store actually supports them.
6) Optional weekly meal budget (or skip).
7) Required: create a routine named Wake on app event with a webhook trigger. Copy Webhook URL (the panel may say POST to) and the sender key if the panel shows one. Paste them into House → Wake your Bot (or Worker secrets BOT_WAKE_WEBHOOK_URL and BOT_WAKE_WEBHOOK_KEY). Never NEXT_PUBLIC for these. After save, do not show the full secret again. The Worker sends the key as Authorization: Bearer. Without this, Install is incomplete. Webhook wake only — the app POSTs on week changes so the Bot updates the site. Do not create Adaptive / @every 1h / @every 6h routines.
8) Then tap Create this week's meals — app writes a ballot request and shows Waiting for your Bot… until the ballot appears. Copy paste for your Grok Bot is DIY fallback only (collapsed).
Empty This week: Finish house setup (if incomplete), Create this week's meals / Waiting for your Bot… (if setup done), or the dual-approve ballot when it lands. Wake is required before Create this week's meals. When House → Wake your Bot / BOT_WAKE is configured, Waiting is wake / Your bot was notified only. Without the URL, Install is incomplete — do not create Adaptive / @every 1h / @every 6h routines.
After the first ballot is live, the house may also plan next week while cooking this week. Day-1 Install is still one cooking week — do not create a planning week during setup.
Cap: one cooking week + one planning week. Do not open a third week. Home always opens on the cooking week. Change week with a horizontal swipe on the date strip (or the optional edge ‹ ›). Title row labels stay This week / Next week / a past date range — they are status, not the switcher. There is no chip row. The strip continuum is finished weeks ↔ cooking ↔ planning when that week exists; it cannot open a week-after-next. Title and strip sit flush (0 gap). Past via the strip is titles only; House → Past weeks still lists the same weeks and opens that week in the strip. With no planning week yet, a future swipe or › from cooking creates Next week, lands on Next week, and shows People per night first — all 7 nights, Off / Solo / Couple / Family steppers, prefill from House defaults, optional Special instructions on the same step (empty OK; week-scoped). Save requires at least one night with plates above zero. Then that week’s ballot / Ask Bot / Waiting. Toast after swipe-create: Next week started. Set people per night. House → People per night stays the template for new weeks only — do not write this week’s plates or Special instructions onto House defaults. Used when you start a new week. To change nights on This week or Next week, open that week and tap Edit nights. Saving House defaults does not resize/rewrite open cooking or planning week headcounts. From planning, a further future swipe cannot open a week-after-next. Waiting, Lock, recipes, shopping, Check now, and Wake are week-scoped. Waiting and shopping titles name This week or Next week (Shopping · This week / Shopping · Next week). Each week has its own shopping list — never merge cooking + planning.
On This week or Next week (when edit is allowed), the title row has Edit nights on the same line as the week title, right-aligned — not a free-floating chrome chip below the title. It opens week-scoped People per night for that week (same control language as the empty Next week gate). The Locked chip still hugs the title. Date strip stays flush under the title row (0 gap). Hidden when locked, past, or the empty People gate is already the body. It works after a ballot or meals exist (re-open), not only the empty planning gate. Save updates that week’s plates/meals only — it does not rewrite House defaults. A locked week has no Edit nights until Unlock on the viewed week. Past weeks: no Edit nights. Special instructions stay planning-only on that editor (omit on cooking unless the week already has a note). After Edit nights Save, re-saved night_headcounts (plus special_instructions on planning) are what Meal Ops / the bot reads for that week_id. Closing Edit nights or the People gate returns to that week with a Waiting card immediately when the bot still has work (ballot, blank new night, portions, swap). A new blank night shows Waiting for a meal… (not “No dinner”).
Check now / Get recipes now shows Checking… / Waking… until the request settles, then Your bot was notified… (recipes keep the recipes-and-list line). Soft-fail re-enables the button. After a successful wake, ~30s cooldown (Bot notified) so another tap is a no-op. While work is pending, the week refetches briefly then Waiting leaves when content is ready. When Wake / BOT_WAKE is configured, Waiting is wake / Your bot was notified only. Wake is required — without the URL, Install is incomplete. Do not create Adaptive / @every 1h / @every 6h routines.
Saved → Request for next week always targets the planning week. Create that week if it is missing. People per night first (optional Special instructions) before that week’s ballot. Confirm Requested for next week. Do not request a week after next.
On wake, sync ballot / recipes / shopping list / setup for the week that needs work; stay quiet if nothing changed. Do the work when needs_work is true on any open week, including fill_pending after lock when that week's recipes or shopping list are still empty. Fulfill by week. Do not treat a settled cooking week as idle if the planning week still needs work. Stay silent when nothing changed — no “no update” message. When Wake is configured, Waiting is wake / Your bot was notified only. Wake is required — without the URL, Install is incomplete. Do not create Adaptive / @every 1h / @every 6h routines.
Rules: easy for anyone; never invent grocery prices; cart adds only where the store actually supports them (don’t claim Smith’s or any store cart add unless it’s real). Do NOT invent prices. Do NOT claim unsupported cart features. Don’t stop at “try it without Supabase.” Worker name stays bot-my-meals.