Skip to content

Commit aad2cc4

Browse files
committed
Merge branch 'main' of https://github.com/0xdevcollins/boundless into production
2 parents 16be5a8 + fb382e0 commit aad2cc4

81 files changed

Lines changed: 12518 additions & 4485 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.env.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,4 @@ GOOGLE_CLIENT_SECRET=your_google_client_secret
5050
# Environment
5151
NODE_ENV=development
5252
# Options: development, production, test
53+

.husky/commit-msg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ conventional_regex='^(feat|fix|docs|style|refactor|test|chore|perf|ci|build|reve
1010

1111
# Regex for Git merge commits
1212
merge_regex='^Merge branch .* of .* into .*'
13+
merge_regex='^Merge branch .* of .*'
1314

1415
# Combined regex - either conventional or merge format
1516
commit_regex="($conventional_regex|$merge_regex)"
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
'use client';
2+
import gsap from 'gsap';
3+
import { useGSAP } from '@gsap/react';
4+
import { useRef } from 'react';
5+
import { BoundlessButton } from '@/components/buttons';
6+
import { DottedUnderline } from '@/components/ui/dotted-underline';
7+
8+
export default function AboutUsHero() {
9+
const heroRef = useRef<HTMLDivElement>(null);
10+
const gridRef = useRef<HTMLDivElement>(null);
11+
const contentRef = useRef<HTMLDivElement>(null);
12+
13+
useGSAP(
14+
() => {
15+
if (gridRef.current) {
16+
gsap.to(gridRef.current, {
17+
rotation: 5,
18+
duration: 15,
19+
ease: 'power2.inOut',
20+
yoyo: true,
21+
repeat: -1,
22+
});
23+
24+
gsap.to(gridRef.current, {
25+
scale: 1.02,
26+
duration: 8,
27+
ease: 'power2.inOut',
28+
yoyo: true,
29+
repeat: -1,
30+
});
31+
32+
gsap.to(gridRef.current, {
33+
opacity: 0.6,
34+
duration: 4,
35+
ease: 'power2.inOut',
36+
yoyo: true,
37+
repeat: -1,
38+
});
39+
}
40+
41+
if (contentRef.current) {
42+
const tl = gsap.timeline();
43+
44+
tl.fromTo(
45+
contentRef.current.querySelector('h1'),
46+
{ y: 50, opacity: 0 },
47+
{ y: 0, opacity: 1, duration: 1, ease: 'power2.out' }
48+
)
49+
.fromTo(
50+
contentRef.current.querySelector('p'),
51+
{ y: 30, opacity: 0 },
52+
{ y: 0, opacity: 1, duration: 0.8, ease: 'power2.out' },
53+
'-=0.5'
54+
)
55+
.fromTo(
56+
contentRef.current.querySelector('.buttons'),
57+
{ y: 30, opacity: 0 },
58+
{ y: 0, opacity: 1, duration: 0.8, ease: 'power2.out' },
59+
'-=0.3'
60+
);
61+
}
62+
},
63+
{ scope: heroRef }
64+
);
65+
66+
return (
67+
<div
68+
ref={heroRef}
69+
className='relative min-h-[95vh] h-full flex items-center justify-center overflow-hidden bg-[#030303]'
70+
>
71+
<div
72+
className='absolute w-full bottom-0 h-[772px] z-10'
73+
style={{
74+
background:
75+
'linear-gradient(180deg, rgba(3, 3, 3, 0.00) 0%, #030303 100%)',
76+
}}
77+
></div>
78+
<div
79+
ref={gridRef}
80+
className='absolute inset-0 w-full h-full'
81+
style={{
82+
backgroundImage: 'url(/about-us-hero-bg.svg)',
83+
backgroundSize: 'cover',
84+
backgroundPosition: 'center',
85+
backgroundRepeat: 'no-repeat',
86+
opacity: 0.8,
87+
}}
88+
/>
89+
<div className='blur-[25px] mix-blend-overlay absolute inset-0 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[383px] h-[383px] rounded-full border-20px] border-[#DBFFB7] opacity-[0.3]' />
90+
<div className='blur-[100px] mix-blend-hard-light absolute inset-0 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[397px] h-[397px] rounded-full border-[100px] border-[#6DC01A] opacity-[0.2]' />
91+
<div className='blur-[400px] absolute inset-0 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[560px] h-[560px] rounded-full bg-[#A7F9503D]' />
92+
93+
<div
94+
ref={contentRef}
95+
className='relative z-10 text-center max-w-[504px] mx-auto px-5'
96+
>
97+
<h1 className='text-white xl:text-[48px] lg:text-[32px] text-[30px] leading-[100%] tracking-[-1.92px] mb-6'>
98+
Boundless is Where
99+
<br />
100+
<span className='gradient-text font-medium'>
101+
Ideas meet Opportunity
102+
</span>
103+
</h1>
104+
105+
<DottedUnderline className='w-full max-w-[504px] mx-auto mb-7' />
106+
107+
<p
108+
className='xl:text-[16px] lg:text-[14px] text-[14px] leading-[160%] mb-7'
109+
style={{
110+
background: 'linear-gradient(93deg, #B5B5B5 15.93%, #FFF 97.61%)',
111+
backgroundClip: 'text',
112+
WebkitBackgroundClip: 'text',
113+
WebkitTextFillColor: 'transparent',
114+
}}
115+
>
116+
We help innovators validate ideas, raise funds, and access grants &
117+
hackathons through milestone-based support powered by Stellar and
118+
Trustless Work.
119+
</p>
120+
121+
<div className='buttons flex flex-col md:flex-row gap-4 justify-center items-center max-w-[446px] mx-auto'>
122+
<BoundlessButton variant='default' size='lg' fullWidth>
123+
Explore Projects
124+
</BoundlessButton>
125+
<BoundlessButton variant='secondary' size='lg' fullWidth>
126+
Submit Your Idea
127+
</BoundlessButton>
128+
</div>
129+
</div>
130+
</div>
131+
);
132+
}

