build-partner
Build-partner portal — research, ideation, and a plan for a page that makes partners insiders
Why
We're bringing on build partners who embed Qpoint into their tech stacks and org charts. They need insight into the state of the project, our current goals and efforts, and honest guidance on sharp edges and gotchas. Done right, the portal is also a platform for making our mission and product ops transparent — and for making partners feel like an integral part of a fast-moving team, not spectators. Research (see research.md) shows the strongest programs pair a structured partner program with a feedback → roadmap → shipped loop; nobody in the dev-tools space does an honest "sharp edges" surface well, which is open space for us.
Objective
A decided portal concept ready to build: content architecture (which sections, where each section's data comes from), placement + auth decision, and a reviewed wireframe/mock direction. Implementation of the real portal is a follow-on cycle.
Scope
cycles/c62.build-partner/— research.md, ideation.md, plan (this file)- bob-wire — wireframes/mocks for the portal concept (Phase 2)
- Possibly
app/pages/mock on the design site (Phase 3) - Content sources: cycles system (CYCLES.md/HISTORY.md across repos), changelog material, sharp-edges content (new)
- Two-track expansion (2026-08-10):
two-track-system.md+ tracks ideas page; qcontrol repo read-only (theqeventscontract grounds the Qkit material — no qdash changes here)
Plan
Phase 0 — Decisions. ✅ Answered 2026-08-08:
- Partners: none yet — first cohort arriving shortly. Tech teams testing qcontrol integration for oversight and control of their org's AI usage. Portal can be designed before partner #1, so program structure bakes in from day one.
- Placement: mock first (design site), app integration later — confirmed.
- Transparency ceiling: stay focused (cycles, sharp edges, velocity); open to spicier content case-by-case.
- Program structure: no preference yet — survey of structures requested and delivered (
program-structures.md), recommendation pending Mark's read. - Personalization: explore BOTH the shared portal and the per-partner deployment view — the per-partner idea landed. Content architecture covers both surfaces.
Phase 1 — Content architecture. Pick the v1 sections (proposed: Now/Next/Shipped · Sharp Edges · Mission/Thesis · Direct Line · Partner Wall/attribution ledger) and define each section's source of truth so the portal stays cheap to keep honest. Write the first real Sharp Edges entries as content spike — if we can't write 5 honest entries, the anchor page idea dies early.
Phase 2 — Wireframe in bob-wire. Brief-writer → wireframe-builder pass on the portal's structure; iterate on hierarchy for the two audiences (embedding engineer vs. their boss).
Phase 3 — Mock on the design site. Layer-built page mock ("the portal is the pitch" — it should be demo-quality). Reuse: cycle/timeline material (c39), DataMetric family for ops stats, qmap for the per-partner topology tease.
Phase 4 — Placement + v1 build. Follow-on cycle: stand it up (recommended: standalone partners.qpoint.io consuming the layer, simple auth), pilot with 1–2 partners, then wire the per-partner deployment view to app.qpoint.io data later.
Key Changes
- Research pass across five portal patterns (design-partner programs, roadmap/changelog loops, insider programs, open-startup pages, Notion-class portals) —
research.md - Ideation on transparency surfaces, partner-privileged affordances, and unconsidered angles —
ideation.md - Renamed
initial-promt.md→initial-prompt.md - Phase-0 decisions recorded (2026-08-08): mock-first placement, focused transparency, explore both shared + per-partner surfaces
- Program-structure survey with composed recommendation (cohort pilot chassis + rolling phase tracking + insider graduation) —
program-structures.md - Phase-1 content architecture: 7 shared-portal sections + 5 per-partner sections, each with source of truth and honesty cost —
content-architecture.md - Sharp Edges content spike: repo sweep of qcontrol + qtap found 24 evidenced candidates; 15 curated partner-facing entries drafted, anchor page validated —
sharp-edges.md. Side-effect finds: qtap docs overclaim TLS library support (OpenSSL-only ships), and qcontrol ≠ built-on-qtap-eBPF (independent products — partner materials must not conflate them) - Phases 2+3 run in parallel as a deliberate experiment: does the bob-wire wireframe step still add value, or are the patterns mature enough to paint directly? Wireframe arm in bob-wire (both surfaces); direct-paint arm on the design site
- Design-site mock painted directly from the content docs —
app/pages/pages/build-partner-portal.vue(/pages/build-partner-portal): momentum band + Now/Next/Shipped with "closes sharp edge" loop markers, 10-entry sharp-edges registry (qcontrol + qtap split), 5-phase program tracker with cohort counts, numbered partner wall (Meridian Systems as viewing partner, reusing the c59 world), thesis, direct line. Registered in page-registry (newpartnersgroup) - Wireframe arm delivered in bob-wire c20.build-partner-portal (uncommitted): brief + both surfaces (
app/pages/c20/wireframes/wf1/partner-portal-v1/portal.vue+partner.vue), registered. Surface B explores the two-altitude tension via an Engineering/Leadership toggle; adds adeclinedledger state, a "who's blocking: you" card, and a "what we'd tell your CISO unprompted" card - Experiment verdict (wireframe value vs. direct paint): patterns are mature enough to paint a pattern-covered page (Surface A) directly — the wireframe added no layout value there. The wireframe arm earned its keep on the undecided surface and on stress-tests: it caught a cohort-math inconsistency in the spec, showed all 15 edges dominate the page (needs own page or collapsed rows), and generated content ideas the direct paint didn't (declined state, CISO caveat card). Conclusion: wireframes for new structural questions; direct paint for pattern-covered composition. Phase-1 content docs did the heavy lifting for both arms.
- Open decisions from wireframe review: altitude toggle vs. single scroll with leadership band; Sharp Edges own-page threshold; is
declinedledger state canon; reconcile cohort numbers in the program doc - Two-track expansion (2026-08-10): program forked into Track 1 — Qkit, the unified event stream as a product for solution providers (in talks: Cisco, F5, Vanta; no dashboard, they build their offerings on the stream) — and Track 2, the qcontrol dashboard as product for operating companies (itself built on Qkit). Demo strategy: one dashboard demo serves both audiences, then lands on a tracks page outlining the differences + arrangement. Names are working names. Decisions: explore page options c61-ideas-style; mock-first (qdash wiring is follow-on).
- Two-track system doc —
two-track-system.md: track definitions with the differences table, the Qkit event-family taxonomy grounded in the realqeventscontract (9 families / ~57 wire types; 7 live, 2 projected — findings-on-stream and session lifecycle), the candid gap list (no identity on envelope, local-socket-only delivery, OCSF copy has no code), Founding Integrator arc (4 phases) alongside the existing 5-phase partner program, the demo flow script with the per-audience pivot line, and portal track-awareness implications (follow-on). Key exploration find: Qkit substantially exists —crates/qeventsships a versioned public contract (JSON Schema 119 $defs, generated TS types, consumer guide whose example socket isqcontrol-thousandeyes.sock) with a documented stable/unstable boundary - Tracks ideas page —
app/pages/pages/build-partner-tracks-ideas.vue(/pages/build-partner-tracks-ideas, registered underpartners): four concepts — (1) the fork (pricing-page shape: track cards + differences table), (2) the stream is the product (nine-family spine forking to partner monograms vs "our dashboard — first customer", projected families dashed amber), (3) the demo epilogue (what-you-just-saw recap tiles mapping demo beats to event families, then the fork), (4) the honest contract (real artifacts, family × status table, stability/delivery/won't-pretend fine print). Coda recommends stack A: epilogue → fork → stream banner → arrangement, with the contract one click deep. Working names held in script constants (QKIT/DASH) for cheap rename - New open decisions: commit or rename Qkit / dashboard track names; which coda stack advances to a composed mock; portal track-awareness rework timing; whether
finding.*promotion is formally offered as founding-cohort item #1 - Precedents-research pass (2026-08-10):
precedents-research/— ~40 real programs across four categories (design-partner, insider/early-access, platform/ISV, founding-customer deal mechanics), all source-linked + spot-verified, with a cross-category feature matrix and implications mapped to program-structures + two-track docs. Headlines: nobody ships a partner portal (function = toggle + chat + changelog — portal must be additive to the human channel); free-vs-paid is the only live disagreement, everything else near-consensus; platform programs launch with small named cohorts; the attribution ledger is the best-precedented portal section. Anchor artifacts: Common Paper DPA (benchmark data), EchelonGraph's public program spec (eBPF-adjacent), Sierra's 100%-conversion retro, Connect with Confluent (closest Qkit analog) - Visibility-stream thread (2026-08-13): executed
visibility-stream-prompt.md(nédata-sources.md) — how to open an automated visibility/progress/recognition stream to partners with minimal team strain. Three artifacts:visibility-stream-plan.md(investigation plan),visibility-stream.md(the ideation: source audit, digest-agent design, Slack mechanics, recognition push, founding artifacts, sequenced v1), andsample-digest.md(proof-of-concept weekly digest generated from real repo data). Key finds: HISTORY.md is a dead source (zero completions archived in 30 days across 9 repos — the mock's "generated, never hand-edited" claim is currently unkeepable); the live sources are CYCLE.md Key Changes, the layer tag stream (14 tags/30d, subjects carry cycle numbers — free join key), qcontrol's git log (46 commits/30d, PR-numbered), and the qevents CHANGELOG (partner-gradeCompatibility:lines, but 8 of 12 entries undated "Pending"); two Slack webhooks already run in CI (qtap image notify — likely the known "release channel" — and a stars bot; qcontrol has zero Slack config); the design-site timeline model has'history'/'git'source slots declared but never implemented; zero scheduled automation exists anywhere in the workspace. Outside research (cited in doc): generate from structured records not raw diffs (94k-release-note study), reviewer-gatekeeper + fixed template + quiet-week doctrine (nobody ships this — white space), per-partner Slack Connect channels with broadcast fan-out + human-shadow rule, earned-vs-given artifact split (Twilio jacket / Arc card / Stripe milestone gifts). Adds decisions 11–16 to the queue; takes positions on #6 (sharp-edges own page + data file) and #7 (declinedis canon). Follow-up same day:digest-archive.md— three consecutive weekly issues (Jul 24 – Aug 13) backfilled from real repo data, newest-first, with a stakeholder preamble; seed content for the portal ship-log and the internal pitch. Execution started same day (v1 items 1–2):/partner-digestskill (.claude/commands/partner-digest.md— window detection, gather/filter/draft/voice-check/save loop, never-skip + cite-everything rules),digests/stream directory seeded with the three backfill issues as dated files (the portal's intended data source), andslack-playbook.md(channel architecture, cadence promise, posting rules, human-shadow rule, emoji vocabulary, welcome template) - Partner sell-page concepts (2026-08-13):
/pages/partner-ideas(registered, partners group) — four concepts for the/partnerpage demos land on, all fed by the live digest stream via newserver/api/digests/index.get.ts(parsesdigests/*.mdinto structured issues + computed meta): (1) the receipts — cadence-promise hero, render-time momentum band (first surface where "never hand-edited" is literally true), latest issue as proof object; (2) the epilogue with receipts — demo recap → the real three-week stream → the tracks fork; (3) said honestly — the stream's slippage quotes as a dated honesty wall + sharp-edges tally; (4) the channel —#qpoint-yourcoon an ordinary Thursday, digest bot post from the API, human-shadow reply, 🎫-to-ledger capture. Coda: demo-day composition (recap → receipts → tracks-A doors → honesty → channel, contract one click deep); open review question: honesty wall on-page vs one click deep. Verified SSR against the live dev server - Partner Board (2026-08-13):
/pages/partner-board(registered) — the partner-facing weekly home, show-not-tell pass on the pitch-heavy ideas page. Glance layer: week-selector chips with activity bars (shipped/in-flight/honest counts as bar heights), DataMetric pulse band with week-over-week delta, shipped cards as bold leads + auto-extracted evidence chips (PRs/versions/cycles/SHAs regexed from digest text), amber "Watch out" flags, pulsing "Moving" lane, "Coming" chips, single ask card with Slack CTA. Detail layer: digest story bodies verbatim behind per-card expand; expand state resets on week switch. All from /api/digests — no hand-written content beyond labels. Open design question: link Watch-out entries to sharp-edge registry entries when referenced - Partner Board — Maximal (2026-08-13):
/pages/partner-board-max(registered) — deliberate-overreach pass, eight boards of the same /api/digests stream. Solid four: mission-control cockpit (arc gauge, status lamps, sparklines, evidence ticker), heat wall (workstream×week intensity grid, story dot field, cumulative area), river sankey (weeks→lanes ribbons, chips adrift), radar+orbit (shape-of-week polygon with week ghosting, sharp edges as pulsing satellites). Wild four: seismograph (ships as up-spikes, honest notes as dips, live needle), arcade (streak=HP, ships=XP, honest notes=truth tokens, stories as pixel sprites, asks as quests), constellation (stars sized by depth, auto-linked by shared citations), metro map (workstream transit lines, stories as stations, Coming queue as ghost stations on dashed track). Workstream classification + story depth + chips derived from digest text. Coda verdicts — keep: metro, sparkbars/gauges, seismo needle · maybe: heat wall, river · cut: radar, constellation · easter egg: arcade (launch moments / wrapped artifacts, not Thursdays) - Arcade & Organism (2026-08-13): the arcade thread iterated wide (prompt/plan:
arcade-organism-prompt.md/arcade-organism-plan.md). Newserver/api/commits/index.get.ts— real raw pulse: git log across 5 repos, 152 commits/45 days, per-day counts (qtap's 0 included honestly)./pages/arcade-organism-ideas(registered) — six living-system concepts: the lobby (cohort as 8-player select, PRESS START reserved seats), strata (curated stories over real commit texture — the Aug 6 batch-commit tower visible), heartbeat (two-chamber EKG, product + design-system traces, Thursday strong beats, BPM readout), double helix (product/design strands rung by the real 14-tag release list, labeled join keys v0.9.10⇄c61), growth rings (ring per week, workstream segments, honest-note scars, Coming buds), world map (90-day wrapped preview, fog-of-war future). Coda homes: strata+heartbeat → the board · rings → monthly recap poster · lobby → cohort page · world map → per-partner wrapped · helix → the deck - Data Swarm (2026-08-13): real-data pairing pass (prompt/plan:
data-swarm-prompt.md/data-swarm-plan.md) — every mark a real event, AI stats promoted to a first-class progress metric (the dogfood thesis: visibility → controls → safe/efficient AI). Two new APIs:server/api/ai-usage/index.get.ts(parses this machine's Claude Code transcripts for qpoint projects — 91 sessions, 18.0M output / 84.6M input / 3.3B cache-read tokens over 45 days, per-session + per-day + per-hour aggregates, module-cached; labeled "one seat — team-wide is llm.usage on the stream") andserver/api/commits/detail.get.ts(per-commit--numstat: 152 commits, +195k/−56k lines)./pages/data-swarm-ideas(registered): AI stat hero band (incl. tokens-per-commit ≈118k, tokens-per-story ≈1.6M) + four plots — (1) expenditure swarm: dot per session, time × log output tokens, size = messages, color = project; (2) tokens-in→code-out: dot per day, log tokens × log lines, tokens/line isoquants, sequential recency hue; (3) commit swarm: dot per commit, time × log lines (the #639 ~52k-line cutover towers correctly); (4) punchcard of attention: day × hour, size = tokens, weekend bands. Dataviz-skill procedure followed: categorical palette machine-validated (first attempt FAILED — slate low-chroma + pink↔emerald deutan-adjacent; fixed order violet/emerald/sky/pink ALL PASS, sky↔pink floor-band covered by legend + labels); 397 marks SSR-verified, all with hover tooltips. Meaning-layer addendum (same day): selective ✓-callouts overlaying the raw signal — derived, not hand-written: digest stories anchor to the commit swarm wherever their own evidence chips (#PR / vX.Y.Z) match a commit subject (6 callouts render: agent coverage, installation identity, dashboard-onto-layer, pixel identity, unified event schema, Dashboard MVP — with ring highlight, leader line, surface-halo labels, side-placement near the plot top); one ⌾ peak-session callout on the expenditure swarm; leverage + punchcard deliberately unannotated with the rule stated on the page - Data Swarm II (2026-08-13): pairs iteration (prompt/plan:
data-swarm-2-prompt.md/data-swarm-2-plan.md) — no new APIs; amplifies metrics already in the data: session duration, cache-read context depth (3.3B, never previously charted), model mix, adds-vs-deletes./pages/data-swarm-2-ideas(registered), 8 plots. Solid: metabolism (add×del per commit, churn diagonal, derived ✓-callout lands on #639 — the cutover pruned more than it added), call & response (mirrored tokens/LOC per day, labeled separate scales), context depth (cacheRead×out per session — up-right drift = context is leverage), shift log (session span bars, hour×day, color=model). Out-there: iceberg (output above waterline, 185× cache-context below, one shared log scale), breath (net lines diverging around zero, release breath-marks), orchestra (stacked tokens by model — the fable-5 August entrance reads as a keychange), exchange rate (tok/line daily + 7-day rolling median, ticker framing, ✓ best-day callout). Approximations disclosed on-page (cache/model attributed to session start day). Coda: pairs catalog for iteration III (governance PR-ratio, verbosity, citation density, in-flight age, commit shape, tokens×edge-closures as north star). SSR-verified: 262 dots / 205 bars / 6 areas - Data Swarm III (2026-08-13): accountability iteration (prompt/plan:
data-swarm-3-prompt.md/data-swarm-3-plan.md) — executes II's pairs-catalog backlog. API extensions: commits/detail gainsfiles+hour; ai-usage gainsmicroscope(busiest day at session-minute grain)./pages/data-swarm-3-ideas(registered), 8 plots. Solid: governance ratio (PR-merged vs direct-push per week — 45% overall, sharply split by repo: product reviews, design pushes direct; the thesis metric applied to ourselves), verbosity (msgs×tokens per session by model, tok/msg guides), commit shape (files×lines, wide-shallow vs narrow-deep), claims vs evidence (words×citations per digest story, avg line — honesty discipline measured). Out-there: promise tracker (every in-flight item auto-arced to its fate via word-overlap against later issues — landed/still-moving/went-quiet, status-colored; "quiet is a debt the next digest owes"), two clocks (radial 24h dials: AI generation vs code landing), the microscope (Jul 27 at message grain — 333 session-minute marks across 21 sessions, granularity's far end), the north star (deliberately empty: cumulative tokens × edges closed, 0 closures — ghost mark "the first closed edge draws here" as commitment device). Coda lesson: progress metrics impress, accountability metrics convert. SSR-verified: 598 marks - Thread documentation convention (2026-08-13): each ad-hoc thread now persists
<thread>-prompt.md(verbatim) +<thread>-plan.mdalongside its artifacts — added to the canonical cycle-manager agent (sister-project sync pending); retro-applied across c62 (data-sources.md→visibility-stream-prompt.md; prompt files added for partner-ideas, partner-board, partner-board-max, arcade-organism)
Visual record
18 captures — heroes, page slices, and full-page renders. Click to view.


















In the archive
Artifacts
- initial-prompt.md
- thread: arcade-organism — prompt + plan
- thread: data-swarm-2 — prompt + plan
- thread: data-swarm-3 — prompt + plan
- thread: data-swarm — prompt + plan
- thread: partner-board-max — prompt + plan
- thread: partner-board — prompt
- thread: partner-ideas — prompt
- thread: visibility-stream — prompt + plan
- PICKUP.md — parked-state re-entry note
- PICKUP.md
- content-architecture.md
- digest-archive.md
- executive-summary.md
- ideation.md
- initial-prompt.md
- program-structures.md
- research.md
- sample-digest.md
- sharp-edges.md
- slack-playbook.md
- two-track-system.md
- visibility-stream.md