Built a thing this weekend. HTML Drive — a personal file system for the HTML files Claude makes for you. Sign in with Google, organize in folders, share by email, find the URL later.
Like Google Docs, but for the format Claude actually does its best work in.
The why is Thariq's argument: markdown is restricting. ~100 lines of markdown is the max anyone reads. HTML can carry illustrations, color, layout, interaction — everything markdown reaches for ASCII to fake.
But HTML files have nowhere to live. Most browsers don't render markdown natively, but HTML files aren't on a URL until you put them somewhere.
Drive is the somewhere.
Six things that didn't exist 24 hours ago:
① Schema (users / folders / shares)
② Google sign-in
③ Finder-style file browser
④ Per-doc visibility (private / shared / public)
⑤ Google Docs-style viewer (top bar + history rail)
⑥ Favicon + "⚡ Make your own" ribbon
None of it is hand-rolled. All of it is one ~110KB worker.ts.
The agent flow is the one part I'm proudest of.
You sign in. Click Connect agent. You get a URL. That's it.
The URL is /agent/<token>/agents.md. It contains the credentials AND the instructions. Paste it into Claude Code and the agent reads it, learns the API, and starts saving HTML to your account as memory.
# In Claude Code > Here's where you can save HTML files: > https://html.app.teenyapp.com/agent/agt_…/agents.md > > When I ask for a spec or report, save it there.
The trick: /agent/:token/agents.md is a per-token markdown file generated on the fly. The agent fetches it once and gets:
• A description of the drive
• The save endpoint, with the bearer baked into curl examples
• Visibility / slug / size limits
• Permission to use it as memory
No separate setup step. The link is the configuration.
# Save a doc curl -X POST https://html.app.teenyapp.com/api/save \ -H 'Authorization: Bearer agt_…' \ -d '{"slug":"my-doc","title":"My doc","html":"<!doctype html>..."}'
Visibility, in three flavors. Same model as Google Docs:
Doc viewer is Google Docs-style: top bar with Share + history toggle + more menu, your HTML in an iframe, version history in a collapsible right rail.
The thing the iframe loads is /d/:slug/raw. Same ACL, no chrome — that's what curl/agents fetch and what other iframes embed.
Stack: teenyapp (Cloudflare Workers + SQLite). Schema is six tables, one of them owned (users), the rest related.
Auth is teenyapp's auth extension on the users table — it auto-mounts /api/v1/table/users/auth/oauth/google. I just added the redirect URI to my Google client.
The whole rewrite happened in one Claude Code session. ~6 hours of pair-programming, 9 commits, 5 bugs ironed out as I went.
The session itself is a doc in the drive — written by Claude, viewable by anyone, like every other doc in there. The artifact and the storage are the same thing.
Closing the loop is the whole point.
Try it. Sign in. Connect an agent. Paste the link into Claude. Then ask for HTML and watch it land in your folders.
This thread is itself an HTML file in my drive — promoted from a tweet, because that's what the project is for.
Start your own.
Sign in with Google. Build an HTML brain. Share by URL.
html.app.teenyapp.com