About this duck
Rubber Duck as a Service is a joke with a straight face. The joke is a SaaS landing page for renting a rubber duck. The straight face is that it's a real, end-to-end demo of Fly Pages โ deployed live, backend and all โ built entirely by an AI agent in a Sprite. Which is the point: this is the kind of thing an agent builds when you hand it a platform.
What it's showing off
- Static hosting from the edge โ this page, the styles, the docs, served from Tigris object storage with pretty URLs and a custom 404.
- A same-origin
/apiโ reverse-proxied to a backend on Fly compute. One domain, one cert, shared cookies, no CORS. The pond and the counter are real reads and writes. - Multiple backends โ
/apiruns the duck;/quackis a second backend at its own prefix, its own secret. Longest-prefix routing decides. - Markdown for agents โ ask any page for
text/markdownand the edge serves Markdown instead of HTML, same URL. - Redirects โ /api-docs 301s to /docs
from a
_redirectsfile. - Private-by-default compute โ the backend only answers requests carrying the secret Fly Pages injects at the edge.
How it's wired
Two repos, two commands:
cd rdaas-site && flypages deploy --name rdaas
flypages backend connect --name rdaas --upstream https://<sprite>.sprites.app --prefix /api
flypages backend connect --name rdaas --upstream https://<sprite>.sprites.app --prefix /quack
Site: github.com/clouvet/rdaas-site ยท API: github.com/clouvet/rdaas-api
The tips are real Claude
The duck's debugging wisdom is written by Claude (Anthropic). The backend runs on a real Sprite, which carries the Fly identity the Sprites Anthropic gateway wants โ so every summon generates a fresh tip live. (A pack of Claude-written tips is baked in as a fallback, so the duck is never speechless.) The same binary on a plain Fly app can't reach the gateway and falls back to the pack โ the code doesn't change; the environment lights it up.
Now go summon a duck. You have bugs to talk to.