-
Notifications
You must be signed in to change notification settings - Fork 1
feat(marketing): build home page sections (workflow, personas, testimonials, FAQ, news) #12
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
Merged
Benjtalkshow
merged 7 commits into
boundlessfi:main
from
Benjtalkshow:feat/marketing-home-sections
Jun 12, 2026
Merged
Changes from all commits
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
e461cf2
feat(marketing): build "Boundless in 4 steps" workflow section
Benjtalkshow e403a0e
feat(marketing): build audience personas section
Benjtalkshow 67205c8
feat(marketing): build testimonials section
Benjtalkshow ee366e8
feat(marketing): build home FAQ section
Benjtalkshow e869325
feat(marketing): build insights & news section
Benjtalkshow 3e74e1c
fix(marketing): render workflow section background gradient
Benjtalkshow 479a248
test: scope home hero smoke locator to the h1 heading
Benjtalkshow File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,57 @@ | ||
| import { cn } from '@/lib/utils'; | ||
|
|
||
| import { Glow } from './glow'; | ||
|
|
||
| type Step = { title: string; description: string }; | ||
|
|
||
| const STEPS: Step[] = [ | ||
| { | ||
| title: 'Match', | ||
| description: 'Connect with the right contributors or participants.', | ||
| }, | ||
| { | ||
| title: 'Secure', | ||
| description: 'Lock funding into escrow before work starts.', | ||
| }, | ||
| ]; | ||
|
|
||
| /** "Track Progress" illustration: a glassy card over a soft primary glow. */ | ||
| export function EscrowFlow({ className }: { className?: string }) { | ||
| return ( | ||
| <div className={cn('relative w-[260px]', className)}> | ||
| {/* Border glow concentrated at the centre of the left edge (only the | ||
| border line glows here), fading to the figma's faint white border. */} | ||
| <div className='relative rounded-[14px] bg-[radial-gradient(circle_at_left,rgba(46,237,170,0.85),rgba(255,255,255,0.09)_18%)] p-px'> | ||
| <div className='relative overflow-hidden rounded-[14px] bg-ink/70 p-[15px] backdrop-blur-[35px]'> | ||
| {/* Green patch near the centre of the right edge (inside, not on the | ||
| border). */} | ||
| <Glow className='absolute top-1/2 right-0 size-24 translate-x-[45%] -translate-y-1/2 opacity-50 blur-[26px]' /> | ||
|
|
||
| <div className='relative flex gap-2'> | ||
| {/* Indicator rail */} | ||
| <div className='flex flex-col items-center gap-1 pt-1'> | ||
| <span className='size-8 shrink-0 rounded-full bg-white/15' /> | ||
| <span className='h-11 w-1 rounded-full bg-white/10' /> | ||
| <span className='size-8 shrink-0 rounded-full bg-white/15' /> | ||
| </div> | ||
|
|
||
| <div className='flex flex-1 flex-col gap-8'> | ||
| {STEPS.map(step => ( | ||
| <div key={step.title} className='flex flex-col gap-2'> | ||
| <p className='text-[15px] leading-none font-medium text-white'> | ||
| {step.title} | ||
| </p> | ||
| <p className='text-xs text-white/50'>{step.description}</p> | ||
| </div> | ||
| ))} | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
|
|
||
| {/* Top glow: overlays the card from its top edge and bursts out above, | ||
| centred and kept transparent so it reads as a soft burst. */} | ||
| <Glow className='absolute -top-6 left-1/2 h-14 w-36 -translate-x-1/2 opacity-40 blur-[26px]' /> | ||
| </div> | ||
| ); | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,11 +1,37 @@ | ||
| import { Placeholder } from './placeholder'; | ||
| import { ArrowRight } from 'lucide-react'; | ||
| import Link from 'next/link'; | ||
|
|
||
| import { FaqAccordion } from './faq-accordion'; | ||
| import { FAQ_ITEMS } from './faq-data'; | ||
| import { Section } from './section'; | ||
|
|
||
| /** Frequently asked questions. Plain scaffold pending design. */ | ||
| // The home section previews the first few questions; the rest live on /faq. | ||
| const HOME_FAQS = FAQ_ITEMS.slice(0, 4); | ||
|
|
||
| /** Home "Frequently Asked Questions (FAQs)": heading beside a preview accordion. */ | ||
| export function Faq() { | ||
| return ( | ||
| <Section> | ||
| <Placeholder label='FAQ' /> | ||
| <Section className='bg-ink bg-[linear-gradient(180deg,rgba(13,17,17,0)_50%,rgba(46,237,170,0.08)_100%)]'> | ||
| <div className='flex flex-col gap-10 lg:flex-row lg:gap-16'> | ||
| <h2 className='font-heading text-3xl leading-none font-semibold tracking-tight text-white sm:text-4xl lg:shrink-0 lg:text-5xl lg:tracking-[-1.92px]'> | ||
| <span className='block whitespace-nowrap'>Frequently Asked</span> | ||
| <span className='block whitespace-nowrap'> | ||
| Questions <span className='text-white/60'>(FAQs)</span> | ||
| </span> | ||
| </h2> | ||
|
|
||
| <div className='flex flex-1 flex-col gap-8'> | ||
| <FaqAccordion items={HOME_FAQS} defaultOpen={[0]} /> | ||
|
|
||
| <Link | ||
| href='/faq' | ||
| className='inline-flex items-center gap-2 self-center text-sm font-semibold text-primary transition-colors hover:text-primary-400 lg:self-start' | ||
| > | ||
| See More FAQs | ||
| <ArrowRight className='size-5' /> | ||
| </Link> | ||
| </div> | ||
| </div> | ||
| </Section> | ||
| ); | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| import { cn } from '@/lib/utils'; | ||
|
|
||
| /** | ||
| * Soft ambient glow: the primary green with a touch of the explore-path badge | ||
| * accent (#66c589) mixed in. Size, position, opacity and blur are set by the | ||
| * caller (the colour falls off naturally through the blur). | ||
| */ | ||
| export function Glow({ className }: { className?: string }) { | ||
| return ( | ||
| <div | ||
| aria-hidden | ||
| className={cn( | ||
| 'pointer-events-none rounded-full bg-[color-mix(in_srgb,var(--color-primary)_65%,#66c589)] blur-3xl', | ||
| className | ||
| )} | ||
| /> | ||
| ); | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,11 +1,51 @@ | ||
| import { Placeholder } from './placeholder'; | ||
| import { ArrowRight } from 'lucide-react'; | ||
| import Link from 'next/link'; | ||
|
|
||
| import { cn } from '@/lib/utils'; | ||
|
|
||
| import { BlogCard } from './blog/blog-card'; | ||
| import { BLOG_POSTS } from './blog/blog-data'; | ||
| import { Section } from './section'; | ||
|
|
||
| /** Latest news/blog teaser. Plain scaffold pending design. */ | ||
| // Preview the three latest posts; the rest live on /blog. | ||
| const FEATURED = BLOG_POSTS.slice(0, 3); | ||
|
|
||
| function MoreLink({ className }: { className?: string }) { | ||
| return ( | ||
| <Link | ||
| href='/blog' | ||
| className={cn( | ||
| 'inline-flex items-center gap-2 text-sm font-semibold text-primary transition-colors hover:text-primary-400', | ||
| className | ||
| )} | ||
| > | ||
| See more Articles | ||
| <ArrowRight className='size-5' /> | ||
| </Link> | ||
| ); | ||
| } | ||
|
|
||
| /** Home "Insights, Stories & Opportunities": heading + three blog previews. */ | ||
| export function NewsSection() { | ||
| return ( | ||
| <Section> | ||
| <Placeholder label='News' /> | ||
| <Section | ||
| className='bg-ink bg-[linear-gradient(180deg,rgba(46,237,170,0.08)_0%,rgba(13,17,17,0)_50.07%)]' | ||
| innerClassName='flex flex-col gap-8' | ||
| > | ||
| <div className='flex items-center justify-between gap-6'> | ||
| <h2 className='font-heading text-3xl leading-none font-semibold tracking-tight text-primary-50 sm:text-4xl lg:text-5xl lg:tracking-[-1.92px]'> | ||
| Insights, Stories & Opportunities | ||
| </h2> | ||
| <MoreLink className='hidden shrink-0 lg:inline-flex' /> | ||
| </div> | ||
|
|
||
| <div className='grid gap-8 lg:grid-cols-3'> | ||
| {FEATURED.map(post => ( | ||
| <BlogCard key={post.slug} post={post} /> | ||
| ))} | ||
| </div> | ||
|
|
||
| <MoreLink className='self-center lg:hidden' /> | ||
| </Section> | ||
| ); | ||
| } |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Respect reduced-motion preferences for infinite marquee animations.
The new marquee animations run infinitely but there is no
prefers-reduced-motionfallback. Add a reduced-motion override so desktop users who opt out of motion do not get continuous scrolling.Proposed fix
`@keyframes` marquee-right { from { transform: translateX(-50%); } to { transform: translateX(0); } } + +@media (prefers-reduced-motion: reduce) { + .animate-marquee-left, + .animate-marquee-right { + animation: none !important; + transform: none !important; + } +}Also applies to: 198-214
🤖 Prompt for AI Agents