Disclaimer: LLM Agents wrote the code and the bugs. The ideas and most of the wording in this blog series are mine, but edited by LLMs because I am an engineer, not a copywriter. I’ve reviewed it to ensure it sounds like me, but if you spot weird phrasing, blame the robot.
Prefer the short version? Start here: I Built a Family Planner We Actually Use (and It Costs £0/month)
I didn’t set out to build “an app”. I set out to stop losing the basics.
My brain can hold an entire backlog grooming session, the moving parts of a Cloudflare deployment, and six “good ideas” I’ll never ship. But it cannot reliably remember whether it’s PE kit day, whose turn it is to take the bins out, or what we said we were doing next Saturday.
Family life is a messy distributed system that doesn’t accept incident tickets.
Over the Christmas break I built a mobile-first weekly planner for my partner, my son, and me. The goal was to put the stuff we keep forgetting in one place, in a shape that matches how we actually talk about a week.
I set two constraints. It had to cost £0 (running on Cloudflare’s free tier) and I wanted to “vibe code” it using LLM agents. As an Engineering Lead, I know that “fast” usually means “unmaintainable mess” unless you set the rules first.
This is the stack, the “WeekDoc” rule, and how I forced an LLM to write code I actually wanted to own.

A weekly dashboard you can understand in ten seconds.
The “Boring” Stack
There are plenty of existing apps for this. Most come with a subscription, a data model I can’t control, and a roadmap I can’t influence.
I wanted full ownership for zero pence. The architecture is:
- Frontend: React + Vite + TypeScript
- API: Cloudflare Pages Functions
- Storage: Cloudflare KV
- Scheduled tasks: Cloudflare Workers (cron triggers)
It lives behind Cloudflare Zero Trust. Locally it works without it. In prod the backend picks up the user email from the access headers.
The WeekDoc Rule: One Document, No Drama
The biggest risk with AI-assisted coding is complexity creep. Agents love to glue new database tables onto the side, creating synchronization issues.
To prevent this I wrote the project “Constitution” before writing any code. It lives in AGENTS.md at the root of the repo.
The core law is the WeekDoc Rule:
The app edits one full JSON document per week. It saves via a full replacement
PUT.
One week equals one key in KV (week:2025-W01).
This isn’t the most scalable database design, but it is the right one for a family of three. The enemy here is complexity, not throughput. Treating the week as a single document eliminates partial update bugs entirely. We read the week, edit it in memory, and save the whole thing.
Managing the AI
“Vibe coding” often ends up being a mess of pasted code.
I treated the AI Agents (Codex/Cursor) like a really fast, Junior Engineer. My job was to write the specs and the guardrails, not the implementation details.
- Rules first.
AGENTS.mddefines the data structure and the optimistic concurrency (version numbers) required to prevent overwrite conflicts. - Code review. The AI implemented the types and the API, but I reviewed every PR.
- Architecture enforcement. If the AI tried to introduce a new state library, I pointed it back to the design docs.
This separation of concerns allowed us to move fast while keeping the codebase structure clean.
The Result
The repo is public here: github.com/mdugmore/family-planner-public.
One note: that public repo has no meaningful commit history. My original private repo’s history contained some personal data, so I made a clean public version instead. My plan is to converge the private and public repos over time so it becomes a truly open-source project and new enhancements can land publicly.
When someone asks “what’s on this week?”, the answer is “check the planner”. The mental load is gone and the hosting bill is £0.

Archive is explicit, with a small carry-over chooser.

Events plus optional overlays (school + bins).
Next I’ll explain how I realized I am not the user, and how my family broke the UI in under 20 seconds.
References
- Cloudflare Workers: https://workers.cloudflare.com/
- Cloudflare Pages: https://pages.cloudflare.com/
- OpenAI Codex: https://openai.com/codex/
- AGENTS.md: https://agents.md/