Skip to content

Marketing copy refresh + UX/UI audit fixes (23 issues) - #4

Merged
criptogus merged 3 commits into
mainfrom
claude/marketing-copy-refresh
May 13, 2026
Merged

Marketing copy refresh + UX/UI audit fixes (23 issues)#4
criptogus merged 3 commits into
mainfrom
claude/marketing-copy-refresh

Conversation

@criptogus

Copy link
Copy Markdown
Owner

Summary

Two coupled changes that reposition the site around the moats we shipped in #2 and bring the UI up to the polish bar of a multinational SaaS surface.

Part 1 — Marketing copy refresh

The old copy said what every prompt-engineering product says ("turn your AI into an expert"). It hid the actual differentiators and left the reader guessing who the product is for.

  • Hero leads with proof, not promise: "benchmarked against an adversarial suite, cryptographically signed at release, and scored on real production telemetry." Public-facing risk surface rotates ("production / compliance / PHI data / your customers / real money").
  • WhatIsThis replaced: the generic Skills/Playbooks/Souls/Guardrails grid is now the actual moats — Adversarial harness · Signed Trust Score · Verticalized Souls · One MCP endpoint — each with a lucide icon and a sentence pointing at the specific regulatory wording we cover.
  • New WhoItsFor section with 5 concrete personas (eng leadership, security, regulated teams, solo builders, authors) deep-linking to the right marketplace filter, vertical, or bounty board.
  • Trust metrics row swapped from vanity ("4,218 ready-made experts", "91k AIs already upgraded", "99.99% uptime") to provable claims (100% signed, 5 verticals, 7 injection classes blocked, 30s MCP setup) with matching icons.
  • README "Why" rewritten around the moats; new "Who it's for" table mirrors landing.
  • Meta tags + JSON-LD updated.

Part 2 — UX/UI audit fixes (23 issues across P0/P1/P2)

Layout chrome (P0)

  • SitePage wrapper component added; all 10 newly-added routes (bounties, bounties/new, bounties/$id, leaderboard, compare/$pair, run/$slug, use-case/$vertical/$task, use-cases, collections/$slug, skill-of-the-week) now ship Nav + Footer instead of being orphan pages.
  • Nav gained a Community dropdown surfacing Skill of the Week, Use cases, Bounties, Affiliate leaderboard (with mobile sheet parity).
  • Footer gained a matching Community column (grid expanded 4→5 cols on md+).

Visual identity (P0)

  • WhatIsThis + trust metrics: emoji icons → lucide (ShieldCheck, BadgeCheck, Landmark, Plug, ShieldAlert, Clock) in primary-tinted squares.
  • Partner marquee (["CLAUDE", "CURSOR", ...] text-mono) replaced with a 6-card runtime grid — same compatibility claim, no trademark exposure.
  • /run/$slug watermark moved from rotated <div> to SVG repeating-pattern with low-opacity tiling.
  • Hero CTA hierarchy strengthened (primary larger, ghost link secondary).
  • Dark/light ThemeToggle next to GitHub button in Nav; persists in localStorage.

Empty + loading states (P0/P1)

  • EmptyState shared component: dashed border, primary-tinted glyph, body, optional CTA.
  • Applied to bounties, leaderboard, use-case, skill-of-the-week.
  • /run/$slug shows a spinner inside the CTA + a skeleton block previewing prompt/output panels.
  • Compare and leaderboard tables now sit in overflow-x-auto wrappers with min-w-[520px] so they scroll instead of overflowing mobile viewports.

Forms (P1)

  • bounties/new rebuilt with shadcn Label/Input/Textarea, per-field hint text, hint-rich vertical select, sticky billing note + primary CTA.

Cards (P1)

  • LineageCard redesign: header bar, lucide GitFork/GitBranch glyphs in rounded primary-tinted squares, rev-share % as emerald pill badge.
  • TipAuthorButton: $5 marked "Popular" via absolute-positioned ribbon; per-amount loading state; success animation auto-closes the modal.

Compare (P1)

  • New ScoreRow + ScoreBar: trust/adversarial render as a colored bar (green ≥85, yellow ≥70, orange ≥50, red below) plus monospace % so reviewers can scan rather than read.

Polish (P1/P2)

  • Rejection reason codes on /bounties/$id mapped to actionable human messages (e.g. TRUST_BELOW_THRESHOLD → "run more adversarial cases, publish a signed release, recompute, resubmit").
  • SocialProof reframed as illustrative scenarios — dropped the fake "Real teams. Real metrics." line; points at telemetry as source of truth.
  • ClientOnly minHeight cut on two sections (900→560, 700→520) to reduce hydration pop.
  • Smooth scroll on <html> (already gated by reduce-motion below).
  • Dynamic OG image endpoint /api/og/skill-of-the-week.svg (1200×630 SVG, 15-min edge cache) + meta tags so social shares of /skill-of-the-week render the current winner with trust/adv/installs stat cards.

Out of scope (deferred)

  • VS Code/Cursor marketplace extension (mentioned in the original viral roadmap)
  • GitHub App PR-comment "Skill Suggestor"
  • OG images for /compare/$pair and other dynamic pages

Test plan

  • Browser smoke: /, /bounties, /bounties/new, /bounties/<id>, /leaderboard, /compare/code-reviewer-vs-owasp-code-audit, /run/code-reviewer, /use-cases, /use-case/security/pr-security-review, /collections/<slug>, /skill-of-the-week
  • Verify Nav "Community" dropdown opens on desktop and mobile sheet
  • Theme toggle persists across reload
  • /api/og/skill-of-the-week.svg returns valid SVG
  • /api/badges/trust/<slug>.svg still works
  • Mobile (375px) views of leaderboard and compare scroll instead of breaking
  • All existing tests still pass (npm test)

