From c820672803698cebf553b33d28822a1402c58bcc Mon Sep 17 00:00:00 2001 From: SirBlobby Date: Sat, 31 Oct 2026 21:17:42 -0400 Subject: [PATCH] Add organizations, research groups and repo stats to projects --- content/desktop.json | 1 + content/projects/hackathons.json | 10 +- content/projects/opensource.json | 6 +- content/projects/organizations.json | 28 +++ content/projects/packages.json | 6 +- content/projects/research.json | 35 +++- .../components/projects/ProjectEntry.svelte | 133 +++++++++++++- src/lib/components/projects/ProjectNav.svelte | 2 +- .../components/research/ResearchGroup.svelte | 163 ++++++++++++++++++ src/lib/content/index.ts | 21 ++- src/lib/content/types.ts | 30 +++- src/lib/github/types.ts | 4 + src/lib/server/github.ts | 41 +++++ src/lib/server/npm.ts | 62 +++++++ src/lib/site/pages.ts | 4 +- src/lib/terminal/commands/info.ts | 2 +- src/routes/projects/+page.svelte | 5 +- .../projects/[category]/+page.server.ts | 26 +++ src/routes/projects/[category]/+page.svelte | 26 ++- static/hacks/fauxcall.png | Bin 0 -> 61144 bytes static/hacks/grosharey.png | Bin 0 -> 19215 bytes static/organizations/arc-1.jpg | Bin 0 -> 308822 bytes static/organizations/arc-2.jpg | Bin 0 -> 142967 bytes static/organizations/arc-3.jpg | Bin 0 -> 190656 bytes static/projects/typstdrive-editor.png | Bin 0 -> 731005 bytes 25 files changed, 573 insertions(+), 32 deletions(-) create mode 100644 content/projects/organizations.json create mode 100644 src/lib/components/research/ResearchGroup.svelte create mode 100644 src/lib/github/types.ts create mode 100644 src/lib/server/github.ts create mode 100644 src/lib/server/npm.ts create mode 100644 src/routes/projects/[category]/+page.server.ts create mode 100644 static/hacks/fauxcall.png create mode 100644 static/hacks/grosharey.png create mode 100644 static/organizations/arc-1.jpg create mode 100644 static/organizations/arc-2.jpg create mode 100644 static/organizations/arc-3.jpg create mode 100644 static/projects/typstdrive-editor.png diff --git a/content/desktop.json b/content/desktop.json index 20e8276..89e919b 100644 --- a/content/desktop.json +++ b/content/desktop.json @@ -16,6 +16,7 @@ { "label": "portfolio", "icon": "ph:briefcase-duotone", "open": { "page": "/portfolio" } }, { "label": "projects", "icon": "ph:folder-open-duotone", "open": { "page": "/projects" } }, { "label": "hackathons", "icon": "ph:trophy-duotone", "open": { "page": "/projects/hackathons" } }, + { "label": "research", "icon": "ph:microscope-duotone", "open": { "page": "/projects/research" } }, { "label": "blog", "icon": "ph:notebook-duotone", "open": { "page": "/blog" } }, { "label": "links", "icon": "ph:qr-code-duotone", "open": { "page": "/links" } } ] diff --git a/content/projects/hackathons.json b/content/projects/hackathons.json index 142acb2..7c21a38 100644 --- a/content/projects/hackathons.json +++ b/content/projects/hackathons.json @@ -37,10 +37,17 @@ "description": "A sustainability platform that helps users detect and report greenwashing, misleading environmental claims made by companies and products.", "image": "/img/hoya26.png", "tags": ["Svelte", "TypeScript", "Python", "Flask", "Tailwind", "Sustainability"], - "featured": true, "event": { "name": "HoyaHax 2026", "university": "Georgetown University", "location": "Washington, D.C.", "year": "2026" }, "links": { "demo": "https://ethix.sirblob.co/", "code": "https://github.com/SirBlobby/Hoya26", "devpost": "https://devpost.com/software/ethix" } }, + { + "name": "groSharey", + "description": "Split grocery costs with your roommates: scan a receipt, let AI assign each item to whoever asked for it, and everyone sees exactly what they owe, with Venmo and PayPal payments and email reminders.", + "image": "/hacks/grosharey.png", + "tags": ["React", "TypeScript", "Expo", "Flask", "Python", "MongoDB", "Gemini", "ElevenLabs"], + "event": { "name": "Technica 2026", "university": "University of Maryland", "location": "College Park, MD", "year": "2026" }, + "links": { "demo": "https://grosharey-frontend.vercel.app/", "code": "https://github.com/SirBlobby/GroSharey", "devpost": "https://devpost.com/software/cool_project" } + }, { "name": "Food Decisive", "description": "Ever felt the indecisiveness of choosing what to eat? Don't fret! Decide your next bite with Food Decisive.", @@ -61,6 +68,7 @@ { "name": "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.", + "image": "/hacks/fauxcall.png", "tags": ["MongoDB", "Next.js", "Python", "React", "Sesame", "Skeleton", "Twilio"], "event": { "name": "HooHacks 2025", "university": "University of Virginia", "location": "Charlottesville, VA", "year": "2025" }, "links": { "code": "https://github.com/SirBlobby/HooHacks-12", "devpost": "https://devpost.com/software/fauxcall" } diff --git a/content/projects/opensource.json b/content/projects/opensource.json index adcdfec..955cd51 100644 --- a/content/projects/opensource.json +++ b/content/projects/opensource.json @@ -6,8 +6,8 @@ "period": "2026 – Present", "featured": true, "tags": ["Rust", "SvelteKit", "Yjs", "Typst", "Self-Hosted"], - "image": "/projects/typstdrive.png", - "links": { "code": "https://github.com/SirBlobby/TypstDrive" } + "image": "/projects/typstdrive-editor.png", + "links": { "code": "https://github.com/SirBlobby/TypstDrive", "docs": "https://sirblobby.github.io/TypstDrive/" } }, { "name": "Typst Desktop", @@ -23,14 +23,12 @@ "name": "Pkit", "description": "CLI toolkit and utilities (Rust project), a small developer-focused CLI.", "tags": ["Rust", "CLI"], - "image": "https://icons.veryicon.com/png/o/business/vscode-program-item-icon/rust-1.png", "links": { "code": "https://github.com/dead-projects-inc/pkit-cli", "demo": "https://pkit.sirblob.co/" } }, { "name": "OBookLLM", "description": "OBookLLM is a powerful, self-hosted, offline-capable alternative to NotebookLLM.", "tags": ["Python", "LLM", "AI", "NotebookLLM"], - "image": "https://upload.wikimedia.org/wikipedia/commons/c/c3/Python-logo-notext.svg", "links": { "code": "https://github.com/SirBlobby/OBookLLM" } } ] diff --git a/content/projects/organizations.json b/content/projects/organizations.json new file mode 100644 index 0000000..307ca24 --- /dev/null +++ b/content/projects/organizations.json @@ -0,0 +1,28 @@ +[ + { + "name": "ARC - Autonomous Robotics Club", + "organization": "Secretary of ARC · Team Lead of the RAVC Team", + "description": "George Mason University's Autonomous Robotics Club, where members pick a project and build autonomous robots as a team, no experience required. Won the 2026 Raytheon Autonomous Vehicle Competition with a drone that launches from and lands on a moving ground vehicle, navigating with visual-inertial odometry (VIO) instead of GPS.", + "tags": ["Robotics", "Autonomous Vehicles", "Drones", "VIO", "Student Organization"], + "featured": true, + "awards": [{ "track": "2026 Raytheon Autonomous Vehicle Competition", "place": "1st Place" }], + "gallery": ["/organizations/arc-1.jpg", "/organizations/arc-2.jpg", "/organizations/arc-3.jpg"], + "links": { + "website": "https://gmu.autonomousrobotics.club/", + "article": "https://www.gmu.edu/news/2026-05/george-mason-students-fly-first-place-no-gps-no-grade-and-almost-no-problems" + }, + "socials": [ + { "name": "GitHub", "icon": "mdi:github", "url": "https://github.com/ARC-GMU" }, + { "name": "Instagram", "icon": "mdi:instagram", "url": "https://www.instagram.com/arc.gmu/" }, + { "name": "LinkedIn", "icon": "mdi:linkedin", "url": "https://www.linkedin.com/company/arcgmu/" }, + { "name": "CREATE Lab", "icon": "ph:flask-duotone", "url": "https://create.autonomousrobotics.club/projects/autonomous-robotics-club" } + ] + }, + { + "name": "GMU Minecraft Club", + "organization": "President", + "description": "George Mason University's Minecraft club, bringing students together to play, build, and run community servers.", + "tags": ["Minecraft", "Community", "Gaming"], + "links": { "website": "https://gmmc.club/" } + } +] diff --git a/content/projects/packages.json b/content/projects/packages.json index 2faafd7..79d4ad2 100644 --- a/content/projects/packages.json +++ b/content/projects/packages.json @@ -4,18 +4,18 @@ "description": "Selenium automation utilities for MCP workflows, packaged for reuse.", "tags": ["TypeScript", "Selenium"], "featured": true, - "links": { "package": "https://www.npmjs.com/package/@sirblob/mcp-selenium" } + "links": { "package": "https://www.npmjs.com/package/@sirblob/mcp-selenium", "code": "https://github.com/SirBlobby/mcp-selenium" } }, { "name": "PokemonTCGAPI", "description": "Unofficial NPM package wrapper for the PokemonTCG API.", "tags": ["TypeScript", "Node.js"], - "links": { "package": "https://www.npmjs.com/package/@bosstop/pokemontcgapi" } + "links": { "package": "https://www.npmjs.com/package/@bosstop/pokemontcgapi", "code": "https://github.com/SirBlobby/PokemonTCGAPI" } }, { "name": "MCSS TS API", "description": "TypeScript API for MC Server Soft services, published to NPM.", "tags": ["TypeScript", "Node.js"], - "links": { "package": "https://www.npmjs.com/package/@mcserversoft/mcss-api" } + "links": { "package": "https://www.npmjs.com/package/@mcserversoft/mcss-api", "code": "https://github.com/mcserversoft-community/mcss-api-js" } } ] diff --git a/content/projects/research.json b/content/projects/research.json index d390c92..720989d 100644 --- a/content/projects/research.json +++ b/content/projects/research.json @@ -1,14 +1,31 @@ [ { - "name": "Astroswarm", - "organization": "CREATE Lab", + "name": "Autonomous Swarm Robotics Center", + "shortName": "ASRC", + "lab": { "name": "CREATE Lab", "url": "https://create.autonomousrobotics.club/" }, + "institution": "George Mason University", + "role": "Undergraduate Research Assistant", "period": "May 2026 – Present", - "description": "A visual coding game that turns swarm control into a playable simulator, generating trial data at scale on which algorithms best defend a target. Part of a research program on controlling robot fleets with one operator.", - "tags": ["Python", "ROS", "Swarm Robotics"], - "featured": true, - "links": { - "demo": "https://astroswarm.autonomousrobotics.club/", - "article": "https://cec.gmu.edu/news/2026-07/new-art-herding-robots" - } + "description": "Research group working on swarm robotics, with a focus on emergent behaviors and controlling robot fleets with one operator.", + "focus": ["Swarm Robotics", "Emergent Behavior", "Multi-Robot Control", "ROS"], + "links": [ + { "label": "CREATE Lab", "url": "https://create.autonomousrobotics.club/" }, + { "label": "GitHub", "url": "https://github.com/GMU-ASRC" }, + { "label": "My Profile", "url": "https://create.autonomousrobotics.club/team/gagan-manjunatha" } + ], + "projects": [ + { + "name": "Astroswarm", + "period": "May 2026 – Present", + "description": "A visual coding game that turns swarm control into a playable simulator, generating trial data at scale on which algorithms best defend a target.", + "tags": ["Python", "ROS", "Swarm Robotics"], + "featured": true, + "links": { + "demo": "https://astroswarm.autonomousrobotics.club/", + "code": "https://github.com/GMU-ASRC/astro-swarm", + "article": "https://cec.gmu.edu/news/2026-07/new-art-herding-robots" + } + } + ] } ] diff --git a/src/lib/components/projects/ProjectEntry.svelte b/src/lib/components/projects/ProjectEntry.svelte index 28b0f43..656eaed 100644 --- a/src/lib/components/projects/ProjectEntry.svelte +++ b/src/lib/components/projects/ProjectEntry.svelte @@ -1,16 +1,28 @@