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.

1. Upload A progress bar tracks the photo transfer.
Upload progress at 21 percent.
2. Prepare Live updates show resizing and location-metadata removal.
Live updates connected. Resizing your photo and removing location metadata.
3. Publish Reveal the AI’s dog-detection box.
Otto walking on a sidewalk, with a yellow AI detection box and the Show dog boxes control.

The implementation connects a handful of services, detailed on the About page:

Cloudflare services used by Otto’s photo journal
Cloudflare serviceWhat it does
Workers + AccessServe the app and protect owner controls
R2 + D1Store photos, captions, dates, and processing state
Queues + ImagesProcess uploads with retries, resize photos, and convert HEIC
Workers AIDetect dogs, optionally routed through AI Gateway
Durable ObjectsDeliver live processing updates
Workflows + Browser RunGenerate private PDF photo books
Analytics Engine + Web AnalyticsMeasure 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.