Notes

  • No new migrations, no env changes, no behavior changes — pure copy + UI.
  • The reframed SocialProof keeps the existing fictional CASES data; replacing with real testimonials is a separate marketing task.

Generated by Claude Code

claude added 3 commits May 13, 2026 17:47
Ten newly-added pages (bounties, leaderboard, compare, run, use-case,
use-cases, collections, skill-of-the-week, bounties/new, bounties/\$id)
were orphans — no Nav, no Footer, no branding — which broke every
viral CTA that pointed at them.

- src/components/site/SitePage.tsx: shared chrome wrapper used by
  every non-landing route to inject Nav + Footer with consistent
  vertical flow
- Wraps all 10 new routes
- Nav.tsx: new "Community" dropdown surfacing Skill of the Week,
  Use cases, Bounties, Affiliate leaderboard (with mobile sheet
  parity)
- Footer.tsx: new Community column with same links + Discord; grid
  expanded to 5 columns on md+ to keep legibility
Replaces amateur signals with professional equivalents commonly used
by enterprise SaaS surfaces (Vercel/Stripe/Linear-style cards, lucide
glyphs, real SVG patterns).

- index.tsx WhatIsThis: emoji icons → lucide (ShieldCheck, BadgeCheck,
  Landmark, Plug) inside a rounded primary-tinted square
- index.tsx Hero trust metrics: matching lucide icons above each
  counter (BadgeCheck, Landmark, ShieldAlert, Clock)
- index.tsx Logos section: replaced text-mono partner marquee with a
  six-card "Works with" grid (Claude Code, Cursor, ChatGPT, Continue,
  Cline, Any MCP client). Avoids trademarked-logo issues and conveys
  the same compatibility claim more credibly.
- run.\$slug.tsx: rotated-div watermark replaced with an SVG
  repeating pattern (rotate -22°, low opacity, scales to any panel
  size without aliasing)
- ThemeToggle component (lucide Sun/Moon) added to desktop Nav next
  to the GitHub button; persists choice in localStorage
- styles.css: scroll-behavior: smooth on html (reduce-motion users
  are already handled below)
Closes the remaining UI gaps surfaced by the audit.

Empty + loading states
- src/components/site/EmptyState.tsx: shared dashed-border card with
  primary-tinted icon, title, body and optional CTA
- bounties.tsx, leaderboard.tsx, use-case.\$vertical.\$task.tsx,
  skill-of-the-week.tsx: replaced bare text fallbacks with EmptyState
  (Trophy / Users / Sparkles / Crown) and a one-click CTA each
- run.\$slug.tsx: spinner inside primary button while running, plus a
  skeleton block previewing prompt + output panels so the user never
  stares at a frozen form

Mobile
- leaderboard.tsx + compare.\$pair.tsx: tables now sit in
  overflow-x-auto wrappers with min-w-[520px] so they scroll instead
  of breaking the viewport below ~520px

Forms
- bounties.new.tsx rebuilt with shadcn Label/Input/Textarea, helper
  hints under each label, a hint-rich vertical <select>, sticky
  footer with billing note + primary CTA

Cards
- LineageCard.tsx: header bar + lucide GitFork/GitBranch glyphs in
  rounded primary-tinted squares; the rev-share % now sits in a
  pill-shaped emerald badge instead of inline text
- TipAuthorButton.tsx: \$5 marked "Popular" with absolute-positioned
  ribbon; per-amount loading state; success state shows checkmark
  before the modal auto-closes

Compare
- compare.\$pair.tsx: dedicated ScoreRow with ScoreBar component —
  trust/adversarial render as a colored bar (green/yellow/orange/red
  matching badgeColor() thresholds) plus monospace % so reviewers
  scan instead of read

Polish
- bounties.\$id.tsx: rejection codes mapped to human-readable
  instructions (TRUST_BELOW_THRESHOLD → "run more adversarial cases,
  publish a signed release, recompute, resubmit") inside a destructive
  banner instead of bare text
- Hero CTA hierarchy: primary larger and bolder with a scale-on-hover;
  secondary downgraded to ghost text-link weight
- SocialProof: dropped the "Real teams. Real metrics." line (fake
  customer names were a credibility risk) and reframed as illustrative
  scenarios — points at telemetry as the actual source of truth
- ClientOnly minHeights reduced (900→560, 700→520) so the hydration
  pop isn't a viewport-eating gap

OG image
- src/routes/api/og.skill-of-the-week.svg.ts: dynamic 1200×630 SVG
  open-graph image with current winner + trust / adversarial /
  installs stat cards; 15-min edge cache
- skill-of-the-week head meta wires the SVG into og:image +
  twitter:image so social shares show the winner card
@criptogus
criptogus merged commit c30dd32 into main May 13, 2026
1 check passed

@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: 71b00ab32b

ℹ️ 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 on lines +21 to +23
useEffect(() => {
setMode(readMode());
}, []);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Apply stored theme to document on initial load

The mount effect only updates React state (setMode(readMode())) and never applies that mode to <html>, so a previously saved dark preference in localStorage is not actually restored after a full page reload. In that scenario the icon flips to dark-mode state, but the page remains in light theme until the user toggles again, which breaks the advertised persistence behavior.

Useful? React with 👍 / 👎.


function readMode(): Mode {
if (typeof document === "undefined") return "light";
const stored = localStorage.getItem("sas-theme");

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 Guard theme read against blocked storage access

localStorage.getItem("sas-theme") is called without a try/catch. In browsers/environments where storage access is blocked (e.g., strict privacy settings), this can throw a SecurityError during the effect path and break the toggle initialization inside the navigation UI.

Useful? React with 👍 / 👎.

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