Skip to content

Commit 8c5246c

Browse files
authored
feat: Added proper Markdown (#287)
1 parent 87b8257 commit 8c5246c

10 files changed

Lines changed: 12172 additions & 0 deletions

File tree

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
import { ArrowLeft, ExternalLink } from 'lucide-react';
2+
import { Button } from '@/components/ui/button';
3+
import { ProjectLayout } from '@/components/project-details/project-layout';
4+
import { Footer } from '@/components/landing-page';
5+
import Link from 'next/link';
6+
7+
// Mock data
8+
const mockProjectData = {
9+
id: 'bitmed',
10+
name: 'Bitmed',
11+
description:
12+
'To build a secure, transparent, and trusted digital health ecosystem powered by Sonic blockchain for 280M lives in Indonesia.',
13+
logo: '/icon.png',
14+
category: 'Category',
15+
validation: 'Validation',
16+
date: '03 Sep, 2025',
17+
votes: 28,
18+
totalVotes: 100,
19+
daysToDeadline: 43,
20+
creator: {
21+
name: "Creator's Name",
22+
role: 'OWNER',
23+
avatar: '/user.png',
24+
},
25+
links: [
26+
{ type: 'github', url: 'github.com/example/Bitmed', icon: 'github' },
27+
{ type: 'twitter', url: '@bitmed_17', icon: 'twitter' },
28+
{ type: 'website', url: 'bitmed-omega.vercel.app', icon: 'globe' },
29+
{ type: 'youtube', url: 'youtube.com/watch?v=UHJUujd30', icon: 'youtube' },
30+
],
31+
details: {
32+
introduction:
33+
'Bitmed is redefining healthcare access and trust through blockchain technology. By leveraging the speed and scalability of Sonic blockchain, Bitmed ensures that health data, patient records, and transactions remain tamper-proof, accessible, and transparent for all stakeholders in the healthcare ecosystem.',
34+
challenges: [
35+
'Limited access to trusted health records.',
36+
'Growing population with rising demand for digital health services.',
37+
'Lack of transparency in healthcare transactions.',
38+
],
39+
solutions: [
40+
'A blockchain-secured health record system.',
41+
'Decentralized access for patients, providers, and regulators.',
42+
'Seamless integration of digital payments and telemedicine.',
43+
],
44+
features: [
45+
{
46+
title: 'Secure Health Data',
47+
items: [
48+
'Immutable patient records.',
49+
'Permissioned access for authorized providers only.',
50+
],
51+
},
52+
{
53+
title: 'Transparent Transactions',
54+
items: [
55+
'Every health service and payment recorded on-chain.',
56+
'Fraud prevention and audit-ready histories.',
57+
],
58+
},
59+
{
60+
title: 'Scalable Ecosystem',
61+
items: [
62+
'Designed to serve over 280M citizens.',
63+
'Flexible architecture that grows with demand.',
64+
],
65+
},
66+
],
67+
goals: [
68+
{
69+
phase: 'Phase 1',
70+
description: 'Build MVP and launch with pilot hospitals.',
71+
},
72+
{
73+
phase: 'Phase 2',
74+
description: 'Onboard healthcare providers across Indonesia.',
75+
},
76+
{
77+
phase: 'Phase 3',
78+
description:
79+
'Expand into Southeast Asia and integrate insurance providers.',
80+
},
81+
],
82+
media: [
83+
{
84+
type: 'image',
85+
title: 'Patient Record Overview',
86+
url: '/preview_img.png',
87+
},
88+
{
89+
type: 'image',
90+
title: 'Patient Profile Page',
91+
url: '/preview_img.png',
92+
},
93+
{
94+
type: 'video',
95+
title: 'How Bitmed Works in 2 Minutes',
96+
url: '/videos/bitmed-demo.mp4',
97+
thumbnail: '/video-thumbnail.jpg',
98+
},
99+
],
100+
quote: {
101+
text: 'Our mission is not just to digitize healthcare but to make it trusted, transparent, and accessible for every individual in Indonesia.',
102+
author: 'Bitmed Team',
103+
},
104+
links: [
105+
{ text: 'Visit Website', url: 'https://bitmed-omega.vercel.app' },
106+
{ text: 'Read Whitepaper', url: 'https://bitmed.com/whitepaper' },
107+
{
108+
text: 'Watch Demo Video',
109+
url: 'https://youtube.com/watch?v=UHJUujd30',
110+
},
111+
],
112+
supportMessage:
113+
"By backing this project, you're contributing to a healthier, more transparent future for 280M lives in Indonesia.",
114+
},
115+
};
116+
interface ProjectPageProps {
117+
params: Promise<{
118+
id: string;
119+
}>;
120+
}
121+
122+
export default async function ProjectPage({ params }: ProjectPageProps) {
123+
const { id } = await params;
124+
const projectUrl = `/projects/${id}`;
125+
126+
return (
127+
<div className='flex min-h-screen flex-col overflow-x-hidden bg-[#030303]'>
128+
<header className='sticky top-0 z-50 border-b border-gray-800 bg-[#030303]'>
129+
<div className='w-full px-4 sm:px-6'>
130+
<div className='mx-auto flex max-w-[1400px] items-center justify-between py-3'>
131+
{/* Back button */}
132+
<Link href='/projects' passHref>
133+
<Button
134+
variant='outline'
135+
className='h-9 gap-2 border border-gray-700 bg-transparent px-3 text-white transition-colors hover:border-gray-600'
136+
>
137+
<ArrowLeft className='h-4 w-4' />
138+
<span className='hidden sm:inline'>Back</span>
139+
</Button>
140+
</Link>
141+
142+
{/* Open in new tab button */}
143+
<Link href={projectUrl} passHref target='_blank'>
144+
<Button
145+
variant='outline'
146+
className='h-9 gap-2 border border-gray-700 bg-transparent px-3 text-white transition-colors hover:border-gray-600'
147+
>
148+
<span className='hidden sm:inline'>Open</span>
149+
<ExternalLink className='h-4 w-4' />
150+
</Button>
151+
</Link>
152+
</div>
153+
</div>
154+
</header>
155+
156+
<div className='flex-1'>
157+
<ProjectLayout project={mockProjectData} />
158+
</div>
159+
160+
<Footer />
161+
</div>
162+
);
163+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import { Github, Globe, Youtube, X } from 'lucide-react';
2+
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
3+
4+
interface ProjectAboutProps {
5+
project: {
6+
creator: {
7+
name: string;
8+
role: string;
9+
avatar: string;
10+
};
11+
links: Array<{
12+
type: string;
13+
url: string;
14+
icon: string;
15+
}>;
16+
};
17+
}
18+
19+
/**
20+
* Project About component for mobile view
21+
* Contains creator info and project links
22+
*/
23+
export function ProjectAbout({ project }: ProjectAboutProps) {
24+
const getIcon = (iconType: string) => {
25+
switch (iconType) {
26+
case 'github':
27+
return <Github className='h-4 w-4' />;
28+
case 'twitter':
29+
return <X className='h-4 w-4' />;
30+
case 'globe':
31+
return <Globe className='h-4 w-4' />;
32+
case 'youtube':
33+
return <Youtube className='h-4 w-4' />;
34+
default:
35+
return <Globe className='h-4 w-4' />;
36+
}
37+
};
38+
39+
return (
40+
<div className='space-y-6 text-white'>
41+
{/* Creator Info */}
42+
<div className='space-y-4'>
43+
<h2 className='text-lg font-semibold text-white'>Creator</h2>
44+
<div className='flex items-center gap-3'>
45+
<Avatar className='h-12 w-12'>
46+
<AvatarImage
47+
src={project.creator.avatar || '/placeholder.svg'}
48+
alt={project.creator.name}
49+
/>
50+
<AvatarFallback className='bg-blue-600 text-sm font-medium text-white'>
51+
{project.creator.name
52+
.split(' ')
53+
.map(n => n[0])
54+
.join('')
55+
.toUpperCase()}
56+
</AvatarFallback>
57+
</Avatar>
58+
<div className='min-w-0 flex-1'>
59+
<p className='text-base leading-tight font-medium text-white'>
60+
{project.creator.name}
61+
</p>
62+
<p className='mt-1 text-xs font-medium tracking-wide text-[#DBF936] uppercase'>
63+
{project.creator.role}
64+
</p>
65+
</div>
66+
</div>
67+
</div>
68+
69+
{/* Project Links */}
70+
<div className='space-y-4'>
71+
<h2 className='text-lg font-semibold text-gray-300'>Project Links</h2>
72+
<div className='space-y-3'>
73+
{project.links.map((link, index) => (
74+
<a
75+
key={index}
76+
href={`https://${link.url}`}
77+
target='_blank'
78+
rel='noopener noreferrer'
79+
className='group flex items-center gap-3 text-sm text-white transition-colors hover:text-white'
80+
>
81+
<span className='text-gray-400 transition-colors group-hover:text-white'>
82+
{getIcon(link.icon)}
83+
</span>
84+
<span className='truncate'>{link.url}</span>
85+
</a>
86+
))}
87+
</div>
88+
</div>
89+
</div>
90+
);
91+
}

0 commit comments

Comments
 (0)