- Travel CaptureShare a photo while traveling, blog about it later. The log is the intent — "I saw something worth writing about." The photo stays in iCloud. The event stays in CloudFront.
- My Own NameEveryone wants to own my identity. LinkedIn, GitHub, Apple. I need a namespace that's mine — one domain that mounts all the services without being tied to any of them.
- Jolt, Coffee, ProseccoStory points are joyless. Jolt is the estimate, coffee is the effort, prosecco is the celebration. Same data as agile, different energy.
- The Eight-Inch HoseThe B-58 ground cooling spec said 8 inches. Nobody knew why. The number was made up, but the difficulty was real.
- AI Is Not the InternPeople build guardrails to keep AI from deleting the database. Wrong problem. The architecture should make deletion impossible, not the process around the actor.
- Siri Thought Capture"Hey Siri, thought" — dictate, hit a URL, it's in the logs. Grep later, turn into journal entries. Works from the watch with a crown action.
- Per-Repo VaultOne encrypted file per repo. One script to show credentials. openssl and a password. No secrets manager, no service, no monthly cost.
- GitHub as CMSA custom GUI that commits to the repo. GitHub is the backend. No CMS server, no database. The WordPress experience without WordPress.
- Contact FormSame pattern as comments. A form that hits /tube/contact/submit. CloudFront logs it. You grep when you want. The log is the inbox.
- Compose QueriesGraphQL fragments compose into one query. @defer means they don't have to come back at the same time. Parallel fetches to different files, progressive rendering. No server.
- 9P at Internet ScalePlan 9 and NFS had it right — files as the interface, namespace as the abstraction, stateless operations. HTTPS + CDN + JWT is the same model without the LAN constraint.
- Time Travel via TagsBranch per journal entry, tag on merge. Every shipped feature has a snapshot. Click a journal entry, see the site as it was when that feature landed.
- Thoughts from the BikeOrigin metadata, git vs SourceSafe, the spec repo, AI's blog, copilot agents, and the book that writes itself.
- The Schema Is the Privacy Policy"@PII on the GraphQL schema marks what's sensitive. A JS Proxy hides it by default. grep pii returns all the touch points. The schema is the privacy policy."
- The Publish WorkflowTried to publish a journal entry and discovered there's no workflow for it. type: journal entries don't show anywhere. Need a spec.
- The GraphQL ContractClient sends operationName + data. The query lives in the repo. The repo is the schema. Leverage existing specs instead of inventing new ones.
- Test in ProdWhen the architecture is append-only and stateless, testing against prod is safe, fast, and free. No staging, no UAT, no raspberry pi.
- Same Hooks, No ServerReact hooks with the same API as Apollo or urql — but the backend is files and a CDN. No GraphQL server. The hook hides the implementation.
- Plugins Are Specs, Not CodeA plugin isn't code you install — it's a spec you combine with your platform spec. AI generates the implementation that fits your site. No compatibility issues.
- Per-User NamespacesPlan 9's per-process namespaces on a CDN. The edge picks the right site.json per role. Each user sees a different filesystem. Static files, fully cacheable.
- Per-Repo IAMEach repo that deploys to S3 should have its own IAM credentials scoped to its path. Least privilege. If creds leak, blast radius is one prefix.
- Moderated CommentsComments via batch events. You review, approve, they appear on next build. No spam, no real-time pressure. The log holds everything until you're ready.
- Methodology as a URLDevelopment methodologies are files at URLs. Point AI at them and say "do it like that." No books, no courses, no consultants. The methodology is the product.
- Free MetadataCloudFront logs timestamp, IP, user-agent, referer, edge location on every request. You get dimensions of data you didn't design — they're just there.
- Architecture DiagramAn SVG architecture diagram for the about page. Shows the flow from conversation to deployed site, the event bus, and the plugin model.
- The URL Is the Log EntryThe browser fetches a URL with the event in the query string. CloudFront logs the request. No backend, no analytics service. The log is a side effect of the request existing.
- The Log Is the Event BusThe log path isn't just for logging — it's a write API. Different paths have different readers. Some index. Some produce artifacts. Comments without a server.
- The Code Is DisposableIf you have the specs, the docs, and the content model, the code can be regenerated. The journal leads to the code — it's not some random out-of-date doc.
- The Backup Is the ArchitectureThere's nothing to back up because nothing is primary in only one place. Git has the source. Logs have the user input. Replay either one and you reconstruct the state.
- Scaling Is a Business ProblemWith the right architecture, scaling is "can you afford the bill?" — a business decision, not an engineering problem. No developer needs to wake up.
- Pick All ThreeThe old engineering joke says pick two. Turns out you just had to stop using servers.
- Monitoring Without a MonitorRoute 53 pings the URL. The browser reports errors to the log. Lambda@Edge failures show up in CloudFront access logs. No Datadog, no Prometheus. Just config.
- Hotel Booking Without a ServerA hotel booking system built on files at URLs. The only transaction is a DynamoDB conditional write. Everything else is static files and events.
- Don't Fight the Lego BlocksUse the pieces the way they want to be used. The architecture that works is the one that fits the services, not the one that forces them into a shape they resist.
- content.json at the EdgeWhat if there was one content.json with everything in it, and the edge filtered it by role? One source of truth, the proxy handles access.
- Already DistributedMulti-zone, multi-region, globally distributed — without configuring anything. That's what you get for free by using the CDN as the serving layer instead of a server.
- A Thousand AbstractionsRemove the server and the entire abstraction chain collapses. What's left is files, URLs, functions, and a CDN. Four concepts.
- You Need a Plan to Have No PlanInvest upfront in infrastructure — structured logs, schema annotations, operation capture — and you never have to plan a test, a report, or a query again. The planning happens once. The flexibility is permanent.
- The Browser Is a BlitThe blit was Bell Labs' smart terminal — its own processor, local compute, fetches from the network, renders locally. The browser inherited the design without inheriting the name. And theTube is a Plan 9 cluster.
- Markdown Is ExtensibleThe [] callout notation is already a content protocol. The post declares slots. Other sources fill them. You don't have to implement all the slots upfront — empty ones are invisible.
- HTML Is AssemblyMarkdown is nothing like HTML to a human writer. That's the point. The web's instruction set is the wrong level for writing.
- How to BuildThe infrastructure build and the content build are different things with different costs and different triggers. Separating them means a new post doesn't require a full Next.js rebuild.
- Don't Let Your Repo Be a Junk DrawerThe private repo started with fonts and ended up with Lambda code and CDK stacks. "Private" is not a concern — it's an access control label. The fork isn't a fix — it's an upgrade, and upgrades are cheap.
- Don't Let Your Repo Be a Junk DrawerThe private repo started with fonts and ended up with Lambda code and CDK stacks. "Private" is not a concern — it's an access control label. The fix is a fork, and forks are cheap.
- What Earns a RepoContent got one. Design is next. The question isn't "should this be a repo" — it's "does this evolve independently." Tags, callouts, auth roles. The pipe has more joints than it looks.
- The Repo Is the FeedGitHub already generates an Atom feed of commits. The raw file URL is always current. The API lists all posts. Any service that can read GitHub can subscribe — no RSS generation, no separate feed file, no build artifact.
- The Registry Already ExistsGitHub is already the package registry. Dependabot scans each repo. Secret scanning runs on each repo. The security tooling is built around the unit that matters — the repo. The format-agreement model gets that for free.
- The Pattern GeneralizesContent got its own repo. Design is next. Every concern that evolves independently gets its own repo — that's the pattern, not the exception.
- The File Is the SpecThe markdown file doesn't just contain the post. It contains the spec for everything assembled around it — images, journey narrative, audience, status. One file, complete picture.
- The Diff Is SmallWhen concerns are separated into repos, the pull request is small. A tag color change is one line in one file in the tags repo. Not a PR against a monorepo where the reviewer has to figure out what changed and why.
- The Build Is a PipeThe deploy pipeline is just another Unix pipe. Each repo owns one stage.
- Old Tools, New ServicesUnix pipes from 1969. Git from 2005. S3 from 2006. GitHub Actions from 2019. The stack is built from old ideas running on new infrastructure. The innovation is refusing to add a layer.
- Markdown Is More Extensible Than XMLXML was designed to be extensible and made it hard. Markdown wasn't designed to be extensible and made it easy.
- GUI Tools Own the DataSquarespace owns your content. Substack owns your subscribers. Notion owns your notes. The GUI is the lock-in mechanism. The pipe doesn't own anything — it's just files, and files predate every tool in the stack.
- Doug McIlroy Would Recognize ItUnix got it right in 1969. Small tools, text streams, compose at the shell. The web spent 50 years building walls around that idea. Markdown files and git repos are building it back.
- Clone It and Wire It InIf someone builds a better tag taxonomy, a recipe callout set, a minimal design theme — you clone their repo and point your build at it. No npm. No negotiation. The format agreement is the interface.
- URL AliasesThe post owns its URL surface. shortSlug and redirectFrom are just alias types — the filename is canonical, everything else is a name the post also answers to.
- The Social FeedShort thoughts that don't need to be posts. A timeline, not a blog index. The feed and the blog are two outputs from the same journal.
- Sleeping SidewaysOrdered a Radica Rover for the F-150. The lower 48 national parks don't plan themselves.
- The Site Map Is a GraphPosts link to each other through the journey block. prev, next, forks. The build already has enough to draw the graph.
- I Don't Want to Be Friends With npmnpm's trust model is broken. You're one transitive dependency away from trusting everyone who has ever published a package.
- One URL Per BranchEvery branch gets a real deployment. Not a build artifact — a URL you can click. The bot writes back to the branch it was triggered from, not main.
- The Browser Didn't Win on MeritClient-server died not because the browser was better software, but because one runtime for everything was an overwhelming operational advantage. Web 2.0 kept that win and threw out everything else.
- Markdown Is a Programming LanguageThe Actions are the compiler. The markdown is the source. The syntax you define is the language.
- Designers Don't Know GitSo the post is the spec. What you write in the markdown file determines what gets built around it — including the brief for the designer.
- Cruise Ship vs WanderingTwo development styles. One has a Gantt chart. One finds URL aliases by renaming a file.
- The Content Is the Most Portable ThingThe site is static files on S3 behind CloudFront. Moving to Azure is two hours of workflow changes. Moving to a different git host is workflow syntax. The markdown doesn't move at all.
- Chaos DevelopmentThe methodology nobody writes about because it doesn't make for a clean conference talk. Real development is continuous reconciliation, not plan execution.
- What You'd Pay to Buy This Off the ShelfA plain-English comparison of this blog's stack versus the commercial products that do the same things.
- TCP/IP Was the First Social SpecBefore TCP/IP, you asked to join a network. After it, speaking the protocol was enough.
- Short URLs in the FrontmatterA short URL in a post's frontmatter, a CloudFront function generated at build time. No third-party service, no database, no link rot.
- GitHub Issues as a Comment SystemStatic sites can't have comments. GitHub Issues can. Here's how to wire them together without giving up editorial control.
- Enterprise Security on a Solo Developer BudgetDependabot, Copilot Autofix, scheduled scans, and supply chain protection — zero ongoing manual work.
- Replacing Enterprise Publishing and Full-Service Hosting for $1 a MonthEvery feature on the enterprise CMS checklist, no server, no managed hosting. $1 a month.
- CloudFront Is a Reverse ProxyMap /admin to a server, /api to Lambda, /auth to Cognito — all on one domain, no nginx required.
- A T1 to the HouseRunning a web business in the late 90s meant a SPARC box, a T1 line, and a prayer that traffic stayed flat.
- The Browser Is the ServerRole-based content, no server, no SaaS auth. What the architecture looks like and how I got there.
- Building theTubeHow I built this blog — static site, real auth, role-based content, no server.
- Copilot Commit MessagesUpdated VSCode the other day and noticed Copilot will now create git commit messages. Since most of mine are "did some stuff" I figured, what's the worst that could happen.