Skeleton placeholders are an underrated upgrade

A good error message answers three questions: what happened, why it happened, and what to try next. Most ship the first, hint at the second, and forget the third. The fix is usually a single sentence longer.

Cross-AI portability is the structural moat OpenAI and Anthropic can't build for themselves. The user's context, exported as a public URL, becomes infrastructure that survives any single vendor's pivot. That's why the right primitive isn't an API key — it's a permalink.

Markdown won because it was always good enough. Not the best at any one thing — never the fastest editor, never the prettiest output, never the most semantically rich. But always close enough that the switching cost killed every alternative.

Capture-flow check-list

  • [x] Pulled from Safari via Share Sheet
  • [x] OCR'd a whiteboard photo
  • [x] Dictated three voice memos walking to coffee
  • [ ] Imported the long PDF I was avoiding
  • [ ] Cleaned the inbox folder
swift
// SwiftUI: keep all five tab views mounted across tab switches so // each view's @StateObject model persists. ZStack { ForEach(AppTab.allCases, id: \.self) { tab in view(for: tab) .opacity(router.selectedTab == tab ? 1 : 0) .allowsHitTesting(router.selectedTab == tab) } }
Provider Strength Weakness
Claude Long context, instruction following Slow for tiny prompts
GPT-4o Multimodal, fast Drifts on long sessions
Cursor Code-aware ranking Locked to editor
Whiteboard sketch
Whiteboard sketch

Next steps

The hardest part of a 1-person startup isn't the work — it's the lack of a forcing function. Without a meeting on Tuesday, nothing has to ship on Monday. The schedule has to come from somewhere, and "because I said so" isn't enough.