Overview
What It Does
- Pulls her numbers from a Google Sheet she already uses, read-only, via a service account she controls.
- Hands them to an AI model (Claude or GPT, her choice) with a fixed system prompt that locks the output format and forbids invented explanations, plus a plain-English instructions box she can rewrite herself.
- Renders and emails the report as a clean HTML summary to whatever recipient list she's configured.
- Logs every run, scheduled or manual, sent or failed, so she can see history without asking me.
Designed Around Her Constraints, Not Mine
- Every credential lives in her settings screen, not in my code. Google service account key, email provider key, AI API keys: she pastes them in, they're stored write-only, and each one has its own "Test connection" button so she can verify it works without reading a line of code.
- The AI instructions field is deliberately plain English, sitting on top of a fixed system prompt she can't break: whatever she types, the output format and anti-hallucination guardrails hold.
- Access is locked down at the edge, not in application code, so there's no login system for her to manage or misconfigure.
Infrastructure I Own
- A single Cloudflare Worker serves the static settings UI and the API from one deployment: no separate frontend host, no extra moving parts for a non-technical client to worry about.
- Cloudflare D1 stores settings and run history; no database server to manage.
- A Cron Trigger fires hourly, and the Worker checks her configured send day/time against it, so she can change delivery schedule from the UI without ever needing a redeploy.
- Deliberately built for the $5 tier: the free plan's CPU and subrequest caps aren't safe for an unattended job chaining a sheet read, an AI call, and an email send, so I documented Workers Paid as a hard prerequisite up front rather than letting it fail silently in production.
Why a Custom Build Was the Right Call
Outcome
"Great experience working with Youssef. He was responsive, clear, and professional throughout the project. He explained the technical setup well and delivered the automation as discussed. I would be happy to work with him again."