app/(landing)/about/OurTeam.tsx

Lines changed: 52 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,50 +3,58 @@ import React from 'react';
33

44
const OurTeam = () => {
55
return (
6-
<div>
7-
<p
8-
className='text-sm font-medium bg-clip-text text-transparent w-fit mx-auto'
9-
style={{
10-
backgroundImage:
11-
'linear-gradient(272.61deg, #A7F95080 13.84%, #3AE6B2 73.28%)',
12-
}}
13-
>
14-
Our Team
15-
</p>
6+
<div className='w-full max-w-7xl mx-auto px-4 sm:px-6 md:px-8 lg:px-12'>
7+
{/* Header Section */}
8+
<div className='text-center mb-12 md:mb-16 lg:mb-20'>
9+
<p
10+
className='text-sm md:text-base font-medium bg-clip-text text-transparent w-fit mx-auto mb-4'
11+
style={{
12+
backgroundImage:
13+
'linear-gradient(272.61deg, #A7F95080 13.84%, #3AE6B2 73.28%)',
14+
}}
15+
>
16+
Our Team
17+
</p>
1618

17-
<h1 className='lg:text-5xl font-normal'>
18-
Meet the Brains Behind Boundless
19-
</h1>
20-
<p
21-
className='mt-2 bg-clip-text text-transparent text-center lg:w-2/5 mx-auto '
22-
style={{
23-
backgroundImage:
24-
'linear-gradient(93.2deg, #B5B5B5 15.93%, #FFFFFF 73.28%)',
25-
}}
26-
>
27-
A passionate team of innovators driving transparency, trust, and
28-
opportunity in Web3 funding.
29-
</p>
30-
<div className='mt-20 grid lg:grid-cols-2 lg:gap-16 gap-10 xl:gap-21'>
31-
<div className='flex items-center gap-6 w-full'>
32-
<div className='bg-[#D9D9D9] xl:w-75 lg:w-60 max-lg:w-75 h-82 rounded-xl cursor-pointer transition duration-300 hover:scale-105'></div>
33-
<div className='text-left flex-1'>
34-
<p className='font-medium text-2xl'>Collins Ikechukwu</p>
35-
<p className='font-medium italic text-[#B5B5B5] mt-2'>
19+
<h1 className='text-white text-center text-2xl sm:text-3xl md:text-4xl lg:text-5xl font-normal leading-tight mb-4'>
20+
Meet the Brains Behind Boundless
21+
</h1>
22+
<p
23+
className='bg-clip-text text-transparent text-center text-sm sm:text-base md:text-lg max-w-xs sm:max-w-md md:max-w-lg lg:max-w-2xl mx-auto leading-relaxed'
24+
style={{
25+
backgroundImage:
26+
'linear-gradient(93.2deg, #B5B5B5 15.93%, #FFFFFF 73.28%)',
27+
}}
28+
>
29+
A passionate team of innovators driving transparency, trust, and
30+
opportunity in Web3 funding.
31+
</p>
32+
</div>
33+
34+
{/* Team Members Grid */}
35+
<div className='grid grid-cols-1 lg:grid-cols-2 gap-8 md:gap-12 lg:gap-16 xl:gap-20'>
36+
{/* Team Member 1 */}
37+
<div className='flex flex-col sm:flex-row items-center sm:items-start gap-4 md:gap-6 w-full'>
38+
<div className='bg-[#D9D9D9] w-48 h-48 sm:w-56 sm:h-56 md:w-60 md:h-60 lg:w-64 lg:h-64 xl:w-72 xl:h-72 rounded-xl cursor-pointer transition duration-300 hover:scale-105 flex-shrink-0'></div>
39+
<div className='text-center sm:text-left flex-1 w-full'>
40+
<h3 className='font-medium text-xl md:text-2xl text-white mb-2'>
41+
Collins Ikechukwu
42+
</h3>
43+
<p className='font-medium italic text-[#B5B5B5] text-sm md:text-base mb-4 md:mb-6'>
3644
Blockchain Developer
3745
</p>
3846
<hr
39-
className='my-10 w-full h-[1px] border-0'
47+
className='w-full h-[1px] border-0 mb-4 md:mb-6'
4048
style={{
4149
background:
4250
'radial-gradient(113.1% 103.23% at 45.52% -1.51%, rgba(255, 255, 255, 0.4704) 0%, rgba(255, 255, 255, 0.0784) 100%)',
4351
}}
4452
/>
45-
<p className='text-[#B5B5B5] mt-2'>
53+
<p className='text-[#B5B5B5] text-sm md:text-base leading-relaxed mb-6 md:mb-8'>
4654
A skilled blockchain developer with a focus on decentralized
4755
finance and smart contract solutions.
4856
</p>
49-
<div className='flex items-center gap-3.5 mt-10'>
57+
<div className='flex items-center justify-center sm:justify-start gap-3 md:gap-4'>
5058
<div
5159
style={{
5260
border: '1px solid',
@@ -76,32 +84,34 @@ const OurTeam = () => {
7684
}}
7785
className='flex items-center justify-center cursor-pointer transition duration-300 hover:scale-105'
7886
>
79-
{' '}
8087
<Image src={'/X.svg'} alt='X' width={20} height={20} />
8188
</div>
8289
</div>
8390
</div>
8491
</div>
85-
<div className='flex items-center gap-6 w-full'>
86-
<div className='bg-[#D9D9D9] xl:w-75 lg:w-60 max-lg:w-75 h-82 rounded-xl cursor-pointer transition duration-300 hover:scale-105'></div>
87-
<div className='text-left flex-1'>
88-
<p className='font-medium text-2xl'>Nnaji Benjamin</p>
89-
<p className='font-medium italic text-[#B5B5B5] mt-2'>
92+
93+
{/* Team Member 2 */}
94+
<div className='flex flex-col sm:flex-row items-center sm:items-start gap-4 md:gap-6 w-full'>
95+
<div className='bg-[#D9D9D9] w-48 h-48 sm:w-56 sm:h-56 md:w-60 md:h-60 lg:w-64 lg:h-64 xl:w-72 xl:h-72 rounded-xl cursor-pointer transition duration-300 hover:scale-105 flex-shrink-0'></div>
96+
<div className='text-center sm:text-left flex-1 w-full'>
97+
<h3 className='font-medium text-xl md:text-2xl text-white mb-2'>
98+
Nnaji Benjamin
99+
</h3>
100+
<p className='font-medium italic text-[#B5B5B5] text-sm md:text-base mb-4 md:mb-6'>
90101
Full-Stack & Blockchain Developer
91102
</p>
92103
<hr
93-
className='mt-5 mb-10 w-full h-[1px] border-0'
104+
className='w-full h-[1px] border-0 mb-4 md:mb-6'
94105
style={{
95106
background:
96107
'radial-gradient(113.1% 103.23% at 45.52% -1.51%, rgba(255, 255, 255, 0.4704) 0%, rgba(255, 255, 255, 0.0784) 100%)',
97108
}}
98109
/>
99-
100-
<p className='text-[#B5B5B5] mt-2'>
110+
<p className='text-[#B5B5B5] text-sm md:text-base leading-relaxed mb-6 md:mb-8'>
101111
A versatile full-stack and blockchain developer with strong
102112
experience across Web3 platforms.
103113
</p>
104-
<div className='flex items-center gap-3.5 mt-10'>
114+
<div className='flex items-center justify-center sm:justify-start gap-3 md:gap-4'>
105115
<div
106116
style={{
107117
border: '1px solid',
@@ -131,7 +141,6 @@ const OurTeam = () => {
131141
}}
132142
className='flex items-center justify-center cursor-pointer transition duration-300 hover:scale-105'
133143
>
134-
{' '}
135144
<Image src={'/X.svg'} alt='X' width={20} height={20} />
136145
</div>
137146
</div>

app/(landing)/about/page.tsx

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,32 @@
11
import React from 'react';
22
import { Metadata } from 'next';
33
import { generatePageMetadata } from '@/lib/metadata';
4+
import Missionpage from '@/components/About-Mission/Missionpage';
5+
import AboutUsDifferent from '@/components/landing-page/about/AboutUsDifferent';
6+
7+
import Timeline from '@/components/landing-page/about/timeline/Timeline';
8+
49
import TestimonialsSection from '@/components/testimonials/TestimonialsSection';
510
import { testimonials } from '@/components/testimonials/data/testimonial';
11+
import AboutUsHero from './AboutUsHero';
612
import OurTeam from './OurTeam';
713
import Partners from './Partners';
814

915
export const metadata: Metadata = generatePageMetadata('about');
1016

1117
const AboutPage = () => {
1218
return (
13-
<div className='relative z-10 space-y-[23px] md:space-y-[80px] max-w-[1300px] mx-auto'>
14-
<OurTeam />
15-
<Partners />
16-
<div className='text-white text-4xl font-bold text-center mt-10'>
19+
<section>
20+
<AboutUsHero />
21+
<div className='relative z-10 space-y-[23px] md:space-y-[80px] max-w-[1300px] mx-auto'>
22+
<Missionpage />
23+
<AboutUsDifferent />
24+
<Timeline />
25+
<OurTeam />
26+
<Partners />
1727
<TestimonialsSection testimonials={testimonials} />
1828
</div>
19-
</div>
29+
</section>
2030
);
2131
};
2232

app/(landing)/waitlist/page.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
import { Metadata } from 'next';
22
import { generatePageMetadata } from '@/lib/metadata';
33
import WaitlistForm from '@/components/waitlist/WaitlistForm';
4+
import BeamBackground from '@/components/landing-page/BeamBackground';
45

56
export const metadata: Metadata = generatePageMetadata('waitlist');
67

78
export default function WaitlistPage() {
8-
return <WaitlistForm />;
9+
return (
10+
<div className='bg-[url(/waitlist-bg.svg)] bg-cover bg-center'>
11+
<BeamBackground />
12+
<WaitlistForm />
13+
</div>
14+
);
915
}

app/api/waitlist/subscribe/route.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,14 @@ export async function POST(request: NextRequest) {
44
try {
55
const body = await request.json();
66

7-
// Get the backend URL from environment or config
87
const backendUrl =
98
process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8000/api';
109

11-
// Forward the request to the backend
1210
const response = await fetch(`${backendUrl}/waitlist/subscribe`, {
1311
method: 'POST',
1412
headers: {
1513
'Content-Type': 'application/json',
16-
// Forward any relevant headers
14+
1715
...(request.headers.get('user-agent') && {
1816
'User-Agent': request.headers.get('user-agent')!,
1917
}),

0 commit comments

Comments
 (0)