Supabase RLS patterns I keep copy-pasting
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.
Most personal-knowledge tools optimise for input. The friction is on the way in: capture this thought, file it, tag it, link it. But the value lives on the way OUT — when the system surfaces the right note at the right moment without you asking. Capture-heavy products are easier to build; output-heavy ones are what people actually pay for.
The interesting thing about long-context models isn't that they can read more — it's that they finally make the retrieval problem optional. When a model can hold the whole repo in context, the question shifts from "what should I fetch?" to "what should I show?". That's a UX question, not an infrastructure one.
Three rules I keep returning to
- Ship one feature, deeply, before two features shallowly.
- The interface IS the product. The engine just has to keep up.
- Anything important should fit on one screen.
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 |
Open questions
Reading other people's code is a higher-leverage activity than writing your own. You learn three things at once: what works, what doesn't, and why someone smart picked the trade-off you'd never have considered. The ratio of read-to-write hours quietly separates the engineers who plateau from the ones who keep compounding.