Skip to content

Conversation

@NicholasKissel
Copy link
Member

No description provided.

@vercel
Copy link

vercel bot commented Nov 25, 2025

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

Project Deployment Preview Comments Updated (UTC)
rivet-site Ready Ready Preview Comment Nov 25, 2025 9:58pm
3 Skipped Deployments
Project Deployment Preview Comments Updated (UTC)
rivet-cloud Ignored Ignored Nov 25, 2025 9:58pm
rivet-inspector Ignored Ignored Preview Nov 25, 2025 9:58pm
rivetkit-serverless Skipped Skipped Nov 25, 2025 9:58pm

@vercel vercel bot temporarily deployed to Preview – rivetkit-serverless November 25, 2025 21:19 Inactive
Copy link
Member Author


How to use the Graphite Merge Queue

Add the label merge-queue to this PR to add it to the merge queue.

You must have a Graphite account in order to use the merge queue. Sign up using this link.

An organization admin has enabled the Graphite Merge Queue in this repository.

Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue.

This stack of pull requests is managed by Graphite. Learn more about stacking.

@claude
Copy link

claude bot commented Nov 25, 2025

PR Review: Design & Format Changes

Thanks for the PR! I've reviewed the changes and have the following feedback organized by category:


Strengths

  1. Consistent Design Language: The new game servers landing page demonstrates strong visual design with consistent use of colors, animations, and component patterns
  2. Good Component Extraction: Reusable components like Badge, CodeBlock, and SolutionCard are well-structured
  3. Responsive Design: Proper use of Tailwind breakpoints for mobile/desktop layouts
  4. Motion & Interactivity: Framer Motion animations are tastefully implemented with proper viewport triggers

🔍 Code Quality Issues

1. Missing TypeScript Types (High Priority)

The new game-servers page has several untyped props:

