Skip to content

Follow-up: /people/[id] redesign + conversion-loss fixes#82

Merged
mikepsinn merged 6 commits into
mainfrom
feature/post-81-conversion-tweaks
May 16, 2026
Merged

Follow-up: /people/[id] redesign + conversion-loss fixes#82
mikepsinn merged 6 commits into
mainfrom
feature/post-81-conversion-tweaks

Conversation

@mikepsinn
Copy link
Copy Markdown
Owner

@mikepsinn mikepsinn commented May 16, 2026

Summary

Follow-up to #81. Picks up the uncommitted /people/[id] redesign + conversion-loss fixes the cold-stranger audit surfaced.

Currently committed

  • /people/[id] conversion-surface redesign (Codex bpf2z3avk)
  • SufferingPreventedMetric extraction in SignatoriesLeaderboard
  • personTaskProfilePersonSelect data fetcher fragment
  • Medical-toolchain + corporate-damages reference parameters
  • TODO.md P1 Person/Org Conversion Surfaces roadmap

In-flight Codex (will append commits)

  • bpekodvr5 /donate above-fold sticky CTA on iPhone
  • btxqar798 /endorse grant calculator jargon trim
  • bcoercnkx /plaintiffs 1949 wrongful-death cutoff section (Mike's framing)
  • bmhu7h78h Humanity Manager lead line update ('Forward this message to everyone you do not want to suffer and die of horrible diseases.')

Still to dispatch

  • Referral-impact overcount split (own-hours vs referral-credit on /people/[id])

Diff against main

This branch is based on PR #81's HEAD. Until #81 merges, the diff shows both branches' commits together. Will rebase cleanly onto main after #81 merges.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added fixed "Donate" button for improved mobile navigation
    • Collapsible assumptions section in grant calculator
    • Wrongful death callout on plaintiffs registration page
    • Campaign and treaty profile display for people
  • Updates

    • Clarified messaging across emails and promotional content
    • Simplified person profile layout and information display
    • Enhanced grant application examples with concrete use cases

Review Change Stack

@vercel
Copy link
Copy Markdown

vercel Bot commented May 16, 2026

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

Project Deployment Actions Updated (UTC)
optimitron-web Ready Ready Preview, Comment May 16, 2026 7:31pm

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 16, 2026

Warning

Rate limit exceeded

@mikepsinn has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 45 minutes and 23 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: af74d797-2359-466d-8b7e-b88b0c37de5a

📥 Commits

Reviewing files that changed from the base of the PR and between 88b16f6 and f8fd377.

📒 Files selected for processing (1)
  • packages/web/src/lib/tasks.server.ts
📝 Walkthrough

Walkthrough

This PR redesigns the person profile experience as a campaign/treaty profile centered on suffering prevention and referral sharing, extends the parameter model with medical toolchain and war trial redirect costs, and unifies the "forward message" theme across all email and web surfaces to emphasize preventing suffering and disease.

Changes

Campaign Profile Redesign & Parameter Model Extensions

Layer / File(s) Summary
Parameter model extensions: medical toolchain, war trial redirect, corporate damages
packages/data/src/parameters/parameters-calculations-citations.ts
Adds 30+ Parameter exports for medical-toolchain anchor costs (BRAIN, CRISPR, HGP, HITECH EHR, OWS, PCORnet), corporate damages prosecutor exposure variants, war medical-toolchain prize and overpay, war trial redirect timing/cutoff/budget/slot/post-cutoff measures; updates parameter registries and citations; removes NUCLEAR_OVERKILL_SPARE_LAYERS.
Person profile campaign experience redesign and server data layer
packages/web/src/app/people/[id]/page.tsx, packages/web/src/lib/tasks.server.ts, packages/web/e2e/utils/visual-routes.ts, packages/web/scripts/build-visual-review.mjs
Refactors PersonDetailPage from employee task-list to campaign/treaty profile: fetches represented-person and task-profile data concurrently, computes treaty/court signature status, renders suffering-prevented metrics and referral CTAs; adds personTaskProfilePersonSelect Prisma query with expanded referendum votes and court case counts; updates visual testing routes for /people/mike.
Plaintiffs registration with wrongful death information and war trial redirect parameters
packages/web/src/app/plaintiffs/page.logged-out.md, packages/web/src/app/plaintiffs/page.tsx
Adds wrongful-death-cutoff informational section with cutoff dates (1950 disease, 1990 aging); imports and renders WAR_TRIAL_REDIRECT_* parameters (cutoff years, aging lag) via ParameterValue; includes REGISTER A PLAINTIFF CTA.
Unified 'forward to prevent suffering' message across all contexts
packages/web/e2e/email-screenshots.spec.ts, packages/web/src/lib/email/post-vote-share.email.md, packages/web/src/lib/humanity-manager-promotion-content.tsx, packages/web/src/lib/email/monthly-chain-digest.email.md, packages/web/src/app/signatories/page.logged-out.md
Replaces generic "Forward this message." with "Forward this message to everyone you don't want to suffer and die of horrible diseases." across email templates, promotion content, signatories page, and test assertions.
Campaign grant calculator collapsible assumptions and donation page sticky navigation
packages/web/src/components/organizations/OrganizationGrantCalculator.tsx, packages/web/src/app/donate/page.tsx, packages/web/src/app/endorse/page.logged-out.md
OrganizationGrantCalculator wraps assumptions in collapsible Accordion; replaces placeholder with concrete grant example ($3,960 grant, 5,346 lives saved, 109,058 suffering prevented). Donate page adds fixed mobile bottom "Donate" sticky link anchoring to #donate-calculator, wraps calculator in scroll-margin container.
SufferingPreventedMetric component extraction and test targeting
packages/web/src/components/referendum/SignatoriesLeaderboard.tsx, packages/web/src/components/dashboard/NotificationPreferencesCard.tsx, packages/web/src/app/people/[id]/page.logged-out.md
Extracts ImpactExplainer rendering into new SufferingPreventedMetric helper; adds data-testid to NotificationPreferencesCard; shortens people/[id] 404 logged-out copy.
Replace NUCLEAR_OVERKILL_SPARE_LAYERS with FLOW_WASTEFUL_APOCALYPSES parameter
packages/web/src/components/landing/TreatyPostVoteShareFlow.tsx
Swaps NUCLEAR_OVERKILL_SPARE_LAYERS for FLOW_WASTEFUL_APOCALYPSES (both figures=3) in NuclearOverkillTemplate.
Roadmap documentation for Person/Org Conversion Surfaces
TODO.md
Adds P1 roadmap subsection describing PR-A through PR-E sequencing (foundation action seeds, org task display, admin cross-org UX, public-figure catalog with isPublicFigure flag, deferred AI-cataloged activity), shared metric/component reuse guidance, and referenced risks.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

The PR spans multiple interconnected systems (parameter model, person profile rendering, data fetching, messaging/copy, UI components) with significant logic density in the person profile redesign and parameter calculations. While changes are largely cohesive and well-organized by feature, the variety of files affected (data layer, page components, server helpers, email templates, UI components) and the semantic complexity of campaign profile detection and treaty status computation demand careful review across several domains.

Possibly related issues

  • mikepsinn/optimitron#38: The plaintiffs route and page updates (page.logged-out.md and page.tsx) directly address the issue's commits related to splitting plaintiffs routes and adding /plaintiffs registration pages with wrongful death and court case information.

Poem

🐰 A rabbit's ode to suffering prevention:

Parameters stack like hay so high,
Campaigns speak to passersby,
Forward messages fill the web,
"Prevent all suffering," we plead,
With treaties signed and lives saved freed—
A kinder world, indeed! 🌟

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title directly describes the main change: a /people/[id] page redesign combined with conversion-loss fixes, which is clearly reflected across multiple file changes including the significant redesign of packages/web/src/app/people/[id]/page.tsx and related component updates.
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.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/post-81-conversion-tweaks

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 and usage tips.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 16, 2026

Preview deploy — one-click review links

Latest preview: https://optimitron-ogmwdhaoc-mike-p-sinns-projects.vercel.app

Page State What changed
/ logged-out components/landing/TreatyPostVoteShareFlow.tsx
/dashboard demo logged-in components/dashboard/NotificationPreferencesCard.tsx
/donate logged-out app/donate/page.tsx
/people logged-out app/people/[id]/page.tsx
/plaintiffs logged-out app/plaintiffs/page.tsx
/treaty logged-out components/referendum/SignatoriesLeaderboard.tsx
/vote logged-out components/referendum/SignatoriesLeaderboard.tsx

?login=demo signs you in as the demo user; ?logout=1 clears the session. Updated automatically when this PR's preview deploys.

mikepsinn and others added 5 commits May 16, 2026 14:12
…+ roadmap

Carries over from PR #81 working tree:

- /people/[id] redesigned as a conversion surface (Codex bpf2z3avk): face + 1-line trust signal + hours-prevented social-proof big number + primary CTA (SIGN if not signed / FORWARD MY REFERRAL if signed) + below-fold public signatures and public campaign tasks. Reuses SufferingPreventedMetric extracted from SignatoriesLeaderboard.
- SignatoriesLeaderboard: extract SufferingPreventedMetric as a shared export so /people/[id] can reuse the same visual treatment.
- tasks.server.ts: add personTaskProfilePersonSelect fragment for the /people/[id] data fetch (Person + referendumVotes + recruited count).
- parameters-calculations-citations.ts: add reference parameters for medical-toolchain historical budgets (HGP, OWS, CRISPR NIH funding, HITECH EHR, Brain Initiative, PCORnet) and corporate-damages prosecutor gross-exposure parameters (aging intake, disease DALY, medical misallocation, pleading exposure total).
- e2e/utils/visual-routes.ts + scripts/build-visual-review.mjs: register /people/mike for visual review.
- NotificationPreferencesCard: add data-testid affordance for e2e selectors.
- TODO.md: P1 Person/Org Conversion Surfaces roadmap (5 follow-up PRs) per Mike's 2026-05-15 brainstorm.

Known follow-up scope in this branch:
- /donate above-fold sticky CTA on iPhone (cold-stranger finding)
- /endorse grant calculator jargon trim (cold-stranger finding)
- /plaintiffs 1949 wrongful-death cutoff section (Mike's framing, 1913+36yr-eradication math)
- Humanity Manager promotion lead: 'Forward this message.' -> 'Forward this message to everyone you don't want to suffer and die of horrible diseases.' (Mike's wording)
- Referral-impact overcount fix: split own-hours vs referral-credit on /people/[id]

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…m, /plaintiffs 1949 cutoff, Humanity Manager wording

Four parallel Codex agents responding to Mike's 2026-05-16 brief and the cold-stranger audit findings:

- /donate (bpekodvr5): sticky above-fold DONATE button on iPhone so strangers don't bounce before reaching the calculator
- /endorse (btxqar798): OrganizationGrantCalculator restructure — gloss the jargon labels (MESSAGE REACH %, SURVEY RESPONSE RATE %, MEMBER SHARING LIFT, GRANT $ PER RESPONSE) with plain-English subtitles OR collapse them behind a Show assumptions disclosure, leading with the grant total + lives-saved summary
- /plaintiffs (bcoercnkx): new wrongful-death cutoff section anchored to 1949 (1913 + 36yr counterfactual eradication if treaty existed at fed-reserve-era cumulative military spending). Anyone who died of disease after 1949 = wrongful death plaintiff by government negligence. Math anchored to manual declaration-of-optimization page
- Humanity Manager (bmhu7h78h): heading update from "Forward this message." to "Forward this message to everyone you don't want to suffer and die of horrible diseases." (Mike's verbatim). Test assertion in email-screenshots.spec.ts updated to new phrase. Snapshot regens propagated through /signatories + post-vote-share.email.md + monthly-chain-digest.email.md

Incidental: TreatyPostVoteShareFlow.tsx parameter import refactor (NUCLEAR_OVERKILL_SPARE_LAYERS -> FLOW_WASTEFUL_APOCALYPSES).

NOT INCLUDED: blrse53o8 referral-overcount split (Mike 2026-05-16: "We're not trying to win Math olympiad. If it requires everyone to be in agreement then everyone is potentially responsible for the entirety of the prevented suffering." — keep single big number per /people/[id] page, no split).

qa-passed: each Codex verified locally (copy:preview / email:preview-md / tsc --noEmit where applicable).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Codex stop-review flagged that bcoercnkx defined CORPORATE_DAMAGES_COUNTERFACTUAL_ERADICATION_START_YEAR and CORPORATE_DAMAGES_COUNTERFACTUAL_ERADICATION_YEAR inline in plaintiffs/page.tsx, contradicting the canonical source-of-truth at parameters-calculations-citations.ts. Per CLAUDE.md (grep parameters-calculations-citations before typing a number), every parameter lives in the central file.

Moved both parameters next to the existing CORPORATE_DAMAGES_* cluster. plaintiffs/page.tsx now imports them via @optimitron/data/parameters like every other parameter on the page. Math unchanged: 1913 (Fed-era anchor) + round(35.96) = 1949 (counterfactual eradication year).

qa-passed: tsc --noEmit exit 0. copy:preview regen of /plaintiffs produced no diff (rendered output identical).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…iers), inclusive cutoff

Mike 2026-05-16: I just want you to check parameters, calculations and citations and be using the best parameters that we currently have in there because we recently regenerated it.

Replaces the inline-defined CORPORATE_DAMAGES_COUNTERFACTUAL_ERADICATION_* pair (1913 + 1949) that bcoercnkx shipped earlier with the canonical regenerated params from the data team:
- WAR_TRIAL_REDIRECT_DISEASE_PLEADING_CUTOFF_YEAR = 1950 (disease cutoff)
- WAR_TRIAL_REDIRECT_AGING_PLEADING_CUTOFF_YEAR = 1990 (aging cutoff, ~40yr after disease per geroscience lag)

Headline now addresses both classes: "IF SOMEONE YOU LOVE DIED OF DISEASE IN OR AFTER 1950, OR AGING IN OR AFTER 1990, IT IS WRONGFUL DEATH." The IN OR AFTER wording is INCLUSIVE of the cutoff year (stop-review caught that bare AFTER would exclude 1950/1990 deaths themselves).

Section reordered ABOVE the register-plaintiff form so the moral case hits before the field labels. Math paragraph trimmed: "The cited math counts the time to build medical tools and clear the treatment queue, then puts the disease line at 1950. Aging gets about 40 more years and lands at 1990; biology was harder, not innocent." Closer "It is wrongful death." matches the headline.

Inline START_YEAR/YEAR constants deleted; imports from @optimitron/data/parameters.

qa-passed: tsc --noEmit clean. /plaintiffs snapshot regen confirms new inclusive wording.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@mikepsinn mikepsinn force-pushed the feature/post-81-conversion-tweaks branch from 712a68f to 88b16f6 Compare May 16, 2026 19:12
@mikepsinn mikepsinn marked this pull request as ready for review May 16, 2026 19:12
Copilot AI review requested due to automatic review settings May 16, 2026 19:12
@mikepsinn mikepsinn enabled auto-merge (rebase) May 16, 2026 19:12
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
packages/data/src/parameters/parameters-calculations-citations.ts (1)

9071-9101: 💤 Low value

Note: Negative lower bounds in confidence intervals for count/year quantities.

WAR_TRIAL_REDIRECT_POST_CUTOFF_AGING_YEARS has CI [-6.0, 59.0] and WAR_TRIAL_REDIRECT_POST_CUTOFF_AGING_PLAINTIFFS has a negative lower bound. This is mathematically consistent with uncertainty propagation (if the cutoff year exceeds the end year in extreme scenarios), but consumers should clamp to zero if using these bounds in calculations that require non-negative values.

Not a blocking issue since it's a modeling characteristic, not a code defect.

🤖 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/data/src/parameters/parameters-calculations-citations.ts` around
lines 9071 - 9101, The confidenceInterval lower bounds for the count/year
parameters WAR_TRIAL_REDIRECT_POST_CUTOFF_AGING_YEARS and
WAR_TRIAL_REDIRECT_POST_CUTOFF_AGING_PLAINTIFFS can be negative; update their
definitions so the lower bound is clamped to zero (i.e., set the first element
of confidenceInterval to 0 or compute Math.max(0, currentLower) when
constructing these Parameter objects) to ensure downstream consumers that expect
non-negative bounds receive valid ranges; update both
WAR_TRIAL_REDIRECT_POST_CUTOFF_AGING_YEARS and
WAR_TRIAL_REDIRECT_POST_CUTOFF_AGING_PLAINTIFFS accordingly.
🤖 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/src/lib/tasks.server.ts`:
- Around line 67-73: The referendumVotes where-clause currently filters votes by
answer, deletedAt, isPublic and voteSource but does not exclude votes whose
parent referendum is deleted; update both referendumVotes where objects in
packages/web/src/lib/tasks.server.ts to include referendum: { deletedAt: null }
so only votes tied to non-deleted referendums are counted (apply this change to
the two occurrences around the referendumVotes definitions so the
VotePosition.YES/Self filters continue to work but now also verify the parent
referendum is not deleted).

---

Nitpick comments:
In `@packages/data/src/parameters/parameters-calculations-citations.ts`:
- Around line 9071-9101: The confidenceInterval lower bounds for the count/year
parameters WAR_TRIAL_REDIRECT_POST_CUTOFF_AGING_YEARS and
WAR_TRIAL_REDIRECT_POST_CUTOFF_AGING_PLAINTIFFS can be negative; update their
definitions so the lower bound is clamped to zero (i.e., set the first element
of confidenceInterval to 0 or compute Math.max(0, currentLower) when
constructing these Parameter objects) to ensure downstream consumers that expect
non-negative bounds receive valid ranges; update both
WAR_TRIAL_REDIRECT_POST_CUTOFF_AGING_YEARS and
WAR_TRIAL_REDIRECT_POST_CUTOFF_AGING_PLAINTIFFS accordingly.
🪄 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

Run ID: a034c5df-fc09-4646-b4ff-0ecb846ba4b7

📥 Commits

Reviewing files that changed from the base of the PR and between 0559488 and 88b16f6.

📒 Files selected for processing (20)
  • TODO.md
  • packages/data/src/parameters/parameters-calculations-citations.ts
  • packages/web/e2e/email-screenshots.spec.ts
  • packages/web/e2e/utils/visual-routes.ts
  • packages/web/scripts/build-visual-review.mjs
  • packages/web/src/app/donate/page.tsx
  • packages/web/src/app/endorse/page.logged-out.md
  • packages/web/src/app/people/[id]/page.logged-out.md
  • packages/web/src/app/people/[id]/page.tsx
  • packages/web/src/app/plaintiffs/page.logged-out.md
  • packages/web/src/app/plaintiffs/page.tsx
  • packages/web/src/app/signatories/page.logged-out.md
  • packages/web/src/components/dashboard/NotificationPreferencesCard.tsx
  • packages/web/src/components/landing/TreatyPostVoteShareFlow.tsx
  • packages/web/src/components/organizations/OrganizationGrantCalculator.tsx
  • packages/web/src/components/referendum/SignatoriesLeaderboard.tsx
  • packages/web/src/lib/email/monthly-chain-digest.email.md
  • packages/web/src/lib/email/post-vote-share.email.md
  • packages/web/src/lib/humanity-manager-promotion-content.tsx
  • packages/web/src/lib/tasks.server.ts
💤 Files with no reviewable changes (1)
  • packages/web/src/app/people/[id]/page.logged-out.md

Comment thread packages/web/src/lib/tasks.server.ts
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Follow-up work on the campaign conversion surfaces, primarily refining the /people/[id] public profile into a campaign-focused “trust + impact + CTA” page and tightening related conversion copy/UX across donate/endorse/plaintiffs flows.

Changes:

  • Refactors /people/[id] into a campaign profile (impact metric, referral forwarding CTA, public signatures, and campaign task highlights), plus supporting data fetch/select changes.
  • Updates conversion messaging and UI across Humanity Manager promo/email templates, donate sticky CTA (mobile), endorse grant calculator (accordion assumptions), and plaintiffs page framing/cutoff section.
  • Extends parameter catalog with new medical-toolchain and corporate-damages parameters/citations; adjusts treaty share-flow placeholder wiring.

Reviewed changes

Copilot reviewed 20 out of 20 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
TODO.md Adds roadmap notes for Person/Org conversion-surface follow-ups.
packages/web/src/lib/tasks.server.ts Extracts a reusable Prisma PersonSelect for person task profile data, adding votes + user counts.
packages/web/src/lib/humanity-manager-promotion-content.tsx Updates promo headline copy.
packages/web/src/lib/email/post-vote-share.email.md Updates email headline copy.
packages/web/src/lib/email/monthly-chain-digest.email.md Minor formatting tweak (line-wrapping).
packages/web/src/components/referendum/SignatoriesLeaderboard.tsx Extracts SufferingPreventedMetric component for reuse.
packages/web/src/components/organizations/OrganizationGrantCalculator.tsx Moves assumptions under an accordion; reshapes intro + swaps KPI ordering.
packages/web/src/components/landing/TreatyPostVoteShareFlow.tsx Switches nuclear-overkill placeholder value source to FLOW_WASTEFUL_APOCALYPSES.
packages/web/src/components/dashboard/NotificationPreferencesCard.tsx Adds data-testid for testing.
packages/web/src/app/signatories/page.logged-out.md Updates logged-out headline copy.
packages/web/src/app/plaintiffs/page.tsx Adds wrongful-death cutoff section + anchor CTA; imports new parameters.
packages/web/src/app/plaintiffs/page.logged-out.md Mirrors wrongful-death cutoff section in logged-out markdown.
packages/web/src/app/people/[id]/page.tsx Major redesign of the public person page into a campaign conversion surface.
packages/web/src/app/people/[id]/page.logged-out.md Removes some 404 copy lines.
packages/web/src/app/endorse/page.logged-out.md Updates grant-calculator copy and adds “Show assumptions” heading.
packages/web/src/app/donate/page.tsx Adds a mobile sticky “Donate” jump CTA and anchor for the calculator.
packages/web/scripts/build-visual-review.mjs Adds a seeded /people/mike route to visual review ordering.
packages/web/e2e/utils/visual-routes.ts Adds /people/mike to seeded visual routes.
packages/web/e2e/email-screenshots.spec.ts Updates expected email text for visual coverage.
packages/data/src/parameters/parameters-calculations-citations.ts Adds new medical-toolchain + corporate-damages parameters/citations; removes NUCLEAR_OVERKILL_SPARE_LAYERS.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/web/src/app/people/[id]/page.tsx
Comment thread packages/web/src/lib/tasks.server.ts
Copy link
Copy Markdown

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

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: 88b16f68ca

ℹ️ 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/lib/tasks.server.ts
@claude
Copy link
Copy Markdown

claude Bot commented May 16, 2026

Code review

Non-sanctioned CSS variable on public campaign headings

`[font-family:var(--v0-font-libre-baskerville)]` is applied to three public campaign headings in `packages/web/src/app/people/[id]/page.tsx` (the `

` and two `

` elements). The `v0-` prefix identifies this as a variable generated by v0.dev — it is not in the sanctioned treaty CSS variable list defined in CLAUDE.md.

CLAUDE.md rule (Visual Style Rules):

Default style: black-and-white treaty/editorial UI. Use semantic tokens and the treaty CSS variables already used by warondisease.org: background, foreground, border, ..., var(--treaty-paper), var(--treaty-ink), var(--treaty-ink-soft), var(--treaty-ink-muted).

The three affected elements are:

  • <h1 className="text-4xl font-black uppercase leading-none [font-family:var(--v0-font-libre-baskerville)] sm:text-5xl md:text-6xl"> — name heading
  • <h2 className="text-2xl font-black uppercase tracking-[0.08em] [font-family:var(--v0-font-libre-baskerville)]"> — activity section heading
  • <h2 className="text-2xl font-black uppercase tracking-[0.08em] [font-family:var(--v0-font-libre-baskerville)]"> — tasks section heading

Suggested fix: remove the [font-family:var(--v0-font-libre-baskerville)] utility from all three elements. The font-black uppercase classes already establish the treaty heading style; no custom font variable is needed.


No other issues found. Checked for bugs and CLAUDE.md compliance.

@mikepsinn mikepsinn merged commit a74dcca into main May 16, 2026
14 checks passed
@mikepsinn mikepsinn deleted the feature/post-81-conversion-tweaks branch May 16, 2026 19:35
@claude
Copy link
Copy Markdown

claude Bot commented May 16, 2026

Code review

Two confirmed CLAUDE.md violations. No bugs found.


Issue 1 — packages/web/src/app/people/[id]/page.logged-out.md — hand-edited snapshot

CLAUDE.md rule: "Never hand-edit page.logged-out.md / *.email.md snapshots. They're generated. After UI/copy changes run pnpm --filter @optimitron/web copy:preview."

/people/[id]/page.tsx was completely redesigned in this PR (treaty vote status, referral metrics, suffering prevented stats), but the snapshot diff only removes 2 lines from the old 404 copy block — leaving the file showing stale 404 content. A proper copy:preview run would regenerate the entire file to reflect the new campaign profile layout.

## 404
- PAGE NOT FOUND
- Fascinating. You've managed to navigate to a page that doesn't exist. On my planet, our routing infrastructure hasn't lost a page in 4,237 years. You lot can't even keep track of a URL.
- WISHONIA DIAGNOSTIC REPORT
- Problem: Page not found
- Severity: Mildly embarrassing

Fix: run pnpm --filter @optimitron/web copy:preview with a seeded /people/mike route and commit the result.


Issue 2 — packages/web/src/lib/email/monthly-chain-digest.email.md — hand-edited email snapshot

CLAUDE.md rule: "Emails: pnpm --filter @optimitron/web email:preview-md... Hand-edits are a smell."

The word "military" was surgically removed from a long prose sentence mid-paragraph ("cut military spending 87.6% in two years""cut spending 87.6% in two years") with no corresponding change to the email template source anywhere in this PR. A full email:preview-md regeneration would either reproduce the original or reflect a source change — not surgically delete one word from a 300-word prose blob.

3 assigned humans have not completed the 30-second vote yet. Examples: Jake Smith, Maria Chen, Uncle Dave.
Yeahhh, hi Jake Smith. Quick workflow update from the Department of Civilization Made a Spreadsheet and It Is Bad. If you could go ahead and vote on the 1% Treaty, that'd be great: https://warondisease.org/vote/SAMPLE It takes about 30 seconds. That is less time than deciding whether the leftovers in your fridge are food or a threat. Small note for the agenda: the treaty trades 1% of military spending for 12.3× more clinical trials. That compresses disease eradication from 443 years to 36. Mathematically it drops mass-murder capacity from 122 apocalypses to 120.8 — and, just to be clear, you can only have one apocalypse. (Humanity has 12,241 warheads, nuclear winter takes ~100, the other 12,141 are decorative.) The 121 spare apocalypses will not be missed. 36 years also means you, personally, might watch the world's last disease get cured. 443 years means your great-great-great-grandchildren still won't. Just so you have the timeline in front of you. The personal math is also rude: 21.7 additional healthy years per human and $3.48M additional lifetime income per person. HR says we should call this a wellness benefit. Before you flag this as 'unrealistic' on the agenda — pre-WWII US military spending was 96.7% lower than today, inflation-adjusted. The US still won WWII, then cut spending 87.6% in two years and produced the largest economic expansion in history. The same governments later banned chemical weapons (1993, 193 countries), biological weapons (1975, 187 countries), and landmines (1997, 164 countries) — weapons they actually like using. This one just asks them to buy 1% fewer of them. That's it. Also 1.8K people have died waiting for cures since I sent you this. We are trying to make that number stop going up. So if you could vote, then send this to two more humans who prefer not dying from preventable diseases, that'd be great.
LATE PRESIDENT REMINDER

Fix: find the email template source, update it there, and run pnpm --filter @optimitron/web email:preview-md to regenerate.


Checked: bugs, security, logic, CLAUDE.md compliance (UI/visual style, architecture, generated file rules, display identity, type safety).

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.

2 participants