Website Redesign 7

This commit is contained in:
2025-11-28 02:40:12 +00:00
parent 9b9a201c3e
commit 96e2d0650c
72 changed files with 7504 additions and 1231 deletions
+43 -161
View File
@@ -1,161 +1,43 @@
<script lang="ts">
import HackCard from "$lib/components/HackCard.svelte";
type Card = {
title: string;
description: string;
image?: string;
link?: string;
repo?: string;
devpost?: string;
hackathonName?: string;
university?: string;
location?: string;
year?: string;
tags?: string[];
featured?: boolean;
awards?: { track: string; place: string }[];
liveWarning?: boolean;
};
const cards: Card[] = [
{
image: "/hacks/fooddecisive.png",
title: "Food Decisive",
description:
"Ever felt the indecisiveness of choosing what to eat? Don't fret! Decide your next bite with Food Decisive",
link: "https://fooddecisive.sirblob.co/",
repo: "https://github.com/SirBlobby/VTHacks-12",
devpost: "https://devpost.com/software/food-decisive",
hackathonName: "VTHacks 12",
university: "Virginia Tech",
location: "Blacksburg, VA",
year: "2024",
tags: ["AI", "Llama3.1", "Svelte", "Node.js"],
featured: false,
liveWarning: true
},
{
image: "/hacks/carbin.png",
title: "Carbin",
description:
"Encourage student participation in responsible waste management with smart bins that guide proper disposal.",
repo: "https://github.com/SirBlobby/patriotHacks2024",
devpost: "https://devpost.com/software/carboniferous-akc4mj",
hackathonName: "PatriotHacks 2024",
university: "George Mason University",
location: "Fairfax, VA",
year: "2024",
tags: ["AI", "Azure", "CloudConvert", "Python", "React", "TypeScript", "API"],
featured: true,
awards: [
{ track: "Save the World", place: "2nd Place" },
{ track: "Microsoft X Cloudforce", place: "2nd Place" }
]
},
{
image: "/hacks/patsafe.png",
title: "PatSafe",
description:
"Bridging the gap between doctors and patients for seamless post-discharge care",
link: "https://hoya-hax2025.vercel.app/",
repo: "https://github.com/SirBlobby/HoyaHax2025",
devpost: "https://devpost.com/software/patsafe",
hackathonName: "HoyaHax 2025",
university: "Georgetown University",
location: "Washington, D.C.",
year: "2025",
tags: ["Javascript", "Next.js", "React", "TypeScript", "LangChain", "OpenAI"],
},
{
title: "Fauxcall",
description:
"This product is perfect for situations where you are walking at night and you feel unsafe from someone. Fauxcall lets users create a convincing fake phone call to deter potential attackers and provide a quick escape mechanism.",
link: "",
repo: "https://github.com/SirBlobby/HooHacks-12",
devpost: "https://devpost.com/software/fauxcall",
hackathonName: "HooHacks 2025",
university: "University of Virginia",
location: "Charlottesville, VA",
year: "2025",
tags: ["mongodb", "next.js", "python", "react", "sesame.com", "skeleton", "twilio"],
featured: false
},
{
image: "/hacks/drinkhappy.png",
title: "Drink Happy",
description:
"drinkhappy.tech is a gamified hydration wellness app that helps users track drinks, earn points for healthy choices, and compete with friends. It's powered by Gemini AI for smart drink recognition.",
link: "https://drinkhappy.tech",
repo: "https://github.com/SirBlobby/Bitcamp-2025",
devpost: "https://devpost.com/software/drink-happy",
hackathonName: "Bitcamp",
university: "University of Maryland",
location: "College Park, MD",
year: "2025",
tags: ["api", "auth0", "gemini", "github", "javascript", "mongodb", "nextjs", "react", "tailwind", "vercel"],
featured: false
},
{
image: "/hacks/roadcast.png",
title: "Roadcast",
description:
"Roadcast provides drivers with crash data and weather insights to choose safer routes home. The project combines historical crash data, weather feeds, and spatial analysis to surface hazardous areas and route-level safety recommendations.",
link: "https://roadcast.sirblob.co/",
repo: "https://github.com/SirBlobby/roadcast",
devpost: "https://devpost.com/software/roadcast",
hackathonName: "VTHacks 13",
university: "Virginia Tech",
location: "Blacksburg, VA",
year: "2025",
tags: ["react", "node.js", "python", "mongodb", "geospatial", "mapbox"],
featured: true,
liveWarning: true
}
];
// Sort cards to show featured first
$: sortedCards = [...cards].sort((a, b) => {
if (a.featured && !b.featured) return -1;
if (!a.featured && b.featured) return 1;
return 0;
});
</script>
<section class="container mx-auto py-12 px-4">
<div class="grid p-4 w-full h-fit">
<main>
<div
class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8 items-stretch"
>
{#each sortedCards as c}
<div class="h-full">
<HackCard
title={c.title}
description={c.description}
image={c.image}
link={c.link}
repo={c.repo}
devpost={c.devpost}
hackathonName={c.hackathonName}
university={c.university}
location={c.location}
year={c.year}
tags={c.tags}
featured={c.featured}
awards={c.awards}
liveWarning={c.liveWarning}
/>
</div>
{/each}
</div>
</main>
</div>
</section>
<style lang="postcss">
/* page-level tweaks */
.container {
max-width: 1200px;
}
</style>
<script lang="ts">
import TerminalTUI from '$lib/components/TerminalTUI.svelte';
import type { TerminalLine } from '$lib/components/tui/types';
import { user, sortedCards } from '$lib/config';
import { getPageSpeedMultiplier } from '$lib';
const speed = getPageSpeedMultiplier('hackathons');
// Count stats
const totalHackathons = sortedCards.length;
const totalAwards = sortedCards.filter(c => c.awards && c.awards.length > 0).length;
const featuredCount = sortedCards.filter(c => c.featured).length;
// Build the terminal lines with card grid
const lines: TerminalLine[] = [
{ type: 'command', content: 'ls ~/hackathons --grid' },
{ type: 'blank', content: '' },
{ type: 'header', content: `Hackathon Journey` },
{ type: 'output', content: `(&muted)Total:(&) (&primary)${totalHackathons}(&) (&muted)| Awards:(&) (&yellow)${totalAwards}(&) (&muted)| Featured:(&) (&accent)${featuredCount}(&)` },
{ type: 'blank', content: '' },
// { type: 'divider', content: 'PROJECTS' },
{ type: 'blank', content: '' },
{ type: 'cardgrid', content: '', cards: sortedCards },
{ type: 'blank', content: '' },
{ type: 'success', content: `(&success)Ready for the next hackathon! 🚀(&)` },
];
</script>
<svelte:head>
<title>Hackathons | {user.name}</title>
<meta name="description" content="Hackathon projects and achievements" />
</svelte:head>
<div class="hackathons-container">
<TerminalTUI {lines} title="~/hackathons" interactive={true} {speed} />
</div>
<style>
.hackathons-container {
padding: 2rem 1rem;
min-height: calc(100vh - 60px);
}
</style>