diff --git a/src/lib/config/content.ts b/src/lib/config/content.ts index c4919f8..1354307 100644 --- a/src/lib/config/content.ts +++ b/src/lib/config/content.ts @@ -13,6 +13,12 @@ export interface OpenSourceProject { export const openSourceProjects: OpenSourceProject[] = [ + { + name: 'TypstDrive', + description: 'TypstDrive is a self-hosted collaborative web editor for Typst.', + tech: ['Typst', 'Self-Hosted', 'Collaborative'], + github: 'https://github.com/SirBlobby/TypstDrive', + }, { name: 'Pkit', description: 'CLI toolkit and utilities (Rust project) — small developer-focused CLI.', @@ -115,6 +121,50 @@ export const models: Model3D[] = [ } ]; +// ============================================================================ +// EXPERIENCE +// ============================================================================ + +export interface Experience { + role: string; + organization: string; + employmentType?: string; + location?: string; + period: string; + description?: string; + tech?: string[]; + awards?: string[]; +} + + +export const experience: Experience[] = [ + { + role: 'Research Assistant', + organization: 'College of Engineering and Computing', + employmentType: 'Part-time', + period: 'May 2026 – Present · 3 mos' + }, + { + role: 'Software Engineering Lead', + organization: 'Raytheon Autonomous Vehicle Competition', + period: 'Dec 2025 – May 2026 · 6 mos', + description: + 'Developing a collaborative autonomous system utilizing Python and ROS2 to coordinate communication and control as a UAV scouts and lands on a moving UGV. Engineering Gazebo simulation environments to validate computer vision algorithms for ArUco marker target identification and obstacle avoidance.', + tech: ['Python', 'ROS2'], + awards: ['1st Place Overall Winner'] + }, + { + role: 'QA Automation Intern', + organization: 'Deltek', + employmentType: 'Internship', + location: 'Hybrid', + period: 'Jun 2025 – Aug 2025 · 3 mos', + description: + 'Designed and implemented a workflow integrating AI into the QA automation pipeline, enhancing test efficiency for the GovWin IQ team. Researched Model Context Protocol (MCP) servers to improve automation, developed and published a public Selenium MCP package to NPM, enabling browser automation interactions with Agentic AI.', + tech: ['Artificial Intelligence (AI)', 'TypeScript', 'Selenium'] + } +]; + // ============================================================================ // HACKATHONS // ============================================================================ @@ -137,6 +187,37 @@ export type Card = { }; export const cards: Card[] = [ + { + image: "/hacks/hushmap.png", + title: "HushMap", + description: + "Architected a real-time campus noise and occupancy monitoring system utilizing SvelteKit, FastAPI, and MongoDB to help students locate quiet study spaces.", + link: "https://hushmap.study/", + hackathonName: "Bitcamp 2026", + university: "University of Maryland", + location: "College Park, MD", + year: "2026", + tags: ["Svelte", "YOLOv8", "FastAPI", "MongoDB"], + featured: true, + awards: [ + { track: "Best UI/UX Hack", place: "Winner" } + ] + }, + { + image: "/hacks/learningbuddy.png", + title: "LearningBuddy", + description: + "Engineered an ESP32-S3 IoT study companion in C++ with secure Wi-Fi provisioning, utilizing WebSockets and Socket.IO to stream low-latency raw audio for live lecture capture.", + hackathonName: "HaxFax x PatriotHacks 2026", + university: "George Mason University", + location: "Fairfax, VA", + year: "2026", + tags: ["C++", "WebSocket", "ESP32-S3", "Socket.IO"], + featured: true, + awards: [ + { track: "Best use of MongoDB", place: "Winner" } + ] + }, { image: "/hacks/fooddecisive.png", title: "Food Decisive", diff --git a/src/lib/config/index.ts b/src/lib/config/index.ts index bdcfb6d..63d0fc1 100644 --- a/src/lib/config/index.ts +++ b/src/lib/config/index.ts @@ -25,9 +25,9 @@ export { animations } from './theme'; -// Content: projects, models, hackathon cards -export type { OpenSourceProject, PackageProject, Model3D, Card } from './content'; -export { openSourceProjects, packageProjects, models, cards, sortedCards } from './content'; +// Content: projects, models, experience, hackathon cards +export type { OpenSourceProject, PackageProject, Model3D, Experience, Card } from './content'; +export { openSourceProjects, packageProjects, models, experience, cards, sortedCards } from './content'; // Terminal settings, TUI styling, speed presets, model viewer, particles, shortcuts export type { SpeedPreset, TerminalSettings } from './terminal'; diff --git a/src/lib/config/user.ts b/src/lib/config/user.ts index e32725b..08ff4af 100644 --- a/src/lib/config/user.ts +++ b/src/lib/config/user.ts @@ -20,7 +20,6 @@ export const user = { // Social links - array of { name, icon (Iconify), link } socials: [ { name: 'GitHub', icon: 'mdi:github', link: 'https://github.com/SirBlobby' }, - { name: 'Gitea', icon: 'simple-icons:gitea', link: 'https://git.sirblob.co/SirBlob' }, { name: 'LinkedIn', icon: 'mdi:linkedin', link: 'https://www.linkedin.com/in/gmanjunatha/' }, { name: 'Devpost', icon: 'simple-icons:devpost', link: 'https://devpost.com/Sir_Blob_' }, { name: 'Discord', icon: 'ic:baseline-discord', link: 'https://discord.com/users/sir_blob_' } diff --git a/src/lib/pages/portfolio.ts b/src/lib/pages/portfolio.ts index 1de6ba3..11390bc 100644 --- a/src/lib/pages/portfolio.ts +++ b/src/lib/pages/portfolio.ts @@ -1,6 +1,20 @@ import type { TerminalLine } from '$lib/components/tui/types'; -import { user, skills, openSourceProjects } from '$lib/config'; +import { user, skills, openSourceProjects, experience } from '$lib/config'; + +const experienceElements: TerminalLine[] = []; + +experience.forEach(exp => { + experienceElements.push( + { type: 'header', content: `(&orange,bold)${exp.role}(&)` }, + { type: 'output', content: `(&primary)${exp.organization}(&)` + (exp.employmentType ? ` (&muted)· ${exp.employmentType}(&)` : '') }, + { type: 'output', content: `(&muted)${exp.period}(&)` + (exp.location ? ` (&muted)· ${exp.location}(&)` : '') }, + ...(exp.description ? [{ type: 'output' as const, content: `(&muted)${exp.description}(&)` }] : []), + ...(exp.tech ? [{ type: 'output' as const, content: ' ' + exp.tech.map(t => `(&blue)${t}(&)`).join(' (&muted)•(&) ') }] : []), + ...(exp.awards ? exp.awards.map(award => ({ type: 'success' as const, content: `(&success)${award}(&)` })) : []), + { type: 'blank', content: '' } + ); +}); const openSourceElements:TerminalLine[] = []; @@ -48,6 +62,7 @@ export const lines: TerminalLine[] = [ children: [ { type: 'output', content: `(&primary, bold)Links >(&)`, inline: true }, { type: 'link', href: "/portfolio#contact", content: `(&bg-blue,black)Contact(&)`, inline: true }, + { type: 'link', href: "/portfolio#experience", content: `(&bg-magenta,black)Experience(&)`, inline: true }, { type: 'link', href: "/portfolio#skills", content: `(&bg-orange,black)Skills(&)`, inline: true }, { type: 'link', href: "/portfolio#projects", content: `(&bg-green,black)Projects(&)`, inline: true }, ] @@ -63,6 +78,10 @@ export const lines: TerminalLine[] = [ inline: true })), + { type: 'divider', content: 'EXPERIENCE', id: 'experience' }, + + ...experienceElements, + { type: 'divider', content: 'SKILLS', id: 'skills' }, // Skills as TUI sections diff --git a/static/hacks/hushmap.png b/static/hacks/hushmap.png new file mode 100644 index 0000000..702554f Binary files /dev/null and b/static/hacks/hushmap.png differ diff --git a/static/hacks/learningbuddy.png b/static/hacks/learningbuddy.png new file mode 100644 index 0000000..26a4b62 Binary files /dev/null and b/static/hacks/learningbuddy.png differ