Skip to content

redesign(marketing): product-as-hero, section cull, audit-chain + value-prop - #208

Open
ejay-dev wants to merge 7 commits into
mainfrom
feat/homepage-value-proposition
Open

redesign(marketing): product-as-hero, section cull, audit-chain + value-prop#208
ejay-dev wants to merge 7 commits into
mainfrom
feat/homepage-value-proposition

Conversation

@ejay-dev

@ejay-dev ejay-dev commented Jun 3, 2026

Copy link
Copy Markdown
Owner

What

A homepage redesign aimed at killing the "AI vibe-coded" feel. Two pieces:

1. Editorial type-led hero (latest)

Replaces the old centred-text-over-stock-photo hero. (An intermediate "product-as-hero" dashboard-card version was tried and rejected — a glassmorphic card next to a shrunken headline is itself a generic AI-SaaS pattern.) The shipped hero commits to one idea:

  • One oversized Sora headline, left-anchored, white with a brand-grey continuation line as a counterpoint.
  • Neutral charcoal canvas (#1C1E1F family) instead of the blue SaaS gradient.
  • No glass cards, no glows, no eyebrow-pill — a single monospace label.
  • The only product artifact is a real append-only evidence-chain ledger rendered in JetBrains Mono as a columnar audit log: status glyph · time · event · NDIS/Rekor ref · hash. Realism + specificity carry it, not decoration.
  • Secondary CTA demoted to a quiet text link; trust line set in mono.

2. Section cull: ~15 → 9

Removed redundant "how it works" duplicates and trust strips:

  • compliance_network, compliance_engine_demo, interactive_demo off by default (control-plane can re-enable)
  • FrameworkTrustStrip, HomeProofStaticShell, TestimonialsSection removed from the homepage render (components retained for other surfaces)
  • Final order: Hero → TrustBar → HowItWorks → AuditChain → ValueProp → Industries → Security → OutcomeProof → CTA

3. Audit-chain + value-prop polish (earlier commits)

  • Cleaned up the "Not a repository. A live system." bento — removed mouse-follow spotlight, grid texture, blue tint; crisped the posture arc; fixed masked-teal "Approved" chips → emerald.
  • Rebuilt the audit-chain section in "operational mechanics" language with a better robot + hash-chain visual.

Verification

  • eslint clean; no hydration/console errors from the hero (one dev-only CSP/eval warning is pre-existing).
  • Browser-verified desktop + mobile; all 9 sections mount on scroll.

Deliberately left for a follow-up

  • Break the eyebrow→headline→grid "template spine" across the kept sections.
  • Strip remaining decoration (sprinkled dots, blur glows, font-black stat theater).
  • Cyan box-shadow glow on the mobile primary CTA (marketing.css:1273) contradicts the "no cyan glow" rule.

🤖 Generated with Claude Code

The bento layout is solid; strip the AI-vibe chrome carried over from earlier.

- Remove the per-card mouse-follow spotlight; keep a clean hover (subtle lift +
  border/accent brighten via group-hover).
- Remove the grid-texture overlay and neutralise the blue-tinted background
  gradient (replaced with a near-neutral dark + a subtle white top glow).
- Crisp up the 94% posture arc: drop the drop-shadow filter and the blurred
  glow-layer circle.
- Fix the masked teal: the "Approved" enforcement chips used teal, which renders
  grey under the brand override — switched to emerald so Blocked (red) / Approved
  (green) read as intentional semantic states.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 3, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
forma-os Ready Ready Preview, Comment Jun 3, 2026 4:35am

@coderabbitai

coderabbitai Bot commented Jun 3, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

ValueProposition: remove interactive spotlight and glow, rework Compliance Posture into per-framework progress rows, change Approved pills to emerald, and update section background. AuditChainSection: add AuditBoard with pointer-following audit-bot, facts

, layout rewiring, and audit-bot CSS. Add server-rendered hero product panel and adjust homepage wiring and defaults.

Changes

ValueProposition Component Visual Cleanup

Layer / File(s) Summary
Imports & GlassCard hover/spotlight removal
app/(marketing)/components/homepage/ValueProposition.tsx
Remove useState/useCallback imports; eliminate GlassCard mouse/hover state and move-handler wiring; simplify inner markup by removing spotlight/ref/event handlers while preserving motion entry animation.
Compliance Posture SVG and descriptive rework
app/(marketing)/components/homepage/ValueProposition.tsx
Add frameworks array; remove SVG inline drop-shadow and the blurred glow arc; replace prior metrics/copy with paragraph and animated per-framework list including progress bars and updated metrics layout.
Workflow Enforcement pill color updates
app/(marketing)/components/homepage/ValueProposition.tsx
Both "Approved" pill variants switch utility classes from teal to emerald for background, border, and icon/text colors.
Section background and edge redesign
app/(marketing)/components/homepage/ValueProposition.tsx
Swap container background gradient, add subtle radial neutral overlay, remove grid texture/inline edge blocks, and add two utility-class gradient edge dividers.

AuditChainSection additions

Layer / File(s) Summary
Imports and CHAIN_FACTS constant
app/(marketing)/components/homepage/AuditChainSection.tsx
Update React imports to include hooks/types and define CHAIN_FACTS (and adjust PILLARS) used by the new facts bar and pillars.
AuditBoard: animated bot & pointer tracking
app/(marketing)/components/homepage/AuditChainSection.tsx
Add AuditBoard component that uses IntersectionObserver and requestAnimationFrame to animate a pointer-following audit-bot with reduced-motion respect.
AuditChainSection layout & pillars wiring
app/(marketing)/components/homepage/AuditChainSection.tsx
Wrap the pillars grid inside AuditBoard, update section/header markup, card/grid classes, and ScrollReveal wiring to the interactive presentation.
Facts bar
app/(marketing)/components/homepage/AuditChainSection.tsx
Render a responsive <dl> facts bar driven by CHAIN_FACTS with hover and background transitions.
CTA spacing and link styling
app/(marketing)/components/homepage/AuditChainSection.tsx
Adjust /trust call-to-action container spacing and link underline/hover behavior while retaining destination and icon.
Audit-bot global styles
app/globals.css
Add .audit-bot and .audit-bot--awake styles with transforms, glow adjustments, blink keyframes, and a prefers-reduced-motion override that hides the beam and disables eye animation.

Homepage composition, hero, and defaults

Layer / File(s) Summary
Homepage lazy-load & section removal
app/(marketing)/components/FigmaHomepage.tsx
Remove FrameworkTrustStrip import and delete TestimonialsSection and its always-on social-proof block; keep AuditChainSection and OutcomeProofSection ordering.
HeroStaticShell: product-as-hero panel
app/(marketing)/components/HeroStaticShell.tsx
Add server-side constants and HeroPosturePanel; replace hero layout with two-column grid and render a static product posture panel with SVG ring and per-framework rows.
Marketing page hero swap
app/(marketing)/page.tsx
Replace HomeProofStaticShell with HeroStaticShell for the server-rendered hero and render TrustBar after it.
Runtime marketing defaults
lib/control-plane/defaults.ts
Set compliance_network, interactive_demo, and compliance_engine_demo defaults to false in DEFAULT_RUNTIME_MARKETING.runtime.sectionVisibility.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • ejay-dev/FormaOS#193: Related marketing audit-chain work that introduced the audit-chain section and initial visuals.
  • ejay-dev/FormaOS#207: Changes to marketing runtime defaults and demo wiring related to compliance engine demo visibility.

Poem

🐰 I hopped along the homepage glow,
The spotlight hushed to steady flow.
Emerald pills and tidy bars,
A tiny bot that follows stars.
Quiet motion, brighter rows—hip-hop, bravo!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 66.67% 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
Title check ✅ Passed The title accurately reflects the main changes: redesigning the marketing homepage with a product-as-hero layout, culling sections, and enhancing the audit-chain and value-prop sections.
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/homepage-value-proposition

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

@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: eb4f10de7d

ℹ️ 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".

className="group relative h-full overflow-hidden rounded-2xl border border-white/[0.06] bg-white/[0.02] transition-colors duration-300 hover:border-white/[0.1]"
>
{/* Mouse spotlight */}
<div className="group relative h-full overflow-hidden rounded-2xl border border-white/[0.06] bg-white/[0.02] transition-all duration-300 hover:-translate-y-0.5 hover:border-white/[0.12]">

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Respect reduced motion for hover lift

When a visitor has prefers-reduced-motion: reduce, noMotion still disables the Framer entrance animations, but this new CSS hover transform is unconditional; the global reduced-motion rule only shortens transitions, so hovering any of the five GlassCards still moves the card. Gate the transform with motion-safe:hover:-translate-y-0.5 or omit it when noMotion is true so this section keeps honoring the reduced-motion setting.

Useful? React with 👍 / 👎.

@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown

♿ Accessibility Test Results

PASSED - No critical accessibility issues found

Tests Performed:

  • WCAG 2.1 AA compliance validation
  • Cross-browser accessibility testing
  • Keyboard navigation testing
  • Screen reader compatibility
  • Color contrast validation

Artifacts: Download the accessibility reports from the "Artifacts" section for detailed results.

ejay-dev and others added 2 commits June 3, 2026 12:29
The three prose cards under-sold what is actually a cryptographic showcase.
Add a hash-chain visual as the centrepiece: three audit_log rows linked by
HMAC (each row's `prev` equals the previous row's `hmac`), flowing into the
Sigstore Rekor external anchor (Merkle inclusion, 05:30 UTC). Labelled
illustrative — it demonstrates the mechanism, not customer data. The three
pillar cards remain below as the explanation.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The posture card was a number + three stats. Make it read like the actual
/app/compliance/health screen: keep the 94% arc, then render illustrative
per-framework rows (SOC 2 / ISO 27001 / HIPAA) with animated bars, and demote
the 47/50 · 312 · 8 figures to a compact summary footer. Still labelled
"example values, not a customer claim".

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ejay-dev ejay-dev changed the title cleanup(marketing): de-gimmick the "live system" value-prop bento redesign(marketing): elevate audit-chain + value-prop sections Jun 3, 2026

@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.

🧹 Nitpick comments (1)
app/(marketing)/components/homepage/AuditChainSection.tsx (1)

44-51: 💤 Low value

Consider clarifying the comment about row linkage.

The comment states "Each row's prev equals the previous row's hmac", but row 1024's prev value (5e8b…41d) doesn't match any row in the array. Consider clarifying that this represents a mid-chain segment where row 1024 links to an earlier (not shown) row.

📝 Suggested comment clarification
-// Illustrative hash-chain rows. Each row's `prev` equals the previous row's
-// `hmac`, so the linkage is internally consistent — it demonstrates the
-// mechanism, not real customer data.
+// Illustrative hash-chain rows from the middle of a chain. Each row's `prev`
+// equals the previous row's `hmac` (row 1024's prev links to an earlier row
+// not shown), so the linkage is internally consistent — it demonstrates the
+// mechanism, not real customer data.
🤖 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 `@app/`(marketing)/components/homepage/AuditChainSection.tsx around lines 44 -
51, Update the comment and/or data so the linkage claim is accurate: either
change CHAIN_ROWS[0].prev to match the hmac of the previous shown row (so each
row's prev equals the previous row's hmac) or revise the comment to state this
is a mid-chain segment where seq '1024' links to an earlier, not-shown row
(leaving the existing values). Make the intent explicit in the comment next to
the CHAIN_ROWS declaration so readers aren’t confused by seq '1024' having a
prev that doesn't appear in the array.
🤖 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.

Nitpick comments:
In `@app/`(marketing)/components/homepage/AuditChainSection.tsx:
- Around line 44-51: Update the comment and/or data so the linkage claim is
accurate: either change CHAIN_ROWS[0].prev to match the hmac of the previous
shown row (so each row's prev equals the previous row's hmac) or revise the
comment to state this is a mid-chain segment where seq '1024' links to an
earlier, not-shown row (leaving the existing values). Make the intent explicit
in the comment next to the CHAIN_ROWS declaration so readers aren’t confused by
seq '1024' having a prev that doesn't appear in the array.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 486d408d-f007-40cc-94c9-ec645130da2f

📥 Commits

Reviewing files that changed from the base of the PR and between eb4f10d and d017988.

📒 Files selected for processing (2)
  • app/(marketing)/components/homepage/AuditChainSection.tsx
  • app/(marketing)/components/homepage/ValueProposition.tsx

@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown

♿ Accessibility Test Results

PASSED - No critical accessibility issues found

Tests Performed:

  • WCAG 2.1 AA compliance validation
  • Cross-browser accessibility testing
  • Keyboard navigation testing
  • Screen reader compatibility
  • Color contrast validation

Artifacts: Download the accessibility reports from the "Artifacts" section for detailed results.

…s" language + better robot

Match the AuditChain section to the OutcomeProof section's clean language and
give it a properly designed agent.

- Centred sans header (eyebrow / display h2 / subhead) replacing the
  mono-flanked treatment.
- Three clean cards (icon tile + mono eyebrow + title + prose) in the same card
  style as the outcome cards, plus a hairline-divided "facts" bar
  (HMAC-SHA256 · RFC 6962 · 05:30 UTC · Append-only · Sigstore Rekor).
- New custom-SVG agent — the "chain re-walker" (the nightly cron that re-walks
  the chain): a rounded robot head with antenna + pulse, eye-screens whose
  pupils track the cursor, a glow and scan beam. It patrols the cards and eases
  toward the pointer while hovering. lg-only; parked + still under
  prefers-reduced-motion. Replaces the generic lucide bot glyph.

Supersedes the standalone hash-chain panel; the cards + facts bar carry the
mechanism in the cleaner layout.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown

♿ Accessibility Test Results

PASSED - No critical accessibility issues found

Tests Performed:

  • WCAG 2.1 AA compliance validation
  • Cross-browser accessibility testing
  • Keyboard navigation testing
  • Screen reader compatibility
  • Color contrast validation

Artifacts: Download the accessibility reports from the "Artifacts" section for detailed results.

… robot

- Replace the mono "R3 · audit_log" / "R4 · sigstore rekor" / "postgres · rls"
  eyebrows (read as AI/code-vibe) with clean human sublines under each title
  ("Tamper-evident by construction", etc.), matching the outcome cards'
  title+subline pattern. De-mono the facts bar values too.
- Rebuild the agent as a properly detailed robot: gradient head casing with a
  top highlight, side ears, a visor face screen, glowing radial-gradient eyes
  with a halo (still cursor-tracking), a mouth grille, antenna pulse, and an
  occasional blink. Off/parked under prefers-reduced-motion.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown

♿ Accessibility Test Results

PASSED - No critical accessibility issues found

Tests Performed:

  • WCAG 2.1 AA compliance validation
  • Cross-browser accessibility testing
  • Keyboard navigation testing
  • Screen reader compatibility
  • Color contrast validation

Artifacts: Download the accessibility reports from the "Artifacts" section for detailed results.

Replace the centred-over-stock-photo hero with a two-column layout: the
claim on the left, a static replica of the /app/compliance/health posture
panel (94% score ring, NDIS / Aged Care / ISO rows, cryptographic
audit-chain footer) on the right. Drop the dimmed stock photo of strangers
and collapse the 4 stacked radial gradients to two restrained depth layers.
Panel is server-rendered HTML/SVG — fast LCP, no framer-motion.

Cull the homepage from ~15 always-on sections to 9, removing redundant
"how it works" duplicates and trust strips:
- compliance_network / compliance_engine_demo / interactive_demo off by
  default (control plane can re-enable)
- FrameworkTrustStrip, HomeProofStaticShell, TestimonialsSection removed
  from the homepage render (components retained for other surfaces)

Final order: Hero -> TrustBar -> HowItWorks -> AuditChain -> ValueProp ->
Industries -> Security -> OutcomeProof -> CTA.

Verified: tsc + eslint clean; all 9 sections mount on scroll.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ejay-dev ejay-dev changed the title redesign(marketing): elevate audit-chain + value-prop sections redesign(marketing): product-as-hero, section cull, audit-chain + value-prop Jun 3, 2026

@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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
app/(marketing)/components/FigmaHomepage.tsx (1)

99-260: ⚠️ Potential issue | 🔴 Critical | 🏗️ Heavy lift

Fix homepage decision/telemetry contract for framework_trust_strip (critical mismatch).

  • lib/marketing/homepage-experience.ts treats framework_trust_strip as always-visible/non-deferred (and includes it in critical sections), and tests/marketing/homepage-experience.test.ts asserts that expectation.
  • app/(marketing)/components/FigmaHomepage.tsx never renders any section keyed framework_trust_strip, yet its telemetry.trackSectionRendered(...) loop reports a “rendered” section for every decision (including framework_trust_strip when deferred === false).
  • app/(marketing)/page.tsx renders <TrustBar />, but components/TrustBar.tsx is not FrameworkTrustStrip and nothing maps it to the framework_trust_strip homepage key.

Action: Restore the missing renderer for the framework_trust_strip key (e.g., render <FrameworkTrustStrip /> through renderSection('framework_trust_strip', ...)), or remove/rename the framework_trust_strip key from the homepage decision engine + update tests/telemetry to match what’s actually mounted on the homepage (and gate section telemetry to mounted/visible sections only).

🤖 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 `@app/`(marketing)/components/FigmaHomepage.tsx around lines 99 - 260, The
homepage decision/telemetry mismatch is because FormaOSHomepage never renders
the "framework_trust_strip" key that the decision engine and tests expect; fix
by restoring a renderer for that key (or else remove/rename the key in the
decision engine and update tests). Concretely, in the FormaOSHomepage component
add a renderSection('framework_trust_strip', <FrameworkTrustStrip /> , <optional
minHeight>) call in the page sections where the trust strip should appear (and
import the FrameworkTrustStrip component), or if you choose the alternative,
update deriveHomepageSectionDecisions / decisionMapFromList and tests
(tests/marketing/homepage-experience.test.ts) and telemetry usage so the key no
longer exists; also ensure telemetry.trackSectionRendered only reports sections
present in decisionMap/rendered output (filter sectionDecisions by keys that
have a rendered component).
🧹 Nitpick comments (2)
app/(marketing)/components/HeroStaticShell.tsx (2)

82-124: ⚡ Quick win

Reduce CTA rendering duplication.

The primary and secondary CTA blocks duplicate nearly identical markup for external vs internal links. Consider extracting a helper component or conditionally wrapping the button content to maintain a single source of truth.

♻️ Suggested refactor pattern
// Helper to conditionally wrap button content
const CTAButton = ({ 
  href, 
  isExternal, 
  className, 
  children 
}: { 
  href: string; 
  isExternal: boolean; 
  className: string; 
  children: React.ReactNode;
}) => {
  const content = children;
  return isExternal ? (
    <a href={href} className={className} rel="noopener noreferrer">
      {content}
    </a>
  ) : (
    <Link href={href} className={className}>
      {content}
    </Link>
  );
};

// Usage:
<CTAButton 
  href={primaryHref} 
  isExternal={primaryExternal}
  className="mk-btn mk-btn-primary group min-h-[50px] justify-center px-7 py-4 text-base sm:text-lg"
>
  <span>{heroCopy.primaryCtaLabel}</span>
  <ArrowRight className="h-5 w-5 transition-transform group-hover:translate-x-1" aria-hidden="true" />
</CTAButton>
🤖 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 `@app/`(marketing)/components/HeroStaticShell.tsx around lines 82 - 124, Reduce
duplicated CTA markup by extracting a small helper component (e.g., CTAButton)
that takes href, isExternal, className and children and conditionally renders an
<a> (with rel="noopener noreferrer") or a Next.js Link; replace the duplicated
primary and secondary blocks to call CTAButton with primaryHref/primaryExternal
and secondaryHref/secondaryExternal respectively, passing the same className
strings and children (span with heroCopy.primaryCtaLabel + ArrowRight for
primary; heroCopy.secondaryCtaLabel for secondary) and preserve ArrowRight's
aria-hidden and transition classes.

218-237: Extract a shared “per-framework score + progress bar row” component (HeroStaticShell ↔ ValueProposition)

  • app/(marketing)/components/HeroStaticShell.tsx maps POSTURE_FRAMEWORKS to rows rendering f.name, f.score%, and a progress bar with h-1.5 overflow-hidden rounded-full bg-white/[0.06] outer + h-full rounded-full bg-slate-300/80 inner and style={{ width: \${f.score}%` }}`.
  • app/(marketing)/components/homepage/ValueProposition.tsx similarly maps frameworks to rows with the same structure/classes/width ${f.score}%, differing mainly by using motion.div for the width animation.

Consider extracting the row into a shared component with an option to render motion.div vs a static div to reduce duplication.

🤖 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 `@app/`(marketing)/components/HeroStaticShell.tsx around lines 218 - 237,
Extract the repeated "per-framework score + progress bar row" into a shared
React component (e.g., FrameworkScoreRow) that accepts props: name, score, and
an optional animate boolean (or optional innerComponent prop) to decide whether
to render the inner bar as a motion.div or a normal div; move the outer
container classes ("h-1.5 overflow-hidden rounded-full bg-white/[0.06]") and
inner classes ("h-full rounded-full bg-slate-300/80") into that component,
compute width from score (style={{ width: `${score}%` }}), and export it for
reuse; then replace the mapping in HeroStaticShell (using static div) and
ValueProposition (pass animate=true so it uses motion.div) to render
FrameworkScoreRow(key={f.name} name={f.name} score={f.score} ...), and
add/update prop types/TS interface for FrameworkScoreRow so consumers type-check
correctly.
🤖 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.

Outside diff comments:
In `@app/`(marketing)/components/FigmaHomepage.tsx:
- Around line 99-260: The homepage decision/telemetry mismatch is because
FormaOSHomepage never renders the "framework_trust_strip" key that the decision
engine and tests expect; fix by restoring a renderer for that key (or else
remove/rename the key in the decision engine and update tests). Concretely, in
the FormaOSHomepage component add a renderSection('framework_trust_strip',
<FrameworkTrustStrip /> , <optional minHeight>) call in the page sections where
the trust strip should appear (and import the FrameworkTrustStrip component), or
if you choose the alternative, update deriveHomepageSectionDecisions /
decisionMapFromList and tests (tests/marketing/homepage-experience.test.ts) and
telemetry usage so the key no longer exists; also ensure
telemetry.trackSectionRendered only reports sections present in
decisionMap/rendered output (filter sectionDecisions by keys that have a
rendered component).

---

Nitpick comments:
In `@app/`(marketing)/components/HeroStaticShell.tsx:
- Around line 82-124: Reduce duplicated CTA markup by extracting a small helper
component (e.g., CTAButton) that takes href, isExternal, className and children
and conditionally renders an <a> (with rel="noopener noreferrer") or a Next.js
Link; replace the duplicated primary and secondary blocks to call CTAButton with
primaryHref/primaryExternal and secondaryHref/secondaryExternal respectively,
passing the same className strings and children (span with
heroCopy.primaryCtaLabel + ArrowRight for primary; heroCopy.secondaryCtaLabel
for secondary) and preserve ArrowRight's aria-hidden and transition classes.
- Around line 218-237: Extract the repeated "per-framework score + progress bar
row" into a shared React component (e.g., FrameworkScoreRow) that accepts props:
name, score, and an optional animate boolean (or optional innerComponent prop)
to decide whether to render the inner bar as a motion.div or a normal div; move
the outer container classes ("h-1.5 overflow-hidden rounded-full
bg-white/[0.06]") and inner classes ("h-full rounded-full bg-slate-300/80") into
that component, compute width from score (style={{ width: `${score}%` }}), and
export it for reuse; then replace the mapping in HeroStaticShell (using static
div) and ValueProposition (pass animate=true so it uses motion.div) to render
FrameworkScoreRow(key={f.name} name={f.name} score={f.score} ...), and
add/update prop types/TS interface for FrameworkScoreRow so consumers type-check
correctly.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 85bf5bde-b22d-43fb-b0c5-ec21cf812d3c

📥 Commits

Reviewing files that changed from the base of the PR and between f997f67 and 1d24f50.

📒 Files selected for processing (4)
  • app/(marketing)/components/FigmaHomepage.tsx
  • app/(marketing)/components/HeroStaticShell.tsx
  • app/(marketing)/page.tsx
  • lib/control-plane/defaults.ts
💤 Files with no reviewable changes (1)
  • app/(marketing)/page.tsx

@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown

♿ Accessibility Test Results

PASSED - No critical accessibility issues found

Tests Performed:

  • WCAG 2.1 AA compliance validation
  • Cross-browser accessibility testing
  • Keyboard navigation testing
  • Screen reader compatibility
  • Color contrast validation

Artifacts: Download the accessibility reports from the "Artifacts" section for detailed results.

…-card hero

The previous product-as-hero (split layout + glassmorphic posture card) was
itself a generic AI-SaaS pattern and shrank the headline's presence. Replace
it with a type-led editorial hero that commits to one idea:

- One oversized Sora headline, left-anchored, white with a brand-grey
  continuation line as a counterpoint
- Neutral charcoal canvas (#1C1E1F family) instead of the blue SaaS gradient
- No glass cards, no glows, no eyebrow-pill — a single monospace label
- The only product artifact is a real append-only evidence-chain ledger
  rendered in JetBrains Mono as a columnar audit log
  (status glyph · time · event · NDIS/Rekor ref · hash)
- Secondary CTA demoted to a quiet text link; trust line set in mono

Section cull (9 sections) from the prior commit is unchanged.

Verified: eslint clean; no hydration/console errors from the hero
(the one dev console warning is a pre-existing CSP/eval dev-mode message);
desktop + mobile screenshotted.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown

♿ Accessibility Test Results

PASSED - No critical accessibility issues found

Tests Performed:

  • WCAG 2.1 AA compliance validation
  • Cross-browser accessibility testing
  • Keyboard navigation testing
  • Screen reader compatibility
  • Color contrast validation

Artifacts: Download the accessibility reports from the "Artifacts" section for detailed results.

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.

1 participant