Skip to content

Commit 9a4cb1f

Browse files
committed
feat: update projects and about content
1 parent ada885e commit 9a4cb1f

File tree

14 files changed

+297
-297
lines changed

14 files changed

+297
-297
lines changed

e2e-tests/about.spec.ts

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,53 @@ test.describe("About Page", () => {
3333
await expect(
3434
page.getByRole("heading", { name: "Work Experience" }),
3535
).toBeVisible();
36-
await expect(page.getByText("Senior Full-Stack Developer")).toBeVisible();
37-
await expect(page.getByText("TechCorp Inc.")).toBeVisible();
36+
await expect(
37+
page.getByText("Software Engineer & Staff Software Engineer"),
38+
).toBeVisible();
39+
await expect(page.getByText("FRIDAY Insurance")).toBeVisible();
3840
});
3941

4042
test("should display skills section", async ({ page }) => {
4143
await expect(
4244
page.getByRole("heading", { name: "Skills & Expertise" }),
4345
).toBeVisible();
44-
await expect(page.getByText("Frontend Development")).toBeVisible();
45-
await expect(page.getByTestId("skill-name-react")).toBeVisible();
46-
await expect(page.getByTestId("skill-name-node.js")).toBeVisible();
47-
await expect(page.getByTestId("skill-name-git")).toBeVisible();
46+
47+
await expect(
48+
page.getByTestId("skill-category-tech-skills", {
49+
name: "Programming Languages, Frameworks & Data",
50+
}),
51+
).toBeVisible();
52+
await expect(page.getByTestId("skill-name-java")).toBeVisible();
53+
await expect(page.getByTestId("skill-name-kotlin")).toBeVisible();
54+
await expect(page.getByTestId("skill-name-python")).toBeVisible();
55+
await expect(page.getByTestId("skill-name-javascript")).toBeVisible();
56+
await expect(page.getByTestId("skill-name-spring-boot")).toBeVisible();
57+
58+
await expect(
59+
page.getByTestId("skill-category-infra-skills", {
60+
name: "Cloud & DevOps",
61+
}),
62+
).toBeVisible();
63+
await expect(page.getByTestId("skill-name-aws")).toBeVisible();
64+
await expect(page.getByTestId("skill-name-docker")).toBeVisible();
65+
await expect(page.getByTestId("skill-name-kubernetes")).toBeVisible();
66+
await expect(page.getByTestId("skill-name-helm")).toBeVisible();
67+
await expect(page.getByTestId("skill-name-terraform")).toBeVisible();
68+
69+
await expect(
70+
page.getByTestId("skill-category-strategic-skills", {
71+
name: "Software Engineering & Practices",
72+
}),
73+
).toBeVisible();
74+
await expect(
75+
page.getByTestId("skill-name-software-development"),
76+
).toBeVisible();
77+
await expect(page.getByTestId("skill-name-tech-leadership")).toBeVisible();
78+
await expect(page.getByTestId("skill-name-api-design")).toBeVisible();
79+
await expect(page.getByTestId("skill-name-e2e-testing")).toBeVisible();
80+
await expect(
81+
page.getByTestId("skill-name-performance-testing"),
82+
).toBeVisible();
4883
});
4984

5085
test("should display education and certifications section", async ({
@@ -54,10 +89,10 @@ test.describe("About Page", () => {
5489
page.getByRole("heading", { name: "Education & Certifications" }),
5590
).toBeVisible();
5691
await expect(
57-
page.getByText("University of California, Berkeley"),
92+
page.getByText("Bachelor's Degree in Computer Information Systems"),
5893
).toBeVisible();
5994
await expect(
60-
page.getByText("AWS Certified Developer - Associate"),
95+
page.getByText("Oracle Certified Professional, Java SE 6 Programmer"),
6196
).toBeVisible();
6297
});
6398
});

e2e-tests/navigation.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ async function navigateTo(
4040

4141
await page.getByTestId(navTestId).click();
4242
await page.waitForURL(urlRegex, {
43-
timeout: 60_000,
43+
timeout: 120_000,
4444
waitUntil: "load",
4545
});
4646
}

