Skip to content

EOS landing page: The Bill + Comparison Matrix (first slice)#143

Open
mikepsinn wants to merge 15 commits into
mainfrom
feature/eos-landing-page
Open

EOS landing page: The Bill + Comparison Matrix (first slice)#143
mikepsinn wants to merge 15 commits into
mainfrom
feature/eos-landing-page

Conversation

@mikepsinn

@mikepsinn mikepsinn commented Jul 25, 2026

Copy link
Copy Markdown
Owner

First vertical slice of the EOS landing page v2 (optimitron:dev:eos-landing-page-v2). Built at a new route /eos-preview so the existing /eos retro page is untouched — cutover is a later human decision. Route is noindex.

Spec / source of truth (copy is verbatim): manual/knowledge/production/eos-landing-page.qmd.

Done in this PR

  • Shared two-register design system (eos-preview.css, scoped under .eos-preview, a sanctioned dark exception like eos-retro.css):
    • Register 1 "The Bill" — dark, dense, clinical, white ink, one hot accent on the numbers.
    • Register 2 — 1950s retro-futurist catalog, pastel accents on dark, Righteous display type.
    • Reusable tokens + primitives so later sections reuse them.
  • Section 1 — The Bill: verbatim charge-sheet copy, the live ticking death counter (reuses the shared useDeathTick hook + Page Visibility API; static fallback under reduced motion), the large centered Political Dysfunction Tax number, and the register pivot ("You may be eligible for optimization.").
  • Section 3 — The Comparison Matrix: the "Your Government vs Earth Optimization Services" table. Responsive: 3-column table on desktop, stacked labeled cards on mobile.

Stubbed (out of scope, clearly marked TODO on the page)

Section 2 (Store), 4 (Featured Products), 5 (Government Replacement Suite / agencies grid), 6 (Thermostat), 7 (Please Select an Earth / GDP chart), 8 (A Day in the Optimized Life), 9 (Reviews), 10 (Your Move / investor CTA), 11 (Footer).

Parameters

Every numeric value renders live from the parameter pipeline (@optimitron/data/parameters via ParameterValue). Zero hardcoded parameter numbers. All vars referenced by these two sections resolved to real exported parameters — no unwired placeholders remain in the shipped sections.

Two known cosmetic formatting artifacts (faithful to the parameter units, not bugs): the USD/year per-person/household tax figures render as $12,600/year inside the phrase "per person per year" (double "year"), and war_counterfactual_gdp_per_capita (unit USD/person) renders as $334,000/person inside "would earn ... a year". Both come from the parameter's own unit; no display mode strips them without hardcoding.

Verification

  • tsc --project tsconfig.next.json: 0 errors.
  • next build: passes; /eos-preview present in the route table (all 307 pages generated).
  • Screenshots captured and inspected locally at desktop 1440px + mobile 390px for both sections + the pivot (via Playwright on port 3006, server shut down after). Not attached here per repo policy.

Never merge without human review.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Added a new /eos-preview landing page featuring “The Bill” section, live death counter, parameter-driven statistics, and a government-versus-Earth Optimization Services comparison matrix.
    • Added responsive styling, scroll-based reveals, reduced-motion support, and mobile-friendly layouts.
    • Added deterministic desktop and mobile screenshot capture for preview review.
  • SEO
    • Marked the preview page as noindex and excluded it from site navigation and sitemaps.

First vertical slice of the EOS landing page v2 (optimitron:dev:
eos-landing-page-v2). Built at a NEW route /eos-preview so the existing
/eos retro page is untouched; cutover is a later decision.

Ships:
- A shared two-register design system (eos-preview.css) scoped under
  .eos-preview: Register 1 "The Bill" (dark, clinical, hot accent numbers)
  and Register 2 the 1950s retro-futurist catalog (pastels on dark).
  Reusable tokens + primitives so later sections reuse them.
- Section 1 (The Bill): verbatim charge-sheet copy, the live ticking death
  counter (reuses the shared useDeathTick hook + Page Visibility API), the
  large centered Political Dysfunction Tax number, and the register pivot.
- Section 3 (The Comparison Matrix): the Your Government vs Earth
  Optimization Services table, responsive (3-col desktop, stacked cards on
  mobile).
- Clearly-marked TODO stubs for every out-of-scope section (Store,
  Products, agencies grid, GDP chart, day timeline, reviews, CTA, footer).

