Skip to content

Update landing page#147

Merged
arjunkomath merged 2 commits intodevelopfrom
feat/update-landing-page
Mar 26, 2026
Merged

Update landing page#147
arjunkomath merged 2 commits intodevelopfrom
feat/update-landing-page

Conversation

@arjunkomath
Copy link
Copy Markdown
Member

@arjunkomath arjunkomath commented Mar 26, 2026

Summary by CodeRabbit

  • New Features

    • Copyable npm install button on homepage
    • Open-source banner with optional star badge
    • New marketing sections: How It Works, Dual Interface, CLI Demo
  • Design Improvements

    • Broad light/dark theme refinements across header, footer, pages
    • Tabbed Features UI and updated hero layout and CTAs
  • Content Updates

    • Revised marketing copy, homepage meta/FAQ updates, and pricing text
  • Visual Enhancements

    • New serif display font and refined color/hover styles

@vercel
Copy link
Copy Markdown

vercel bot commented Mar 26, 2026

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

Project Deployment Actions Updated (UTC)
changes-page Ready Ready Preview Mar 26, 2026 9:03am
2 Skipped Deployments
Project Deployment Actions Updated (UTC)
changes-page-docs Skipped Skipped Mar 26, 2026 9:03am
user-changes-page Skipped Skipped Mar 26, 2026 9:03am

Request Review

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 26, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: f81c43b1-662e-44e2-ad94-3f7a74a2560c

📥 Commits

Reviewing files that changed from the base of the PR and between 09c660c and b12fc29.

📒 Files selected for processing (2)
  • apps/web/components/layout/footer.component.tsx
  • apps/web/pages/_document.js
✅ Files skipped from review due to trivial changes (1)
  • apps/web/pages/_document.js
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/web/components/layout/footer.component.tsx

📝 Walkthrough

Walkthrough

This PR adds four new marketing components, refactors multiple marketing UI components (Hero, Features, PricingSection), updates marketing copy and FAQ content, and applies widespread light/dark theme and typography (Instrument Serif) styling changes across the web app.

Changes

