Add Puter project and optimize portfolio media
|
Before Width: | Height: | Size: 1.6 MiB |
|
After Width: | Height: | Size: 187 KiB |
|
Before Width: | Height: | Size: 4.1 MiB |
|
After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 2.0 MiB |
|
After Width: | Height: | Size: 161 KiB |
|
Before Width: | Height: | Size: 292 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 2.2 MiB |
|
After Width: | Height: | Size: 262 KiB |
|
Before Width: | Height: | Size: 1.5 MiB |
|
After Width: | Height: | Size: 226 KiB |
|
Before Width: | Height: | Size: 418 KiB |
|
After Width: | Height: | Size: 131 KiB |
|
Before Width: | Height: | Size: 532 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 465 KiB |
|
After Width: | Height: | Size: 120 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 2.6 MiB |
|
After Width: | Height: | Size: 244 KiB |
|
Before Width: | Height: | Size: 4.6 MiB |
|
After Width: | Height: | Size: 358 KiB |
|
Before Width: | Height: | Size: 5.1 MiB |
|
After Width: | Height: | Size: 558 KiB |
|
Before Width: | Height: | Size: 4.5 MiB |
|
After Width: | Height: | Size: 378 KiB |
|
Before Width: | Height: | Size: 3.4 MiB |
|
After Width: | Height: | Size: 245 KiB |
|
Before Width: | Height: | Size: 27 MiB |
|
After Width: | Height: | Size: 675 KiB |
|
Before Width: | Height: | Size: 42 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
Before Width: | Height: | Size: 4.8 MiB |
|
After Width: | Height: | Size: 592 KiB |
|
Before Width: | Height: | Size: 15 MiB |
|
After Width: | Height: | Size: 490 KiB |
|
Before Width: | Height: | Size: 11 MiB |
|
After Width: | Height: | Size: 448 KiB |
|
Before Width: | Height: | Size: 29 MiB |
|
After Width: | Height: | Size: 398 KiB |
|
Before Width: | Height: | Size: 30 MiB |
|
After Width: | Height: | Size: 604 KiB |
|
Before Width: | Height: | Size: 7.1 MiB |
|
After Width: | Height: | Size: 239 KiB |
|
Before Width: | Height: | Size: 3.2 MiB |
|
After Width: | Height: | Size: 504 KiB |
|
Before Width: | Height: | Size: 3.9 MiB |
|
After Width: | Height: | Size: 179 KiB |
|
Before Width: | Height: | Size: 20 MiB |
|
After Width: | Height: | Size: 231 KiB |
|
Before Width: | Height: | Size: 26 MiB |
|
After Width: | Height: | Size: 296 KiB |
|
Before Width: | Height: | Size: 25 MiB |
|
After Width: | Height: | Size: 503 KiB |
@@ -16,7 +16,7 @@ export function Sidebar() {
|
|||||||
<div className="w-full space-y-3 px-4 pb-2 pt-4 sm:px-6 lg:hidden">
|
<div className="w-full space-y-3 px-4 pb-2 pt-4 sm:px-6 lg:hidden">
|
||||||
<div className="flex items-center gap-4">
|
<div className="flex items-center gap-4">
|
||||||
<ImageWithSkeleton
|
<ImageWithSkeleton
|
||||||
src="/headshot.png"
|
src="/headshot.webp"
|
||||||
alt={`${name[0]?.first} ${name[0]?.last}`}
|
alt={`${name[0]?.first} ${name[0]?.last}`}
|
||||||
width={240}
|
width={240}
|
||||||
height={240}
|
height={240}
|
||||||
@@ -76,7 +76,7 @@ export function Sidebar() {
|
|||||||
<div className="flex-shrink-0 border-b border-border/50 px-8 py-8">
|
<div className="flex-shrink-0 border-b border-border/50 px-8 py-8">
|
||||||
<div className="flex flex-col items-center space-y-4">
|
<div className="flex flex-col items-center space-y-4">
|
||||||
<ImageWithSkeleton
|
<ImageWithSkeleton
|
||||||
src="/headshot.png"
|
src="/headshot.webp"
|
||||||
alt={`${name[0]?.first} ${name[0]?.last}`}
|
alt={`${name[0]?.first} ${name[0]?.last}`}
|
||||||
width={400}
|
width={400}
|
||||||
height={400}
|
height={400}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ export const metadata = {
|
|||||||
summary:
|
summary:
|
||||||
"E-Portfolio and reflection for the Nand2Tetris course, covering the journey from NAND gates to a high-level compiler.",
|
"E-Portfolio and reflection for the Nand2Tetris course, covering the journey from NAND gates to a high-level compiler.",
|
||||||
tags: ["Simulation", "Compilers", "Python", "Assembly", "VM", "OS"],
|
tags: ["Simulation", "Compilers", "Python", "Assembly", "VM", "OS"],
|
||||||
image: "/images/nand2tetris.png",
|
image: "/images/nand2tetris.webp",
|
||||||
};
|
};
|
||||||
|
|
||||||
## Assignment Prompt
|
## Assignment Prompt
|
||||||
|
|||||||
@@ -462,6 +462,25 @@ export const relevantCoursework = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
export const projects: Project[] = [
|
export const projects: Project[] = [
|
||||||
|
{
|
||||||
|
title: "Puter",
|
||||||
|
description:
|
||||||
|
"A native macOS system monitor inspired by Windows 11 Task Manager, with live process controls and detailed performance diagnostics.",
|
||||||
|
longDescription:
|
||||||
|
"Built in SwiftUI, Puter combines process management with live CPU, memory, disk, network, GPU, battery, thermal, and fan telemetry. It includes sortable and resizable process tables, application grouping, startup and service management, per-app history, dependency inspection, diagnostic sampling, and native JSON exports—all in a macOS interface with persistent preferences, light and dark modes, and accessibility support.",
|
||||||
|
tags: [
|
||||||
|
"Swift",
|
||||||
|
"SwiftUI",
|
||||||
|
"macOS",
|
||||||
|
"Systems Programming",
|
||||||
|
"Hardware Telemetry",
|
||||||
|
],
|
||||||
|
gitLink: "https://git.soconnor.dev/soconnor/Puter",
|
||||||
|
image: "/images/puter.jpg",
|
||||||
|
imageAlt:
|
||||||
|
"Puter's macOS performance dashboard showing CPU, memory, and disk utilization",
|
||||||
|
featured: true,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: "LLM Fine-tuning & On-Device Inference Pipeline",
|
title: "LLM Fine-tuning & On-Device Inference Pipeline",
|
||||||
description:
|
description:
|
||||||
@@ -479,7 +498,7 @@ export const projects: Project[] = [
|
|||||||
"The Halo is a mandatory titanium arch on all F1 cars. It saves lives but cuts through the most interesting part of onboard footage. This project removes it cleanly from visor-cam video using two stages. Stage one: classical CV mask detection — Sobel-Y gradient detection for the arch edge, a robust probe-and-fit keel detector with outlier rejection and temporal jump guards, and explicit geometry construction to avoid over-masking. Stage two: two inpainting methods compared side by side — LaMa (Fast Fourier Convolution network, per-frame spatial inpainting) and RAFT optical flow with backward warp and distance-transform blending for temporal coherence across 300 frames at 60fps.",
|
"The Halo is a mandatory titanium arch on all F1 cars. It saves lives but cuts through the most interesting part of onboard footage. This project removes it cleanly from visor-cam video using two stages. Stage one: classical CV mask detection — Sobel-Y gradient detection for the arch edge, a robust probe-and-fit keel detector with outlier rejection and temporal jump guards, and explicit geometry construction to avoid over-masking. Stage two: two inpainting methods compared side by side — LaMa (Fast Fourier Convolution network, per-frame spatial inpainting) and RAFT optical flow with backward warp and distance-transform blending for temporal coherence across 300 frames at 60fps.",
|
||||||
tags: ["Python", "OpenCV", "Computer Vision", "LaMa", "RAFT", "Jupyter", "Inpainting"],
|
tags: ["Python", "OpenCV", "Computer Vision", "LaMa", "RAFT", "Jupyter", "Inpainting"],
|
||||||
gitLink: "https://github.com/soconnor0919/f1-halo-removal",
|
gitLink: "https://github.com/soconnor0919/f1-halo-removal",
|
||||||
image: "/images/f1-halo-removal.png",
|
image: "/images/f1-halo-removal.webp",
|
||||||
imageAlt: "Side-by-side comparison of original F1 footage, LaMa spatial inpainting, and RAFT temporal inpainting across three frames",
|
imageAlt: "Side-by-side comparison of original F1 footage, LaMa spatial inpainting, and RAFT temporal inpainting across three frames",
|
||||||
slidesUrl: "/publications/f1-halo-removal.pdf",
|
slidesUrl: "/publications/f1-halo-removal.pdf",
|
||||||
featured: true,
|
featured: true,
|
||||||
@@ -493,7 +512,7 @@ export const projects: Project[] = [
|
|||||||
tags: ["Simulation", "Compilers", "Python", "Assembly", "VM", "OS"],
|
tags: ["Simulation", "Compilers", "Python", "Assembly", "VM", "OS"],
|
||||||
link: "/blog/eceg431",
|
link: "/blog/eceg431",
|
||||||
gitLink: "https://github.com/soconnor0919/eceg431",
|
gitLink: "https://github.com/soconnor0919/eceg431",
|
||||||
image: "/images/nand2tetris.png",
|
image: "/images/nand2tetris.webp",
|
||||||
imageAlt: "Diagram of the Hack Computer architecture",
|
imageAlt: "Diagram of the Hack Computer architecture",
|
||||||
featured: true,
|
featured: true,
|
||||||
},
|
},
|
||||||
@@ -506,7 +525,7 @@ export const projects: Project[] = [
|
|||||||
tags: ["Coffee", "Lewisburg, PA", "Bucknell"],
|
tags: ["Coffee", "Lewisburg, PA", "Bucknell"],
|
||||||
websiteLink: "https://lewisburgcoffee.soconnor.dev",
|
websiteLink: "https://lewisburgcoffee.soconnor.dev",
|
||||||
gitLink: "https://github.com/soconnor0919/lewisburg-coffee",
|
gitLink: "https://github.com/soconnor0919/lewisburg-coffee",
|
||||||
image: "/images/lewisburg-coffee.png",
|
image: "/images/lewisburg-coffee.webp",
|
||||||
imageAlt: "Screenshot of the Lewisburg, PA Coffee Map website",
|
imageAlt: "Screenshot of the Lewisburg, PA Coffee Map website",
|
||||||
featured: true,
|
featured: true,
|
||||||
},
|
},
|
||||||
@@ -518,7 +537,7 @@ export const projects: Project[] = [
|
|||||||
tags: ["PDF", "Markdown", "OCR"],
|
tags: ["PDF", "Markdown", "OCR"],
|
||||||
websiteLink: "https://pdf2md.coolify.soconnor.dev",
|
websiteLink: "https://pdf2md.coolify.soconnor.dev",
|
||||||
gitLink: "https://github.com/soconnor0919/pdf2md",
|
gitLink: "https://github.com/soconnor0919/pdf2md",
|
||||||
image: "/images/pdf2md.png",
|
image: "/images/pdf2md.webp",
|
||||||
imageAlt: "Screenshot of the PDF2MD website",
|
imageAlt: "Screenshot of the PDF2MD website",
|
||||||
featured: true,
|
featured: true,
|
||||||
},
|
},
|
||||||
@@ -540,7 +559,7 @@ export const projects: Project[] = [
|
|||||||
"Docker",
|
"Docker",
|
||||||
],
|
],
|
||||||
gitLink: "https://github.com/soconnor0919/hristudio",
|
gitLink: "https://github.com/soconnor0919/hristudio",
|
||||||
image: "/hristudio_laptop.png",
|
image: "/hristudio_laptop.webp",
|
||||||
imageAlt:
|
imageAlt:
|
||||||
"Screenshot of HRIStudio application showing the robot control dashboard on a laptop",
|
"Screenshot of HRIStudio application showing the robot control dashboard on a laptop",
|
||||||
featured: true,
|
featured: true,
|
||||||
@@ -560,7 +579,7 @@ export const projects: Project[] = [
|
|||||||
"I2C/SPI",
|
"I2C/SPI",
|
||||||
],
|
],
|
||||||
gitLink: "https://github.com/soconnor0919/national_fa24",
|
gitLink: "https://github.com/soconnor0919/national_fa24",
|
||||||
image: "/car.png",
|
image: "/car.webp",
|
||||||
imageAlt:
|
imageAlt:
|
||||||
"Photo of the Chem-E-Car with custom control system hardware visible, showing the microcontroller and sensor connections",
|
"Photo of the Chem-E-Car with custom control system hardware visible, showing the microcontroller and sensor connections",
|
||||||
featured: true,
|
featured: true,
|
||||||
@@ -601,7 +620,7 @@ export const projects: Project[] = [
|
|||||||
"Docker",
|
"Docker",
|
||||||
],
|
],
|
||||||
websiteLink: "https://riverheadraceway.com",
|
websiteLink: "https://riverheadraceway.com",
|
||||||
image: "/images/racehub.png",
|
image: "/images/racehub.webp",
|
||||||
imageAlt: "Screenshot of the RaceHub Next platform",
|
imageAlt: "Screenshot of the RaceHub Next platform",
|
||||||
featured: true,
|
featured: true,
|
||||||
},
|
},
|
||||||
@@ -623,7 +642,7 @@ export const projects: Project[] = [
|
|||||||
],
|
],
|
||||||
gitLink: "https://github.com/soconnor0919/beenvoice",
|
gitLink: "https://github.com/soconnor0919/beenvoice",
|
||||||
websiteLink: "https://beenvoice.soconnor.dev",
|
websiteLink: "https://beenvoice.soconnor.dev",
|
||||||
image: "/images/beenvoice.png",
|
image: "/images/beenvoice.webp",
|
||||||
imageAlt: "Screenshot of BeenVoice",
|
imageAlt: "Screenshot of BeenVoice",
|
||||||
featured: true,
|
featured: true,
|
||||||
},
|
},
|
||||||
@@ -636,7 +655,7 @@ export const projects: Project[] = [
|
|||||||
tags: ["Next.js", "TypeScript", "TailwindCSS", "React"],
|
tags: ["Next.js", "TypeScript", "TailwindCSS", "React"],
|
||||||
gitLink: "https://github.com/soconnor0919/personal-website",
|
gitLink: "https://github.com/soconnor0919/personal-website",
|
||||||
websiteLink: "https://soconnor.dev",
|
websiteLink: "https://soconnor.dev",
|
||||||
image: "/images/personal-website.png",
|
image: "/images/personal-website.webp",
|
||||||
imageAlt: "Screenshot of Personal Website",
|
imageAlt: "Screenshot of Personal Website",
|
||||||
featured: true,
|
featured: true,
|
||||||
},
|
},
|
||||||
@@ -671,9 +690,9 @@ export const travel = [
|
|||||||
description:
|
description:
|
||||||
"With the funding of Bucknell's chemical engineering department, and an amazing team, I was able to attend the 2024 AIChE Annual Student Conference and compete in the national Chem-E-Car competition.",
|
"With the funding of Bucknell's chemical engineering department, and an amazing team, I was able to attend the 2024 AIChE Annual Student Conference and compete in the national Chem-E-Car competition.",
|
||||||
images: [
|
images: [
|
||||||
"/trips/asc2024/IMG_2641.png",
|
"/trips/asc2024/IMG_2641.webp",
|
||||||
"/trips/asc2024/IMG_2631.png",
|
"/trips/asc2024/IMG_2631.webp",
|
||||||
"/trips/asc2024/IMG_7987.png",
|
"/trips/asc2024/IMG_7987.webp",
|
||||||
],
|
],
|
||||||
alts: [
|
alts: [
|
||||||
"A photo of the Chem-E-Car team holding their trophies, dressed in their lab coats.",
|
"A photo of the Chem-E-Car team holding their trophies, dressed in their lab coats.",
|
||||||
@@ -687,9 +706,9 @@ export const travel = [
|
|||||||
description:
|
description:
|
||||||
"I got to attend the IEEE RO-MAN 2024 conference in Pasadena, California. It was a great opportunity to present my work on my project HRIStudio, and to network with other researchers and industry professionals.",
|
"I got to attend the IEEE RO-MAN 2024 conference in Pasadena, California. It was a great opportunity to present my work on my project HRIStudio, and to network with other researchers and industry professionals.",
|
||||||
images: [
|
images: [
|
||||||
"/trips/roman2024/IMG_3951.png",
|
"/trips/roman2024/IMG_3951.webp",
|
||||||
"/trips/roman2024/IMG_3978.png",
|
"/trips/roman2024/IMG_3978.webp",
|
||||||
"/trips/roman2024/IMG_3946.png",
|
"/trips/roman2024/IMG_3946.webp",
|
||||||
],
|
],
|
||||||
alts: [
|
alts: [
|
||||||
"A photo of Sean presenting his poster at RO-MAN 2024.",
|
"A photo of Sean presenting his poster at RO-MAN 2024.",
|
||||||
@@ -704,8 +723,8 @@ export const travel = [
|
|||||||
"During the summer of 2024, I went on a study abroad program with about thirty of my peers. We explored Italy and France, following the footsteps of Leonardo da Vinci- evaluating the world through his lenses.",
|
"During the summer of 2024, I went on a study abroad program with about thirty of my peers. We explored Italy and France, following the footsteps of Leonardo da Vinci- evaluating the world through his lenses.",
|
||||||
images: [
|
images: [
|
||||||
"/trips/engr290/insta290.jpg",
|
"/trips/engr290/insta290.jpg",
|
||||||
"/trips/engr290/P1013747.png",
|
"/trips/engr290/P1013747.webp",
|
||||||
"/trips/engr290/_1024461.png",
|
"/trips/engr290/_1024461.webp",
|
||||||
],
|
],
|
||||||
alts: [
|
alts: [
|
||||||
"A photo of the group taken during the final dinner of the trip.",
|
"A photo of the group taken during the final dinner of the trip.",
|
||||||
@@ -719,9 +738,9 @@ export const travel = [
|
|||||||
description:
|
description:
|
||||||
"As a member of the executive board of the Bucknell Coffee Society, I was able to attend the Specialty Coffee Association's Specialty Coffee Expo in early 2024, traveling to Chicago, IL.",
|
"As a member of the executive board of the Bucknell Coffee Society, I was able to attend the Specialty Coffee Association's Specialty Coffee Expo in early 2024, traveling to Chicago, IL.",
|
||||||
images: [
|
images: [
|
||||||
"/trips/sca2024/group.jpeg",
|
"/trips/sca2024/group.webp",
|
||||||
"/trips/sca2024/bean.png",
|
"/trips/sca2024/bean.webp",
|
||||||
"/trips/sca2024/plane.png",
|
"/trips/sca2024/plane.webp",
|
||||||
],
|
],
|
||||||
alts: [
|
alts: [
|
||||||
"A photo of the group at the SCA Specialty Coffee Expo in Chicago.",
|
"A photo of the group at the SCA Specialty Coffee Expo in Chicago.",
|
||||||
@@ -735,9 +754,9 @@ export const travel = [
|
|||||||
description:
|
description:
|
||||||
"While studying abroad with Bucknell Engineering, we were lucky enough to be within a few hours of the Imola Grand Prix! A group of students went to see the race, and it was an amazing experience.",
|
"While studying abroad with Bucknell Engineering, we were lucky enough to be within a few hours of the Imola Grand Prix! A group of students went to see the race, and it was an amazing experience.",
|
||||||
images: [
|
images: [
|
||||||
"/trips/imola2024/IMG_2093.png",
|
"/trips/imola2024/IMG_2093.webp",
|
||||||
"/trips/imola2024/IMG_2050.png",
|
"/trips/imola2024/IMG_2050.webp",
|
||||||
"/trips/imola2024/IMG_2066.png",
|
"/trips/imola2024/IMG_2066.webp",
|
||||||
],
|
],
|
||||||
alts: [
|
alts: [
|
||||||
"A photo of the group at the Imola Circuit.",
|
"A photo of the group at the Imola Circuit.",
|
||||||
@@ -751,9 +770,9 @@ export const travel = [
|
|||||||
description:
|
description:
|
||||||
"As a semi-recent Formula One fan, I was very excited to have the opportunity to attend the British Grand Prix weekend in 2024. I was able to see every event- marking one of my favorite weekends, probably ever.",
|
"As a semi-recent Formula One fan, I was very excited to have the opportunity to attend the British Grand Prix weekend in 2024. I was able to see every event- marking one of my favorite weekends, probably ever.",
|
||||||
images: [
|
images: [
|
||||||
"/trips/silverstone/_1035852.png",
|
"/trips/silverstone/_1035852.webp",
|
||||||
"/trips/silverstone/P1025274.png",
|
"/trips/silverstone/P1025274.webp",
|
||||||
"/trips/silverstone/_1035764.png",
|
"/trips/silverstone/_1035764.webp",
|
||||||
],
|
],
|
||||||
alts: [
|
alts: [
|
||||||
"Sean and his professor sitting on a sign with the text #BritishGP.",
|
"Sean and his professor sitting on a sign with the text #BritishGP.",
|
||||||
|
|||||||