Skip to content

Redesign Header to Match New Design & Fix Hero Section Overlap#67

Merged
krishkhinchi merged 1 commit into
7-Blocks:mainfrom
KrupaShah20:Redesign_Header
Jul 17, 2026
Merged

Redesign Header to Match New Design & Fix Hero Section Overlap#67
krishkhinchi merged 1 commit into
7-Blocks:mainfrom
KrupaShah20:Redesign_Header

Conversation

@KrupaShah20

@KrupaShah20 KrupaShah20 commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Description

This PR redesigns the website header to match the latest design mockup and resolves the hero section overlap caused by the fixed header.

Changes Made

  • Redesigned the header with a white rounded container.
  • Updated logo placement to match the new design.
  • Centered navigation links with improved spacing and typography.
  • Restyled the Sign In button with the new purple rounded appearance.
  • Updated the header height and padding for better visual consistency.
  • Added appropriate top spacing to the hero section to prevent content from being hidden beneath the fixed header.
  • Ensured the updated header remains fully responsive across desktop, tablet, and mobile devices.

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Related Issue

Fixes #60

Checklist

  • My code follows the project's style guidelines
  • I have performed a self-review of my code
  • I have commented my code where necessary
  • I have updated the documentation if needed
  • My changes generate no new warnings
  • I have added tests that prove my fix/feature works
  • New and existing tests pass locally

Screenshots

image

Additional Notes

This PR focuses on aligning the header with the latest UI design while improving the overall user experience by eliminating the hero section overlap. The implementation preserves responsiveness across all supported screen sizes.

Summary by CodeRabbit

  • New Features

    • Added routes for Product, Solutions, Developers, Docs, and Sign In pages.
    • Added styled placeholder pages with navigation back to the home page.
    • Updated navigation links to use dedicated routes.
    • Replaced the primary “Launch” action with a “Sign In” button.
    • Improved mobile navigation with an overlay and animated menu panel.
  • Style

    • Refined branding, navigation states, and logo presentation.
    • Adjusted hero spacing for improved page layout.

Greptile Summary

This PR redesigns the marketing header from a dark pill-style navbar into a white rounded container with centered navigation, a purple "Sign In" CTA, and an improved mobile drawer with backdrop overlay. It also adds top padding to the Hero section to prevent content from hiding beneath the fixed header, and introduces five new placeholder pages for the updated nav links.

  • Header redesign: The MarketingNavBar is rebuilt with bg-white/95 backdrop-blur-md rounded-full, centered nav links via absolute positioning, a purple "Sign In" button replacing the old "Launch" CTA, and a new three-bar animated hamburger with a full-screen backdrop on mobile.
  • Hero overlap fix: pt-[120px] sm:pt-[160px] pb-12 is added to the Hero content wrapper; the values overshoot the actual header height (~60–72px) and will leave visible extra blank space above the hero text.
  • Placeholder routes: Five new routes (/product, /solutions, /developers, /docs, /signin) each render a generic PlaceholderPage; the /signin route in particular replaces the previously functional /dashboard shortcut with a dead-end page that has no authentication path.

Confidence Score: 4/5

Safe to merge with awareness that the Sign In button now leads to a dead-end placeholder rather than any auth flow, and that the hero section has more top clearance than the header actually requires.

The visual redesign is well-structured and the responsiveness logic is sound. The nav absolute-positioning pattern works at all current breakpoints due to the pill being centered in a full-width header, so there is no runtime breakage. The more notable concern is the /signin route: the old header sent users directly to /dashboard, but the new Sign In button routes to a placeholder page with no authentication mechanism, silently removing the only user path to the app. The hero padding overshoot is cosmetic but noticeably adds blank space on mobile.

PlaceholderPage.tsx deserves a second look — particularly SignInPage, which replaced a functional dashboard shortcut with a page that offers users no way to authenticate or navigate to the app. MarketingLayout.tsx should have relative added to the pill container to make the centered nav's positioning intent explicit.