Every numeric value renders live from the parameter pipeline
(@optimitron/data/parameters via ParameterValue). Zero hardcoded parameter
numbers. Verbatim canonical lines preserved. No em-dashes in page copy.

Verified: tsc (tsconfig.next.json) 0 errors; next build passes with
/eos-preview in the route table; desktop 1440px + mobile 390px screenshots
captured and inspected locally.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 25, 2026 02:20

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@vercel

vercel Bot commented Jul 25, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
optimitron-web Building Building Preview, Comment Jul 25, 2026 8:54pm

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@github-actions[bot], you've reached your PR review limit, so we couldn't start this review.

Next review available in: 59 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 5a4cb10a-fcd0-44e4-bfee-34bb43ef4fed

📥 Commits

Reviewing files that changed from the base of the PR and between 3fa9554 and a8ff954.

📒 Files selected for processing (18)
  • packages/web/scripts/eos-preview-screenshots.mjs
  • packages/web/src/components/eos-preview/BudgetSlider.tsx
  • packages/web/src/components/eos-preview/DfdaRankingTable.tsx
  • packages/web/src/components/eos-preview/EosLandingPreviewPage.tsx
  • packages/web/src/components/eos-preview/FeaturedProducts.tsx
  • packages/web/src/components/eos-preview/FooterSection.tsx
  • packages/web/src/components/eos-preview/FourEarthsPreview.tsx
  • packages/web/src/components/eos-preview/OptimizedDaySection.tsx
  • packages/web/src/components/eos-preview/ReviewsSection.tsx
  • packages/web/src/components/eos-preview/SampleBallot.tsx
  • packages/web/src/components/eos-preview/SelectEarthSection.tsx
  • packages/web/src/components/eos-preview/StoreSection.tsx
  • packages/web/src/components/eos-preview/SuiteSection.tsx
  • packages/web/src/components/eos-preview/ThermostatSection.tsx
  • packages/web/src/components/eos-preview/TransformationCards.tsx
  • packages/web/src/components/eos-preview/TwoNumberDashboard.tsx
  • packages/web/src/components/eos-preview/YourMoveSection.tsx
  • packages/web/src/components/eos-preview/eos-preview.css
📝 Walkthrough

Walkthrough

Adds a noindex /eos-preview page with parameterized bill content, a live death counter, comparison matrix, responsive styling, scroll reveals, placeholder sections, and a Playwright screenshot script.

Changes

EOS preview landing page

Layer / File(s) Summary
Route and page composition
packages/web/src/lib/routes.ts, packages/web/src/app/eos-preview/page.tsx, packages/web/src/components/eos-preview/EosLandingPreviewPage.tsx
Defines the metadata-only route, disables indexing and following, and composes the bill, comparison matrix, font setup, and placeholder sections.
Bill narrative and live counter
packages/web/src/components/eos-preview/BillDeathCounter.tsx, packages/web/src/components/eos-preview/BillSection.tsx, packages/web/src/components/eos-preview/eos-preview.css
Renders parameterized bill content, reduced-motion and visibility-aware death counts, narrative callouts, pivot content, and Register 1 styling.
Comparison matrix and reveal behavior
packages/web/src/components/eos-preview/ComparisonMatrix.tsx, packages/web/src/components/eos-preview/Reveal.tsx, packages/web/src/components/eos-preview/eos-preview.css
Adds parameterized comparison rows, intersection-based reveals, responsive mobile cards, catalog styling, and no-script visibility fallbacks.
Deterministic screenshot capture
packages/web/scripts/eos-preview-screenshots.mjs
Captures desktop and mobile full-page and selector-specific screenshots for /eos-preview, then logs the generated metadata and count.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Browser
  participant EosPreviewRoute
  participant EosLandingPreviewPage
  participant BillDeathCounter
  participant ComparisonMatrix
  Browser->>EosPreviewRoute: Request /eos-preview
  EosPreviewRoute->>EosLandingPreviewPage: Render preview page
  EosLandingPreviewPage->>BillDeathCounter: Render bill counter
  EosLandingPreviewPage->>ComparisonMatrix: Render comparison section
  BillDeathCounter->>Browser: Display live or static count
  ComparisonMatrix->>Browser: Display responsive comparison rows
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main additions: the EOS landing page slice with The Bill and Comparison Matrix.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/eos-landing-page

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a0e496c428

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/web/src/components/eos-preview/eos-preview.css
Comment thread packages/web/src/app/eos-preview/page.tsx Outdated
Comment thread packages/web/scripts/eos-preview-screenshots.mjs Outdated
Comment thread packages/web/scripts/eos-preview-screenshots.mjs
Comment thread packages/web/src/components/eos-preview/BillSection.tsx Outdated
Comment thread packages/web/src/components/eos-preview/eos-preview.css
Comment thread packages/web/src/components/eos-preview/eos-preview.css Outdated
@github-actions

