Skip to content

chore(site): update style for site#4164

Merged
NathanFlurry merged 1 commit intomainfrom
02-09-mock_animation
Feb 10, 2026
Merged

chore(site): update style for site#4164
NathanFlurry merged 1 commit intomainfrom
02-09-mock_animation

Conversation

@NicholasKissel
Copy link
Member

Description

Please include a summary of the changes and the related issue. Please also include relevant motivation and context.

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

How Has This Been Tested?

Please describe the tests that you ran to verify your changes.

Checklist:

  • My code follows the style guidelines of this project
  • I have performed a self-review of my code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes

@railway-app railway-app bot temporarily deployed to rivet-frontend / rivet-pr-4164 February 10, 2026 08:38 Destroyed
@railway-app
Copy link

railway-app bot commented Feb 10, 2026

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

Service Status Web Updated (UTC)
website ✅ Success (View Logs) Web Feb 10, 2026 at 8:28 pm
frontend-cloud ❌ Build Failed (View Logs) Web Feb 10, 2026 at 8:24 pm
frontend-inspector ❌ Build Failed (View Logs) Web Feb 10, 2026 at 8:23 pm
mcp-hub ✅ Success (View Logs) Web Feb 10, 2026 at 8:39 am

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.

@railway-app railway-app bot temporarily deployed to rivet-frontend / rivet-pr-4164 February 10, 2026 08:39 Destroyed
@claude
Copy link

claude bot commented Feb 10, 2026

PR Review: Mock Animation

Overview

This draft PR implements a significant redesign of the website marketing pages with updated styling, animations, and visual consistency. The changes span 56 files with 4,320 additions and 5,446 deletions.


Positive Aspects

  1. Comprehensive Styling Consistency: The addition of STYLING_CONSISTENCY_TODO.md shows excellent planning and documentation of the design system standardization effort.

  2. Animation Improvements: The migration to Framer Motion with proper initial/animate states and viewport triggers improves the user experience.

  3. Design System Consolidation: Standardizing colors, spacing, and component patterns across pages will improve maintainability.

  4. Footer Modernization: The footer redesign is cleaner with better grid layout and removes the redundant Solutions section.


Issues and Concerns

1. Binary Image Files Bloat Repository (High Priority)