Important Files Changed

Filename Overview
frontend/src/components/layouts/MarketingLayout.tsx Full header redesign — new pill-shaped white navbar, centered nav via absolute positioning without a relative anchor on the pill container, nav links updated to new routes, mobile drawer replaced with a modal-style overlay, and the "Launch" CTA replaced with "Sign In" navigating to /signin.
frontend/src/components/Hero.tsx Added pt-[120px] sm:pt-[160px] pb-12 to the content wrapper to clear the fixed header; padding values are larger than the actual header height (~60–72px), creating noticeable extra blank space above the hero text.
frontend/src/pages/PlaceholderPage.tsx New file exporting five placeholder pages (Product, Solutions, Developers, Docs, SignIn); background gradient overlay uses absolute inset-0 without relative on the parent, and SignInPage provides no authentication mechanism.
frontend/src/App.tsx Adds five new routes (/product, /solutions, /developers, /docs, /signin) inside the MarketingLayout wrapper, all pointing to the new placeholder pages.
frontend/package-lock.json Metadata-only changes: adds "peer": true annotations to several packages and removes two optional @emnapi entries; no version changes to any dependencies.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[User visits site] --> B[MarketingLayout renders]
    B --> C[MarketingNavBar fixed header]
    C --> D{Screen size?}
    D -- md+ desktop --> E[Pill navbar with centered absolute nav]
    D -- mobile --> F[Hamburger button]
    F --> G[Mobile drawer + backdrop overlay]
    E --> H{Nav link clicked}
    G --> H
    H -- /product --> I[ProductPage placeholder]
    H -- /solutions --> J[SolutionsPage placeholder]
    H -- /developers --> K[DevelopersPage placeholder]
    H -- /docs --> L[DocsPage placeholder]
    H -- /dashboard --> M[Dashboard app]
    H -- Sign In button --> N[SignInPage placeholder]
    N --> O[Back to Home button only - no auth form]
    style N fill:#ffd6d6,stroke:#cc0000
    style O fill:#ffd6d6,stroke:#cc0000
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A[User visits site] --> B[MarketingLayout renders]
    B --> C[MarketingNavBar fixed header]
    C --> D{Screen size?}
    D -- md+ desktop --> E[Pill navbar with centered absolute nav]
    D -- mobile --> F[Hamburger button]
    F --> G[Mobile drawer + backdrop overlay]
    E --> H{Nav link clicked}
    G --> H
    H -- /product --> I[ProductPage placeholder]
    H -- /solutions --> J[SolutionsPage placeholder]
    H -- /developers --> K[DevelopersPage placeholder]
    H -- /docs --> L[DocsPage placeholder]
    H -- /dashboard --> M[Dashboard app]
    H -- Sign In button --> N[SignInPage placeholder]
    N --> O[Back to Home button only - no auth form]
    style N fill:#ffd6d6,stroke:#cc0000
    style O fill:#ffd6d6,stroke:#cc0000
Loading
Prompt To Fix All With AI
Fix the following 4 code review issues. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 4
frontend/src/components/layouts/MarketingLayout.tsx:94
**Nav absolute positioning lacks a `relative` anchor**

The `<nav>` uses `absolute left-1/2 -translate-x-1/2` but its closest ancestor that creates a positioning context is the `<header>` (`fixed`), not the pill `motion.div`. `motion.div` has no `position: relative`, so `left: 50%` is 50% of the full viewport, not 50% of the pill. It currently renders correctly only because the pill itself is centered within the full-width header — but if the pill's centering ever changes (e.g. left-aligned layout, padding offset) the nav will misalign. Adding `relative` to the `motion.div` pins the positioning to the pill and makes the intent explicit.

### Issue 2 of 4
frontend/src/pages/PlaceholderPage.tsx:14-21
**Background overlay escapes its container without `relative` on the parent**