// website/src/app/(v2)/(marketing)/solutions/game-servers/page.tsx:43
const Badge = ({ text, color = "red" }) => {
  // Should be: ({ text, color = "red" }: { text: string; color?: "red" | "orange" | "blue" | "purple" | "emerald" })
// Line 74
const CodeBlock = ({ code, fileName = "match.ts" }) => {
  // Should include: { code: string; fileName?: string }
// Line 243
const SolutionCard = ({ title, description, icon: Icon, color = "red" }) => {
  // Should include proper types for all props

Recommendation: Add explicit TypeScript interfaces for all component props to maintain type safety.

2. Array Index Keys (Medium Priority)

// Line 89-90
{code.split("\n").map((line, i) => (
  <div key={i} className="table-row">

Using array indices as keys is an anti-pattern in React and can cause rendering issues. While this might be acceptable for static content that never changes, consider generating stable IDs or using the line content hash.

3. Large Component File (Medium Priority)

The game-servers page is 816 lines in a single file. Consider splitting into:

  • /components/game-servers/Hero.tsx
  • /components/game-servers/GameLoopArchitecture.tsx
  • /components/game-servers/GameFeatures.tsx
  • etc.

This improves maintainability and enables better code reuse.

4. Inconsistent Font Classes

-  className="font-heading text-5xl md:text-6xl lg:text-7xl font-bold tracking-tighter"
+  className="text-5xl font-medium leading-[1.1] tracking-tighter md:text-7xl"

The removal of font-heading in favor of default font is inconsistent with the pattern. Also, mixing font-v2 class names (pricing page) suggests unclear design system conventions.

Recommendation: Document font usage patterns in a design system guide.


🐛 Potential Bugs

1. Visibility Logic May Break Layout

// website/src/app/(v2)/(marketing)/(index)/sections/SolutionsSection.tsx:76
-<section id='solutions' className='relative border-t border-white/10 bg-black py-32'>
+<section id='solutions' className='hidden md:block relative border-t border-white/10 bg-black py-32'>

Hiding the entire Solutions section on mobile could:

  • Break anchor links (#solutions)
  • Create awkward whitespace
  • Remove important content from mobile users

Recommendation: Consider a mobile-optimized version instead of hiding completely.

2. Missing Error Boundaries

The game-servers page includes animations and complex rendering logic but lacks error boundaries. If the useEffect in GameLoopArchitecture fails, it could crash the entire page.


Performance Considerations

1. Client-Side Animation Overhead

// Line 365-370
useEffect(() => {
  const interval = setInterval(() => {
    setTick((t) => t + 1);
  }, 500);
  return () => clearInterval(interval);
}, []);

This creates a 2Hz animation loop. While not expensive, consider:

  • Using CSS animations where possible (more performant)
  • Adding will-change hints for animated elements
  • Implementing requestAnimationFrame for smoother animations

2. Custom Syntax Highlighter

The inline tokenizer (lines 95-200) is complex and runs on every render. Consider:

  • Using an established library like prism-react-renderer or shiki
  • Memoizing the tokenization result with useMemo
  • Pre-processing syntax highlighting at build time
const tokens = useMemo(() => tokenizeLine(line), [line]);

3. Image Optimization Missing

The updated og.png (binary change) should be verified for:

  • Proper compression
  • Appropriate dimensions (typically 1200x630 for OG images)
  • File size under 1MB

4. Framer Motion Bundle Size

Importing entire framer-motion adds significant bundle weight. Consider:

  • Lazy loading the game-servers page
  • Code splitting with dynamic imports

🔒 Security Concerns

No significant security issues found. The changes are primarily presentational. However:

  1. XSS Prevention: The syntax highlighter manually constructs HTML. While currently safe (using React elements), be cautious if this evolves to use dangerouslySetInnerHTML.

  2. External Links: The buttons reference /sales, /docs/self-hosting etc. without rel="noopener" where appropriate.


🧪 Test Coverage

Critical Issue: No tests found for the new pages/components.

# I searched for test files
$ find website -name "*.test.*"
# No results

Recommendations:

  1. Add unit tests for utility functions (buildPathComponents, buildFullPath)
  2. Add component tests for the new shared components (Badge, CodeBlock, SolutionCard)
  3. Add integration tests for the doc page routing logic
  4. Add visual regression tests (e.g., Percy, Chromatic) for the game-servers landing page

📝 Minor Issues

  1. Unused Imports (Line 5-38 in game-servers page): Many icons imported but some may be unused (verify Sword, Trophy, Target are all used)

  2. Magic Numbers: Color stop percentages and gradient values are hardcoded:

    maskImage: 'radial-gradient(ellipse 300% 100% at 50% 90%, rgba(0,0,0,0.3) 0%, ...)'

    Consider extracting to CSS variables or constants.

  3. Accessibility:

    • Empty aria-hidden divs are good
    • Button elements should have type="button" when not in forms
    • Some interactive elements are missing focus styles
  4. File Naming: The new doc-page.tsx and util.ts files break the convention of kebab-case for files (though layout.tsx is standard)


Suggestions for Improvement

  1. Extract Design Tokens: Colors, spacing, and gradients should live in a central theme config
  2. Add Storybook: Document the new components (Badge, CodeBlock, SolutionCard) in Storybook
  3. Document the Dynamic Route: Add comments explaining the [section] routing logic
  4. Add Loading States: The doc pages could benefit from skeleton loaders
  5. Consider Internationalization: If planning to support multiple languages, structure content accordingly

📊 Summary

Category Status
Code Quality ⚠️ Needs improvement (missing types)
Bugs ⚠️ Minor issues (mobile visibility)
Performance ⚠️ Consider optimizations
Security ✅ Good
Tests ❌ Missing coverage

Overall: This PR introduces nice design improvements, but needs TypeScript types, test coverage, and some refactoring before merge. The game-servers landing page is impressive visually but should be split into smaller components.

Blocking Issues:

  • Add TypeScript types to all new components
  • Address the mobile visibility issue in SolutionsSection
  • Add at least basic tests for the routing utilities

Non-Blocking Improvements:

  • Extract components from game-servers page
  • Optimize syntax highlighting
  • Add test coverage for new components

Let me know if you'd like help addressing any of these issues!

@pkg-pr-new
Copy link

pkg-pr-new bot commented Nov 25, 2025

More templates

@rivetkit/cloudflare-workers

pnpm add https://pkg.pr.new/rivet-dev/rivet/@rivetkit/cloudflare-workers@3548

@rivetkit/db

pnpm add https://pkg.pr.new/rivet-dev/rivet/@rivetkit/db@3548

@rivetkit/framework-base

pnpm add https://pkg.pr.new/rivet-dev/rivet/@rivetkit/framework-base@3548

@rivetkit/next-js

pnpm add https://pkg.pr.new/rivet-dev/rivet/@rivetkit/next-js@3548

@rivetkit/react

pnpm add https://pkg.pr.new/rivet-dev/rivet/@rivetkit/react@3548

rivetkit

pnpm add https://pkg.pr.new/rivet-dev/rivet/rivetkit@3548

@rivetkit/sql-loader

pnpm add https://pkg.pr.new/rivet-dev/rivet/@rivetkit/sql-loader@3548

@rivetkit/engine-runner

pnpm add https://pkg.pr.new/rivet-dev/rivet/@rivetkit/engine-runner@3548

@rivetkit/engine-runner-protocol

pnpm add https://pkg.pr.new/rivet-dev/rivet/@rivetkit/engine-runner-protocol@3548

commit: f48fbfb

@NicholasKissel NicholasKissel force-pushed the 11-25-chore_site_changes_to_format_and_design branch from 0376e1f to f48fbfb Compare November 25, 2025 21:54
@vercel vercel bot temporarily deployed to Preview – rivetkit-serverless November 25, 2025 21:54 Inactive
@claude
Copy link

claude bot commented Nov 25, 2025

Pull Request Review

Overview

This PR makes design and formatting changes to the website, including adding a new game servers solution page, refactoring documentation layout components, and updating styling across multiple pages.


🔴 Critical Issues

1. Major Architectural Concern - Route Refactoring

The changes to the documentation routing structure appear incomplete or potentially breaking:

  • File: website/src/app/(v2)/[section]/[[...page]]/layout.tsx - Reduced from 68 lines to 3 lines (just a pass-through wrapper)
  • New Files: Created doc-page.tsx, new layout.tsx, and util.ts in [section]/ directory
  • Issue: The logic from [[...page]]/layout.tsx was moved but the relationship between these components is unclear. This could break existing documentation routes.

Recommendation:

  • Verify all documentation routes still work correctly (/docs/*, /guides/*)
  • Add tests to ensure route refactoring doesn't break navigation
  • Consider if this refactoring was intentional or accidentally committed

2. New Game Servers Page - Production Readiness Concerns

File: website/src/app/(v2)/(marketing)/solutions/game-servers/page.tsx (+816 lines)

Issues:

  1. Client Component with Heavy Animation Dependencies - The entire page is marked "use client" which means all 816 lines execute client-side, including large imports (framer-motion, lucide-react). This impacts bundle size and initial page load.

  2. Hardcoded Content - All marketing copy is embedded in the component rather than using a content management approach or separate content files. This makes:

    • Content updates require code changes
    • Translations difficult
    • SEO management harder
  3. Incomplete Interactive Elements:

    // Lines 362-367
    <button className="...">
      Deploy Match
      <ArrowRight className="w-4 h-4" />
    </button>

    These buttons have no onClick handlers or href attributes - they're non-functional.

  4. Unused State in Visualization:

    // Line 352 - GameLoopArchitecture component
    const [tick, setTick] = useState(0);

    While this creates a nice animation, it runs continuously even when not visible, potentially causing unnecessary re-renders.

  5. Poor Mobile Responsiveness Strategy:

    // Line 76 in SolutionsSection.tsx
    <section className='hidden md:block ...'

    Hiding entire sections on mobile is not ideal UX - consider responsive redesign instead.

Recommendations:

  • Split into server and client components where possible
  • Extract content to JSON/MDX files
  • Implement proper button actions or change to styled divs if decorative
  • Use Intersection Observer API to only animate when component is visible
  • Make sections responsive rather than hidden on mobile

🟡 Medium Priority Issues

3. Inconsistent Typography Changes

Multiple files changed from semantic heading styles to utility classes:

// Before
<h1 className="font-heading text-5xl md:text-6xl lg:text-7xl font-bold tracking-tighter">

// After  
<h1 className="text-5xl font-medium leading-[1.1] tracking-tighter md:text-7xl">

Issues:

  • Removes font-heading class (what was its purpose?)
  • Changes from font-bold to font-medium (visual regression?)
  • Inconsistent across files (some still use old pattern)

Recommendation: Ensure this is intentional and doesn't break the design system. Consider documenting typography standards.

4. Button Styling Inconsistency

Changed button classes in PricingPageClient.tsx from:

className="inline-flex items-center justify-center px-3.5 py-2 text-base font-medium rounded-xl..."

to:

className="font-v2 inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md border border-white/10 bg-white px-4 py-2 text-sm..."

Issues:

  • Multiple button variants now use different styling approaches
  • font-v2 class usage is inconsistent (not used everywhere)
  • Changed from rounded-xl to rounded-md (visual regression?)

Recommendation: Standardize button components across the site.

5. CSS Mask Changes Could Affect Visibility

In ObservabilitySection.tsx:

// Before
maskImage: 'radial-gradient(ellipse 300% 100% at 50% 90%, transparent 0%, black 25%)'

// After
maskImage: 'radial-gradient(ellipse 300% 100% at 50% 90%, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.6) 15%, rgba(0,0,0,0.9) 25%, black 35%, black 50%)'

The new gradient has more stops and starts with 30% opacity instead of full transparency. This makes the fade-out effect more gradual but also makes more of the bottom visible.

Recommendation: Verify this visual change was intentional and test across browsers (WebKit mask support varies).


🟢 Positive Changes

  1. Improved Selection Styling - Adding custom selection colors (selection:bg-[#FF4500]/30 selection:text-orange-200) enhances brand consistency

  2. Layout Refactoring - The separation of concerns in the [section] routing (if done correctly) is a good architectural improvement

  3. Added Gradient Overlay - The gradient overlay on the observability image (line 75-76) improves text readability


🔍 Code Quality & Best Practices

Style Concerns:

  1. Commented Code in Production:

    // website/src/components/v2/Header.tsx:248, 334
    {/* <SolutionsDropdown active={active === "solutions"} /> */}

    Remove commented code or add a TODO explaining why it's disabled.

  2. Magic Numbers:

    const [tick, setTick] = useState(0);
    useEffect(() => {
      const interval = setInterval(() => {
        setTick((t) => t + 1);
      }, 500); // Magic number - should be named constant
  3. Inline Styles:

    style={{ color: '#FAFAFA' }}

    Consider using Tailwind classes or CSS variables instead of inline hex colors.

TypeScript Issues:

The new doc-page.tsx file has proper TypeScript types, but:

  • Some prop types could be more specific (e.g., page?: string[] could validate array contents)
  • Missing return type annotations on some functions

📊 Performance Considerations

  1. Bundle Size Impact:

    • New page adds ~800 lines with heavy dependencies (framer-motion, lucide-react)
    • Client-side only rendering increases JavaScript bundle
    • Recommendation: Use dynamic imports for animations: const motion = dynamic(() => import('framer-motion'))
  2. Image Optimization:

    • Binary image file changed (og.png) - verify it's optimized and properly sized
    • Recommendation: Use next/image optimization and WebP format
  3. Animation Performance:

    • Continuous setInterval in GameLoopArchitecture could cause performance issues
    • Recommendation: Use requestAnimationFrame or pause when not visible

🔒 Security Concerns

No significant security issues found. External links properly use target="_blank" with rel="noreferrer".


Test Coverage

Missing:

  • No tests included for new game servers page
  • No tests for refactored routing logic
  • No visual regression tests for styling changes

Recommendation: Add:

  • Route resolution tests for [section] refactoring
  • Component render tests for game servers page
  • Integration tests for button interactions

📋 Summary

This PR contains significant changes but has some concerns that should be addressed:

Must Fix Before Merge:

  1. ✅ Verify documentation routing still works correctly
  2. ✅ Add functionality to non-functional buttons or remove them
  3. ✅ Test mobile responsiveness (especially hidden sections)

Should Fix:

  1. ⚠️ Optimize bundle size (dynamic imports, code splitting)
  2. ⚠️ Standardize button styling across pages
  3. ⚠️ Remove commented code
  4. ⚠️ Add basic tests for new functionality

Nice to Have:

  1. 💡 Extract content from game servers page to MDX/JSON
  2. 💡 Document typography changes in design system
  3. 💡 Add Intersection Observer for animations
  4. 💡 Optimize animation performance

🎯 Recommendation

Request Changes - The PR needs work before merging, particularly around:

  • Route refactoring verification
  • Game servers page functionality and optimization
  • Mobile responsiveness strategy

Please address the critical issues and consider the other recommendations to improve code quality and performance.

@graphite-app
Copy link
Contributor

graphite-app bot commented Nov 25, 2025

Merge activity

  • Nov 25, 10:54 PM UTC: NicholasKissel added this pull request to the Graphite merge queue.
  • Nov 25, 10:55 PM UTC: CI is running for this pull request on a draft pull request (#3549) due to your merge queue CI optimization settings.
  • Nov 25, 10:55 PM UTC: Merged by the Graphite merge queue via draft PR: #3549.

graphite-app bot pushed a commit that referenced this pull request Nov 25, 2025
@graphite-app graphite-app bot closed this Nov 25, 2025
@graphite-app graphite-app bot deleted the 11-25-chore_site_changes_to_format_and_design branch November 25, 2025 22: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.

2 participants