Location: website/public/images/thinking/*.jpg, *.png

You added 18 large binary image files (thinking portraits/art). This significantly increases repository size.

Recommendations:

  • Consider using a CDN or external asset storage
  • If these must be in the repo, ensure they are optimized (compressed)
  • Add rationale in PR description for why these specific images are needed
  • Consider using WebP format for better compression

2. Incomplete PR Description (High Priority)

The PR uses the default template without filling in required sections:

  • No summary of changes
  • No testing description
  • Checklist is unchecked

Action: Update the PR description to explain:

  • Why this redesign is needed
  • What the mock animation refers to
  • How to test the visual changes
  • Whether this is ready for review or still in progress

3. TODO File Should Not Be Committed (Medium Priority)

Location: website/STYLING_CONSISTENCY_TODO.md

This TODO file lists incomplete work with unchecked items, suggesting the PR is incomplete.

Recommendations:

  • Complete all tasks before merging, OR
  • Move this to a GitHub issue/project board instead of committing it
  • If keeping it, update checkboxes to reflect completed work

4. Accessibility Concerns (Medium Priority)

Location: Multiple component files

Animation additions should respect user preferences. Motion components should check for prefers-reduced-motion.

Recommendation: Use Framer Motion built-in reduced motion support with useReducedMotion hook.

5. Selection Styles Inconsistency (Low Priority)

You are adding selection:bg-[#FF4500]/30 selection:text-orange-200 inline in components, but the TODO suggests moving this to main.css as a global style.

Action: Implement the global style first to avoid duplication.


Code Quality Observations

Good Practices:

  • Consistent use of semantic HTML
  • Proper TypeScript types maintained
  • Framer Motion viewport triggers for performance
  • Grid layout improvements for responsive design

Needs Improvement:

  • Some very long className strings could be extracted to const or CSS classes
  • Consider creating reusable motion wrapper components to reduce duplication

Testing Recommendations

Since this is a visual redesign:

  1. Visual Regression Testing:

    • Screenshot comparison of all modified pages
    • Test on mobile, tablet, desktop viewports
  2. Animation Performance:

    • Test on lower-end devices
    • Verify no layout shift during animations
  3. Accessibility:

    • Keyboard navigation still works
    • Screen reader testing
    • Color contrast ratios meet WCAG standards
  4. Cross-browser Testing:

    • Safari, Chrome, Firefox, Edge
    • Mobile browsers

Action Items Before Merge

  • Complete or remove STYLING_CONSISTENCY_TODO.md checklist items
  • Fill out PR description with change summary and testing details
  • Optimize/justify the 18 binary image files added
  • Implement prefers-reduced-motion support for animations
  • Move selection styles to global CSS
  • Add visual regression test screenshots
  • Update PR title from mock animation to something descriptive
  • Verify CI passes

Design System Notes

The TODO file shows good thinking about consistency. Consider:

  1. Documenting these patterns in a Storybook or design system doc
  2. Creating ESLint rules to enforce consistent spacing/color usage
  3. Extracting common animation variants to a shared config

Final Recommendation

Status: Not Ready for Merge (as expected for a draft PR)

This is a solid visual redesign effort, but needs:

  1. Completion of remaining TODO items
  2. Proper PR documentation
  3. Accessibility improvements
  4. Asset optimization

Once these are addressed, this will be a great improvement to the website visual consistency. The systematic approach to styling standardization is commendable.


Note: This is an automated review. Please address critical issues before requesting formal review.

@NicholasKissel NicholasKissel changed the title mock animation chore(site): update style for site Feb 10, 2026
@claude
Copy link

claude bot commented Feb 10, 2026

PR Review: Website Styling Updates

Overview

This PR implements a comprehensive redesign of the website's marketing pages, standardizing styling across all pages to match a new design system. The changes affect ~57 files with 4,516 additions and 5,537 deletions, primarily focused on the website's marketing components and static pages.

✅ Positive Aspects

1. Design System Consistency

  • The addition of STYLING_CONSISTENCY_TODO.md shows good planning and documentation of design standards
  • Systematic approach to standardizing colors (text-zinc-500 for descriptions, border-white/10 for borders)
  • Clear migration from old patterns to new ones (e.g., removing icon boxes, standardizing margins)

2. Code Quality Improvements

  • Removal of unused "Solutions" section from footer reduces maintenance burden
  • Cleaner component structure with better semantic HTML
  • Consistent use of motion animations via Framer Motion

3. Accessibility

  • Text selection styles properly defined globally in main.css:34-43
  • Proper sr-only usage maintained
  • Semantic HTML structure preserved

⚠️ Issues & Concerns

1. Missing Images (High Priority)
Multiple image files deleted without clear replacement strategy:

  • website/src/images/thinking/*.jpg (18 images)
  • website/src/images/a16z-speedrun.jpg
  • website/src/images/yc-founders.jpg

These are referenced in RedesignedHero.tsx via ThinkingImageCycler component. Need to verify these images are either:

  • Actually unused (then remove the component references)
  • Moved to a different location (update imports)
  • Meant to be added in a follow-up commit

2. Hardcoded Values & Magic Numbers

RedesignedHero.tsx:17-20:

setTimeout(() => {
  setShowFan(false);
}, 1000);

Magic number 1000 should be a named constant: const FAN_ANIMATION_DURATION = 1000

Footer.jsx:385-390:

style={{
  backgroundImage: 'radial-gradient(circle, currentColor 1px, transparent 1px)',
  backgroundSize: '6px 1px',
  ...
}}

Inline styles should be moved to Tailwind classes or CSS module.

3. Color Inconsistencies

main.css:35-42:

::selection {
  background-color: #ff4f00;  /* Different from documented #FF4500 */
  color: black;
}

The TODO doc specifies #FF4500 but implementation uses #ff4f00. Need consistency across brand colors.

4. Accessibility Issues (BLOCKING)