Cohort / File(s) Summary
Layout: Header & Footer
apps/web/components/layout/header.component.tsx, apps/web/components/layout/footer.component.tsx
Theme-aware color updates: background, borders, link/button/heading text and hover/focus classes adjusted to support light/dark modes. No API/exports changed.
New Marketing Components
apps/web/components/marketing/cli-demo.tsx, apps/web/components/marketing/dual-interface.tsx, apps/web/components/marketing/how-it-works.tsx, apps/web/components/marketing/open-source-banner.tsx
Added four presentational components (CliDemo, DualInterface, HowItWorks, OpenSourceBanner). Each is a default-export React component; OpenSourceBanner accepts `stars: string
Hero & Supporting UI
apps/web/components/marketing/hero.tsx
Major refactor: removed stars prop from signature, added useState and subcomponents (AppScreenshot, TerminalMockup, CopyableCommand), replaced copy/layout, added clipboard copy button and updated CTA behavior and rendering.
Features (tabbed)
apps/web/components/marketing/features.tsx
Replaced static feature list with a Tab.Group UI using @headlessui/react; reorganized features into three tabs and introduced per-tab styling and helper utilities.
FAQ, Pricing & Get Started Hero
apps/web/components/marketing/faq.tsx, apps/web/components/marketing/pricing-section.tsx, apps/web/components/marketing/get-started-hero.tsx
FAQ: data changes (removed/added questions) and theme-aware styling adjustments. PricingSection: simplified layout, updated feature list and trial messaging, removed unused image imports. GetStartedHero: rewrote copy, layout, CTA label and styling.
Pages: Index & Pricing
apps/web/pages/index.tsx, apps/web/pages/pricing.tsx
Index: updated Head meta/title/description, added OpenSourceBanner, adjusted Hero usage to new props, modified FAQ JSON-LD. Pricing: theme-aware callout styling updates.
Styling & Config
apps/web/styles/global.css, apps/web/tailwind.config.js, apps/web/pages/_document.js
Global CSS: background/selection tweaks and .hero font class added. Tailwind: safelist color regex updated and display font family added. _document: added conditional theme-color meta tags and Google Fonts preload/link for Instrument Serif.
Marketing Data
apps/web/data/marketing.data.ts
Updated exported copy constants: TAGLINE, SUBTITLE, and DEFAULT_TITLE to emphasize "humans and agents."

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

Poem

🐰 Hopping through the code with cheer,
New banners bloom and heroes appear,
Tabs and CLI commands in a line,
Light and dark themes now align,
I nibble bugs and celebrate—hip, hop, hooray! 🥕

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The PR title 'Update landing page' is generic and vague. While it broadly relates to landing page changes, it fails to convey the main objectives of this substantial PR: introducing light/dark theme support, adding new marketing components (CLI demo, dual interface, how-it-works sections), repositioning the product messaging toward 'humans and agents,' and adding the Open Source banner. Consider a more specific title that captures the primary intent, such as 'Add light/dark theme support and new marketing components' or 'Refresh landing page with theme support and new sections.'
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/update-landing-page

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.

Copy link
Copy Markdown

@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: 3

Caution

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

⚠️ Outside diff range comments (1)
apps/web/pages/index.tsx (1)

92-149: ⚠️ Potential issue | 🟡 Minor

JSON-LD FAQ schema is out of sync with the FAQ component.

The structured data includes questions that differ from the FAQ component at apps/web/components/marketing/faq.tsx:

In JSON-LD but not in FAQ component:

  • "Do I need to enter a credit card to create a page?"
  • "Do you support custom domains?"

In FAQ component but not in JSON-LD:

  • "Do I need the CLI to use Changes.page?"
  • "Is Changes.page reliable?"

This discrepancy can harm SEO if search engines detect a mismatch between the structured data and visible page content.

Proposed fix to align with FAQ component
               {
                 "@type": "Question",
-                name: "Do I need to enter a credit card to create a page?",
+                name: "Do I need the CLI to use Changes.page?",
                 acceptedAnswer: {
                   "@type": "Answer",
-                  text: "No, you don't need to enter a credit card to create a page.",
+                  text: "No. The web interface provides full functionality. The CLI and API are additional interfaces for teams that want automation.",
                 },
               },
               {
                 "@type": "Question",
-                name: "Do you support custom domains?",
+                name: "Is Changes.page reliable?",
                 acceptedAnswer: {
                   "@type": "Answer",
-                  text: "Yes, we also provision SSL certificates for your custom domain.",
+                  text: "Yes, 99.9%+ uptime with highly scalable and redundant infrastructure.",
                 },
               },
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/pages/index.tsx` around lines 92 - 149, The JSON-LD mainEntity array
in pages/index.tsx is out of sync with the visible FAQ component
(apps/web/components/marketing/faq.tsx); update the mainEntity entries so the
question/answer pairs exactly match the FAQ component: remove the two questions
present only in JSON-LD ("Do I need to enter a credit card to create a page?"
and "Do you support custom domains?"), add the two questions present only in the
FAQ component ("Do I need the CLI to use Changes.page?" and "Is Changes.page
reliable?"), and ensure the acceptedAnswer.text values are identical to the FAQ
component strings; modify the mainEntity array in index.tsx to reflect these
exact question/answer texts.
🧹 Nitpick comments (4)
apps/web/components/marketing/cli-demo.tsx (1)

27-27: Consider adding light mode support for consistency.

Same as dual-interface.tsx — this component uses dark-only styling while other components in this PR support both light and dark themes.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/components/marketing/cli-demo.tsx` at line 27, The component uses
dark-only utility classes on the outer wrapper (the div with className
"bg-gray-900 py-24 sm:py-32") so add matching light-mode classes and dark:
prefixes like in dual-interface.tsx; replace the hardcoded dark background/text
utilities with light-mode equivalents plus dark: variants (e.g., add a light
background and text color utilities and prefix the existing dark styles with
dark:) and audit inner elements (headings, paragraphs, buttons) to ensure their
text and background colors also have light and dark variants so the component
renders correctly in both themes.
apps/web/components/marketing/dual-interface.tsx (2)

59-64: Unused icon property in feature arrays.

Each feature defines an icon property, but the render uses CheckCircleIcon uniformly instead. Either remove the unused icon definitions from humanFeatures/agentFeatures (lines 14-30), or render the feature-specific icon:

Option: Render feature-specific icons
-                  <CheckCircleIcon className="h-5 w-5 text-indigo-400 flex-shrink-0" />
+                  <feature.icon className="h-5 w-5 text-indigo-400 flex-shrink-0" />

Also applies to: 80-85

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/components/marketing/dual-interface.tsx` around lines 59 - 64, The
feature arrays (humanFeatures and agentFeatures) declare an icon property that
is never used; in the map that renders each feature (the JSX using
CheckCircleIcon) either remove the unused icon fields from
humanFeatures/agentFeatures or render the per-feature icon instead: update the
list mapping in dual-interface.tsx to use the feature.icon component when
present (e.g., render feature.icon with the same classes/props currently applied
to CheckCircleIcon) and fall back to CheckCircleIcon if feature.icon is absent,
ensuring you reference humanFeatures, agentFeatures and the mapped feature
variable to locate the change.

34-34: Consider adding light mode support for consistency.

Other marketing components in this PR use theme-aware styling (e.g., bg-gray-50 dark:bg-gray-900), but this component only renders with dark styles. If light mode should be supported on the landing page, update the background and text colors accordingly.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/components/marketing/dual-interface.tsx` at line 34, The component
only uses dark-only styles; update the root div className in dual-interface.tsx
(the element rendering "bg-gray-900 py-24 sm:py-32") to be theme-aware (e.g.,
"bg-gray-50 dark:bg-gray-900 py-24 sm:py-32") and then make child text elements
theme-aware as well (replace hard-coded dark styles like "text-white" with pairs
such as "text-gray-900 dark:text-white" for headings and body text, and adjust
muted/secondary text classes similarly, including any feature/title/subtitle
spans) so the DualInterface component supports both light and dark modes
consistently with other marketing components.
apps/web/components/marketing/how-it-works.tsx (1)

3-3: Consider adding light mode support for consistency.

This component uses dark-only styling (bg-gray-900) while other components in this PR support both light and dark themes.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/components/marketing/how-it-works.tsx` at line 3, The outer
container currently hard-codes dark styling; update the top-level div in the
HowItWorks component (the element with className "bg-gray-900 py-24 sm:py-32
overflow-hidden") to support light and dark themes by replacing bg-gray-900 with
a dual class like "bg-white dark:bg-gray-900" (or similar), and then audit and
adjust descendant text/color classes (e.g., change text-white → text-gray-900
dark:text-white, muted text classes to their dark variants) so headings, body
text, and links switch correctly between light and dark modes while preserving
existing spacing classes (py-24 sm:py-32 overflow-hidden).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/web/components/layout/footer.component.tsx`:
- Around line 88-89: The footer uses a dark-only background class on the
<footer> element (className on the footer) but a light-mode border color
(border-gray-200), causing a mismatch; update the footer's classes to either add
a light-mode background (e.g., change className to include bg-white
dark:bg-gray-900) or switch the border to a dark-friendly color (e.g., replace
border-gray-200 with border-white/10 or border-gray-700) so the border and
background match across themes; apply the change on the footer element's
className in footer.component.tsx.

In `@apps/web/components/marketing/hero.tsx`:
- Around line 112-115: Await the promise returned by
navigator.clipboard.writeText(command) before calling setCopied(true) and only
set copied on successful resolution; on failure catch the error and avoid
flipping copied (and optionally log or show an error). Prevent overlapping
timeouts by storing the timeout id (e.g., timeoutRef) and clear any existing
timeout before creating a new setTimeout that will call setCopied(false). Also
clear that timeout in a cleanup effect (useEffect return) to avoid leaks when
the component unmounts; update the onClick handler and add the
timeoutRef/useEffect cleanup accordingly.

In `@apps/web/pages/_document.js`:
- Around line 8-9: The dark mode meta tag for theme-color in _document.js
currently uses content="#262626" which mismatches the dark background defined in
global.css (`#171717`); update the second <meta name="theme-color" content="...">
(the one with media="(prefers-color-scheme: dark)") to use content="#171717" so
browser chrome matches the page background.

---

Outside diff comments:
In `@apps/web/pages/index.tsx`:
- Around line 92-149: The JSON-LD mainEntity array in pages/index.tsx is out of
sync with the visible FAQ component (apps/web/components/marketing/faq.tsx);
update the mainEntity entries so the question/answer pairs exactly match the FAQ
component: remove the two questions present only in JSON-LD ("Do I need to enter
a credit card to create a page?" and "Do you support custom domains?"), add the
two questions present only in the FAQ component ("Do I need the CLI to use
Changes.page?" and "Is Changes.page reliable?"), and ensure the
acceptedAnswer.text values are identical to the FAQ component strings; modify
the mainEntity array in index.tsx to reflect these exact question/answer texts.

---

Nitpick comments:
In `@apps/web/components/marketing/cli-demo.tsx`:
- Line 27: The component uses dark-only utility classes on the outer wrapper
(the div with className "bg-gray-900 py-24 sm:py-32") so add matching light-mode
classes and dark: prefixes like in dual-interface.tsx; replace the hardcoded
dark background/text utilities with light-mode equivalents plus dark: variants
(e.g., add a light background and text color utilities and prefix the existing
dark styles with dark:) and audit inner elements (headings, paragraphs, buttons)
to ensure their text and background colors also have light and dark variants so
the component renders correctly in both themes.

In `@apps/web/components/marketing/dual-interface.tsx`:
- Around line 59-64: The feature arrays (humanFeatures and agentFeatures)
declare an icon property that is never used; in the map that renders each
feature (the JSX using CheckCircleIcon) either remove the unused icon fields
from humanFeatures/agentFeatures or render the per-feature icon instead: update
the list mapping in dual-interface.tsx to use the feature.icon component when
present (e.g., render feature.icon with the same classes/props currently applied
to CheckCircleIcon) and fall back to CheckCircleIcon if feature.icon is absent,
ensuring you reference humanFeatures, agentFeatures and the mapped feature
variable to locate the change.
- Line 34: The component only uses dark-only styles; update the root div
className in dual-interface.tsx (the element rendering "bg-gray-900 py-24
sm:py-32") to be theme-aware (e.g., "bg-gray-50 dark:bg-gray-900 py-24
sm:py-32") and then make child text elements theme-aware as well (replace
hard-coded dark styles like "text-white" with pairs such as "text-gray-900
dark:text-white" for headings and body text, and adjust muted/secondary text
classes similarly, including any feature/title/subtitle spans) so the
DualInterface component supports both light and dark modes consistently with
other marketing components.

In `@apps/web/components/marketing/how-it-works.tsx`:
- Line 3: The outer container currently hard-codes dark styling; update the
top-level div in the HowItWorks component (the element with className
"bg-gray-900 py-24 sm:py-32 overflow-hidden") to support light and dark themes
by replacing bg-gray-900 with a dual class like "bg-white dark:bg-gray-900" (or
similar), and then audit and adjust descendant text/color classes (e.g., change
text-white → text-gray-900 dark:text-white, muted text classes to their dark
variants) so headings, body text, and links switch correctly between light and
dark modes while preserving existing spacing classes (py-24 sm:py-32
overflow-hidden).
🪄 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

Run ID: 791f37d6-2f30-412d-b59a-97756ab6a47f

📥 Commits

Reviewing files that changed from the base of the PR and between c74d109 and 09c660c.

📒 Files selected for processing (17)
  • apps/web/components/layout/footer.component.tsx
  • apps/web/components/layout/header.component.tsx
  • apps/web/components/marketing/cli-demo.tsx
  • apps/web/components/marketing/dual-interface.tsx
  • apps/web/components/marketing/faq.tsx
  • apps/web/components/marketing/features.tsx
  • apps/web/components/marketing/get-started-hero.tsx
  • apps/web/components/marketing/hero.tsx
  • apps/web/components/marketing/how-it-works.tsx
  • apps/web/components/marketing/open-source-banner.tsx
  • apps/web/components/marketing/pricing-section.tsx
  • apps/web/data/marketing.data.ts
  • apps/web/pages/_document.js
  • apps/web/pages/index.tsx
  • apps/web/pages/pricing.tsx
  • apps/web/styles/global.css
  • apps/web/tailwind.config.js

@vercel vercel bot temporarily deployed to Preview – user-changes-page March 26, 2026 09:01 Inactive
@vercel vercel bot temporarily deployed to Preview – changes-page-docs March 26, 2026 09:01 Inactive
@arjunkomath arjunkomath merged commit eabac04 into develop Mar 26, 2026
7 checks passed
@arjunkomath arjunkomath deleted the feat/update-landing-page branch March 26, 2026 09:22
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