-
Notifications
You must be signed in to change notification settings - Fork 85
chore: new landing page #2369
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
chore: new landing page #2369
Conversation
How to use the Graphite Merge QueueAdd 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. |
Deploying rivet with
|
Latest commit: |
457916b
|
Status: | ✅ Deploy successful! |
Preview URL: | https://d3c00e3c.rivet.pages.dev |
Branch Preview URL: | https://04-17-chore-new-landing-page.rivet.pages.dev |
aed27c8
to
13cb45c
Compare
6e95445
to
f7907d7
Compare
27f83e4
to
4058a43
Compare
4058a43
to
cae5143
Compare
Deploying rivet-studio with
|
Latest commit: |
457916b
|
Status: | ✅ Deploy successful! |
Preview URL: | https://3ff49f4a.rivet-studio.pages.dev |
Branch Preview URL: | https://04-17-chore-new-landing-page.rivet-studio.pages.dev |
Deploying rivet-hub with
|
Latest commit: |
457916b
|
Status: | ✅ Deploy successful! |
Preview URL: | https://7e3dcbfe.rivet-hub-7jb.pages.dev |
Branch Preview URL: | https://04-17-chore-new-landing-page.rivet-hub-7jb.pages.dev |
cae5143
to
eada525
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PR Summary
This PR replaces the existing Framer-based landing page with a new marketing-focused implementation using Next.js and Tailwind CSS, featuring multiple specialized sections for better user engagement and product presentation.
Key changes:
- Removed Framer-based implementation (
/site/src/app/(v2)/(framer)/
) in favor of new marketing components - Added comprehensive landing page with Hero, Features, Frameworks, and Tutorial sections in
/site/src/app/(v2)/(marketing)/page.tsx
- Implemented interactive components like
CopyCommand
for terminal commands and tabbed interface inCommandCenterSection
- Created dedicated sections for community engagement and testimonials in
CommunitySection
- Added responsive tutorial cards showcasing different Rivet features with hover effects
9 file(s) reviewed, 11 comment(s)
Edit PR Review Bot Settings | Greptile
|
||
// Command Center section | ||
export const CommandCenterSection = () => { | ||
const [activeTab, setActiveTab] = useState("monitoring"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
logic: activeTab state is set but no content changes based on tab selection
<div className="flex space-x-12"> | ||
{features.map((feature, index) => ( | ||
<div key={index} className="flex items-center"> | ||
<div className="text-white/40 mr-2"> | ||
<Icon icon={faCheck} className="text-sm" /> | ||
</div> | ||
<span className="text-sm text-white/80">{feature}</span> | ||
</div> | ||
))} | ||
</div> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: features list lacks mobile responsiveness - will overflow on small screens
<div className="flex space-x-12"> | |
{features.map((feature, index) => ( | |
<div key={index} className="flex items-center"> | |
<div className="text-white/40 mr-2"> | |
<Icon icon={faCheck} className="text-sm" /> | |
</div> | |
<span className="text-sm text-white/80">{feature}</span> | |
</div> | |
))} | |
</div> | |
<div className="flex flex-wrap gap-4 justify-center"> | |
{features.map((feature, index) => ( | |
<div key={index} className="flex items-center"> | |
<div className="text-white/40 mr-2"> | |
<Icon icon={faCheck} className="text-sm" /> | |
</div> | |
<span className="text-sm text-white/80">{feature}</span> | |
</div> | |
))} | |
</div> |
<div | ||
onClick={handleCopy} | ||
className="inline-flex items-center bg-black/40 rounded-md border border-white/10 px-4 py-2.5 font-mono text-sm group relative cursor-pointer active:scale-[0.98] active:bg-black/60 transition-all" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: Use button element instead of div for better accessibility. Add role="button" and keyboard handlers (onKeyDown) to support keyboard interaction.
<div | |
onClick={handleCopy} | |
className="inline-flex items-center bg-black/40 rounded-md border border-white/10 px-4 py-2.5 font-mono text-sm group relative cursor-pointer active:scale-[0.98] active:bg-black/60 transition-all" | |
<button | |
onClick={handleCopy} | |
onKeyDown={e => e.key === 'Enter' && handleCopy()} | |
className="inline-flex items-center bg-black/40 rounded-md border border-white/10 px-4 py-2.5 font-mono text-sm group relative cursor-pointer active:scale-[0.98] active:bg-black/60 transition-all" |
// Copy the command without the $ symbol | ||
navigator.clipboard.writeText(command); | ||
setCopied(true); | ||
setTimeout(() => setCopied(false), 1000); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: Consider using useEffect cleanup to clear timeout on unmount to prevent memory leaks.
{platforms.map((platform, index) => ( | ||
<Link key={index} href={platform.href} className="group"> | ||
<div className="flex items-center justify-center h-10 px-5 rounded-md border border-zinc-700 bg-zinc-900 group-hover:bg-zinc-800 group-hover:border-zinc-600 transition-all"> | ||
<Icon icon={platform.icon} className="text-white/60 group-hover:text-white/90 mr-2 transition-colors" /> | ||
<span className="text-sm text-white/60 group-hover:text-white/90 transition-colors">{platform.name}</span> | ||
</div> | ||
</Link> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
logic: Missing rel="noopener noreferrer" for external links and target="_blank" attributes for better security and UX
{platforms.map((platform, index) => ( | |
<Link key={index} href={platform.href} className="group"> | |
<div className="flex items-center justify-center h-10 px-5 rounded-md border border-zinc-700 bg-zinc-900 group-hover:bg-zinc-800 group-hover:border-zinc-600 transition-all"> | |
<Icon icon={platform.icon} className="text-white/60 group-hover:text-white/90 mr-2 transition-colors" /> | |
<span className="text-sm text-white/60 group-hover:text-white/90 transition-colors">{platform.name}</span> | |
</div> | |
</Link> | |
{platforms.map((platform, index) => ( | |
<Link key={index} href={platform.href} target="_blank" rel="noopener noreferrer" className="group"> | |
<div className="flex items-center justify-center h-10 px-5 rounded-md border border-zinc-700 bg-zinc-900 group-hover:bg-zinc-800 group-hover:border-zinc-600 transition-all"> | |
<Icon icon={platform.icon} className="text-white/60 group-hover:text-white/90 mr-2 transition-colors" /> | |
<span className="text-sm text-white/60 group-hover:text-white/90 transition-colors">{platform.name}</span> | |
</div> | |
</Link> |
asChild | ||
className="px-4 pr-6 py-3 text-base bg-gradient-to-b from-[#FF5C00] to-[#FF5C00]/90 border border-[#FF5C00]/30 hover:border-[#FF5C00]/60 transition-all duration-200 group" | ||
> | ||
<Link href="#deploy" className="flex items-center justify-center relative"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
logic: href='#deploy' points to a non-existent anchor. Should likely point to an actual deployment page route
asChild | ||
className="px-4 pr-6 py-3 text-base border-white/10 hover:border-white/30 transition-all duration-200 group" | ||
> | ||
<Link href="#demo" className="flex items-center justify-center relative"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
logic: href='#demo' points to a non-existent anchor. Should likely point to an actual demo booking page route
"use client"; | ||
|
||
import Link from "next/link"; | ||
import { Icon, faCode, faLayerGroup, faTerminal, faDesktop, faListCheck, faArrowsToCircle, faArrowRight, faDatabase } from "@rivet-gg/icons"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: faListCheck is imported but never used in the component
import { Icon, faCode, faLayerGroup, faTerminal, faDesktop, faListCheck, faArrowsToCircle, faArrowRight, faDatabase } from "@rivet-gg/icons"; | |
import { Icon, faCode, faLayerGroup, faTerminal, faDesktop, faArrowsToCircle, faArrowRight, faDatabase } from "@rivet-gg/icons"; |
</div> | ||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8"> | ||
{tutorials.map((tutorial, index) => ( | ||
<Link key={index} href={tutorial.href} className="group"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: using array index as key could cause issues with React reconciliation if tutorials are reordered - consider using a unique id
}: { | ||
title: string; | ||
description: string; | ||
faIcon: any; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: faIcon type 'any' should be more specific. Consider using IconDefinition from @fortawesome/fontawesome-svg-core
faIcon: any; | |
faIcon: IconDefinition; |
eada525
to
afd09c8
Compare
afd09c8
to
9f2515e
Compare
9f2515e
to
457916b
Compare
Merge activity
|
<!-- Please make sure there is an issue that this PR is correlated to. --> ## Changes <!-- If there are frontend changes, please include screenshots. -->
Changes