RedesignedHero.tsx:40-43:

<div
  className="relative w-[280px] h-[350px] sm:w-[400px] sm:h-[500px] cursor-pointer"
  onClick={handleClick}

Interactive div without keyboard accessibility. Should be a <button> or add:

  • role="button"
  • tabIndex={0}
  • onKeyDown handler for Enter/Space keys

5. Memory Leak Risk (BLOCKING)

RedesignedHero.tsx:17-20:

const handleMouseEnter = () => {
  setShowFan(true);
  setTimeout(() => {
    setShowFan(false);
  }, 1000);
};

Should store timeout ref and clear on unmount:

const timeoutRef = useRef<NodeJS.Timeout | null>(null);

const handleMouseEnter = () => {
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
  setShowFan(true);
  timeoutRef.current = setTimeout(() => {
    setShowFan(false);
  }, FAN_ANIMATION_DURATION);
};

useEffect(() => {
  return () => {
    if (timeoutRef.current) clearTimeout(timeoutRef.current);
  };
}, []);

6. Unnecessary Re-renders

RedesignedHero.tsx:27-36:

const getNextIndices = (count: number) => {
  const indices = [];
  for (let i = 1; i <= count; i++) {
    indices.push((currentIndex + i) % images.length);
  }
  return indices;
};

const fanCards = getNextIndices(3);

This runs on every render. Should be memoized:

const fanCards = useMemo(() => 
  Array.from({ length: 3 }, (_, i) => (currentIndex + i + 1) % images.length),
  [currentIndex, images.length]
);

🔍 Additional Observations

Footer.jsx:

  • Inline SVG for US flag (lines 396-405) should be extracted to separate component
  • Verify mobile layout with 2-column grid on small screens

RivetVsCloudflareWorkersPage.tsx:

  • ✅ Properly removed unused imgHub import
  • Good component separation and organization
  • Consider extracting FeatureStatus to shared components

📋 Recommendations

Immediate (Block Merge):

  1. Resolve missing image references or remove dead code
  2. Fix accessibility issue with clickable div (add keyboard support)
  3. Fix memory leak in timeout handling
  4. Memoize fanCards computation

