Redesign portfolio as a personal studio with product spotlights

This commit is contained in:
2026-09-22 12:26:40 -04:00
parent 52a2177f43
commit b72108e103
27 changed files with 1716 additions and 979 deletions
+76 -24
View File
@@ -8,6 +8,7 @@ const Linkedin = LinkedInIcon;
// TypeScript interfaces
export interface Project {
title: string;
id?: string;
description: string;
longDescription?: string;
tags: string[];
@@ -69,7 +70,7 @@ export const name = [
];
export const description =
"Computer Science and Engineering graduate pursuing a Master's at Boston University. Research interests in human-robot interaction and developing technologies that make robots better collaborators with humans.";
"Sean O'Connor is a software engineer and founder of Hadlock Technologies. Explore full-stack products, native applications, and the infrastructure behind them.";
export const researchInterests =
"My research focuses on the intersection of human-robot interaction and research infrastructure. At Bucknell, I developed HRIStudio—a web-based platform that addresses the accessibility and reproducibility challenges endemic to Wizard-of-Oz HRI studies—resulting in two first-author publications at IEEE RO-MAN and a completed honors thesis. Continuing at Boston University, I'm interested in how principled software architecture and rigorous experimental methodology can accelerate our understanding of human-robot trust, collaboration, and the design of social robots that work reliably outside the lab.";
@@ -100,7 +101,15 @@ export const educationList = [
graduated: true,
gpa: "3.71",
engineeringGpa: "3.92",
deansListSemesters: ["Fall 2022", "Fall 2023", "Spring 2024", "Fall 2024", "Spring 2025", "Fall 2025", "Spring 2026"],
deansListSemesters: [
"Fall 2022",
"Fall 2023",
"Spring 2024",
"Fall 2024",
"Spring 2025",
"Fall 2025",
"Spring 2026",
],
},
];
@@ -176,15 +185,16 @@ export const articles = [
export const experiences: Experience[] = [
{
title: "Graduate Research Assistant",
organization: "Boston University",
location: "Boston, MA",
period: "Sep 2026 May 2027",
title: "Founder & Software Engineer",
organization: "Hadlock Technologies LLC",
location: "Long Island, NY / Boston, MA",
period: "Jul 2026 Present",
description: [
"Pursuing Master's degree in Computer Engineering at Boston University",
"Research interests in human-robot interaction and robotics",
"Founded Hadlock to design, build, and operate technology for businesses, from networking and hosting to customer-facing software.",
"Built Racetix, a multi-tenant ticketing platform with Stripe Connect payments, mobile wallet tickets, and QR admission scanning.",
"Develop beenvoice to bring client management, time tracking, invoicing, and payment tracking into one workflow.",
],
type: "research",
type: "professional",
},
{
title: "Senior Honors Thesis - Extending HRIStudio to Social Robotics",
@@ -224,7 +234,7 @@ export const experiences: Experience[] = [
],
type: "research",
},
{
{
title: "Founding Member and Research Participant",
organization: "RoboLab@Bucknell",
location: "Lewisburg, PA",
@@ -357,7 +367,8 @@ export const awards: Award[] = [
title: "Dean's List (7 semesters)",
organization: "Bucknell University",
year: 2026,
description: "Fall 2022, Fall 2023, Spring 2024, Fall 2024, Spring 2025, Fall 2025, Spring 2026",
description:
"Fall 2022, Fall 2023, Spring 2024, Fall 2024, Spring 2025, Fall 2025, Spring 2026",
},
{
title: "AIChE Mid-Atlantic Chem-E-Car Competition",
@@ -462,6 +473,40 @@ export const relevantCoursework = [
];
export const projects: Project[] = [
{
title: "Manyangles",
description:
"Shared event photo albums, from guest uploads to a moderated gallery.",
longDescription:
"Guests contribute photos through a shared link, and hosts review submissions before publishing them to the gallery. Direct-to-storage uploads, background image processing, and HEIC support handle the media pipeline; display copies strip location metadata while original files are retained.",
tags: ["Next.js", "TypeScript", "S3", "Image processing"],
websiteLink: "https://ma.hadlock.tech",
image: "/portfolio/manyangles.svg",
imageAlt: "Manyangles event photo sharing",
featured: true,
},
{
title: "hadlockCMS",
id: "hadlockcms",
description:
"A publishing platform for multiple sites, with one shared codebase.",
longDescription:
"Visual page editing, revisions, draft previews, scheduled publishing, and custom domains in a multi-tenant platform. Includes a media library, themes, forms, and roles, with atomic publishing for changes that need to go live together.",
tags: ["Multi-tenant", "Next.js", "TypeScript", "Drizzle", "Publishing"],
featured: false,
},
{
title: "Racetix",
description: "Multi-tenant ticketing, from online checkout to the gate.",
longDescription:
"Built to help a cash-only raceway sell tickets in advance for an event with upfront costs. Each track has its own catalog, with Stripe Connect payments and refunds, Apple and Google Wallet tickets, and QR admission scanning.",
tags: ["Multi-tenant", "Stripe Connect", "Mobile ticketing"],
websiteLink: "https://racetix.us",
image: "/portfolio/racetix.webp",
imageAlt: "Modified stock cars racing at Riverhead Raceway",
featured: true,
},
{
title: "Puter",
description:
@@ -496,10 +541,19 @@ export const projects: Project[] = [
"Removes the F1 Halo safety arch from onboard visor-cam footage using classical CV mask detection and neural inpainting. Final project for Image Processing and Analysis.",
longDescription:
"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",
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",
featured: true,
},
@@ -625,25 +679,23 @@ export const projects: Project[] = [
featured: true,
},
{
title: "BeenVoice - Professional Invoicing Platform",
title: "beenvoice",
description:
"A comprehensive business invoicing application built with the T3 stack for reliable invoice and client management.",
"Invoicing and time tracking for independent work, on web and mobile.",
longDescription:
"Developed a full-stack invoicing platform prioritizing reliability, security, and professional user experience. Features include multi-step invoice creation with flexible line items, automated PDF generation, client management with complete contact details, business profile management with branding support, and comprehensive status tracking (draft → sent → paid/overdue). The application implements proper authentication, input validation, and error handling throughout, with a mobile-first responsive design using shadcn/ui components.",
"Manage clients, track time, send recurring invoices, and follow payments across a web app and mobile companion. The Expo app includes iOS widgets, while shared domain logic and a background job worker support the product across platforms.",
tags: [
"Next.js",
"Expo",
"TypeScript",
"tRPC",
"Drizzle ORM",
"NextAuth.js",
"LibSQL",
"Tailwind CSS",
"shadcn/ui",
"PostgreSQL",
"Drizzle",
"iOS widgets",
],
gitLink: "https://github.com/soconnor0919/beenvoice",
websiteLink: "https://beenvoice.soconnor.dev",
websiteLink: "https://beenvoice.app",
image: "/images/beenvoice.webp",
imageAlt: "Screenshot of BeenVoice",
imageAlt: "beenvoice web dashboard",
featured: true,
},
{