github-actions Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

PR review packet

Start here

  • 🖼️ Visual review
  • 🚀 Preview deployment
  • ☝️ Cmd/Ctrl-click review links to keep this PR open.
  • 🔑 ?login=demo signs in as the demo user; ?logout=1 clears the session.
  • 💬 For a visual problem, use the comment button in latest.html or reply here with @claude and the checklist item.

Review checklist

Changed files considered
  • packages/web/scripts/eos-preview-screenshots.mjs
  • packages/web/src/app/eos-preview/page.tsx
  • packages/web/src/components/eos-preview/BillDeathCounter.tsx
  • packages/web/src/components/eos-preview/BillSection.tsx
  • packages/web/src/components/eos-preview/BudgetSlider.tsx
  • packages/web/src/components/eos-preview/ComparisonMatrix.tsx
  • packages/web/src/components/eos-preview/DfdaRankingTable.tsx
  • packages/web/src/components/eos-preview/EosLandingPreviewPage.tsx
  • packages/web/src/components/eos-preview/FeaturedProducts.tsx
  • packages/web/src/components/eos-preview/FooterSection.tsx
  • packages/web/src/components/eos-preview/FourEarthsPreview.tsx
  • packages/web/src/components/eos-preview/OptimizedDaySection.tsx
  • packages/web/src/components/eos-preview/Reveal.tsx
  • packages/web/src/components/eos-preview/ReviewsSection.tsx
  • packages/web/src/components/eos-preview/SampleBallot.tsx
  • packages/web/src/components/eos-preview/SelectEarthSection.tsx
  • packages/web/src/components/eos-preview/StoreSection.tsx
  • packages/web/src/components/eos-preview/SuiteSection.tsx
  • packages/web/src/components/eos-preview/ThermostatSection.tsx
  • packages/web/src/components/eos-preview/TransformationCards.tsx
  • packages/web/src/components/eos-preview/TwoNumberDashboard.tsx
  • packages/web/src/components/eos-preview/YourMoveSection.tsx
  • packages/web/src/components/eos-preview/eos-preview.css
  • packages/web/src/lib/routes.ts

Updated automatically when this PR's preview or visual review reruns.

@claude

claude Bot commented Jul 25, 2026

Copy link
Copy Markdown

Code review

4 issues found. (Note: the inline-comment API was unavailable in this run, so these are posted as a single consolidated comment instead of per-line inline comments.)

1. Visible "TODO (out of scope)" text leaks into user-facing copy

<div className="eos-container eos-stub-inner">
<p className="eos-stub-tag">Section {n} · TODO (out of scope)</p>
<h2 className="eos-stub-title">{title}</h2>

SectionStub renders Section {n} · TODO (out of scope) as visible page copy across all 9 stub sections on the live /eos-preview route. That's internal planning language leaking into user-facing text — AGENTS.md says: "Do not leak implementation or planning terms into user copy... 'route allowlist', etc." The route is noindex/nofollow but still directly navigable by anyone with the link, so a real visitor sees this wording. Since this is copy, please swap in plain "coming soon" style wording through the normal copy-approval process rather than a mechanical fix.

2. Screenshot script defaults to a non-canonical port

const BASE = process.env.BASE_URL ?? "http://127.0.0.1:3006";
const URL = `${BASE}/eos-preview`;

This defaults BASE_URL to http://127.0.0.1:3006 instead of the repo's canonical dev-server port. packages/web/AGENTS.md says: "Use port 3001 as the canonical local web server... Use another port only when the human explicitly asks, two branches must be compared live at the same time, or debugging server startup genuinely requires isolation." None of those apply here, and the sibling scripts run-playwright.mjs and record-demo.mjs both default to 3001.

const BASE = process.env.BASE_URL ?? "http://127.0.0.1:3001";

3. Singapore stat contradicts the site's own canonical parameter

<p>
Singapore spends roughly a quarter of what the US spends per capita
on healthcare. Singaporeans live about ten years longer. 193
countries, hundreds of years of policy data. The experiments
already ran. Nobody checked the results.

