We built otto.agatefoundry.com to give Mark’s dog a daily photo journal and explore how much of a real application we could build using Cloudflare’s free allowances.
The flow is simple: sign in, choose a phone photo, add a caption, and publish. The app prepares the image, removes location metadata, and runs AI dog detection. Visitors can browse the journal and reveal boxes showing where the model found a dog.
The implementation connects a handful of services, detailed on the About page:
| Cloudflare service | What it does |
|---|---|
| Workers + Access | Serve the app and protect owner controls |
| R2 + D1 | Store photos, captions, dates, and processing state |
| Queues + Images | Process uploads with retries, resize photos, and convert HEIC |
| Workers AI | Detect dogs, optionally routed through AI Gateway |
| Durable Objects | Deliver live processing updates |
| Workflows + Browser Run | Generate private PDF photo books |
| Analytics Engine + Web Analytics | Measure processing and public-site activity |
Cloudflare’s free allowances make this practical: R2 includes 10 GB-months of storage and free egress, Images includes 5,000 unique transformations monthly, and Workers AI includes 10,000 neurons of compute daily.
To stay small, Otto defaults to 10 uploads daily, 20 MB per photo, and a 4 GB storage budget. The goal is zero ongoing infrastructure cost within the free allowances. Those allowances are shared across the account; domain registration is separate.
A daily dog photo turns out to be a useful little engineering project: authentication, storage, background jobs, AI, live updates, and observability, with Otto as the test subject.