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

  1. LLMs read markdown natively. (empirical)
  2. URLs cross every boundary. (empirical)
  3. Authored, not extracted. (conviction)
  4. Cross-AI is a structural moat. (argument)
  5. The graph lives in the response, not behind a service. (conviction)
  6. Per-project + per-person scopes compose. (observation)
  7. Zero friction. (founding principle)
  8. 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

  1. 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.

  2. 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.

  3. 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