Skip to content

Feat: Implement Landing Page Design System (#1146)#1153

Open
pranitaurlam wants to merge 2 commits intoAOSSIE-Org:mainfrom
pranitaurlam:feat-landing-page-design-system
Open

Feat: Implement Landing Page Design System (#1146)#1153
pranitaurlam wants to merge 2 commits intoAOSSIE-Org:mainfrom
pranitaurlam:feat-landing-page-design-system

Conversation

@pranitaurlam
Copy link

@pranitaurlam pranitaurlam commented Feb 6, 2026

Overview

Resolves #1146

This PR implements a comprehensive design system for the PictoPy landing page, establishing a cohesive visual language with improved typography, accessible colors, and standardized components.

Changes Made

Design System

  • Typography: Defined a scalable type system using Inter with semantic hierarchy
  • Colors: Replaced hardcoded neon colors with an accessible, WCAG-compliant palette derived from the brand's green/yellow identity
  • Spacing: Implemented consistent spacing tokens for better rhythm

Component Refactor

  • Landing Page: Refactored pictopy-landing.tsx to use the new design tokens
  • Buttons: Standardized button styles with unified hover/active states and smooth transitions
  • Visuals: Modernized the background wave animation with CSS gradients

Accessibility

  • Improved color contrast ratios for text and UI elements
  • Added proper focus states for interactive elements
  • Ensured semantic HTML structure

Fixes

  • Fixed build errors by removing unused imports in App.tsx and theme-provider.tsx

Verification #1146

  • Build: npm run build passes successfully
  • Visuals: Verified consistent typography and spacing
  • Responsive: Tested on mobile and desktop breakpoints

Screenshots

(The reviewer can verify the visual improvements locally)

Summary by CodeRabbit

Release Notes

  • Style

    • Updated landing page visual design with gradient effects on the header wave
    • Redesigned download buttons with new green gradient styling and refined hover interactions
    • Refreshed heading and subheading color schemes for improved visual hierarchy
  • Chores

    • Code cleanup and optimization

- Add accessible colors, improved typography, and standardized components in index.css
- Refactor landing page to use new design tokens and fix component inconsistencies
- Improve accessibility with proper contrast and semantic HTML
- Fix unused imports in App.tsx and theme-provider.tsx

Resolves AOSSIE-Org#1146
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 6, 2026

Warning

Rate limit exceeded

@pranitaurlam has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 17 minutes and 48 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📝 Walkthrough

Walkthrough

These changes implement design system tokens and refine the landing page visual design, adding CSS custom properties for typography, spacing, and brand colors while updating header gradients, button styles, and text styling. Code cleanup removes unused theme-related imports from React components.

Changes

Cohort / File(s) Summary
Design System Tokens
landing-page/src/index.css
Added CSS custom properties for typography (font-display, font-body), type scale (text-xs to text-6xl), spacing scale (space-1 to space-16), and brand color tokens with light and dark mode variants.
Landing Page UI Updates
landing-page/src/Pages/pictopy-landing.tsx
Added SVG linearGradient for header wave fill; updated heading gradient colors (green to yellow); changed subheading to gray; reworked download buttons with green gradient base, updated hover effects, and dark mode variants.
Code Cleanup
landing-page/src/App.tsx, landing-page/src/context/theme-provider.tsx
Removed unused imports (ThemeContext, ThemeOptions, useContext, useEffect); minor whitespace adjustments with no functional changes to logic or exported entity signatures.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

Suggested labels

UI

Suggested reviewers

  • rahulharpal1603

Poem

🐰 Hops with glee at gradients new,
Waves that shimmer, green turning blue,
Tokens defined with spacing so neat,
Design system's vision, now complete!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately reflects the main objective: implementing a design system for the landing page with added design tokens, component refactoring, and styling updates.
Linked Issues check ✅ Passed The PR implements core design system requirements from #1146 including typography tokens, color palette, spacing tokens, and button component standardization with improved styling and accessibility.
Out of Scope Changes check ✅ Passed All changes directly support the design system implementation goal: CSS tokens for typography/spacing/colors, landing page component refactoring with updated button/wave styling, and unused import cleanup for build fixes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@pranitaurlam
Copy link
Author

Hi @tushar1977 @rahulharpal1603!

I've implemented the landing page design system improvements for issue #1146.

Note on Design:
Since the Figma file linked in the issue was access-restricted, I implemented a modern, accessible design system based on the existing brand identity (green/yellow) and standard UI best practices.

Key Improvements:

  • Design System: Added proper design tokens for typography, spacing, and colors in index.css.
  • Accessibility: Replaced hardcoded neon colors with WCAG-compliant gradients and improved text contrast.
  • Components: Standardized button styles and interactions for better consistency.
  • Build Fixes: Cleaned up unused imports that were causing build warnings/errors.

Ready for review! Let me know if you have any feedback on the visual direction.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Caution

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

⚠️ Outside diff range comments (1)
landing-page/src/Pages/pictopy-landing.tsx (1)

191-195: ⚠️ Potential issue | 🟠 Major

Animation class name doesn't follow Tailwind conventions and lacks source definition.

The notification uses animate-slideInRight (camelCase), which violates Tailwind's standard naming convention (should be kebab-case like animate-slide-in-right). More importantly, this animation is not defined in tailwind.config.js, index.css, or anywhere in the source code—it only appears in the built output, making this a fragile build-time dependency.

Define the animation properly in tailwind.config.js under theme.extend.keyframes and theme.extend.animation, or add it to index.css with standard naming:

`@keyframes` slideInRight {
  0% {
    opacity: 0;
    transform: translateX(50px);
  }
  100% {
    opacity: 1;
    transform: translateX(0);
  }
}

Then reference it with the correct Tailwind class: animate-slide-in-right (or update config to support the camelCase variant).

🤖 Fix all issues with AI agents
In `@landing-page/src/index.css`:
- Line 42: The CSS custom property --card in landing-page/src/index.css has an
invalid HSL lightness value "200%"; update the declaration for --card to use a
valid lightness (e.g., change the third component from 200% to 100% or another
intended value) so the HSL is within 0–100%, and verify any uses of the --card
variable still produce the expected color.

In `@landing-page/src/Pages/pictopy-landing.tsx`:
- Around line 164-168: The Button components (the Windows and Linux buttons)
declare variant="outline" but their className sets a green gradient and white
text which overrides the outline styles; remove the misleading prop or make the
visual match the outline variant—either delete variant="outline" from the Button
elements (e.g., the Button instance with className="bg-gradient-to-r
from-green-500...") or change the className to apply transparent background,
border styles and text color consistent with an outline button so that the
variant is actually represented.
🧹 Nitpick comments (6)
landing-page/src/context/theme-provider.tsx (1)

26-28: Pre-existing: storedTheme is hardcoded to an empty string, so theme is never persisted.

Not introduced by this PR, but worth noting: getInitialTheme() always falls through to the system-preference branch because storedTheme is ''. If theme persistence is intended (e.g., via localStorage), this should be addressed in a follow-up.

landing-page/src/index.css (2)

7-37: Design tokens defined but not consumed in this PR.

The new CSS custom properties (--font-display, --text-*, --space-*, --color-brand-*) are a good foundation, but the component changes in pictopy-landing.tsx use Tailwind utility classes directly (e.g., from-green-500, text-4xl) rather than referencing these tokens. This creates two parallel systems for the same values.

Consider either:

  • Extending tailwind.config to map these tokens (e.g., theme.extend.colors.brand.primary) so Tailwind utilities consume the tokens, or
  • Consuming the tokens directly in component styles via var(--color-brand-primary).

Without this wiring, the tokens risk going stale as the source of truth diverges.


33-37: Brand color tokens lack dark mode overrides.

The brand colors are defined only in :root. The .dark block (Line 68) doesn't override them. If the brand palette should shift in dark mode (e.g., lighter green for better contrast on dark backgrounds), add corresponding overrides in .dark.

landing-page/src/Pages/pictopy-landing.tsx (3)

154-187: Extract duplicated button className into a shared constant.

All three buttons share an identical ~200-character className string. Any future style change requires updating three places in lockstep.

♻️ Proposed refactor
+ const downloadButtonClass =
+   "bg-gradient-to-r from-green-500 to-green-600 text-white hover:from-green-600 hover:to-green-700 dark:from-green-500 dark:to-green-600 dark:hover:from-green-600 dark:hover:to-green-700 h-12 px-8 transition-all duration-300 border-2 border-transparent hover:shadow-lg hover:-translate-y-0.5 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:translate-y-0";
+
  <Button
-   className="bg-gradient-to-r from-green-500 to-green-600 text-white hover:from-green-600 hover:to-green-700 dark:from-green-500 dark:to-green-600 dark:hover:from-green-600 dark:hover:to-green-700 h-12 px-8 transition-all duration-300 
-              border-2 border-transparent hover:shadow-lg hover:-translate-y-0.5 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:translate-y-0"
+   className={downloadButtonClass}
    size="lg"
    ...
  >

Apply the same to all three <Button> elements.


134-134: Heading gradient text looks good, but verify accessibility of gradient text.

Gradient text via bg-clip-text text-transparent is not selectable/readable by all screen readers in the same way as solid text. The visual is appealing, but consider adding an aria-label on the heading or ensuring the text remains accessible.


79-80: window.location.href navigates away from the page for downloads.

Using window.location.href = downloadUrl will navigate the current tab to the download URL. For a better UX that keeps the user on the page, consider using a temporary anchor with the download attribute:

♻️ Proposed fix
-    // Trigger download
-    window.location.href = downloadUrl;
+    // Trigger download without navigating away
+    const link = document.createElement('a');
+    link.href = downloadUrl;
+    link.setAttribute('download', '');
+    document.body.appendChild(link);
+    link.click();
+    document.body.removeChild(link);

- Fix invalid HSL lightness value in index.css (200% -> 100%)
- Remove conflicting variant='outline' prop from gradient buttons
- Ensure consistent button styling across platforms
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.

Suggestion: Improved landing page with new design

1 participant