Before Merge:
5. Standardize brand color hex codes (#ff4f00 vs #FF4500)
6. Extract inline styles to Tailwind classes
7. Add constants for magic numbers

Post-Merge:
8. Extract reusable components (FeatureStatus, ThinkingImageCycler)
9. Add unit tests for interactive components
10. Consider visual regression tests for design system consistency

🔒 Security

  • ✅ No security issues identified
  • ✅ All user content properly handled
  • ✅ No new external resource loads

🎨 Design System Validation

Based on STYLING_CONSISTENCY_TODO.md:

  • ✅ Feature card styling standardized
  • ✅ Description text colors unified
  • ✅ Border variations consistent
  • ✅ Text selection styles moved to global CSS
  • ⚠️ Verify all listed files in TODO were actually updated

📊 Performance

  • ✅ Removing ~5500 lines should help bundle size
  • ⚠️ Verify lazy loading for all images in ThinkingImageCycler
  • ✅ Framer Motion usage looks appropriate

Summary

This is a substantial redesign with mostly positive changes. The main blockers are:

  1. Missing image files - needs resolution
  2. Accessibility issue - interactive div needs keyboard support
  3. Memory leak - timeout cleanup required
  4. Performance - unnecessary re-renders

Once these are addressed, this will be a solid improvement to the website's design consistency.

Recommendation: Request changes for the 4 blocking issues above.

@railway-app railway-app bot temporarily deployed to rivet-frontend / rivet-pr-4164 February 10, 2026 08:43 Destroyed
@railway-app railway-app bot temporarily deployed to rivet-frontend / rivet-pr-4164 February 10, 2026 08:48 Destroyed
@railway-app railway-app bot temporarily deployed to rivet-frontend / rivet-pr-4164 February 10, 2026 08:53 Destroyed
@NicholasKissel NicholasKissel marked this pull request as ready for review February 10, 2026 08:56
@graphite-app
Copy link
Contributor

graphite-app bot commented Feb 10, 2026

Merge activity

  • Feb 10, 8:56 AM UTC: NicholasKissel added this pull request to the Graphite merge queue.
  • Feb 10, 8:57 AM UTC: The Graphite merge queue couldn't merge this PR because it encountered an unexpected git error. Please try rebasing and resubmitting the PR for merge. (unexpected git error).
  • Feb 10, 8:15 PM UTC: NicholasKissel added this pull request to the Graphite merge queue.
  • Feb 10, 8:15 PM UTC: The Graphite merge queue couldn't merge this PR because it encountered an unexpected git error. Please try rebasing and resubmitting the PR for merge. (unexpected git error).

@railway-app railway-app bot temporarily deployed to rivet-frontend / rivet-pr-4164 February 10, 2026 20:05 Destroyed
@railway-app railway-app bot temporarily deployed to rivet-frontend / rivet-pr-4164 February 10, 2026 20:21 Destroyed
Comment on lines 3 to 65
@@ -10,6 +11,61 @@ import { ObservabilitySection } from '@/components/marketing/sections/Observabil
import { RedesignedCTA } from '@/components/marketing/sections/RedesignedCTA';
import { ScrollObserver } from '@/components/ScrollObserver';

// Import thinking images
import imgThinker from '@/images/thinking/thinker.jpg';
import imgLadyWriting from '@/images/thinking/a_lady_writing_1962.10.1.jpg';
import imgPortrait from '@/images/thinking/portrait_of_a_man_possibly_jan_snoeck_1967.4.1.jpg';
import imgSaintMark from '@/images/thinking/saint_mark_2012.79.1.jpg';
import imgVirginReading from '@/images/thinking/the_virgin_reading_1939.1.354.jpg';
import imgThinkingOver from '@/images/thinking/thinking_it_over_2008.115.5135.jpg';
import imgWomanBalance from '@/images/thinking/woman_holding_a_balance_1942.9.97.jpg';
import imgThinking2 from '@/images/thinking/thinking2.jpg';
import imgThinking3 from '@/images/thinking/thinking3.jpg';
import imgThinking6 from '@/images/thinking/thinking6.jpg';
import img0000405625 from '@/images/thinking/0000405625_OG.JPG';
import imgCHSDM from '@/images/thinking/CHSDM-1946-9-1MattFlynn.jpg';
import imgNPG from '@/images/thinking/NPG-NPG_POB105.jpg';
import imgSAAM from '@/images/thinking/SAAM-1912.2.1_1.jpg';
import imgThink from '@/images/thinking/think.jpg';
import imgThink11 from '@/images/thinking/think11.jpg';
import imgThink12 from '@/images/thinking/think12.png';
import imgThinker6 from '@/images/thinking/thinker6.jpg';

// Optimize all thinking images
const thinkingImageSources = [
imgThinker,
imgLadyWriting,
imgPortrait,
imgSaintMark,
imgVirginReading,
imgThinkingOver,
imgWomanBalance,
imgThinking2,
imgThinking3,
imgThinking6,
img0000405625,
imgCHSDM,
imgNPG,
imgSAAM,
imgThink,
imgThink11,
imgThink12,
imgThinker6,
];

const optimizedThinkingImages = await Promise.all(
thinkingImageSources.map(img =>
getImage({
src: img,
width: 800,
format: 'webp',
quality: 80
})
)
);
Copy link
Contributor

Choose a reason for hiding this comment

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

The imports for thinking images should be sorted alphabetically to comply with linting rules. Consider using a sorting tool or manually reordering these imports.

Spotted by Graphite Agent (based on CI logs)

Fix in Graphite


Is this helpful? React 👍 or 👎 to let us know.

@railway-app railway-app bot temporarily deployed to rivet-frontend / rivet-pr-4164 February 10, 2026 20:25 Destroyed
@NathanFlurry NathanFlurry merged commit df039e7 into main Feb 10, 2026
12 of 21 checks passed
@NathanFlurry NathanFlurry deleted the 02-09-mock_animation branch February 10, 2026 20:30
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