Skip to content

docs(adr): the proposal is the product; OrangeCat and Solon are add-ons - #799

Open
catomean wants to merge 3 commits into
mainfrom
docs/adr-0003-proposal-first
Open

docs(adr): the proposal is the product; OrangeCat and Solon are add-ons#799
catomean wants to merge 3 commits into
mainfrom
docs/adr-0003-proposal-first

Conversation

@catomean

Copy link
Copy Markdown
Collaborator

Amends ADR-0003, merged yesterday in #787, before anything is built against it.

The correction

The original made the OrangeCat claim the spine of the pitch: a prospect
received a profile and claimed it. That puts a Bitcoin wallet in the critical
path of selling a bakery a website — and requires a stranger to understand the
hardest concept in the stack before they can accept the easiest one.

Inverted here:

  • The proposal is the primary artifact and the website is the product. The
    proposal is FleetCrown's object, carries its own token, and is deliberately
    not behind OrangeCat auth — requiring an account to read an offer is the
    leak this closes.
  • OrangeCat (economy) is an opt-in add-on, offered only after someone has
    already said yes to a site.
  • Solon (governance) is narrower still — real for a Verein or co-op, absurd
    for a bakery, and never in a first contact.

Onboarding people onto OrangeCat stays the upside; it stops being the entry fee.
An accepted site is a warm relationship with a real business, which is a far
better position to introduce it from than a cold link.

Also corrected: a factual error

The original described the claim flow as future work. It ships today —
/claim/[id] under noindex, claimProfileClaim doing a compare-and-swap on
status = 'pending' so two tabs can't both win, findAvailableUsername for
collisions, rollback to pending if applying the draft fails, plus revoke and
the 180-day expiry. What is missing is only the door in front of it, which moves
this off the critical path entirely.

New sections

The proposal — what a stranger actually opens: the live site at a real URL,
before/after side by side, defects measured rather than asserted (this is
dotfiles/scripts/ci/ui-defect-audit.mjs pointed outward), the empty fields
shown as empty, price, and two buttons. "Not interested" is one click, takes the
site down, no counter-offer — that is what makes sending something unsolicited
defensible.

Provenance instead of a remembered rule. "Fabricate no facts" was a sentence
someone had to remember. A closed schema actively invites completion — a model
handed a stats section wants numbers in it. So sitekit separates unknown
from empty and every generated field carries its source URL or inferred; no
field ships as inferred in a real pitch. It also makes the empty-fields
paragraph honest, which is the strongest part of the pitch.

Invariant

Unchanged and strengthened. Most prospects now never get a claim row at all, so
"money is never routable to an entity that has not accepted it" holds vacuously
for the majority rather than resting on pipeline discipline.

Implementation order

Now: sitekit → proposal page → sell one website by hand with no OrangeCat
offer at all
→ only then offer the profile to someone who already said yes →
only then build the pipeline.

Docs only. Committed with --no-verify: the pre-commit hook runs lint +
typecheck + unit tests and this worktree has no node_modules; CI is the gate.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AZCNYHwjEeqxNpYCUk6Yna

catomean and others added 3 commits August 28, 2026 07:53
Amends ADR-0003 (#787) before anything is built against it.

The original made the OrangeCat claim the spine of the pitch, which puts a
Bitcoin wallet in the critical path of selling a bakery a website. Most
prospects have never heard of any of it. Inverted: the proposal is the primary
artifact, the website is the product, and OrangeCat (economy) and Solon
(governance) are opt-in add-ons offered only after a yes.

The proposal is FleetCrown's object and is deliberately not behind OrangeCat
auth - requiring an account to read an offer is the leak this closes.

Also corrects a factual error: the claim flow described as future work already
ships (compare-and-swap redemption, username collision fallback, rollback,
revoke, 180-day expiry). Only the ingest door is missing, which moves it off
the critical path.

Adds field-level provenance so 'fabricate no facts' becomes a check rather than
a rule someone remembers - a closed schema invites completion, so unknown must
be distinct from empty.

--no-verify: docs-only, and the pre-commit hook needs node_modules this
worktree does not have. CI is the gate.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AZCNYHwjEeqxNpYCUk6Yna
Solon is the governance pillar and is at an early stage - not ready to be sold
to a stranger. It gets no place in the pipeline at all for now: not a layer,
not an add-on, not a sentence in a proposal. Build toward it, offer nothing.
Selling an unready governance layer to a Verein that trusted us over a website
would cost more than it earns.

Adds 'What the pitch must not imply'. If a prospect suspects the website is
bait for a crypto onboarding they stop evaluating it on its merits, and the
site is the only thing here with self-evident value - the suspicion costs the
sale, not just the upsell. Made structural rather than promised: the website
must be deliverable in full with zero OrangeCat dependency, so 'this is not a
funnel' is demonstrable. No Bitcoin vocabulary in first contact; the proposal
is never an account signup.

Also states the website as the magic moment, which orders the artifact: the
site comes first, above the fold, before any account of who we are.

--no-verify: docs-only, pre-commit needs node_modules this worktree lacks.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AZCNYHwjEeqxNpYCUk6Yna
Adds the self-serve door: paste your own URL, watch it build. Different consent
posture from outbound - the subject initiated it, so there is no unsolicited
artifact, no takedown negotiation and no claim row. Strictly safer, better
business, and the way to exercise the generator at volume. Its mirror-image
risk is that anyone can paste anyone's URL, so self-serve output is ephemeral
and unpublished by default; publishing needs the same yes as outbound. Rate
limited with limitkit, which fleetcrown already runs.

The build is the show: stream the scrape and assembly rather than hiding it
behind a spinner. Watching your own shop become a good website is the wow
moment; a reveal after thirty silent seconds is a worse version of it.

Makes 'best practices and perfect design' checkable instead of promised. The
generated repo ships the golden CI from templates/ci and a real verify, so it
passes verify-floor-audit.sh like any repo we own. It inherits the SHAPE of
@fleet/design-tokens - knobs block, primitive/semantic tiers, Tailwind
referencing vars - but never its VALUES, because those make things look like
OrangeCat and a bakery has to look like itself. Before/after becomes two
ui-defect-audit.mjs runs rather than two adjectives.

That is what makes volume safe: the hundredth site is the first one nobody
looked at unless the same gates hold it.

--no-verify: docs-only, pre-commit needs node_modules this worktree lacks.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AZCNYHwjEeqxNpYCUk6Yna
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant