Skip to content

Commit 353433e

Browse files
committed
Add resume and projects section
1 parent 9477c2b commit 353433e

File tree

8 files changed

+354
-39
lines changed

8 files changed

+354
-39
lines changed

index.html

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,21 @@
44
<meta charset="UTF-8" />
55
<link rel="icon" type="image/png" href="/my-icon.png" />
66
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
7-
<meta name="description" content="AI Profile Assistant - Your Professional Profile" />
8-
<meta name="author" content="Your Name" />
9-
<title>Spectual's Profile</title>
7+
<meta name="description" content="Yifei's Profile" />
8+
<meta name="author" content="Yifei Bao" />
9+
<title>Yifei's Profile</title>
1010

1111
<!-- Open Graph / Facebook -->
1212
<meta property="og:type" content="website" />
13-
<meta property="og:description" content="AI Profile Assistant - Your Professional Profile" />
14-
<meta property="og:title" content="AI Profile Assistant" />
15-
<meta property="og:image" content="/placeholder-og-image.png" />
13+
<meta property="og:description" content="Yifei's Profile - Chat with me!" />
14+
<meta property="og:title" content="Yifei's Profile" />
15+
<meta property="og:image" content="/my-icon.png" />
1616

1717
<!-- Twitter -->
1818
<meta property="twitter:card" content="summary_large_image" />
19-
<meta property="twitter:title" content="AI Profile Assistant" />
20-
<meta property="twitter:description" content="AI Profile Assistant - Your Professional Profile" />
21-
<meta property="twitter:image" content="/placeholder-og-image.png" />
19+
<meta property="twitter:title" content="Yifei's Profile" />
20+
<meta property="twitter:description" content="Yifei's Profile - Chat with me!" />
21+
<meta property="twitter:image" content="/my-icon.png" />
2222
</head>
2323
<body>
2424
<div id="root"></div>

package-lock.json

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/App.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import { TooltipProvider } from "@/components/ui/tooltip";
44
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
55
import { HashRouter, Routes, Route } from "react-router-dom";
66
import Index from "./pages/Index";
7+
import Resume from "./pages/Resume";
8+
import Projects from "./pages/Projects";
79
import NotFound from "./pages/NotFound";
810