This hardcoded claim — "Singapore spends roughly a quarter of what the US spends per capita on healthcare. Singaporeans live about ten years longer." — contradicts the canonical sourced parameters already used elsewhere on this page: SINGAPORE_LIFE_EXPECTANCY (84.1 yrs) is documented as "6.6 years LONGER than US," and US_VS_SINGAPORE_SPENDING_GAP puts the gap at 23 percentage points of GDP. Per packages/web/AGENTS.md: "Cite loaded numbers. Use parameter/citation components for major numeric claims wherever available instead of hardcoded unsupported numbers." Since a citable parameter exists and disagrees with this copy, this is presenting two different numbers for the same fact on the same site, not just a citation gap. Needs a copy fix (with the usual copy approval) rather than a mechanical suggestion.

4. Hardcoded "535" duplicates an existing citable parameter

label: "Decision method",
gov: "535 humans who haven't read the bill, funded by the industries the bill regulates",
eos: (

This hardcodes "535 humans" instead of citing the existing US_CONGRESS_MEMBER_COUNT parameter (value 535), which is already imported and used via <ParameterValue> for other stats in this same file. Per the same "Cite loaded numbers" rule above, please wrap this in <ParameterValue> through the normal copy process instead of a hardcoded number.

- No-JS reveal (eos-preview.css:436): .eos-reveal defaulted to opacity:0 and
  only cleared on data-shown="true", which the IntersectionObserver sets. With
  JS off the comparison heading + entire matrix stayed invisible. Added
  @media (scripting: none) to show reveals when scripting is unavailable, and a
  runtime IntersectionObserver-missing guard in Reveal.tsx that force-shows.
- Container gutters on stubs (eos-preview.css:412): .eos-stub-inner used a
  `padding: X 0` shorthand on the same element as .eos-container, zeroing the
  horizontal clamp() gutters and pushing stub content flush to both mobile
  edges. Switched to padding-top/bottom so the container gutters survive.
- Preview metadata (page.tsx / routes.ts): derived metadata from the canonical
  registry via getRouteMetadata(eosPreviewLink) for a self-canonical URL and a
  route-specific OG/Twitter card, then forced noindex. eosPreviewLink is a
  metadata-only NavItem (same pattern as dysfunctionTaxLink), kept out of every
  nav array and STATIC_SITEMAP_ROUTES so the route stays unlisted.
- Screenshot helper (eos-preview-screenshots.mjs): defaulted BASE_URL to the
  canonical :3001 dev server instead of :3006.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
"About ten years longer" conflated the Singapore-vs-global comparison
with the Singapore-vs-US one; the exported parameters put the US gap at
6.6 years (84.1 vs 77.5). The sentence now renders the rounded derived
gap through ParameterValue anchored to SINGAPORE_LIFE_EXPECTANCY, so the
number stays in sync with the parameter pipeline and clicks through to
the WHO citation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mf3c4CzpfCCqAQA2k4UQKH

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
packages/web/src/components/eos-preview/BillSection.tsx (1)

40-42: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Live death counter leads the section, ahead of the header.

BillDeathCounter renders before the "Section 1 · The Bill" header, i.e. it's the first thing rendered in the section.

Based on learnings and coding guidelines, per the path instructions for packages/web/**/*.{ts,tsx}: "Do not lead campaign landing pages with raw counters, scoreboards, totals, leaderboards, or internal status panels." The counter is deliberately kept small/non-sticky per its own code comment, so this is likely an accepted trade-off, but worth confirming against that guideline given it's the literal first element in the DOM.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/web/src/components/eos-preview/BillSection.tsx` around lines 40 -
42, Move the BillDeathCounter block in BillSection so the section’s “Section 1 ·
The Bill” header renders before it. Keep the counter present and retain its
existing styling and behavior; only change the render order to avoid leading the
landing-page section with the raw counter.

Source: Coding guidelines

packages/web/src/components/eos-preview/ComparisonMatrix.tsx (1)

201-230: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚖️ Poor tradeoff

Hand-rolled table markup instead of the RetroUI Table primitive.

The matrix is built from plain divs with manual role="table"/"row"/"cell" attributes rather than the RetroUI Table primitive (which ships .Header/.Body/.Row/.Head/.Cell sub-components).

As per path instructions for packages/web/src/components/**/*.{ts,tsx}: "Use RetroUI primitives ... for ... tables ... before hand-rolling custom components — prefer the primitive if it provides the right behavior." Worth confirming the primitive can't reasonably support this bespoke two-tone/mobile-stacking layout before keeping the hand-rolled version; if it can't, the current approach is justified.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/web/src/components/eos-preview/ComparisonMatrix.tsx` around lines
201 - 230, Replace the hand-rolled div-based matrix in ComparisonMatrix with the
RetroUI Table primitive, using its Header, Body, Row, Head, and Cell
sub-components while preserving the existing labels, values, styling hooks, and
mobile header content. If the primitive cannot support the required two-tone
mobile-stacking layout, verify that limitation before retaining the current
structure.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/web/scripts/eos-preview-screenshots.mjs`:
- Around line 34-36: Replace the fixed waitForTimeout delays in the screenshot
flow with an await on document.fonts.ready to ensure fonts have finished loading
before capture. Apply this at both referenced locations, and retain locator
screenshots without adding manual scrolling because they already bring targets
into view.
- Around line 44-67: Update the screenshot capture flow for `.eos-pivot` and
`#comparison` so each missing required element throws an error instead of being
silently skipped; preserve the existing screenshot and `shots.push` behavior
when the elements are present, matching the required-section handling used for
`#the-bill`.

---

Nitpick comments:
In `@packages/web/src/components/eos-preview/BillSection.tsx`:
- Around line 40-42: Move the BillDeathCounter block in BillSection so the
section’s “Section 1 · The Bill” header renders before it. Keep the counter
present and retain its existing styling and behavior; only change the render
order to avoid leading the landing-page section with the raw counter.

In `@packages/web/src/components/eos-preview/ComparisonMatrix.tsx`:
- Around line 201-230: Replace the hand-rolled div-based matrix in
ComparisonMatrix with the RetroUI Table primitive, using its Header, Body, Row,
Head, and Cell sub-components while preserving the existing labels, values,
styling hooks, and mobile header content. If the primitive cannot support the
required two-tone mobile-stacking layout, verify that limitation before
retaining the current structure.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: f4c98e5b-2e5b-4963-a00d-02dce9838afa

📥 Commits

Reviewing files that changed from the base of the PR and between 819d9b7 and 3fa9554.

📒 Files selected for processing (9)
  • packages/web/scripts/eos-preview-screenshots.mjs
  • packages/web/src/app/eos-preview/page.tsx
  • packages/web/src/components/eos-preview/BillDeathCounter.tsx
  • packages/web/src/components/eos-preview/BillSection.tsx
  • packages/web/src/components/eos-preview/ComparisonMatrix.tsx
  • packages/web/src/components/eos-preview/EosLandingPreviewPage.tsx
  • packages/web/src/components/eos-preview/Reveal.tsx
  • packages/web/src/components/eos-preview/eos-preview.css
  • packages/web/src/lib/routes.ts

Comment thread packages/web/scripts/eos-preview-screenshots.mjs Outdated
Comment thread packages/web/scripts/eos-preview-screenshots.mjs Outdated
mikepsinn pushed a commit that referenced this pull request Jul 25, 2026
update-pr-branches.yml (merged in #142) pushes merge-from-main commits as
github-actions[bot]. claude-code-action hard-fails for non-human actors
("Workflow initiated by non-human actor"), so every auto-updated PR got a
red claude-review check the moment the auto-updater did its job — first
seen on PR #143 within a minute of #142 landing.

Skip the job for bot-triggered synchronize events instead of allowlisting
the bot: a merge from main leaves the PR diff unchanged, so re-reviewing
it would burn a full review run on nothing new.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mf3c4CzpfCCqAQA2k4UQKH
github-actions Bot and others added 6 commits July 25, 2026 18:05
Extends the two-register design system with the catalog primitives
(product cards, price chips, testimonials, data cards, terminal readout,
transformation cards, range slider, expanders, code blocks, loop
diagrams, review cards, chart chrome, sunrise tokens) and ships:

- Section 2 The Store: pitchman intro, EOS definition, Class A/B shares.
- Section 4 Featured Products: the Optimitron (two-number dashboard with
  animated HALE + median-income counters, click-to-expand policy
  comparator), the Optimal Budget Generator (key-number data cards, the
  ratchet, treaty CTAs), the Decentralized TODO List (terminal readout of
  the spec's illustrative day), the Loving Takeover (canonical line #2
  verbatim, Engine No. 1 proof of concept, corporate transformation
  cards), and the Wishocracy (three live pairwise budget sliders with the
  real-time treaty-funding output line, accuracy table).

Copy verbatim from the spec. The spec's "(The Evidence Engine)"
parenthetical and the Evidence Engine wording inside the Product 4
testimonial are rendered with Optimal Policy Generator naming per the
spec's own binding "WHAT IS NOT ON THIS PAGE" list. All numbers via
ParameterValue; the TODO terminal list is the spec's illustrative
example copy.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Decentralized FDA: searchable, sortable treatment ranking table with a
  condition switcher (depression / anxiety / bipolar), fed by the repo's
  illustrative medical dataset via getTreatmentsByConditionSlug (the
  spec's fallback while the live studies.dfda.earth API is unwired);
  RECOVERY trial economics; Triangulum testimonial.
- Automated Revenue Service and Universal Security Administration:
  hand-tokenized Solidity code blocks (no highlighter dependency) plus
  the spec's before/after tables.
- Department of Peace: Settlement Engine + Disposal Program panels, the
  Deluxe trim, the post-WW2 math.
- Decentralized Congress: tariff copy plus the interactive sample ballot;
  the evidence card's [X]/[Y]/[Z]/[calculated] values are the spec's own
  placeholders and render visibly provisional.
- Remaining nine agencies as an expandable grid, including the Court of
  Humanity, with all opex figures from the parameter registry.
- Total cost comparison bar (to scale; per-capita parameters), with
  values positioned over the track so a tiny fill can never clip them.

Copy verbatim from the spec; all numbers via ParameterValue.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Section 6: the spec's ASCII control-loop diagrams typeset as node-flow
  diagrams (oven closed-loop vs War on Drugs open-loop, then the full
  twelve-node EOS closed loop); nodes light up in sequence via CSS
  animation, disabled under prefers-reduced-motion.
- Section 7: four-trajectory chart (Collapse / Fantasy Baseline / 1%
  Treaty / Optimal Governance) with the personal net-worth-or-income
  input that rescales the Y axis, hover tooltips showing "your projected
  income/net worth under this scenario", the shaded hedge region, and
  the "the gap: human stupidity, priced annually" annotation. Adapted
  from the proven eos-retro FourEarthsChart (recharts, already a
  dependency) onto eos-preview tokens; every growth rate comes from the
  parameter registry. Downside/upside panels and the whole-Earth output
  caption carry the year-20 GDP and CAGR parameters.

Copy verbatim from the spec; all numbers via ParameterValue.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Section 8 Welcome to Tuesday: the cream sunrise interlude with the
  five scroll-revealed timeline entries and the corporate transformation
  cards, exactly as the spec lays them out (they appear in Product 4 and
  again here).
- Section 9 Reviews: the diseases' one-star competitor feedback and the
  three planet customer reviews with star ratings.
- Section 10 For Investors: structure/floor/upside, the five key
  projections as data cards, the historical-ROI context line, the always
  visible Reg D 506(c) disclosure, and the three participation paths in
  the spec's order (buy Class B, claim Class A, fund or do a task). The
  Class B and Class A CTA destinations are not named in the spec and are
  clearly-marked href="#" TODOs; Path 3 links /tasks.
- Section 11 Footer: the closer verbatim, including canonical line #3
  and the love line; The Manual and About link out, Contact / Legal /
  PPM Request are spec-undefined TODOs.
- EosLandingPreviewPage now composes all eleven sections; every TODO
  stub is gone. Screenshot helper extended to capture all sections at
  desktop 1440 and mobile 390.

Copy verbatim from the spec; all numbers via ParameterValue.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
mikepsinn and others added 2 commits July 25, 2026 13:08
Spec copy verbatim from eos-landing-page.qmd. Register 2 catalog styling,
reveal-on-scroll, no parameters in this section.

Co-Authored-By: Claude <noreply@anthropic.com>
Keeps the remote StoreSection implementation (dedicated .eos-store
styles, no parameters) and this branch's full eleven-section page
composition.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
mikepsinn pushed a commit that referenced this pull request Jul 25, 2026
The /design-a preview hand-built its Metadata object, so shared links
bypassed the route catalog and got no canonical URL or route-specific
OG/Twitter card. Register the route as designACatalogLink in routes.ts
(unlisted: not in nav, not in STATIC_SITEMAP_ROUTES) and derive the
page's metadata from it via getRouteMetadata(), mirroring the
/eos-preview pattern from PR #143.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.

3 participants