The inner `<div className="pointer-events-none absolute inset-0 ...">` is positioned relative to the nearest positioned ancestor, which here is NOT the outer wrapper div (it has no positioning class). The element will be positioned relative to the viewport (or a higher ancestor), causing the gradient to potentially bleed into the header and footer areas rendered by `MarketingLayout`. Adding `relative` to the outer container div fixes the containment.

### Issue 3 of 4
frontend/src/pages/PlaceholderPage.tsx:59-60
**`SignInPage` provides no authentication path**

The "Sign In" button in the header now navigates to `/signin`, which renders a `PlaceholderPage` with a document icon and a single "Back to Home" button. There is no login form, redirect to an auth provider, or any mechanism to actually authenticate. Users who click "Sign In" will land on a dead-end page with no actionable path forward. This is especially notable because the old header routed users directly to `/dashboard` — this PR replaces that functional navigation with a non-functional placeholder.

### Issue 4 of 4
frontend/src/components/Hero.tsx:42
**Hero top padding substantially overshoots the actual header height**

The new header height is approximately `pt-4` (16px) + pill height (~44px) ≈ 60px on mobile and `pt-6` (24px) + pill (~48px) ≈ 72px on `sm:+`. Using `pt-[120px]` / `pt-[160px]` adds roughly 48–88px of extra blank space above the hero content on top of the clearance already provided by the flex centering. The `PlaceholderPage` already uses a `--header-height` CSS variable approach as a fallback (`var(--header-height, 80px)`); a consistent approach here — or simply tighter values like `pt-[80px] sm:pt-[96px]` — would remove the visual gap.

Reviews (1): Last reviewed commit: "Redesign Header to Match New Design & Fi..." | Re-trigger Greptile

Greptile also left 4 inline comments on this PR.

@codeant-ai

codeant-ai Bot commented Jul 17, 2026

Copy link
Copy Markdown

CodeAnt AI is reviewing your PR.

@github-actions github-actions Bot added bug Something isn't working documentation Improvements or additions to documentation enhancement New feature or request frontend Frontend development size/L Large contribution requiring significant work. size:L Large size type:bug Fixes an existing bug or unexpected behavior. type:documentation Improves project documentation. type:feature Introduces a new feature or enhancement. type:frontend Changes frontend or client-side code. labels Jul 17, 2026
@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Marketing routes now render dedicated animated placeholder pages. The marketing navbar uses full-page paths, updated branding, responsive mobile navigation, and a Sign In CTA. The hero adds top padding to prevent overlap with the header.

Changes

Marketing routing and navigation

Layer / File(s) Summary
Placeholder page components
frontend/src/pages/PlaceholderPage.tsx
Adds a reusable animated placeholder page with navigation back home and five routed page variants.
Marketing route wiring
frontend/src/App.tsx, frontend/src/pages/PlaceholderPage.tsx
Registers /product, /solutions, /developers, /docs, and /signin under the marketing layout.
Header redesign and hero spacing
frontend/src/components/layouts/MarketingLayout.tsx, frontend/src/components/Hero.tsx
Updates route links, branding, desktop/mobile navigation, Sign In actions, and hero top padding.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Visitor
  participant MarketingNavBar
  participant AppRouter
  participant PlaceholderPage
  Visitor->>MarketingNavBar: Select marketing link
  MarketingNavBar->>AppRouter: Navigate to route
  AppRouter->>PlaceholderPage: Render matching page
Loading

Possibly related PRs

Suggested reviewers: thelinuxguy-ssh

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The changes satisfy #60 by restyling the header, updating nav/button styling, adding hero spacing, and preserving responsiveness.
Out of Scope Changes check ✅ Passed No clearly unrelated changes are evident; the added routes and placeholder pages support the redesigned header navigation.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check ✅ Passed The title clearly matches the main changes: header redesign and hero overlap fix.
Description check ✅ Passed The description covers the change details, related issue, checklist, and screenshots, with only a few template sections left implicit or omitted.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@codeant-ai codeant-ai Bot added size:L Large size and removed size:L Large size labels Jul 17, 2026
@github-actions github-actions Bot added the AI Artificial Intelligence and Machine Learning label Jul 17, 2026

