diff --git a/public/trips/asc2024/IMG_2631.png b/public/trips/asc2024/IMG_2631.png new file mode 100644 index 0000000..132258f Binary files /dev/null and b/public/trips/asc2024/IMG_2631.png differ diff --git a/public/trips/asc2024/IMG_2641.png b/public/trips/asc2024/IMG_2641.png new file mode 100644 index 0000000..e0d152b Binary files /dev/null and b/public/trips/asc2024/IMG_2641.png differ diff --git a/public/trips/asc2024/IMG_7987.png b/public/trips/asc2024/IMG_7987.png new file mode 100644 index 0000000..87947f3 Binary files /dev/null and b/public/trips/asc2024/IMG_7987.png differ diff --git a/public/trips/engr290/P1013747.png b/public/trips/engr290/P1013747.png new file mode 100644 index 0000000..37c2196 Binary files /dev/null and b/public/trips/engr290/P1013747.png differ diff --git a/public/trips/engr290/insta290.jpg b/public/trips/engr290/insta290.jpg new file mode 100644 index 0000000..0cef882 Binary files /dev/null and b/public/trips/engr290/insta290.jpg differ diff --git a/public/trips/imola2024/IMG_2050.png b/public/trips/imola2024/IMG_2050.png new file mode 100644 index 0000000..147fa71 Binary files /dev/null and b/public/trips/imola2024/IMG_2050.png differ diff --git a/public/trips/imola2024/IMG_2066.png b/public/trips/imola2024/IMG_2066.png new file mode 100644 index 0000000..8b93846 Binary files /dev/null and b/public/trips/imola2024/IMG_2066.png differ diff --git a/public/trips/imola2024/IMG_2093.png b/public/trips/imola2024/IMG_2093.png new file mode 100644 index 0000000..8982638 Binary files /dev/null and b/public/trips/imola2024/IMG_2093.png differ diff --git a/public/trips/roman2024/IMG_3946.png b/public/trips/roman2024/IMG_3946.png new file mode 100644 index 0000000..acfedc5 Binary files /dev/null and b/public/trips/roman2024/IMG_3946.png differ diff --git a/public/trips/roman2024/IMG_3951.png b/public/trips/roman2024/IMG_3951.png new file mode 100644 index 0000000..18cf680 Binary files /dev/null and b/public/trips/roman2024/IMG_3951.png differ diff --git a/public/trips/roman2024/IMG_3978.png b/public/trips/roman2024/IMG_3978.png new file mode 100644 index 0000000..25e4837 Binary files /dev/null and b/public/trips/roman2024/IMG_3978.png differ diff --git a/public/trips/sca2024/bean.png b/public/trips/sca2024/bean.png new file mode 100644 index 0000000..fddef3b Binary files /dev/null and b/public/trips/sca2024/bean.png differ diff --git a/public/trips/sca2024/group.jpeg b/public/trips/sca2024/group.jpeg new file mode 100644 index 0000000..e8436b0 Binary files /dev/null and b/public/trips/sca2024/group.jpeg differ diff --git a/public/trips/sca2024/plane.png b/public/trips/sca2024/plane.png new file mode 100644 index 0000000..6fb1586 Binary files /dev/null and b/public/trips/sca2024/plane.png differ diff --git a/public/trips/silverstone/P1025274.png b/public/trips/silverstone/P1025274.png new file mode 100644 index 0000000..701e994 Binary files /dev/null and b/public/trips/silverstone/P1025274.png differ diff --git a/public/trips/silverstone/_1035764.png b/public/trips/silverstone/_1035764.png new file mode 100644 index 0000000..441cd6b Binary files /dev/null and b/public/trips/silverstone/_1035764.png differ diff --git a/public/trips/silverstone/_1035852.png b/public/trips/silverstone/_1035852.png new file mode 100644 index 0000000..514745d Binary files /dev/null and b/public/trips/silverstone/_1035852.png differ diff --git a/src/app/api/cv/route.ts b/src/app/api/cv/route.ts deleted file mode 100644 index bdd8672..0000000 --- a/src/app/api/cv/route.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NextResponse } from 'next/server'; -import { promises as fs } from 'fs'; -import path from 'path'; - -export async function GET() { - try { - const cvPath = path.join(process.cwd(), 'cv.tex'); - const cvContent = await fs.readFile(cvPath, 'utf8'); - - return NextResponse.json({ content: cvContent }); - } catch (error) { - return NextResponse.json({ error: 'Failed to load CV' }, { status: 500 }); - } -} \ No newline at end of file diff --git a/src/app/articles/page.tsx b/src/app/articles/page.tsx index fb0dc0b..8fe3ac3 100644 --- a/src/app/articles/page.tsx +++ b/src/app/articles/page.tsx @@ -46,7 +46,7 @@ export default function ArticlesPage() {
-

In the Media 🗞️

+

In the Media 📰

I have been lucky enough to have a few wonderful articles written about me and my work. Go check them out!

diff --git a/src/app/travel/page.tsx b/src/app/travel/page.tsx new file mode 100644 index 0000000..f26818b --- /dev/null +++ b/src/app/travel/page.tsx @@ -0,0 +1,115 @@ +'use client'; + +import { useEffect, useState } from "react"; +import { Card, CardHeader, CardTitle, CardContent, CardDescription } from "~/components/ui/card"; +import { CardSkeleton } from "~/components/ui/skeletons"; +import Image from "next/image"; +import { Badge } from "~/components/ui/badge"; + +const tripsData = [ + { + title: "AIChE Annual Student Conference 2024", + 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.", + images: ["/trips/asc2024/IMG_2641.png", "/trips/asc2024/IMG_2631.png", "/trips/asc2024/IMG_7987.png"], + tags: ["Chem-E-Car", "AIChE", "Conference", "Competition"] + }, + { + title: "IEEE RO-MAN 2024", + 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.", + images: ["/trips/roman2024/IMG_3951.png", "/trips/roman2024/IMG_3978.png", "/trips/roman2024/IMG_3946.png"], + tags: ["RO-MAN", "IEEE", "Conference", "Presentation"] + }, + { + title: "ENGR 290: Following da Vinci's Footsteps", + description: "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: ["/trips/engr290/insta290.jpg", "/trips/engr290/P1013747.png"], + tags: ["Italy", "France", "Study Abroad", "Engineering"] + }, + { + title: "SCA Specialty Coffee Expo 2024", + 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.", + images: ["/trips/sca2024/group.jpeg", "/trips/sca2024/bean.png", "/trips/sca2024/plane.png"], + tags: ["Coffee Society", "Chicago", "SCA", "Coffee"] + }, + { + title: "Formula 1 Gran Premio dell'Emilia Romagna 2024", + 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.", + images: ["/trips/imola2024/IMG_2093.png", "/trips/imola2024/IMG_2050.png", "/trips/imola2024/IMG_2066.png"], + tags: ["Racing", "Formula One", "Italy"] + }, + { + title: "Formula 1 British Grand Prix 2024", + 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.", + images: ["/trips/silverstone/_1035852.png", "/trips/silverstone/P1025274.png", "/trips/silverstone/_1035764.png"], + tags: ["Racing", "Formula One", "Great Britain", "Silverstone"] + } +]; + +export default function TripsPage() { + const [loading, setLoading] = useState(true); + + useEffect(() => { + const timer = setTimeout(() => { + setLoading(false); + }, 1000); + return () => clearTimeout(timer); + }, []); + + return ( +
+
+

My Trips & Events 🌍

+

+ A collection of memorable trips and events I've attended. +

+
+ +
+ {loading ? ( + <> + + + + + + + + ) : ( + tripsData.map((trip, index) => ( + + +
+
+ {trip.images.map((image, imgIndex) => ( +
+ {trip.title} +
+ ))} +
+
+
+ +
+ {trip.title} + {trip.description} + {/* Show badges for tags */} +
+ {trip.tags.map((tag, tagIndex) => ( + {tag} + ))} +
+
+
+
+ )) + )} +
+
+ ); +} \ No newline at end of file diff --git a/src/components/Navigation.tsx b/src/components/Navigation.tsx index eafd010..83c9a70 100644 --- a/src/components/Navigation.tsx +++ b/src/components/Navigation.tsx @@ -1,6 +1,6 @@ 'use client'; -import { BookOpenText, FileText, FolderGit2, Home, Menu, Moon, Newspaper, Sun, SunMoon, X } from 'lucide-react'; +import { BookOpenText, FileText, FolderGit2, Home, Menu, Moon, Newspaper, Plane, Sun, SunMoon, X } from 'lucide-react'; import { useTheme } from 'next-themes'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; @@ -12,6 +12,7 @@ const navItems = [ { href: '/articles', label: 'Articles', icon: Newspaper }, { href: '/projects', label: 'Projects', icon: FolderGit2 }, { href: '/publications', label: 'Publications', icon: BookOpenText }, + { href: '/travel', label: 'Travel', icon: Plane }, { href: '/cv', label: 'CV', icon: FileText }, ]; @@ -26,6 +27,12 @@ export function Navigation() { setMounted(true); }, []); + // Update the document title based on the current pathname + useEffect(() => { + const currentItem = navItems.find(item => item.href === pathname); + document.title = currentItem ? `${currentItem.label} - Sean O'Connor` : 'Sean O\'Connor'; // Default title + }, [pathname]); + // Determine the icon to show based on the theme const themeIcon = theme === 'dark' ? : ; const defaultThemeIcon = ; // Default icon for server-side rendering