911
const queryClient = new QueryClient();
@@ -16,6 +18,8 @@ const App = () => (
1618
<HashRouter>
1719
<Routes>
1820
<Route path="/" element={<Index />} />
21+
<Route path="/resume" element={<Resume />} />
22+
<Route path="/projects" element={<Projects />} />
1923
{/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */}
2024
<Route path="*" element={<NotFound />} />
2125
</Routes>

src/components/ProfileSection.tsx

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -48,26 +48,26 @@ const ProfileSection = () => {
4848
{/* Social Links */}
4949
<div className="flex items-center justify-center lg:justify-start gap-4">
5050
{personalInfo.social?.linkedin && (
51-
<a
52-
href={personalInfo.social.linkedin}
53-
target="_blank"
54-
rel="noopener noreferrer"
55-
className="flex items-center gap-2 px-4 py-2 bg-blue-600/20 hover:bg-blue-600/30 text-blue-400 rounded-full transition-all duration-300 hover:scale-105"
56-
>
57-
<Linkedin size={20} />
58-
<span className="text-sm font-medium">LinkedIn</span>
59-
</a>
51+
<a
52+
href={personalInfo.social.linkedin}
53+
target="_blank"
54+
rel="noopener noreferrer"
55+
className="flex items-center gap-2 px-4 py-2 bg-blue-600/20 hover:bg-blue-600/30 text-blue-400 rounded-full transition-all duration-300 hover:scale-105"
56+
>
57+
<Linkedin size={20} />
58+
<span className="text-sm font-medium">LinkedIn</span>
59+
</a>
6060
)}
6161
{personalInfo.social?.github && (
62-
<a
63-
href={personalInfo.social.github}
64-
target="_blank"
65-
rel="noopener noreferrer"
66-
className="flex items-center gap-2 px-4 py-2 bg-gray-600/20 hover:bg-gray-600/30 text-gray-300 rounded-full transition-all duration-300 hover:scale-105"
67-
>
68-
<Github size={20} />
69-
<span className="text-sm font-medium">GitHub</span>
70-
</a>
62+
<a
63+
href={personalInfo.social.github}
64+
target="_blank"
65+
rel="noopener noreferrer"
66+
className="flex items-center gap-2 px-4 py-2 bg-gray-600/20 hover:bg-gray-600/30 text-gray-300 rounded-full transition-all duration-300 hover:scale-105"
67+
>
68+
<Github size={20} />
69+
<span className="text-sm font-medium">GitHub</span>
70+
</a>
7171
)}
7272
</div>
7373
</div>

src/data/personalInfo.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
export const personalInfo = {
2-
name: "Spectual",
3-
title: "AI Engineer / ML Engineer",
4-
email: "ukubird@gmail.com",
2+
name: "Yifei Bao",
3+
title: "AI / ML Engineer",
4+
email: "baoyifei@bu.edu",
55
location: "Boston, MA",
66
avatar: "/avatar-placeholder.png",
77
social: {

src/pages/Index.tsx

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
1+
import { Link, useLocation } from "react-router-dom";
22
import ProfileSection from "@/components/ProfileSection";
33
import ChatSection from "@/components/ChatSection";
44

55
const Index = () => {
6+
const location = useLocation();
7+
68
return (
79
<div className="min-h-screen bg-gradient-to-br from-slate-900 via-purple-900 to-slate-900">
810
{/* Animated background elements */}
@@ -17,15 +19,36 @@ const Index = () => {
1719
<header className="py-6 px-6">
1820
<nav className="max-w-6xl mx-auto">
1921
<div className="flex space-x-8">
20-
<a href="#" className="text-cyan-400 border-b-2 border-cyan-400 pb-1 font-medium transition-colors hover:text-cyan-300">
21-
Main
22-
</a>
23-
<a href="#" className="text-slate-400 hover:text-white transition-colors font-medium">
22+
<Link
23+
to="/"
24+
className={`font-medium transition-colors ${
25+
location.pathname === "/"
26+
? "text-cyan-400 border-b-2 border-cyan-400 pb-1"
27+
: "text-slate-400 hover:text-white"
28+
}`}
29+
>
30+
Chat
31+
</Link>
32+
<Link
33+
to="/resume"
34+
className={`font-medium transition-colors ${
35+
location.pathname === "/resume"
36+
? "text-cyan-400 border-b-2 border-cyan-400 pb-1"
37+
: "text-slate-400 hover:text-white"
38+
}`}
39+
>
2440
Resume
25-
</a>
26-
<a href="#" className="text-slate-400 hover:text-white transition-colors font-medium">
27-
Skills
28-
</a>
41+
</Link>
42+
<Link
43+
to="/projects"
44+
className={`font-medium transition-colors ${
45+
location.pathname === "/projects"
46+
? "text-cyan-400 border-b-2 border-cyan-400 pb-1"
47+
: "text-slate-400 hover:text-white"
48+
}`}
49+
>
50+
Projects
51+
</Link>
2952
</div>
3053
</nav>
3154
</header>

src/pages/Projects.tsx

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
import { personalInfo } from "@/data/personalInfo";
2+
import { ExternalLink, Github, Globe, Award, Code } from "lucide-react";
3+
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
4+
import { Badge } from "@/components/ui/badge";
5+
import { Link, useLocation } from "react-router-dom";
6+
7+
const Projects = () => {
8+
const location = useLocation();
9+
10+
return (
11+
<div className="min-h-screen bg-gradient-to-br from-slate-900 via-purple-900 to-slate-900">
12+
{/* Animated background elements */}
13+
<div className="fixed inset-0 overflow-hidden pointer-events-none">
14+
<div className="absolute -top-40 -right-40 w-80 h-80 bg-purple-500 rounded-full mix-blend-multiply filter blur-xl opacity-20 animate-pulse"></div>
15+
<div className="absolute -bottom-40 -left-40 w-80 h-80 bg-cyan-500 rounded-full mix-blend-multiply filter blur-xl opacity-20 animate-pulse animation-delay-2000"></div>
16+
<div className="absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 w-60 h-60 bg-teal-500 rounded-full mix-blend-multiply filter blur-xl opacity-10 animate-pulse animation-delay-4000"></div>
17+
</div>
18+
19+
<div className="relative z-10">
20+
{/* Header Navigation */}
21+
<header className="py-6 px-6">
22+
<nav className="max-w-6xl mx-auto">
23+
<div className="flex space-x-8">
24+
<Link
25+
to="/"
26+
className={`font-medium transition-colors ${
27+
location.pathname === "/"
28+
? "text-cyan-400 border-b-2 border-cyan-400 pb-1"
29+
: "text-slate-400 hover:text-white"
30+
}`}
31+
>
32+
Chat
33+
</Link>
34+
<Link
35+
to="/resume"
36+
className={`font-medium transition-colors ${
37+
location.pathname === "/resume"
38+
? "text-cyan-400 border-b-2 border-cyan-400 pb-1"
39+
: "text-slate-400 hover:text-white"
40+
}`}
41+
>
42+
Resume
43+
</Link>
44+
<Link
45+
to="/projects"
46+
className={`font-medium transition-colors ${
47+
location.pathname === "/projects"
48+
? "text-cyan-400 border-b-2 border-cyan-400 pb-1"
49+
: "text-slate-400 hover:text-white"
50+
}`}
51+
>
52+
Projects
53+
</Link>
54+
</div>
55+
</nav>
56+
</header>
57+
58+
{/* Projects Content */}
59+
<div className="px-6 pb-8">
60+
<div className="max-w-6xl mx-auto">
61+
<div className="backdrop-blur-xl bg-white/10 rounded-3xl border border-white/20 p-8 shadow-2xl">
62+
<div className="text-center mb-8">
63+
<h1 className="text-4xl font-bold bg-gradient-to-r from-white to-cyan-400 bg-clip-text text-transparent mb-4">
64+
Projects
65+
</h1>
66+
<p className="text-slate-300 text-lg">
67+
Explore my technical projects and research work
68+
</p>
69+
</div>
70+
71+
{/* Projects Grid */}
72+
<div className="grid gap-6 md:grid-cols-2 lg:grid-cols-1">
73+
{personalInfo.projects.map((project, index) => (
74+
<Card key={index} className="bg-white/5 border-white/20 hover:bg-white/10 transition-all duration-300 hover:scale-[1.02]">
75+
<CardHeader>
76+
<div className="flex items-start justify-between">
77+
<div className="flex-1">
78+
<CardTitle className="text-white text-xl mb-2 flex items-center gap-2">
79+
{project.name.includes("Patent") && (
80+
<Award className="w-5 h-5 text-yellow-400" />
81+
)}
82+
{project.name}
83+
</CardTitle>
84+
</div>
85+
<div className="flex gap-2">
86+
{/* Add project links here if available */}
87+
{project.name.includes("GitHub") && (
88+
<a
89+
href="#"
90+
className="p-2 bg-gray-600/20 hover:bg-gray-600/30 text-gray-300 rounded-full transition-all duration-300 hover:scale-110"
91+
title="View on GitHub"
92+
>
93+
<Github className="w-4 h-4" />
94+
</a>
95+
)}
96+
<a
97+
href="#"
98+
className="p-2 bg-blue-600/20 hover:bg-blue-600/30 text-blue-400 rounded-full transition-all duration-300 hover:scale-110"
99+
title="View Project"
100+
>
101+
<ExternalLink className="w-4 h-4" />
102+
</a>
103+
</div>
104+
</div>
105+
</CardHeader>
106+
<CardContent>
107+
<p className="text-slate-300 leading-relaxed mb-4">
108+
{project.description}
109+
</p>
110+
111+
{/* Technologies */}
112+
<div className="flex flex-wrap gap-2">
113+
{project.technologies.map((tech, techIndex) => (
114+
<Badge
115+
key={techIndex}
116+
variant="secondary"
117+
className="bg-cyan-600/20 text-cyan-300 border-cyan-500/30 hover:bg-cyan-600/30"
118+
>
119+
<Code className="w-3 h-3 mr-1" />
120+
{tech}
121+
</Badge>
122+
))}
123+
</div>
124+
</CardContent>
125+
</Card>
126+
))}
127+
</div>
128+
129+
{/* Additional Info */}
130+
<div className="mt-8 p-6 bg-purple-900/20 rounded-xl border border-purple-500/30">
131+
<h3 className="text-lg font-semibold text-purple-300 mb-3 flex items-center gap-2">
132+
<Globe className="w-5 h-5" />
133+
More Projects
134+
</h3>
135+
<p className="text-slate-300 text-sm">
136+
For more detailed project information, code repositories, and live demos,
137+
feel free to ask me in the Chat section or visit my GitHub profile.
138+
</p>
139+
<div className="mt-4">
140+
<a
141+
href={personalInfo.social.github}
142+
target="_blank"
143+
rel="noopener noreferrer"
144+
className="inline-flex items-center gap-2 px-4 py-2 bg-gray-600/20 hover:bg-gray-600/30 text-gray-300 rounded-full transition-all duration-300 hover:scale-105"
145+
>
146+
<Github className="w-4 h-4" />
147+
<span className="text-sm font-medium">View GitHub Profile</span>
148+
</a>
149+
</div>
150+
</div>
151+
</div>
152+
</div>
153+
</div>
154+
</div>
155+
</div>
156+
);
157+
};
158+
159+
export default Projects;

0 commit comments

Comments
 (0)