eleven / messenger Public

status: public roadmap page — the road to V1 (#1189)

A forward companion to milestones.html: milestones is what's shipped, the
roadmap is the honest plan for the road to V1, in member language (no issue
numbers — the app repo is private — and no operator/security internals).

- web/status/roadmap.html: "the bar" (the five things V1 must clear) + the
  tracks, each with an honest status (Live / Building / Opt-in / After V1),
  matching the shared status.css design system. Static like milestones, no
  JSON feed, so the status contract test doesn't cover it.
- deploy/status-publish.sh: upload roadmap.html with the other pages.
- Nav: add "Roadmap" across the status pages; cross-link milestones ↔ roadmap.
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Paul Campbell 9c13aa4fb4ca87c48ebe2a25a02173fb6eea04b2 parent 9cfc2db
13 files changed, +241 −1
  • deploy/status-publish.sh +3 −0
  • web/status/books.html +1 −0
  • web/status/carbon.html +1 −0
  • web/status/contributors.html +1 −0
  • web/status/economics.html +1 −0
  • web/status/funding.html +1 −0
  • web/status/hardening.html +1 −0
  • web/status/index.html +1 −0
  • web/status/milestones.html +3 −1
  • web/status/prompts.html +1 −0
  • web/status/roadmap.html +225 −0
  • web/status/security.html +1 −0
  • web/status/ssh.html +1 −0
diff --git a/deploy/status-publish.sh b/deploy/status-publish.sh
index 488efd9..53d26c8 100755
--- a/deploy/status-publish.sh
+++ b/deploy/status-publish.sh
@@ -1257,6 +1257,9 @@ publish() {
# was hand-added there (pre-dating this file's funding additions) and the
# repo owed it back.
[ -f "$PAGES_DIR/milestones.html" ] && upload "$PAGES_DIR/milestones.html" milestones.html "text/html; charset=utf-8" "max-age=300"
+ # Roadmap: the forward companion to milestones — the plan for the road to V1.
+ # Static like milestones (no JSON feed, no contract-test coverage).
+ [ -f "$PAGES_DIR/roadmap.html" ] && upload "$PAGES_DIR/roadmap.html" roadmap.html "text/html; charset=utf-8" "max-age=300"
[ -f "$PAGES_DIR/icon-192.png" ] && upload "$PAGES_DIR/icon-192.png" icon-192.png "image/png" "max-age=86400"
else
echo "warning: $PAGES_DIR missing — JSONs published, pages skipped (copy web/status/* there)" >&2
diff --git a/web/status/books.html b/web/status/books.html
index 4efa811..cf34a5d 100644
--- a/web/status/books.html
+++ b/web/status/books.html
@@ -53,6 +53,7 @@
<a href="./prompts.html">Prompt Ledger</a>
<a href="./ssh.html">Access Ledger</a>
<a href="./hardening.html">Fleet hardening</a>
+ <a href="./roadmap.html">Roadmap</a>
</nav>
<p class="lede">Eleven’s income and spending, published as they stand — part
of running the service in the open.</p>
diff --git a/web/status/carbon.html b/web/status/carbon.html
index 905ea1a..b5eeaa9 100644
--- a/web/status/carbon.html
+++ b/web/status/carbon.html
@@ -112,6 +112,7 @@
<a href="./prompts.html">Prompt Ledger</a>
<a href="./ssh.html">Access Ledger</a>
<a href="./hardening.html">Fleet hardening</a>
+ <a href="./roadmap.html">Roadmap</a>
</nav>
<p class="lede">Eleven is AI-written, and the honest carbon ledger has two
halves: what it cost to <em>build</em> the app (the AI tokens spent writing
diff --git a/web/status/contributors.html b/web/status/contributors.html
index 50daba0..abc6119 100644
--- a/web/status/contributors.html
+++ b/web/status/contributors.html
@@ -54,6 +54,7 @@
<a href="./prompts.html">Prompt Ledger</a>
<a href="./ssh.html">Access Ledger</a>
<a href="./hardening.html">Fleet hardening</a>
+ <a href="./roadmap.html">Roadmap</a>
</nav>
<p class="lede">Who builds Eleven — humans and AI models on the same metric.
This app is AI-written, so the models appear in the index exactly as the
diff --git a/web/status/economics.html b/web/status/economics.html
index 4764811..82b48b3 100644
--- a/web/status/economics.html
+++ b/web/status/economics.html
@@ -57,6 +57,7 @@
<a href="./prompts.html">Prompt Ledger</a>
<a href="./ssh.html">Access Ledger</a>
<a href="./hardening.html">Fleet hardening</a>
+ <a href="./roadmap.html">Roadmap</a>
</nav>
<p class="lede">How the space-upgrade prices relate to what spaces actually
cost to run. The price is the cost plus resilience — and that should be a
diff --git a/web/status/funding.html b/web/status/funding.html
index 76258a2..8c4be1c 100644
--- a/web/status/funding.html
+++ b/web/status/funding.html
@@ -99,6 +99,7 @@
<a href="./prompts.html">Prompt Ledger</a>
<a href="./ssh.html">Access Ledger</a>
<a href="./hardening.html">Fleet hardening</a>
+ <a href="./roadmap.html">Roadmap</a>
</nav>
<p class="lede">How money can fund Eleven without owning it. Eleven takes no
venture capital: investment buys a position in a published algorithm — capped
diff --git a/web/status/hardening.html b/web/status/hardening.html
index b4d3247..ae4a402 100644
--- a/web/status/hardening.html
+++ b/web/status/hardening.html
@@ -95,6 +95,7 @@
<a href="./prompts.html">Prompt Ledger</a>
<a href="./ssh.html">Access Ledger</a>
<span aria-current="page">Fleet hardening</span>
+ <a href="./roadmap.html">Roadmap</a>
</nav>
<p class="lede">Whether SSH is locked down on every server in the fleet, on the
diff --git a/web/status/index.html b/web/status/index.html
index 5499f27..0b830f6 100644
--- a/web/status/index.html
+++ b/web/status/index.html
@@ -71,6 +71,7 @@
<a href="./prompts.html">Prompt Ledger</a>
<a href="./ssh.html">Access Ledger</a>
<a href="./hardening.html">Fleet hardening</a>
+ <a href="./roadmap.html">Roadmap</a>
</nav>
<p class="lede">Live aggregate health of the Eleven fleet — how many spaces are running
(always-on or on-demand, and of the on-demand ones how many are awake), what
diff --git a/web/status/milestones.html b/web/status/milestones.html
index 9a18a7f..d73a9c3 100644
--- a/web/status/milestones.html
+++ b/web/status/milestones.html
@@ -55,6 +55,7 @@
<a href="./contributors.html">Contributors</a>
<a href="./prompts.html">Prompt Ledger</a>
<a href="./ssh.html">Access Ledger</a>
+ <a href="./roadmap.html">Roadmap</a>
</nav>
<p class="sub">🤖 The key moments of building Eleven, drawn from the
@@ -171,7 +172,8 @@
<p>🤖 This timeline is curated by hand and appended as moments land — the
<a href="./prompts.html">prompt registry</a> stays the complete record. A
milestone's date is the date of its session; where a session is withheld,
- the date and the moment publish without the transcript.</p>
+ the date and the moment publish without the transcript. Looking the other
+ way? The <a href="./roadmap.html">roadmap</a> is where these are headed next.</p>
</footer>
</div>
</body>
diff --git a/web/status/prompts.html b/web/status/prompts.html
index 66be9dd..a816e23 100644
--- a/web/status/prompts.html
+++ b/web/status/prompts.html
@@ -119,6 +119,7 @@
<span aria-current="page">Prompt Ledger</span>
<a href="./ssh.html">Access Ledger</a>
<a href="./hardening.html">Fleet hardening</a>
+ <a href="./roadmap.html">Roadmap</a>
</nav>
<div id="home">
diff --git a/web/status/roadmap.html b/web/status/roadmap.html
new file mode 100644
index 0000000..75956de
--- /dev/null
+++ b/web/status/roadmap.html
@@ -0,0 +1,225 @@
+<!-- 🤖 Roadmap: the forward companion to milestones.html. Where Milestones is
+ the story of what's shipped, this is the honest plan for what's next — the
+ road to V1, in member language. Curated and hand-kept (never generated),
+ appended and re-statused as tracks move. No GitHub issue numbers (the app
+ repo is private) and no operator/security internals — a public roadmap
+ names what members will feel, not how the fleet is run. Fully
+ self-contained: shared tokens/masthead/nav in status.css, a small inline
+ block for the track list and status pills. No JS, no external requests. -->
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<meta name="color-scheme" content="light dark" />
+<title>Eleven — roadmap</title>
+<link rel="icon" type="image/png" href="./icon-192.png" />
+<link rel="stylesheet" href="./status.css" />
+<style>
+ /* Roadmap-only styles; tokens, reset, masthead and the shared nav live in
+ status.css. Two ideas: "the bar" (what V1 has to clear) as a short list of
+ principles, and a set of tracks each carrying an honest status. */
+ a:focus-visible { outline: 2px solid var(--series); outline-offset: 2px; border-radius: 4px; }
+ h1 { font-size: 1.5rem; margin: 8px 0 4px; }
+
+ /* The bar: the principles V1 is measured against. A plain list, the lead
+ word carrying the weight. */
+ ul.bar { list-style: none; padding: 0; margin: 6px 0 0; display: grid; gap: 10px; }
+ ul.bar li {
+ background: var(--surface); border: 1px solid var(--border); border-radius: 12px;
+ padding: 12px 16px;
+ }
+ ul.bar b { font-weight: 650; }
+ ul.bar span { color: var(--ink-2); }
+
+ /* Tracks: one card per theme, a status pill top-right. The pill pairs a word
+ with a coloured dot — the word carries the state, colour only reinforces
+ (never colour alone). */
+ ol.tracks { list-style: none; padding: 0; margin: 8px 0 0; display: grid; gap: 12px; }
+ ol.tracks > li {
+ background: var(--surface); border: 1px solid var(--border); border-radius: 12px;
+ padding: 14px 16px;
+ }
+ .track-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
+ .track-head h2 { font-size: 1.05rem; margin: 0; }
+ .track p { margin: 6px 0 0; color: var(--ink-2); font-size: 0.95rem; }
+ .track p.detail { color: var(--ink); }
+
+ .pill {
+ font-size: 0.78rem; font-weight: 600; white-space: nowrap; letter-spacing: 0.01em;
+ display: inline-flex; align-items: center; gap: 6px;
+ }
+ .pill::before { content: ""; width: 9px; height: 9px; border-radius: 50%; background: currentColor; flex: none; }
+ .pill.live { color: var(--good); }
+ .pill.building { color: var(--series); }
+ .pill.next { color: var(--warn); }
+ .pill.later { color: var(--ink-2); }
+ .pill.later::before { background: transparent; border: 1.5px solid var(--ink-2); }
+
+ .legend { display: flex; flex-wrap: wrap; gap: 8px 18px; margin: 10px 0 0; font-size: 0.85rem; color: var(--ink-2); }
+
+ h2.group {
+ font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--ink-2);
+ margin: 6px 0 8px; font-weight: 650;
+ }
+ .after ol.tracks > li { background: transparent; border-style: dashed; }
+</style>
+</head>
+<body>
+<div class="wrap">
+ <header>
+ <img src="./icon-192.png" alt="" />
+ <div>
+ <p class="brand">Eleven Messenger</p>
+ <h1>Roadmap</h1>
+ </div>
+ </header>
+ <nav class="status-nav" aria-label="Status">
+ <a href="./index.html">Fleet</a>
+ <a href="./books.html">Income &amp; Expenditure</a>
+ <a href="./economics.html">Economics</a>
+ <a href="./funding.html">Investing</a>
+ <a href="./security.html">Security</a>
+ <a href="./carbon.html">Carbon use</a>
+ <a href="./contributors.html">Contributors</a>
+ <a href="./prompts.html">Prompt Ledger</a>
+ <a href="./ssh.html">Access Ledger</a>
+ <a href="./hardening.html">Fleet hardening</a>
+ <span aria-current="page">Roadmap</span>
+ </nav>
+
+ <p class="lede">🤖 Where we're taking Eleven next, and how far along each piece is.
+ <a href="./milestones.html">Milestones</a> is the story of what's already shipped;
+ this is the honest plan for the road to <b>V1</b> — the release where the whole
+ thing feels finished, not just working. Hand-kept and updated as tracks move,
+ in plain language: what you'll feel, not how the fleet is run.</p>
+ <p class="asof">Toward the V1 release · reviewed 20 July 2026</p>
+
+ <section aria-labelledby="h-bar">
+ <h2 id="h-bar">What V1 has to clear</h2>
+ <p class="note explain">V1 isn't a feature list — it's a bar. Five things have to
+ be true before we'd call it finished.</p>
+ <ul class="bar">
+ <li><b>Getting started feels effortless.</b> <span>The first five minutes are the
+ product. No dead ends, no jargon, no "what now?" — better than anything you've used.</span></li>
+ <li><b>Paying is calm and fair.</b> <span>Upgrading stays out of your way until the
+ moment you need it, and never feels like a toll booth. Always there, never pushy.</span></li>
+ <li><b>It's solid on every device.</b> <span>The Mac and iPhone apps feel as finished
+ as the web — no jank, no surprises, nothing that reads as a beta.</span></li>
+ <li><b>Your account and history are safe forever.</b> <span>Losing a device or a
+ passkey can never mean losing your conversations. Recovery just works.</span></li>
+ <li><b>The promise holds everywhere.</b> <span>If our servers were compromised, an
+ attacker still gets nothing. And every surface meets the accessibility bar we've set.</span></li>
+ </ul>
+ </section>
+
+ <section aria-labelledby="h-tracks">
+ <h2 id="h-tracks">The tracks</h2>
+ <p class="note explain">The work that gets us over the bar, grouped by what it's for.</p>
+ <div class="legend" aria-hidden="true">
+ <span class="pill live">Live</span>
+ <span class="pill building">Building now</span>
+ <span class="pill next">Next for V1</span>
+ <span class="pill later">After V1</span>
+ </div>
+
+ <ol class="tracks">
+ <li class="track">
+ <div class="track-head"><h2>Getting started</h2><span class="pill building">Building now</span></div>
+ <p class="detail">First-run, rebuilt to be the best anyone's used.</p>
+ <p>Every confusing hop and dead end removed — a clean path from "I've heard of
+ this" to "I'm talking to my people." Setting up a space, joining one, and
+ inviting the people who aren't here yet should each feel obvious.</p>
+ </li>
+
+ <li class="track">
+ <div class="track-head"><h2>Signing in &amp; never losing your account</h2><span class="pill building">Building now</span></div>
+ <p class="detail">The front door recognises you and the safety net always holds.</p>
+ <p>Sign in the way that suits you — a passkey, or with Apple, Google, Microsoft
+ or email — and pick up on a new device without ceremony. Most of this is already
+ live; the rest is finishing the doors and making recovery foolproof, so a lost
+ phone is never a lost history.</p>
+ </li>
+
+ <li class="track">
+ <div class="track-head"><h2>Solid on Mac &amp; iPhone</h2><span class="pill building">Building now</span></div>
+ <p class="detail">The native apps reach the web's polish.</p>
+ <p>Search, formatting, photos, unread markers, mentions — the everyday things —
+ working the same on every platform, with the rough edges smoothed. The apps are
+ where most people live, so they hold to the same bar as the web.</p>
+ </li>
+
+ <li class="track">
+ <div class="track-head"><h2>A fair way to pay</h2><span class="pill live">Live · being refined</span></div>
+ <p class="detail">Subscriptions are live; V1 makes the experience quietly excellent.</p>
+ <p>Paid plans, self-serve upgrade, manage and cancel — all working today. The V1
+ work is finesse: the upgrade prompt shows up exactly when a limit is felt and is
+ invisible otherwise, prices read as honestly fair (our
+ <a href="./economics.html">economics</a> are public so you can check), and nothing
+ ever fails silently.</p>
+ </li>
+
+ <li class="track">
+ <div class="track-head"><h2>Apps, bots &amp; integrations</h2><span class="pill next">Opt-in</span></div>
+ <p class="detail">Powerful extras that ship switched off.</p>
+ <p>Mini-apps, member-built apps, scheduled bots, GIFs, and connections to tools
+ like GitHub — real and useful, but not everyone wants them in the way. So they
+ ship turned <b>off</b> and you enable them per space with a slash command. The
+ default stays clean; the power is one command away.</p>
+ </li>
+
+ <li class="track">
+ <div class="track-head"><h2>Bringing your team over</h2><span class="pill next">Opt-in</span></div>
+ <p class="detail">Move a Slack workspace in, history and all.</p>
+ <p>An importer that carries your existing conversations across, so switching
+ doesn't mean starting from an empty room. Opt-in, like the rest of the extras.</p>
+ </li>
+
+ <li class="track">
+ <div class="track-head"><h2>Trust you can check</h2><span class="pill building">Ongoing</span></div>
+ <p class="detail">The promises kept, and kept in the open.</p>
+ <p>Accessibility to the WCAG&nbsp;2.2&nbsp;AA standard on every surface, moderation
+ tools for the people who run spaces, and the trust posture behind the encryption
+ held to. The <a href="./security.html">security ledger</a>, the
+ <a href="./carbon.html">carbon tally</a>, the <a href="./books.html">books</a> and
+ the <a href="./prompts.html">prompt ledger</a> already publish the parts most
+ products hide — that stays a principle, not a phase.</p>
+ </li>
+ </ol>
+ </section>
+
+ <section class="after" aria-labelledby="h-after">
+ <h2 id="h-after">After V1</h2>
+ <p class="note explain">Real plans, deliberately held until the core is finished — so V1
+ stays focused. Named here because we'd rather be honest about the direction than quiet.</p>
+ <ol class="tracks">
+ <li class="track">
+ <div class="track-head"><h2>Resilience at scale</h2><span class="pill later">After V1</span></div>
+ <p>Your space's files spread across independent storage providers, so no single
+ operator — us included — is ever a single point of failure. The groundwork is being
+ laid quietly under the hood.</p>
+ </li>
+ <li class="track">
+ <div class="track-head"><h2>Run it yourself, easily</h2><span class="pill later">After V1</span></div>
+ <p>Self-hosting Eleven on your own machine, down to a single command — and a way for
+ people who host to offer that capacity to others.</p>
+ </li>
+ <li class="track">
+ <div class="track-head"><h2>Provable, not just promised</h2><span class="pill later">After V1</span></div>
+ <p>Tamper-evident hosting: cryptographic checkpoints anyone can sample, so "the
+ server can't quietly change what it stores" becomes something you can verify, not
+ just trust.</p>
+ </li>
+ </ol>
+ </section>
+
+ <footer>
+ <p>🤖 This roadmap is curated by hand and updated as work moves — it's a direction
+ and a set of intentions, not a dated promise. The
+ <a href="./milestones.html">milestones</a> page records what's already landed; the
+ <a href="./prompts.html">prompt ledger</a> is the complete working record behind all
+ of it.</p>
+ </footer>
+</div>
+</body>
+</html>
diff --git a/web/status/security.html b/web/status/security.html
index 795c193..afb548b 100644
--- a/web/status/security.html
+++ b/web/status/security.html
@@ -73,6 +73,7 @@
<a href="./prompts.html">Prompt Ledger</a>
<a href="./ssh.html">Access Ledger</a>
<a href="./hardening.html">Fleet hardening</a>
+ <a href="./roadmap.html">Roadmap</a>
</nav>
<p class="lede">Eleven’s security posture, published as it stands. This is
what is true by design and how the hygiene looks today — never a map of open
diff --git a/web/status/ssh.html b/web/status/ssh.html
index 7bf38bd..665281c 100644
--- a/web/status/ssh.html
+++ b/web/status/ssh.html
@@ -74,6 +74,7 @@
<a href="./prompts.html">Prompt Ledger</a>
<span aria-current="page">Access Ledger</span>
<a href="./hardening.html">Fleet hardening</a>
+ <a href="./roadmap.html">Roadmap</a>
</nav>
<p class="lede">Every operator SSH session to the server that runs the fleet,