Skip to content

Commit 9dff1fc

Browse files
committed
feat: enhance project details with milestone tracking and comments
- Added a new Milestone component to display project milestones. - Implemented a timeline feature for visual representation of milestones. - Introduced new components for milestone details, links, and overview. - Enhanced project layout to include milestone and voter sections. - Updated comment system to support real-time updates and improved error handling. - Added empty states for backers and voters to enhance user experience. - Improved responsiveness and styling across various components. This update significantly enhances the project details page, providing users with a comprehensive view of milestones and comments.
1 parent e69a391 commit 9dff1fc

52 files changed

Lines changed: 2288 additions & 477 deletions

Some content is hidden

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

app/(landing)/blog/page.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,12 @@ function BlogGridLoading() {
5959
const BlogPage = async () => {
6060
return (
6161
<div className='min-h-screen bg-[#030303]'>
62-
<BlogHero />
63-
<Suspense fallback={<BlogGridLoading />}>
64-
<StreamingBlogGridWrapper />
65-
</Suspense>
62+
<div className='mx-auto max-w-[1440px] px-5 py-5 md:px-[50px] lg:px-[100px]'>
63+
<BlogHero />
64+
<Suspense fallback={<BlogGridLoading />}>
65+
<StreamingBlogGridWrapper />
66+
</Suspense>
67+
</div>
6668
<TestimonialSection testimonials={testimonials} />
6769
</div>
6870
);

app/(landing)/code-of-conduct/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export const metadata: Metadata = generatePageMetadata('codeOfConduct');
66

77
const CodeOfConductPage = () => {
88
return (
9-
<div className='mt-10 text-center text-4xl font-bold text-white'>
9+
<div className='mx-auto mt-10 max-w-[1440px] px-5 py-5 text-center text-4xl font-bold text-white md:px-[50px] lg:px-[100px]'>
1010
Code of Conduct Page
1111
</div>
1212
);

app/(landing)/contact/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export const metadata: Metadata = generatePageMetadata('contact');
66

77
const ContactPage = () => {
88
return (
9-
<div className='mt-10 text-center text-4xl font-bold text-white'>
9+
<div className='mx-auto mt-10 max-w-[1440px] px-5 py-5 text-center text-4xl font-bold text-white md:px-[50px] lg:px-[100px]'>
1010
Contact Page
1111
</div>
1212
);

app/(landing)/grants/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export const metadata: Metadata = generatePageMetadata('grants');
66

77
const GrantPage = () => {
88
return (
9-
<div className='mt-10 text-center text-4xl font-bold text-white'>
9+
<div className='mx-auto mt-10 max-w-[1440px] px-5 py-5 text-center text-4xl font-bold text-white md:px-[50px] lg:px-[100px]'>
1010
Grant Page
1111
</div>
1212
);

app/(landing)/hackathons/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export const metadata: Metadata = generatePageMetadata('hackathons');
66

77
const HackathonsPage = () => {
88
return (
9-
<div className='mt-10 text-center text-4xl font-bold text-white'>
9+
<div className='mx-auto mt-10 max-w-[1440px] px-5 py-5 text-center text-4xl font-bold text-white md:px-[50px] lg:px-[100px]'>
1010
Hackathons Page
1111
</div>
1212
);

app/(landing)/me/layout.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export const metadata: Metadata = {
77

88
export default function MeLayout({ children }: { children: React.ReactNode }) {
99
return (
10-
<div className='min-h-screen flex-1 px-6 py-5 md:px-10 md:py-20 xl:px-[100px]'>
10+
<div className='mx-auto min-h-screen max-w-[1440px] flex-1 px-5 py-5 md:px-[50px] lg:px-[100px]'>
1111
{children}
1212
</div>
1313
);

app/(landing)/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export default function LandingPage() {
1111
return (
1212
<div className='relative overflow-hidden'>
1313
<BeamBackground />
14-
<div className='relative z-10 mx-auto max-w-[1300px] space-y-[60px] md:space-y-[80px]'>
14+
<div className='relative z-10 mx-auto max-w-[1440px] space-y-[60px] px-5 py-5 md:space-y-[80px] md:px-[50px] lg:px-[100px]'>
1515
<Hero />
1616
<Explore />
1717
<WhyBoundless />

app/(landing)/privacy/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export const metadata: Metadata = generatePageMetadata('privacy');
66

77
const PrivacyPage = () => {
88
return (
9-
<div className='mt-10 text-center text-4xl font-bold text-white'>
9+
<div className='mx-auto mt-10 max-w-[1440px] px-5 py-5 text-center text-4xl font-bold text-white md:px-[50px] lg:px-[100px]'>
1010
Privacy Page
1111
</div>
1212
);

app/(landing)/profile/[username]/layout.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export const dynamic = 'force-dynamic';
1111

1212
export default function ProfileLayout({ children }: ProfileLayoutProps) {
1313
return (
14-
<main className='flex-1 px-6 py-5 md:px-10 md:py-20 xl:px-[100px]'>
14+
<main className='mx-auto max-w-[1440px] flex-1 px-5 py-5 md:px-[50px] lg:px-[100px]'>
1515
<Suspense fallback={<ProfileLoadingFallback />}>{children}</Suspense>
1616
</main>
1717
);
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import React from 'react';
2+
import MilstoneOverview from '@/components/project-details/project-milestone/milestone-details/MilstoneOverview';
3+
import MilestoneDetails from '@/components/project-details/project-milestone/milestone-details/MilestoneDetails';
4+
import MilestoneLinks from '@/components/project-details/project-milestone/milestone-details/MilestoneLinks';
5+
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
6+
7+
interface MilestonePageProps {
8+
params: Promise<{
9+
milestoneId: string; // This will be the milestone ID
10+
}>;
11+
}
12+
13+
const MilestonePage = async ({ params }: MilestonePageProps) => {
14+
const { milestoneId } = await params;
15+
16+
return (
17+
<section className='mx-auto mt-5 flex max-w-[1440px] flex-col justify-center gap-5 px-5 py-5 md:flex-row md:justify-between md:gap-18 md:px-[50px] lg:px-[100px]'>
18+
<div className='w-full md:max-w-[500px]'>
19+
<MilstoneOverview />
20+
</div>
21+
{/* <div className=''> */}
22+
<Tabs defaultValue='details' className='w-full'>
23+
<div className='border-b border-gray-800 py-0'>
24+
<TabsList className='mb-0 h-auto w-fit justify-start gap-6 rounded-none bg-transparent p-0'>
25+
<TabsTrigger
26+
value='details'
27+
className='data-[state=active]:border-primary rounded-none border-x-0 border-t-0 bg-transparent px-0 py-2 text-sm font-medium text-gray-400 transition-colors hover:text-gray-300 focus-visible:border-0 focus-visible:ring-0 focus-visible:outline-none data-[state=active]:border-x-0 data-[state=active]:border-t-0 data-[state=active]:border-b-2 data-[state=active]:text-white'
28+
>
29+
Details
30+
</TabsTrigger>
31+
<TabsTrigger
32+
value='links'
33+
className='data-[state=active]:border-primary rounded-none border-x-0 border-t-0 bg-transparent px-0 py-2 text-sm font-medium text-gray-400 transition-colors hover:text-gray-300 focus-visible:border-0 focus-visible:ring-0 focus-visible:outline-none data-[state=active]:border-x-0 data-[state=active]:border-t-0 data-[state=active]:border-b-2 data-[state=active]:text-white md:hidden'
34+
>
35+
Links
36+
</TabsTrigger>
37+
</TabsList>
38+
</div>
39+
<TabsContent value='details'>
40+
<MilestoneDetails milestoneId={milestoneId} />
41+
</TabsContent>
42+
<TabsContent value='links'>
43+
<MilestoneLinks />
44+
</TabsContent>
45+
</Tabs>
46+
{/* </div> */}
47+
</section>
48+
);
49+
};
50+
51+
export default MilestonePage;

0 commit comments

Comments
 (0)