feat(www): reposition public site around governed AI adoption#286
Merged
Conversation
Reframe apps/www from "AI infrastructure in your AWS" (architecture-first) to "the control plane for governed AI adoption" (CTO-first). The same five controls were already shipped in admin — they just weren't marketed. New narrative arc: - Hero + ProofStrip lead with governance, not self-hosting. - AdoptionProblem frames the ban-or-adopt false choice. - FiveControls enumerates the five governance pillars (replaces WhyThinkWork's three generic pillars). - AgentTemplates / CostControl / Evals showcase each control with a caption-matched screenshot frame (styled SVG mockups now; real admin captures follow via apps/www/public/images/admin/CAPTURE.md). - SystemModel, MemoryWedge, FinalCTA reframed to match the new voice; MemoryWedge moves after the control story as a durable benefit. - All copy moves to a single apps/www/src/lib/copy.ts source so future edits don't drift across sections. Meta + OG description updated. No new dependencies. No CTA changes (docs/GitHub/login only). No new routes. No compliance badges (unearned). Header nav anchors relock to the new section IDs. Also includes the plan this implements: docs/plans/2026-04-20-001-feat-www-governance-positioning-refresh-plan.md Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
One-hand design pass across the whole homepage. The legacy sections
(Hero, ProofStrip, SystemModel, MemoryWedge, MobileApp, QuickStart,
FinalCTA) and the new enterprise-positioning sections (AdoptionProblem,
FiveControls, AgentTemplates, CostControl, Evals) now share one visual
vocabulary.
Shared primitives:
- SectionShell — one section wrapper with default/raised/sunken tone
and none/top/center/cascade glow presets
- SectionHeader — one eyebrow + H2 + lede lockup with optional step marker
- CapabilityShowcase — single partial used by AgentTemplates, CostControl,
Evals so the three showcases can never drift
- ScreenshotFrame — window-chromed frame (3 dots + route label) used for
every product shot on the page, with styled SVG fallback while
`pending={true}`
Adjustments:
- Hero: tighten pill eyebrow, text-balance + text-pretty on headline and lede
- ProofStrip: cardless, dot-led list with top brand hairline (no more divider grid)
- AdoptionProblem: numbered cards match FiveControls rhythm
- FiveControls: card hover states, numeric "01" marker in top-right
- SystemModel: keep the "Control wraps the system" frame, restyle to match
- MemoryWedge: replace gradient cards with unified card vocabulary
- MobileApp: single padded stage for both phones, swap Tasks → Wiki
- QuickStart: terminal chrome aligned with ScreenshotFrame chrome
- FinalCTA: echo the hero pill eyebrow to close the loop
Real product screenshots added — 9 captures committed under
apps/www/public/images/ with CAPTURE.md inventory:
- admin: dashboard, agent-templates (capabilities list), cost-analytics,
memories-graph (all-agents view), plus memories-graph-filtered
and thread-detail held as reserve assets
- mobile: threads-list, wiki-graph (now paired with threads in MobileApp),
wiki-list held as reserve asset
Evals still renders its SVG mock (no capture yet) — flip `pending={false}`
in Evals.astro when a real evals-run.png lands.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Evals was the last section still rendering the SVG placeholder. Pull the dedicated showcase from the homepage until a real /evaluations/$runId capture lands. Evals still appears as pillar #5 in FiveControls and as a proof point in ProofStrip — the narrative claim is preserved; only the fake-screenshot section goes away. While here: - Strip the `pending` fallback + SVG variants from ScreenshotFrame. Every active screenshot on the page is now a real PNG; the component is a pure window-chrome wrapper. - Remove the pending/variant props from CapabilityShowcase and callers. - Realign the two phones in MobileApp: drop the decorative translate-y offsets, switch from flex items-end to grid items-start so both phones anchor to the same top and their labels sit on the same baseline. CAPTURE.md documents how to re-add the Evals section once a real screenshot is captured. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Drop the floating bullet list next to the screenshot. Each showcase now:
- Centers the eyebrow + headline + lede above the fold of the section
- Puts the product screenshot front and center at full section width
- Promotes each proof point to a numbered feature card in a 4-up grid
below the screenshot — each card has a pill-style mono number, a
strong title, and a supporting sentence
Copy migrated from flat `bullets: string[]` to `features: { title, desc }[]`
in lib/copy.ts for AgentTemplates and CostControl so the grid has real
titles to render.
Dropped the `figureFirst` prop — the new layout is top-to-bottom by
construction, so left/right ordering is irrelevant.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Work the thread-detail screenshot into the page as a dedicated Audit section. The narrative arc through the governance block now reads: Templates -> control what agents CAN do Audit -> record what they DID Cost -> measure what it COST Audit uses the same elevated CapabilityShowcase pattern (centered header -> full-width screenshot -> 4-up numbered feature grid). Features: Step-by-step execution, Token + cost per turn, Status + attribution, Ready for evals (bridges back to the evals pillar without needing a dedicated evals screenshot). Flipped CostControl tone back to default so the three showcases alternate cleanly (default -> raised -> default). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adversarial + CTO reviewers flagged overclaims, voice-guardrail
violations, and dead code. This commit addresses the must-fix list:
Overclaim corrections (schema vs copy):
- "Tool allow-lists" -> "Tool block-lists" (copy.ts). The schema is
blocked_tools (deny-list); the previous framing promised a permit-
by-default model the runtime doesn't enforce. Security sign-off can
no longer rest on a false premise.
- "Automated gates on every template change" -> "Evaluation harness
for every template" (proofStrip + controls items + evals lede).
Nothing in packages/api gates a template write on eval results;
"gate" was load-bearing language without an enforcing code path.
- "Pipe the raw cost event stream into your own FinOps system" ->
"Cost events live in the Postgres you deployed" (costControl
features[3]). No export surface ships; the FinOps-system framing
implied a customer contract that doesn't exist.
- "Ready for a compliance review" -> "Inspectable per thread, per
agent, per tenant" (audit lede). Violated the file's own "no
unearned compliance" guardrail.
Voice-guardrail compliance (top-of-file rules finally enforced):
- FiveControls headline "The guardrails your adoption review already
requires" -> "Governance primitives, not bolted-on guardrails"
- FiveControls lede "Every control a skeptical CTO expects" ->
"Five first-class controls a governed rollout actually requires"
- CostControl headline "No surprise invoices from a runaway agent" ->
"Cost attributed where it happens"
- CostControl features[2] "turns into a receivable" -> "compounds into a bill"
- SystemModel lede "explain to a board" -> "hold in your head"
(restores the original, sharper phrasing)
- AdoptionProblem bullet "Not a pilot that can't scale" -> "One system
at every scale. The runtime a developer spins up in five commands
is the runtime production runs on." (drop "harness" jargon too)
- MobileApp "No pull-to-refresh dance" -> removed
- FinalCTA "The harness stays yours" -> "The runtime stays yours"
(harness is insider jargon, never defined on the page)
Hero lede split:
- One 29-word comma pile -> two sentences. Easier for a hurried scan.
Evals as a sub-feature, not a placeholder section:
- Strengthened Audit features[3] ("Evals run on the same trace") to
carry the AgentCore + custom-assertion story in one card. The
evals export in copy.ts is kept for when a real /evaluations/$runId
capture arrives and the dedicated showcase can be re-added
(instructions in CAPTURE.md).
Dead code + orphan asset cleanup:
- Moved unused reserve captures out of public/ into apps/www/assets/
so they stay versioned but stop shipping: memories-graph-filtered.png,
mobile/wiki-list.png, mobile/tasks-list.png.
- Updated CAPTURE.md: removed references to the long-deleted `pending`
prop and SVG fallbacks; documented how to re-add the Evals showcase.
OG image:
- Replaced the stale og-image.png (pre-positioning) with a fresh
1200x630 export matching the new hero. Rendered via Chrome headless
from scripts/og-source.html (kept in-tree so the asset is
regeneratable).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The Templates screenshot is the Capabilities/Skills list, which is the weakest visual of the four product shots. Leading with it killed momentum right after the five-controls overview. New showcase order: Audit -> Cost -> Templates -> SystemModel. Narrative reads: "See what your agents actually did (Audit) -> See and cap what they spent (Cost) -> Define the boundary for what they can do (Templates) -> One admin surface for all of it (System)." Rebalanced section tones so they still alternate cleanly: FiveControls raised -> Audit default -> Cost raised -> Templates default -> System raised. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Cut the "Keep the runtime. Keep the memory. Keep the work record." triplet — it repeats without adding meaning. Replace with a tighter two-sentence close that commits to the concrete security posture. Headline changes from the abstract "The runtime stays yours." to the action pair "Adopt AI. Keep control." — which directly answers the "ban vs adopt" framing the AdoptionProblem section opened with. Eyebrow moves from "Deploy on your terms" to "Your AWS · Your rules" (pulled into copy.ts so FinalCTA.astro reads from one source). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3 tasks
ericodom
added a commit
that referenced
this pull request
May 5, 2026
* feat(www): reposition public site around governed AI adoption
Reframe apps/www from "AI infrastructure in your AWS" (architecture-first)
to "the control plane for governed AI adoption" (CTO-first). The same
five controls were already shipped in admin — they just weren't marketed.
New narrative arc:
- Hero + ProofStrip lead with governance, not self-hosting.
- AdoptionProblem frames the ban-or-adopt false choice.
- FiveControls enumerates the five governance pillars (replaces
WhyThinkWork's three generic pillars).
- AgentTemplates / CostControl / Evals showcase each control with a
caption-matched screenshot frame (styled SVG mockups now; real admin
captures follow via apps/www/public/images/admin/CAPTURE.md).
- SystemModel, MemoryWedge, FinalCTA reframed to match the new voice;
MemoryWedge moves after the control story as a durable benefit.
- All copy moves to a single apps/www/src/lib/copy.ts source so future
edits don't drift across sections.
Meta + OG description updated. No new dependencies. No CTA changes
(docs/GitHub/login only). No new routes. No compliance badges (unearned).
Header nav anchors relock to the new section IDs.
Also includes the plan this implements:
docs/plans/2026-04-20-001-feat-www-governance-positioning-refresh-plan.md
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(www): unify design system + ship real admin/mobile captures
One-hand design pass across the whole homepage. The legacy sections
(Hero, ProofStrip, SystemModel, MemoryWedge, MobileApp, QuickStart,
FinalCTA) and the new enterprise-positioning sections (AdoptionProblem,
FiveControls, AgentTemplates, CostControl, Evals) now share one visual
vocabulary.
Shared primitives:
- SectionShell — one section wrapper with default/raised/sunken tone
and none/top/center/cascade glow presets
- SectionHeader — one eyebrow + H2 + lede lockup with optional step marker
- CapabilityShowcase — single partial used by AgentTemplates, CostControl,
Evals so the three showcases can never drift
- ScreenshotFrame — window-chromed frame (3 dots + route label) used for
every product shot on the page, with styled SVG fallback while
`pending={true}`
Adjustments:
- Hero: tighten pill eyebrow, text-balance + text-pretty on headline and lede
- ProofStrip: cardless, dot-led list with top brand hairline (no more divider grid)
- AdoptionProblem: numbered cards match FiveControls rhythm
- FiveControls: card hover states, numeric "01" marker in top-right
- SystemModel: keep the "Control wraps the system" frame, restyle to match
- MemoryWedge: replace gradient cards with unified card vocabulary
- MobileApp: single padded stage for both phones, swap Tasks → Wiki
- QuickStart: terminal chrome aligned with ScreenshotFrame chrome
- FinalCTA: echo the hero pill eyebrow to close the loop
Real product screenshots added — 9 captures committed under
apps/www/public/images/ with CAPTURE.md inventory:
- admin: dashboard, agent-templates (capabilities list), cost-analytics,
memories-graph (all-agents view), plus memories-graph-filtered
and thread-detail held as reserve assets
- mobile: threads-list, wiki-graph (now paired with threads in MobileApp),
wiki-list held as reserve asset
Evals still renders its SVG mock (no capture yet) — flip `pending={false}`
in Evals.astro when a real evals-run.png lands.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(www): drop Evals placeholder section + realign mobile phones
Evals was the last section still rendering the SVG placeholder. Pull
the dedicated showcase from the homepage until a real /evaluations/$runId
capture lands. Evals still appears as pillar #5 in FiveControls and as
a proof point in ProofStrip — the narrative claim is preserved; only
the fake-screenshot section goes away.
While here:
- Strip the `pending` fallback + SVG variants from ScreenshotFrame.
Every active screenshot on the page is now a real PNG; the component
is a pure window-chrome wrapper.
- Remove the pending/variant props from CapabilityShowcase and callers.
- Realign the two phones in MobileApp: drop the decorative
translate-y offsets, switch from flex items-end to grid items-start
so both phones anchor to the same top and their labels sit on the
same baseline.
CAPTURE.md documents how to re-add the Evals section once a real
screenshot is captured.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(www): elevate capability showcases from bullets to feature grid
Drop the floating bullet list next to the screenshot. Each showcase now:
- Centers the eyebrow + headline + lede above the fold of the section
- Puts the product screenshot front and center at full section width
- Promotes each proof point to a numbered feature card in a 4-up grid
below the screenshot — each card has a pill-style mono number, a
strong title, and a supporting sentence
Copy migrated from flat `bullets: string[]` to `features: { title, desc }[]`
in lib/copy.ts for AgentTemplates and CostControl so the grid has real
titles to render.
Dropped the `figureFirst` prop — the new layout is top-to-bottom by
construction, so left/right ordering is irrelevant.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(www): add Audit showcase between Templates and Cost
Work the thread-detail screenshot into the page as a dedicated Audit
section. The narrative arc through the governance block now reads:
Templates -> control what agents CAN do
Audit -> record what they DID
Cost -> measure what it COST
Audit uses the same elevated CapabilityShowcase pattern (centered
header -> full-width screenshot -> 4-up numbered feature grid).
Features: Step-by-step execution, Token + cost per turn, Status +
attribution, Ready for evals (bridges back to the evals pillar
without needing a dedicated evals screenshot).
Flipped CostControl tone back to default so the three showcases
alternate cleanly (default -> raised -> default).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(www): act on reviewer feedback — must-fix copy + OG + dead code
Adversarial + CTO reviewers flagged overclaims, voice-guardrail
violations, and dead code. This commit addresses the must-fix list:
Overclaim corrections (schema vs copy):
- "Tool allow-lists" -> "Tool block-lists" (copy.ts). The schema is
blocked_tools (deny-list); the previous framing promised a permit-
by-default model the runtime doesn't enforce. Security sign-off can
no longer rest on a false premise.
- "Automated gates on every template change" -> "Evaluation harness
for every template" (proofStrip + controls items + evals lede).
Nothing in packages/api gates a template write on eval results;
"gate" was load-bearing language without an enforcing code path.
- "Pipe the raw cost event stream into your own FinOps system" ->
"Cost events live in the Postgres you deployed" (costControl
features[3]). No export surface ships; the FinOps-system framing
implied a customer contract that doesn't exist.
- "Ready for a compliance review" -> "Inspectable per thread, per
agent, per tenant" (audit lede). Violated the file's own "no
unearned compliance" guardrail.
Voice-guardrail compliance (top-of-file rules finally enforced):
- FiveControls headline "The guardrails your adoption review already
requires" -> "Governance primitives, not bolted-on guardrails"
- FiveControls lede "Every control a skeptical CTO expects" ->
"Five first-class controls a governed rollout actually requires"
- CostControl headline "No surprise invoices from a runaway agent" ->
"Cost attributed where it happens"
- CostControl features[2] "turns into a receivable" -> "compounds into a bill"
- SystemModel lede "explain to a board" -> "hold in your head"
(restores the original, sharper phrasing)
- AdoptionProblem bullet "Not a pilot that can't scale" -> "One system
at every scale. The runtime a developer spins up in five commands
is the runtime production runs on." (drop "harness" jargon too)
- MobileApp "No pull-to-refresh dance" -> removed
- FinalCTA "The harness stays yours" -> "The runtime stays yours"
(harness is insider jargon, never defined on the page)
Hero lede split:
- One 29-word comma pile -> two sentences. Easier for a hurried scan.
Evals as a sub-feature, not a placeholder section:
- Strengthened Audit features[3] ("Evals run on the same trace") to
carry the AgentCore + custom-assertion story in one card. The
evals export in copy.ts is kept for when a real /evaluations/$runId
capture arrives and the dedicated showcase can be re-added
(instructions in CAPTURE.md).
Dead code + orphan asset cleanup:
- Moved unused reserve captures out of public/ into apps/www/assets/
so they stay versioned but stop shipping: memories-graph-filtered.png,
mobile/wiki-list.png, mobile/tasks-list.png.
- Updated CAPTURE.md: removed references to the long-deleted `pending`
prop and SVG fallbacks; documented how to re-add the Evals showcase.
OG image:
- Replaced the stale og-image.png (pre-positioning) with a fresh
1200x630 export matching the new hero. Rendered via Chrome headless
from scripts/og-source.html (kept in-tree so the asset is
regeneratable).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(www): reorder showcases so Audit leads, Templates lands last
The Templates screenshot is the Capabilities/Skills list, which is
the weakest visual of the four product shots. Leading with it killed
momentum right after the five-controls overview.
New showcase order: Audit -> Cost -> Templates -> SystemModel.
Narrative reads: "See what your agents actually did (Audit) ->
See and cap what they spent (Cost) -> Define the boundary for what
they can do (Templates) -> One admin surface for all of it (System)."
Rebalanced section tones so they still alternate cleanly:
FiveControls raised -> Audit default -> Cost raised -> Templates
default -> System raised.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(www): sharpen the FinalCTA close
Cut the "Keep the runtime. Keep the memory. Keep the work record."
triplet — it repeats without adding meaning. Replace with a tighter
two-sentence close that commits to the concrete security posture.
Headline changes from the abstract "The runtime stays yours." to the
action pair "Adopt AI. Keep control." — which directly answers the
"ban vs adopt" framing the AdoptionProblem section opened with.
Eyebrow moves from "Deploy on your terms" to "Your AWS · Your rules"
(pulled into copy.ts so FinalCTA.astro reads from one source).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Reframe the
apps/wwwpublic site from "AI infrastructure in your AWS" (architecture-first) to "the control plane for governed AI adoption" (CTO-first). Built for enterprise CTOs the sales lead is meeting at the conference this week — the same audience being pushed toward either banning AI or adopting it naively.Every capability claim maps to a feature that already ships in
apps/admin. The plan this implements, with the full codebase audit and prior-art research, is atdocs/plans/2026-04-20-001-feat-www-governance-positioning-refresh-plan.md.What changed
New narrative arc (top to bottom):
Hero— new headline: "The control plane for governed AI adoption."ProofStrip— five governance proof points (replaces the four open-source/self-host bullets)AdoptionProblem(new) — the "ban-or-adopt is a false choice" framingFiveControls(new) — five pillar cards; replacesWhyThinkWorkAgentTemplates/CostControl/Evals(new) — one showcase per control with admin screenshot + proof bulletsSystemModel,MemoryWedge,FinalCTA— reframed voiceMobileApp,QuickStart— largely intact (benefit + dev entry path)Shared infrastructure:
src/lib/copy.ts— single source of truth for all homepage copy so future edits don't drift across sectionssrc/components/ScreenshotFrame.astro— consistent bezel + caption wrapper; renders a styled SVG mockup until real admin captures drop insrc/components/BrainMark.astrountouched; brand color untouched; no new depsRespecting the explicit scope boundaries:
Screenshots follow-up
The three capability showcases currently render stylized SVG mockups so the site ships polished. Real captures go in:
apps/www/public/images/admin/agent-templates.pngapps/www/public/images/admin/cost-analytics.pngapps/www/public/images/admin/evals-run.pngOnce the PNGs are dropped in, flip
pendingtofalseon eachScreenshotFrame. Capture checklist atapps/www/public/images/admin/CAPTURE.md.Test plan
pnpm --filter @thinkwork/www buildcompletes without warnings (verified locally)SystemModel+MemoryWedgestill reference existing admin screenshots with accurate alt text<head>reflect the new positioningWhyThinkWorkremain (deleted)Plan reference
docs/plans/2026-04-20-001-feat-www-governance-positioning-refresh-plan.md🤖 Generated with Claude Code