--- import { SiNextdotjs, SiTailwindcss, SiTypescript, SiPhp, SiJavascript, SiMysql, SiDiscord } from 'react-icons/si'; import { BsLightningChargeFill } from 'react-icons/bs'; import { FaCode } from 'react-icons/fa'; import { HiOutlineCollection } from 'react-icons/hi'; import { MdLaunch } from 'react-icons/md'; import FadeIn from '../ui/FadeIn.astro'; interface Project { title: string; year: string; description: string; icon: any; tags: Array<{ name: string; icon: any; }>; } const getTagIcon = (tag: string) => { switch (tag) { case 'Next.js': return SiNextdotjs; case 'Tailwind CSS': return SiTailwindcss; case 'TypeScript': return SiTypescript; case 'PHP': return SiPhp; case 'JavaScript': return SiJavascript; case 'MySQL': return SiMysql; case 'Performance': return BsLightningChargeFill; case 'Discord API': return SiDiscord; default: return null; } }; const getProjectIcon = (title: string) => { if (title.includes('ventry')) { return MdLaunch; } else if (title.includes('ShareUpload')) { return HiOutlineCollection; } else if (title.includes('RestoreM')) { return SiDiscord; } else { return FaCode; } }; const projects: Project[] = [ { title: 'ventry.host v2', year: '2025', description: 'Free file hosting revamped with a modern design and improved user experience.', icon: getProjectIcon('ventry.host v2'), tags: [ { name: 'Next.js', icon: getTagIcon('Next.js') }, { name: 'Tailwind CSS', icon: getTagIcon('Tailwind CSS') }, { name: 'TypeScript', icon: getTagIcon('TypeScript') } ] }, { title: 'ventry.host', year: '2023', description: 'A free file hosting solution with thousands of daily visitors.', icon: getProjectIcon('ventry.host'), tags: [ { name: 'PHP', icon: getTagIcon('PHP') }, { name: 'JavaScript', icon: getTagIcon('JavaScript') }, { name: 'MySQL', icon: getTagIcon('MySQL') } ] }, { title: 'ShareUpload', year: '2022', description: 'High-performance file sharing platform with unlimited storage.', icon: getProjectIcon('ShareUpload'), tags: [ { name: 'PHP', icon: getTagIcon('PHP') }, { name: 'MySQL', icon: getTagIcon('MySQL') }, { name: 'Performance', icon: getTagIcon('Performance') } ] }, { title: 'RestoreM', year: '2023', description: 'Discord server backup and restoration service.', icon: getProjectIcon('RestoreM'), tags: [ { name: 'PHP', icon: getTagIcon('PHP') }, { name: 'MySQL', icon: getTagIcon('MySQL') }, { name: 'Discord API', icon: getTagIcon('Discord API') } ] } ]; const sortedProjects = [...projects].sort((a, b) => { return parseInt(b.year) - parseInt(a.year); }); ---
Portfolio

Selected Work

{sortedProjects.map((project, index) => (
{project.year}

{project.title}

{project.description}

Technologies

{project.tags.map((tag, tagIndex) => { const Icon = tag.icon; return ( {tag.name} {tagIndex !== project.tags.length - 1 && ( )} ); })}
))}