mirror of
https://github.com/SoPat712/my-portfolio.git
synced 2025-08-21 10:18:45 -04:00
Compare commits
2 Commits
de39c704be
...
4c17b19c8e
Author | SHA1 | Date | |
---|---|---|---|
![]() |
4c17b19c8e | ||
![]() |
c9e3fed588 |
@@ -84,6 +84,72 @@
|
|||||||
],
|
],
|
||||||
image: "/favicon.png",
|
image: "/favicon.png",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "VideoSpeed Extension (Fork)",
|
||||||
|
link: "https://github.com/SoPat712/videospeed",
|
||||||
|
description:
|
||||||
|
"A fork and continuation of igrigorik/videospeed that brings accelerated video playback controls to Firefox. Allows users to speed up, slow down, rewind, and configure custom shortcuts for any HTML5 video.",
|
||||||
|
techStack: ["JavaScript", "HTML5 Video API", "Browser Extensions"],
|
||||||
|
highlights: [
|
||||||
|
"Ported the original Chrome add-on to Firefox",
|
||||||
|
"Keyboard shortcuts for playback speed, rewind, and advance",
|
||||||
|
"Configurable preferred speed toggles",
|
||||||
|
"Extension settings allow full customization of controls",
|
||||||
|
"GPLv3 licensed and actively maintained",
|
||||||
|
],
|
||||||
|
image: "/VideoSpeed.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Maisie Heardle",
|
||||||
|
link: "https://github.com/SoPat712/maisie-heardle",
|
||||||
|
description:
|
||||||
|
"A daily Heardle-style music guessing game built with SvelteKit, Tailwind CSS, and the SoundCloud Widget API. Focused on Maisie Peters songs but fully customizable for any artist.",
|
||||||
|
techStack: [
|
||||||
|
"SvelteKit",
|
||||||
|
"Tailwind CSS",
|
||||||
|
"SoundCloud Widget API",
|
||||||
|
"Moment.js",
|
||||||
|
"Svelte Hero Icons",
|
||||||
|
],
|
||||||
|
highlights: [
|
||||||
|
"Daily rotating track using deterministic date-based selection",
|
||||||
|
"Progressive snippet unlocking with skips and wrong guesses",
|
||||||
|
"Dark mode with auto-detection and manual toggle",
|
||||||
|
"Deployed on Netlify with zero data collection",
|
||||||
|
"Built to be easily modifiable for any artist",
|
||||||
|
],
|
||||||
|
image: "/MaisieHeardle.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Fair Housing Map",
|
||||||
|
link: "https://github.com/SoPat712/fair-housing-map",
|
||||||
|
description:
|
||||||
|
"An interactive web map visualizing Raritan Township's 2025 FAIR Housing Plan overlay districts. Created to improve community understanding of affordable housing developments.",
|
||||||
|
techStack: ["HTML5", "CSS3", "JavaScript (ES6+)", "Leaflet.js"],
|
||||||
|
highlights: [
|
||||||
|
"Interactive Leaflet.js map of proposed housing zones",
|
||||||
|
"6 overlay districts with color-coded visualization",
|
||||||
|
"Detailed parcel popups with block, lot, and owner info",
|
||||||
|
"Dynamic legend with zoom-to-overlay functionality",
|
||||||
|
"Fully responsive single-file project for easy integration",
|
||||||
|
],
|
||||||
|
image: "/FairHousingMap.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "BeReal Export Manager",
|
||||||
|
link: "https://github.com/SoPat712/BeReal-Export-Manager",
|
||||||
|
description:
|
||||||
|
"A Python utility that processes BeReal data exports, adding metadata and properly tagging exported photos, videos, and realmojis with timestamps and location info.",
|
||||||
|
techStack: ["Python", "ExifTool", "JSON"],
|
||||||
|
highlights: [
|
||||||
|
"Parses BeReal export data including photos, BTS videos, and realmojis",
|
||||||
|
"Adds metadata such as original capture date and location",
|
||||||
|
"Supports custom output paths and timespan/year filters",
|
||||||
|
"Fixes inconsistent BeReal timestamps using default timezone settings",
|
||||||
|
"Flexible command-line options with ExifTool integration",
|
||||||
|
],
|
||||||
|
image: "/BeRealExportManager.png",
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
// Education Info
|
// Education Info
|
||||||
@@ -93,11 +159,16 @@
|
|||||||
graduation: "Expected May 2026",
|
graduation: "Expected May 2026",
|
||||||
gpa: "3.7/4.0",
|
gpa: "3.7/4.0",
|
||||||
courses: [
|
courses: [
|
||||||
{ code: "01:198:419", name: "Computer Security", status: "In Progress" },
|
{
|
||||||
|
code: "01:198:428",
|
||||||
|
name: "Intro to Computer Graphics",
|
||||||
|
status: "In Progress",
|
||||||
|
},
|
||||||
|
{ code: "01:198:419", name: "Computer Security", status: "Complete" },
|
||||||
{
|
{
|
||||||
code: "01:198:344",
|
code: "01:198:344",
|
||||||
name: "Design & Analysis of Algorithms",
|
name: "Design & Analysis of Algorithms",
|
||||||
status: "In Progress",
|
status: "Completed",
|
||||||
},
|
},
|
||||||
{ code: "01:198:214", name: "Systems Programming", status: "Completed" },
|
{ code: "01:198:214", name: "Systems Programming", status: "Completed" },
|
||||||
{ code: "01:198:352", name: "Internet Technology", status: "Completed" },
|
{ code: "01:198:352", name: "Internet Technology", status: "Completed" },
|
||||||
@@ -510,20 +581,20 @@
|
|||||||
<!-- Projects Section -->
|
<!-- Projects Section -->
|
||||||
<section id="projects" class="py-16 border-b border-gray-800 scroll-mt-16">
|
<section id="projects" class="py-16 border-b border-gray-800 scroll-mt-16">
|
||||||
<h2 class="text-3xl font-bold mb-8 text-green-400">❯ Projects</h2>
|
<h2 class="text-3xl font-bold mb-8 text-green-400">❯ Projects</h2>
|
||||||
<div class="space-y-16">
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
|
||||||
{#each projects as project}
|
{#each projects as project}
|
||||||
<div
|
<div
|
||||||
class="bg-gray-900 rounded-lg overflow-hidden border border-gray-700 hover:border-green-500 transition duration-300"
|
class="project-card bg-gray-900 rounded-lg overflow-hidden border border-gray-700 transition-all duration-300"
|
||||||
>
|
>
|
||||||
<div class="flex flex-col md:flex-row md:h-[410px]">
|
<div class="h-full flex flex-col">
|
||||||
<div class="md:w-2/5 h-64 md:h-full">
|
<div class="h-48">
|
||||||
<img
|
<img
|
||||||
src={project.image}
|
src={project.image}
|
||||||
alt={project.name}
|
alt={project.name}
|
||||||
class="w-full h-full object-cover"
|
class="w-full h-full object-cover"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="md:w-3/5 p-6 flex flex-col justify-center">
|
<div class="p-6 flex flex-col flex-grow">
|
||||||
<h3 class="text-2xl font-semibold mb-2">
|
<h3 class="text-2xl font-semibold mb-2">
|
||||||
<a
|
<a
|
||||||
href={project.link}
|
href={project.link}
|
||||||
@@ -533,7 +604,9 @@
|
|||||||
{project.name}
|
{project.name}
|
||||||
</a>
|
</a>
|
||||||
</h3>
|
</h3>
|
||||||
<p class="text-gray-400 mb-4">{project.description}</p>
|
<p class="text-gray-400 mb-4 flex-grow">
|
||||||
|
{project.description}
|
||||||
|
</p>
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<h4 class="text-green-400 mb-2">Tech Stack:</h4>
|
<h4 class="text-green-400 mb-2">Tech Stack:</h4>
|
||||||
<div class="flex flex-wrap gap-2">
|
<div class="flex flex-wrap gap-2">
|
||||||
@@ -873,4 +946,12 @@
|
|||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.project-card:hover {
|
||||||
|
transform: translateY(-10px) scale(1.03);
|
||||||
|
box-shadow:
|
||||||
|
0 0 15px rgba(52, 211, 153, 0.3),
|
||||||
|
0 0 30px rgba(52, 211, 153, 0.2);
|
||||||
|
border-color: rgba(52, 211, 153, 0.5);
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
BIN
static/BeRealExportManager.png
Normal file
BIN
static/BeRealExportManager.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
BIN
static/FairHousingMap.png
Normal file
BIN
static/FairHousingMap.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 MiB |
BIN
static/MaisieHeardle.png
Normal file
BIN
static/MaisieHeardle.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 66 KiB |
BIN
static/VideoSpeed.png
Normal file
BIN
static/VideoSpeed.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
Reference in New Issue
Block a user