@krishkhinchi krishkhinchi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM!!

@krishkhinchi
krishkhinchi merged commit 79ffc30 into 7-Blocks:main Jul 17, 2026
9 of 10 checks passed
@codeant-ai

codeant-ai Bot commented Jul 17, 2026

Copy link
Copy Markdown

CodeAnt AI finished reviewing your PR.

</Link>
)
)}
<nav className="hidden md:flex items-center gap-1 absolute left-1/2 -translate-x-1/2">

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 Nav absolute positioning lacks a relative anchor

The <nav> uses absolute left-1/2 -translate-x-1/2 but its closest ancestor that creates a positioning context is the <header> (fixed), not the pill motion.div. motion.div has no position: relative, so left: 50% is 50% of the full viewport, not 50% of the pill. It currently renders correctly only because the pill itself is centered within the full-width header — but if the pill's centering ever changes (e.g. left-aligned layout, padding offset) the nav will misalign. Adding relative to the motion.div pins the positioning to the pill and makes the intent explicit.

Prompt To Fix With AI
This is a comment left during a code review.
Path: frontend/src/components/layouts/MarketingLayout.tsx
Line: 94

Comment:
**Nav absolute positioning lacks a `relative` anchor**

The `<nav>` uses `absolute left-1/2 -translate-x-1/2` but its closest ancestor that creates a positioning context is the `<header>` (`fixed`), not the pill `motion.div`. `motion.div` has no `position: relative`, so `left: 50%` is 50% of the full viewport, not 50% of the pill. It currently renders correctly only because the pill itself is centered within the full-width header — but if the pill's centering ever changes (e.g. left-aligned layout, padding offset) the nav will misalign. Adding `relative` to the `motion.div` pins the positioning to the pill and makes the intent explicit.

