Skip to content

feat(website): porcelain redesign, Rivet Compute calculator, and marketing polish#5257

Merged
NicholasKissel merged 17 commits into
mainfrom
NicholasKissel/website-porcelain-redesign
Jun 14, 2026
Merged

feat(website): porcelain redesign, Rivet Compute calculator, and marketing polish#5257
NicholasKissel merged 17 commits into
mainfrom
NicholasKissel/website-porcelain-redesign

Conversation

@NicholasKissel

Copy link
Copy Markdown
Member

Collapses the former stacked PRs (#5219 seo-content-plays, #5228 cookbook-classical-covers, #5229 compare-page-premium, #5230 marketing-heading-weights) into a single PR off main, rebased onto the latest trunk. #5230 was already merged down into compare-page-premium; this brings the full body of work straight to main.

What's included

  • Porcelain redesign — light cool-porcelain theme across marketing pages and docs (header light theme, docs subnav/tabs, prose, selection states), warm-black ink text, classical oil-paint imagery.
  • Rivet Compute pricing + calculator — the /cloud pricing page integrates the compute calculator (vCPU / memory / active-hours sliders, live estimate on an ink data-plate), restyled to the porcelain system.
  • Compare page redesign, classical-art cookbook covers, and SEO content from the lower stack.
  • Actors hero — lag-free scroll dissolve (static gradient + opacity animation, no per-frame blur/mask).
  • Mobile polish — CTA painting fills with full-width contained buttons; mobile menu + docs section headers no longer render white-on-light.

Merge notes

  • Branched off latest main; the only content conflict was PricingPageClient.tsx (main's standalone calculator vs the redesigned page that already integrated it) — resolved to the redesigned version.
  • main's own website changes (e.g. environment-variables.mdx) are preserved.

🤖 Generated with Claude Code

…#5230)

* [SLOP(claude-fable-5)] style(website): align marketing heading weights with cookbook and compare pages

* [SLOP(claude-opus-4-8)] feat(website): swap observability inspector screenshot for light/dark variants with animated toggle

* [SLOP(claude-fable-5)] fix(website): lead marketing copy with agents and run-anywhere positioning

* [SLOP(claude-fable-5)] style(website): unify marketing typography and card system on compare-page primitives

* [SLOP(claude-fable-5)] style(website): remove dated decoration and align blog and timeline with dark design language

* [SLOP(claude-fable-5)] feat(website): enterprise page, self-hosted compare entry, and on-prem cookbook guide

* [SLOP(claude-fable-5)] chore(website): delete dead legacy marketing components

* [SLOP(claude-fable-5)] fix(website): replace custom-runtime framing with standard-stack positioning and drop landing-page Cloudflare callout

* [SLOP(claude-fable-5)] style(website): differentiate landing deploy sections and add visual texture to enterprise page

* [SLOP(claude-fable-5)] refactor(website): fold agent solution page into actors with use-case grid and redirect

* [SLOP(claude-fable-5)] chore(website): remove self-hosted vs managed platforms compare entry

* [SLOP(claude-fable-5)] feat(website): porcelain editorial design system foundation

* [SLOP(claude-fable-5)] feat(website): redesign landing page on porcelain editorial system

* [SLOP(claude-fable-5)] feat(website): porcelain editorial restyle for blog, changelog, cookbook, and legal templates

* [SLOP(claude-fable-5)] feat(website): porcelain restyle for support, oss-friends, 404, startups, and contact forms

* [SLOP(claude-fable-5)] feat(website): porcelain redesign for actors, enterprise, and cloud pricing pages

* [SLOP(claude-fable-5)] feat(website): porcelain redesign for agentOS family and compare pages

* [SLOP(claude-fable-5)] chore(website): final porcelain sweep, retint shared FAQ and copy components, delete dead dark-era components

* [SLOP(claude-fable-5)] fix(website): rebalance hosting section composition with paper command chips and aligned columns

* [SLOP(claude-fable-5)] fix(website): pill treatment for works-with-your-stack links to match deploy row

* [SLOP(claude-opus-4-8-high)] feat(website): documentary-style Ken Burns drift on cookbook covers

* [SLOP(claude-opus-4-8-high)] feat(website): tune cookbook Ken Burns slide per artwork toward each subject

* [SLOP(claude-opus-4-8)] feat(website): porcelain header/docs polish and Rivet Compute pricing calculator

* [SLOP(claude-opus-4-8)] feat(website): actors hero scroll dissolve and marketing polish

* [SLOP(claude-opus-4-8)] fix(website): mobile CTA/menu polish and lag-free actors hero scroll
…ium' into NicholasKissel/website-porcelain-redesign

# Conflicts:
#	website/src/components/marketing/pricing/PricingPageClient.tsx
@railway-app railway-app Bot temporarily deployed to rivet-frontend / rivet-pr-5257 June 14, 2026 05:49 Destroyed
@railway-app

railway-app Bot commented Jun 14, 2026

Copy link
Copy Markdown

🚅 Deployed to the rivet-pr-5257 environment in rivet-frontend

Service Status Web Updated (UTC)
website ✅ Success (View Logs) Web Jun 14, 2026 at 5:52 am
frontend-cloud ✅ Success (View Logs) Web Jun 14, 2026 at 5:52 am
kitchen-sink 🕗 Deploying (View Logs) Web Jun 14, 2026 at 5:51 am
frontend-inspector ❌ Build Failed (View Logs) Web Jun 14, 2026 at 5:51 am
ladle ✅ Success (View Logs) Web Jun 14, 2026 at 5:51 am
mcp-hub ✅ Success (View Logs) Web Jun 14, 2026 at 5:49 am

@claude

claude Bot commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

PR Review: feat(website) porcelain redesign, Rivet Compute calculator, and marketing polish

This is a large marketing and design overhaul (~7,900 additions, ~12,200 deletions). The overall design system work is clean and well-structured. A few things to flag:


Rust fix (rivetkit-wasm)

The inspector_tabs: None addition in rivetkit-wasm/src/lib.rs is correct. The comment explains the intent clearly and is consistent with the ActorConfigInput struct requiring the field.


Issues

1. Dead branch in BenchToggle (BenchCard.tsx)

const columns = options.length === 3 ? 'grid-cols-3' : options.length === 4 ? 'grid-cols-2' : 'grid-cols-2';

The options.length === 4 arm is dead — both the 4-check and the fallback resolve to 'grid-cols-2'. This is either a bug (4 options may want 'grid-cols-4' or a 2x2 grid) or the check can just be dropped: options.length === 3 ? 'grid-cols-3' : 'grid-cols-2'.

2. setTimeout without cleanup in TerminalCommand (HostingSection.tsx)

const handleCopy = async () => {
  await navigator.clipboard.writeText(command);
  setCopied(true);
  setTimeout(() => setCopied(false), 2000); // no cleanup
};

If the component unmounts within the 2-second window, setCopied fires on a stale closure. Low-impact on a marketing page, but a useEffect cleanup or useRef-based timer would be cleaner. The same pattern appears in existing CopyCommand.tsx components — worth standardizing across all copy buttons.

3. Sitemap audit for new pages

CLAUDE.md: "When adding new docs pages, update website/src/sitemap/mod.ts so the page appears in the sidebar."

The PR adds footer links for /enterprise and /compare/* pages but website/src/sitemap/mod.ts is not in the diff. If these are new pages (not just redesigned existing ones), they need sitemap entries.


Observations

  • motion.tsx accessibility: useReducedMotion is properly respected in both Reveal and RevealChild — degrades to opacity-only under reduced motion. RevealChild's y: 0 in the visible variant is harmless when hidden omits y (no y-transition fires).

  • BenchInfoTooltip keyboard accessibility: The tooltip appears on hover via CSS (group-hover/tip:opacity-100) with no focus-visible trigger. For marketing benchmarks this is likely acceptable, but screen-keyboard users cannot access the tooltip content.

  • InkPanel textureSrc: Inserted as an unescaped CSS url(...) string. All current callers use hardcoded CDN constants so this is safe, but worth noting if the prop ever accepts user-provided input.

  • ObservabilitySection inspector toggle: Clean implementation. aria-pressed and aria-label are set correctly. The layoutId='inspector-theme-active' is a stable string so cross-instance animation conflicts cannot occur (only one toggle per page).

  • useId() in BenchCard: Correct use for layoutId scoping in BenchToggle.

  • No rivet.gg references found in any new code.

  • astro.config.mjs image domains: Adding assets.rivet.dev enables build-time optimization. FOOTER_PAINTING_SRC in ComparePage.tsx uses that CDN URL as a CSS backgroundImage string rather than via Astro <Image>, which is intentional for a CSS background.

  • The deletion of legacy cloud/ and sections/ components is clean with no obvious dangling imports.


Summary

The design system additions (editorial/, motion.tsx, BenchCard, typography constants) are well-structured and consistent. The main actionable items are the dead BenchToggle ternary arm (#1) and confirming sitemap coverage for new pages (#3). The setTimeout cleanup (#2) is low-risk but worth standardizing across copy button components.

🤖 Generated with Claude Code

NicholasKissel commented Jun 14, 2026

Copy link
Copy Markdown
Member Author

Merge activity

  • Jun 14, 5:54 AM UTC: A user started a stack merge that includes this pull request via Graphite.
  • Jun 14, 5:55 AM UTC: @NicholasKissel merged this pull request with Graphite.

@NicholasKissel NicholasKissel merged commit 797a801 into main Jun 14, 2026
9 of 17 checks passed
@NicholasKissel NicholasKissel deleted the NicholasKissel/website-porcelain-redesign branch June 14, 2026 05:55
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