First-principles check: are we drifting?
Strategy reflection. Mapping today's product surface against the 8 founding principles. Where we're aligned, where we're drifting, what to double down on.
The 8 first principles
- LLMs read markdown natively. (empirical)
- URLs cross every boundary. (empirical)
- Authored, not extracted. (conviction)
- Cross-AI is a structural moat. (argument)
- The graph lives in the response, not behind a service. (conviction)
- Per-project + per-person scopes compose. (observation)
- Zero friction. (founding principle)
- Build in public. (tactic)
Per-principle assessment
| Principle | Alignment | Comment |
|---|---|---|
| 1. LLMs read markdown | ✓ strong | Every output is markdown. No drift. |
| 2. URLs cross every boundary | ✓ strong | /llms.txt, ?compact, ?graph=0 are all URL-native. The image-rehost work today was a direct expression of "URL must be self-contained." |
| 3. Authored, not extracted | ⚠ half | The product is aligned. Risk: auto-analyze, concept index, related-in-hub may read as "AI organizes for you" if marketed naively. The verb order matters — "you write, the AI links" must always be in that order. |
| 4. Cross-AI = structural moat | ⚠ at risk | If the 4 native-skill plan is framed as "we support every AI," the cross-AI thesis reduces from "one URL works in 3 AIs" to "Claude one + ChatGPT one + Gemini one." Strictly worse framing. |
| 5. Graph in the response (not a service) | ✓ strong | The auto-queue-on-bundle-create work shipped today is exactly this. Fresh bundles' URLs carry graph_data from the start. |
| 6. Doc / Bundle / Hub composable scopes | ✓ strong, ⚠ marketing | This is our most differentiating part, but marketing emphasizes hub. Bundle deserves equal billing — AGENTS.md fit is bundle, not hub. |
| 7. Zero friction | ⚠ weakening | "Zero friction to try" is intact. "Zero friction to use well" is weakening (image rehost / edit token / GitHub Action all need an account). Healthy for monetization but the founder narrative needs to be honest about it. |
| 8. Build in public | ✓ strong | Today's GitHub Action dogfood is the proof. |
Biggest single drift risk
Feature breadth is growing faster than spine consolidation.
One conversation today shipped: image rehost (6 import paths), 4 Marp decks + PDF/PPTX, native skill roadmap, GitHub Action dogfood, sign-out bundle clear, demo 50-doc seed + ID renumber, bundle readiness pill + auto-queue.
Each piece is justifiable. The risk: after 5 minutes of using mdfy, a user should be able to answer "what is this?" in 8 words — "URL is the unit. Markdown is the substrate." If they can't, breadth is hurting positioning.
Three concrete recovery moves
-
Add a self-check to every PR: "Does this make the URL more valuable, or just add another way to reach it?" The first kind compounds. The second is breadth without spine.
-
Lock native-skill positioning before any of them ship. Each skill UI must say "Your URL: mdfy.app/
" somewhere visible — the skill is the on-ramp to the URL, not a substitute for it. Otherwise we accidentally train users that mdfy is the ChatGPT GPT. -
Promote bundle in the launch copy. Current Show HN draft leans on hub. The hub URL is the "personal layer"; the bundle URL is the "per-project layer" — and that's exactly what AGENTS.md / .cursor/rules need. Add a bundle slide. In /spec, change the order to doc → bundle → hub (small to large, composition first).
One-line summaries
What's working: Layered architecture on a markdown-URL foundation. Each new feature deepens that layering, not flattens it.
What to watch: "We have a Claude thing AND a ChatGPT thing AND a Gemini thing" is a concession framing. The principle is "one URL, every AI reads it." Hold that frame even while shipping the skills.
Action items (this week)
- [ ] Add the PR-self-check rule to CLAUDE.md
- [ ] Lock the "Your URL: ..." visibility rule in any native skill mockup
- [ ] Add a bundle-first slide to the Show HN draft
- [ ] Reorder /spec sections: doc → bundle → hub