src/app/__components/about/about-hero.test.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,13 @@ describe("AboutHero", () => {
4646
screen.getByRole("heading", { name: /about me/i }),
4747
).toBeInTheDocument();
4848
expect(
49-
screen.getByText(/full-stack developer with a passion/i),
49+
screen.getByText(
50+
/Software Engineer with a passion for fostering high-performing teams/i,
51+
),
5052
).toBeInTheDocument();
5153

5254
// Check for details
53-
expect(screen.getByText(/san francisco, ca/i)).toBeInTheDocument();
55+
expect(screen.getByText(/Berlin, Germany/i)).toBeInTheDocument();
5456
expect(screen.getByText(/10\+ years experience/i)).toBeInTheDocument();
5557

5658
// Check for buttons

src/app/__components/about/about-hero.tsx

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,13 @@ export function AboutHero() {
3939
About Me
4040
</h1>
4141
<p className="text-xl text-muted-foreground">
42-
Full-stack developer with a passion for creating exceptional
43-
digital experiences
42+
Software Engineer with a passion for fostering high-performing
43+
teams.
4444
</p>
4545
<div className="flex flex-col sm:flex-row gap-4 text-sm text-muted-foreground">
4646
<div className="flex items-center gap-2">
4747
<MapPin className="h-4 w-4" />
48-
<span>San Francisco, CA</span>
48+
<span>Berlin, Germany</span>
4949
</div>
5050
<div className="flex items-center gap-2">
5151
<Calendar className="h-4 w-4" />
@@ -56,16 +56,26 @@ export function AboutHero() {
5656

5757
<div className="space-y-4">
5858
<p className="text-lg leading-relaxed">
59-
I&apos;m a passionate full-stack developer who loves building
60-
products that make a difference. With over 5 years of experience
61-
in web development, I specialize in React, TypeScript, and
62-
Node.js, creating scalable applications that users love.
59+
I&apos;m a passionate Software Engineer who loves fostering
60+
high-performing teams and building products. With over 10 years
61+
of experience, I have knowledge in various frameworks, and
62+
languages and practices across the software development
63+
lifecycle. I specialize in JVM-based languages and cloud-native
64+
applications, leveraging the JVM ecosystem to build scalable
65+
solutions.
6366
</p>
6467
<p className="text-lg leading-relaxed">
65-
When I&apos;m not coding, you&apos;ll find me writing technical
66-
articles, contributing to open source, or exploring the latest
67-
technologies. I believe in continuous learning and sharing
68-
knowledge with the developer community.
68+
When I&apos;m not coding, you&apos;ll find me playing games,
69+
tinkering with my{" "}
70+
<Link
71+
href="https://hello.from-gondor.com"
72+
target="_blank"
73+
rel="noopener noreferrer"
74+
className="underline"
75+
>
76+
homelab
77+
</Link>
78+
, running or drinking a hot cup of coffee.
6979
</p>
7080
</div>
7181

src/app/__components/projects/projects-list.tsx

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -28,27 +28,13 @@ import Link from "next/link";
2828
import { Badge } from "@/app/__components/ui/badge";
2929
import { Button } from "@/app/__components/ui/button";
3030
import { Card, CardContent } from "@/app/__components/ui/card";
31-
32-
interface Project {
33-
id: number;
34-
title: string;
35-
description: string;
36-
technologies: string[];
37-
status: string;
38-
year: string;
39-
links: {
40-
live?: string;
41-
github?: string;
42-
npm?: string;
43-
};
44-
highlights: string[];
45-
}
31+
import { Project } from "@/interfaces/project";
4632

4733
interface ProjectsListProps {
4834
projects: Project[];
4935
}
5036

51-
export function ProjectsList({ projects }: ProjectsListProps) {
37+
export function ProjectsList({ projects }: Readonly<ProjectsListProps>) {
5238
return (
5339
<section className="pb-16 md:pb-20">
5440
<div className="container px-4 md:px-6 max-w-4xl">
@@ -114,6 +100,30 @@ export function ProjectsList({ projects }: ProjectsListProps) {
114100
</Link>
115101
</Button>
116102
)}
103+
{project.links.maven && (
104+
<Button variant="outline" size="sm" asChild>
105+
<Link
106+
href={project.links.maven}
107+
target="_blank"
108+
rel="noopener noreferrer"
109+
>
110+
<Package className="mr-2 h-4 w-4" />
111+
Maven
112+
</Link>
113+
</Button>
114+
)}
115+
{project.links.cargo && (
116+
<Button variant="outline" size="sm" asChild>
117+
<Link
118+
href={project.links.cargo}
119+
target="_blank"
120+
rel="noopener noreferrer"
121+
>
122+
<Package className="mr-2 h-4 w-4" />
123+
Cargo
124+
</Link>
125+
</Button>
126+
)}
117127
</div>
118128
</div>
119129

@@ -124,9 +134,7 @@ export function ProjectsList({ projects }: ProjectsListProps) {
124134

125135
{/* Highlights */}
126136
<div>
127-
<h3 className="font-semibold mb-3">
128-
Key Features & Achievements:
129-
</h3>
137+
<h3 className="font-semibold mb-3">Key Features:</h3>
130138
<ul className="space-y-2">
131139
{project.highlights.map((highlight, highlightIndex) => (
132140
<li
@@ -166,8 +174,7 @@ export function ProjectsList({ projects }: ProjectsListProps) {
166174
{/* Footer */}
167175
<div className="mt-16 text-center">
168176
<p className="text-muted-foreground mb-4">
169-
Interested in working together or have questions about any of these
170-
projects?
177+
Have questions about any of these projects?
171178
</p>
172179
<Button asChild>
173180
<Link href="/contact">Get In Touch</Link>

src/app/__components/resume/education.test.tsx

Lines changed: 48 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -22,42 +22,63 @@
2222
* SOFTWARE.
2323
*/
2424

25+
import "@testing-library/jest-dom";
26+
2527
import { render, screen } from "@testing-library/react";
2628

2729
import { Education } from "./education";
2830

31+
jest.mock("@/lib/me", () => ({
32+
__esModule: true,
33+
default: {
34+
education: {
35+
degrees: [
36+
{
37+
institution: "Test University",
38+
degree: "Master of Science",
39+
description: "Test description",
40+
location: "Test Location",
41+
period: "2020-2022",
42+
},
43+
],
44+
certifications: [
45+
{
46+
name: "Test Certification",
47+
issuer: "Test Issuer",
48+
date: "2023",
49+
link: "https://example.com/credential",
50+
},
51+
{
52+
name: "Another Test Certification",
53+
issuer: "Another Test Issuer",
54+
date: "2024",
55+
},
56+
],
57+
},
58+
},
59+
}));
60+
2961
describe("Education", () => {
30-
it("renders the main heading", () => {
62+
it("should render the education section with correct content", () => {
3163
render(<Education />);
32-
expect(
33-
screen.getByRole("heading", {
34-
name: /Education & Certifications/i,
35-
level: 2,
36-
}),
37-
).toBeInTheDocument();
38-
});
3964

40-
it("renders education details", () => {
41-
render(<Education />);
42-
expect(
43-
screen.getByText(/University of California, Berkeley/i),
44-
).toBeInTheDocument();
45-
expect(
46-
screen.getByText(/Bachelor of Science in Computer Science/i),
47-
).toBeInTheDocument();
4865
expect(
49-
screen.getByText(/Best Capstone Project Award/i),
66+
screen.getByRole("heading", { name: /Education & Certifications/i }),
5067
).toBeInTheDocument();
51-
});
5268

53-
it("renders certification details", () => {
54-
render(<Education />);
55-
expect(
56-
screen.getByText(/AWS Certified Developer - Associate/i),
57-
).toBeInTheDocument();
58-
expect(
59-
screen.getByText(/React Developer Certification/i),
60-
).toBeInTheDocument();
61-
expect(screen.getByText(/Google Analytics Certified/i)).toBeInTheDocument();
69+
expect(screen.getByText("Master of Science")).toBeInTheDocument();
70+
expect(screen.getByText("Test University")).toBeInTheDocument();
71+
72+
expect(screen.getByText("Test Certification")).toBeInTheDocument();
73+
expect(screen.getByText("Test Issuer")).toBeInTheDocument();
74+
75+
const credentialLink = screen.getByRole("link", {
76+
name: /Show credential/i,
77+
});
78+
expect(credentialLink).toBeInTheDocument();
79+
expect(credentialLink).toHaveAttribute(
80+
"href",
81+
"https://example.com/credential",
82+
);
6283
});
6384
});

0 commit comments

Comments
 (0)