How can I resolve this? If you propose a fix, please make it concise.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Comment on lines +14 to +21
return (
<div className="min-h-screen bg-[#0C1220] flex items-center justify-center p-6 text-[#E7EBF3] selection:bg-[#4FE0C8]/30 pt-[calc(var(--header-height,80px)+2rem)]">
<div
className="pointer-events-none absolute inset-0 opacity-40 mix-blend-screen"
style={{
background: "radial-gradient(ellipse 60% 80% at 50% 0%, rgba(79,224,200,0.1), transparent 70%)",
}}
/>

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 Background overlay escapes its container without relative on the parent

The inner <div className="pointer-events-none absolute inset-0 ..."> is positioned relative to the nearest positioned ancestor, which here is NOT the outer wrapper div (it has no positioning class). The element will be positioned relative to the viewport (or a higher ancestor), causing the gradient to potentially bleed into the header and footer areas rendered by MarketingLayout. Adding relative to the outer container div fixes the containment.

Prompt To Fix With AI
This is a comment left during a code review.
Path: frontend/src/pages/PlaceholderPage.tsx
Line: 14-21

Comment:
**Background overlay escapes its container without `relative` on the parent**

The inner `<div className="pointer-events-none absolute inset-0 ...">` is positioned relative to the nearest positioned ancestor, which here is NOT the outer wrapper div (it has no positioning class). The element will be positioned relative to the viewport (or a higher ancestor), causing the gradient to potentially bleed into the header and footer areas rendered by `MarketingLayout`. Adding `relative` to the outer container div fixes the containment.

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +59 to +60
export const DocsPage = () => <PlaceholderPage title="Documentation" description="Comprehensive guides and references for the Kepler platform." />;
export const SignInPage = () => <PlaceholderPage title="Sign In" description="Sign in to your Kepler account to access the dashboard." />;

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 SignInPage provides no authentication path

The "Sign In" button in the header now navigates to /signin, which renders a PlaceholderPage with a document icon and a single "Back to Home" button. There is no login form, redirect to an auth provider, or any mechanism to actually authenticate. Users who click "Sign In" will land on a dead-end page with no actionable path forward. This is especially notable because the old header routed users directly to /dashboard — this PR replaces that functional navigation with a non-functional placeholder.

Prompt To Fix With AI
This is a comment left during a code review.
Path: frontend/src/pages/PlaceholderPage.tsx
Line: 59-60

Comment:
**`SignInPage` provides no authentication path**

The "Sign In" button in the header now navigates to `/signin`, which renders a `PlaceholderPage` with a document icon and a single "Back to Home" button. There is no login form, redirect to an auth provider, or any mechanism to actually authenticate. Users who click "Sign In" will land on a dead-end page with no actionable path forward. This is especially notable because the old header routed users directly to `/dashboard` — this PR replaces that functional navigation with a non-functional placeholder.

How can I resolve this? If you propose a fix, please make it concise.

<div className="pointer-events-none absolute inset-0 bg-[linear-gradient(90deg,#05070C_0%,rgba(5,7,12,0.85)_38%,rgba(5,7,12,0.25)_62%,transparent_85%)] sm:bg-[linear-gradient(90deg,#05070C_0%,rgba(5,7,12,0.85)_38%,rgba(5,7,12,0.25)_62%,transparent_85%)]" />

<div className="relative z-10 mx-auto w-full max-w-[1280px] px-6 sm:px-8 lg:px-10">
<div className="relative z-10 mx-auto w-full max-w-[1280px] px-6 sm:px-8 lg:px-10 pt-[120px] sm:pt-[160px] pb-12">

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 Hero top padding substantially overshoots the actual header height

The new header height is approximately pt-4 (16px) + pill height (~44px) ≈ 60px on mobile and pt-6 (24px) + pill (~48px) ≈ 72px on sm:+. Using pt-[120px] / pt-[160px] adds roughly 48–88px of extra blank space above the hero content on top of the clearance already provided by the flex centering. The PlaceholderPage already uses a --header-height CSS variable approach as a fallback (var(--header-height, 80px)); a consistent approach here — or simply tighter values like pt-[80px] sm:pt-[96px] — would remove the visual gap.

Prompt To Fix With AI
This is a comment left during a code review.
Path: frontend/src/components/Hero.tsx
Line: 42

Comment:
**Hero top padding substantially overshoots the actual header height**

The new header height is approximately `pt-4` (16px) + pill height (~44px) ≈ 60px on mobile and `pt-6` (24px) + pill (~48px) ≈ 72px on `sm:+`. Using `pt-[120px]` / `pt-[160px]` adds roughly 48–88px of extra blank space above the hero content on top of the clearance already provided by the flex centering. The `PlaceholderPage` already uses a `--header-height` CSS variable approach as a fallback (`var(--header-height, 80px)`); a consistent approach here — or simply tighter values like `pt-[80px] sm:pt-[96px]` — would remove the visual gap.

How can I resolve this? If you propose a fix, please make it concise.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@frontend/src/components/layouts/MarketingLayout.tsx`:
- Around line 148-160: Update MarketingLayout’s mobile backdrop and navigation
animation props to honor the existing useReducedMotion() state, disabling
opacity and transform transitions when reduced motion is requested. Apply the
same reduced-motion gating to PlaceholderPage’s entrance transition; modify both
frontend/src/components/layouts/MarketingLayout.tsx:148-160 and
frontend/src/pages/PlaceholderPage.tsx:23-26.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 82528c0b-c946-4c61-b733-2160bad526c7

📥 Commits

Reviewing files that changed from the base of the PR and between 719a76a and e233902.

⛔ Files ignored due to path filters (1)
  • frontend/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (4)
  • frontend/src/App.tsx
  • frontend/src/components/Hero.tsx
  • frontend/src/components/layouts/MarketingLayout.tsx
  • frontend/src/pages/PlaceholderPage.tsx

Comment on lines +148 to +160
<motion.div
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
transition={{ duration: 0.2 }}
className="fixed inset-0 bg-[#0C1220]/40 backdrop-blur-sm z-[-1] pointer-events-auto md:hidden"
onClick={() => setMenuOpen(false)}
/>
<motion.nav
initial={{ height: 0, opacity: 0 }}
animate={{ height: "auto", opacity: 1 }}
exit={{ height: 0, opacity: 0 }}
transition={{ duration: 0.25 }}
className="md:hidden overflow-hidden border-t border-white/10"
initial={{ opacity: 0, y: -10, scale: 0.95 }}
animate={{ opacity: 1, y: 0, scale: 1 }}
exit={{ opacity: 0, y: -10, scale: 0.95 }}
transition={{ duration: 0.2, ease: "easeOut" }}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== MarketingLayout outline ==\n'
ast-grep outline frontend/src/components/layouts/MarketingLayout.tsx --view expanded || true

printf '\n== PlaceholderPage outline ==\n'
ast-grep outline frontend/src/pages/PlaceholderPage.tsx --view expanded || true

printf '\n== Search reduced motion usage ==\n'
rg -n "useReducedMotion|reduced motion|reduce" frontend/src -g '!**/node_modules/**' || true

printf '\n== Read relevant slices ==\n'
sed -n '1,260p' frontend/src/components/layouts/MarketingLayout.tsx | nl -ba | sed -n '1,260p'
printf '\n----\n'
sed -n '1,200p' frontend/src/pages/PlaceholderPage.tsx | nl -ba | sed -n '1,200p'

Repository: 7-Blocks/Kepler

Length of output: 4865


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
from pathlib import Path

def show(path, start, end):
    print(f"\n== {path} [{start}-{end}] ==")
    lines = Path(path).read_text().splitlines()
    for i in range(start-1, min(end, len(lines))):
        print(f"{i+1:4d}: {lines[i]}")

show("frontend/src/components/layouts/MarketingLayout.tsx", 60, 180)
show("frontend/src/pages/PlaceholderPage.tsx", 1, 120)
PY

printf '\n== PlaceholderPage reduced-motion search ==\n'
rg -n "useReducedMotion|prefers-reduced-motion|reduce" frontend/src/pages/PlaceholderPage.tsx || true

Repository: 7-Blocks/Kepler

Length of output: 9539


Honor reduced-motion for the new marketing animations.

MarketingLayout already reads useReducedMotion(), but the mobile backdrop/panel still animate unconditionally. PlaceholderPage has the same issue with its entrance transition. Gate both with the reduced-motion state so users requesting less motion don’t get the transform animation.

📍 Affects 2 files
  • frontend/src/components/layouts/MarketingLayout.tsx#L148-L160 (this comment)
  • frontend/src/pages/PlaceholderPage.tsx#L23-L26
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@frontend/src/components/layouts/MarketingLayout.tsx` around lines 148 - 160,
Update MarketingLayout’s mobile backdrop and navigation animation props to honor
the existing useReducedMotion() state, disabling opacity and transform
transitions when reduced motion is requested. Apply the same reduced-motion
gating to PlaceholderPage’s entrance transition; modify both
frontend/src/components/layouts/MarketingLayout.tsx:148-160 and
frontend/src/pages/PlaceholderPage.tsx:23-26.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI Artificial Intelligence and Machine Learning bug Something isn't working documentation Improvements or additions to documentation enhancement New feature or request frontend Frontend development size/L Large contribution requiring significant work. size:L Large size type:bug Fixes an existing bug or unexpected behavior. type:documentation Improves project documentation. type:feature Introduces a new feature or enhancement. type:frontend Changes frontend or client-side code.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Redesign Header to Match New Design & Fix Hero Section Overlap

2 participants