All checks were successful
Build and Deploy Gabriel Kaszewski Portfolio / build-and-deploy-local (push) Successful in 1m32s
- Added essays: qui-sumus-existential-dread.pdf and licencjat.pdf - Added scripts: loop.pdf - Added images: DSC_1283.avif, GAK00015.avif, GAK00017.avif, GAK00041.avif, GAK00042.avif, painter.avif, parasitic-god-1.avif, parasitic-god-2.avif, parasitic-god-3.avif, parasitic-god-4.avif, parasitic-god-5.avif, spanish-inq-1.avif, spanish-inq-2.avif, spanish-inq-3.avif, spanish-inq-4.avif, typing-game-1.avif, typing-game-2.avif
223 lines
7.3 KiB
TypeScript
223 lines
7.3 KiB
TypeScript
import Image from "next/image";
|
|
import Link from "next/link";
|
|
import Chip from "@/components/chip";
|
|
import WritingsList from "@/components/writings-list";
|
|
import { writings } from "@/lib/data";
|
|
import { Metadata } from "next";
|
|
import { Check } from "lucide-react";
|
|
|
|
export const metadata: Metadata = {
|
|
title: "About Me | Gabriel Kaszewski",
|
|
description:
|
|
"Learn more about Gabriel Kaszewski, his skills, and his journey as a developer.",
|
|
alternates: {
|
|
canonical: "https://gabrielkaszewski.dev/about",
|
|
},
|
|
openGraph: {
|
|
title: "About Me | Gabriel Kaszewski",
|
|
description:
|
|
"Learn more about Gabriel Kaszewski, his skills, and his journey as a developer.",
|
|
url: "https://gabrielkaszewski.dev/about",
|
|
},
|
|
twitter: {
|
|
card: "summary",
|
|
title: "About Me | Gabriel Kaszewski",
|
|
description:
|
|
"Learn more about Gabriel Kaszewski, his skills, and his journey as a developer.",
|
|
},
|
|
};
|
|
|
|
const hobbies = ["Programming", "Filmmaking", "Photography", "Gaming", "Playing guitar"];
|
|
const interests = [
|
|
"Computer Science",
|
|
"Sci-Fi Books",
|
|
"Astronomy",
|
|
"Sports",
|
|
"History",
|
|
];
|
|
const futureGoals = [
|
|
"Deepen my expertise in Rust for high-performance applications.",
|
|
"Contribute to impactful open-source projects.",
|
|
"Develop and release my first full-fledged indie game.",
|
|
];
|
|
const faqItems = [
|
|
{
|
|
q: "How old were you when you started programming?",
|
|
a: "I was 11 years old.",
|
|
},
|
|
{
|
|
q: "How did you learn programming?",
|
|
a: "I read books and practiced a lot.",
|
|
},
|
|
{
|
|
q: "Are you studying Computer Science?",
|
|
a: "No, I have a degree in Bioinformatics, which is a closely related field.",
|
|
},
|
|
{
|
|
q: "Which programming language do you recommend for a beginner?",
|
|
a: "The language doesn't really matter, just choose one you like and dive in.",
|
|
},
|
|
{
|
|
q: "What was your first programming language?",
|
|
a: "My journey began with C++.",
|
|
},
|
|
{
|
|
q: "What is your favorite programming language?",
|
|
a: "I enjoy writing in C, Rust, and Python. But Rust is the best",
|
|
},
|
|
];
|
|
|
|
const calculateAge = (birthDate: string): number => {
|
|
const today = new Date();
|
|
const birth = new Date(birthDate);
|
|
let age = today.getFullYear() - birth.getFullYear();
|
|
const monthDifference = today.getMonth() - birth.getMonth();
|
|
if (
|
|
monthDifference < 0 ||
|
|
(monthDifference === 0 && today.getDate() < birth.getDate())
|
|
) {
|
|
age--;
|
|
}
|
|
return age;
|
|
};
|
|
|
|
const AboutPage = () => {
|
|
const age = calculateAge("2002-02-27");
|
|
|
|
return (
|
|
<div className="flex w-full flex-col items-center gap-8 p-4 pt-24 text-white">
|
|
<div className="flex flex-col items-center justify-center gap-2 p-4 backdrop-blur-sm glass-effect glossy-effect bottom gloss-highlight rounded-lg shadow-lg">
|
|
<Image
|
|
src="/images/ja.avif"
|
|
alt="A photo of Gabriel Kaszewski"
|
|
width={300}
|
|
height={300}
|
|
className="object-cover rounded-md shadow-lg"
|
|
priority
|
|
/>
|
|
<h2 className="mt-4 text-2xl font-bold">Hello, I'm Gabriel!</h2>
|
|
</div>
|
|
|
|
<div className="prose prose-invert lg:prose-lg xl:prose-xl max-w-3xl mx-auto w-full">
|
|
<section id="more-info">
|
|
<h2 className="text-center">More info about me!</h2>
|
|
<p>
|
|
Hi! I am Gabriel and I am {age} years old. I graduated in
|
|
Bioinformatics from the University of Gdańsk. I'm fluent in
|
|
Polish and English and currently work as a Software Engineer at WPP
|
|
Media.
|
|
</p>
|
|
<p>
|
|
I have co-authored one scientific article, which you can read{" "}
|
|
<a
|
|
target="_blank"
|
|
href="http://dx.doi.org/10.1038/s41598-023-44488-7"
|
|
className="text-yellow-400 underline"
|
|
>
|
|
here
|
|
</a>
|
|
.
|
|
</p>
|
|
<p>
|
|
My bachelor's thesis titled "Modeling evolutionary
|
|
processes using cellular automata" is available{" "}
|
|
<a
|
|
target="_blank"
|
|
href="/documents/other/licencjat.pdf"
|
|
className="text-yellow-400 underline"
|
|
>
|
|
here
|
|
</a>
|
|
, the thesis is written in Polish.
|
|
</p>
|
|
</section>
|
|
|
|
<section
|
|
id="hobbies&interests"
|
|
className="not-prose flex flex-col sm:flex-row gap-8 mt-12"
|
|
>
|
|
<div className="flex-1">
|
|
<h2 className="text-center">Hobbies</h2>
|
|
<div className="flex flex-wrap items-center justify-center gap-4 mt-4">
|
|
{hobbies.map((hobby) => (
|
|
<Chip key={hobby} text={hobby} />
|
|
))}
|
|
</div>
|
|
</div>
|
|
<div className="flex-1">
|
|
<h2 className="text-center">Interests</h2>
|
|
<div className="flex flex-wrap items-center justify-center gap-4 mt-4">
|
|
{interests.map((interest) => (
|
|
<Chip key={interest} text={interest} />
|
|
))}
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section id="photography" className="mt-12">
|
|
<p>
|
|
I also enjoy photography. You can see some of my shots{" "}
|
|
<Link href="/photos" className="text-yellow-400 underline">
|
|
here
|
|
</Link>
|
|
.
|
|
</p>
|
|
</section>
|
|
|
|
<section id="philosophy" className="mt-12">
|
|
<h2>My Philosophy</h2>
|
|
<p>
|
|
I believe much of today's software is bloated, inefficient, and
|
|
disrespectful of the user's resources. My passion, which
|
|
started with a simple curiosity at age 11, is to build a better
|
|
alternative. I focus on creating software that is{" "}
|
|
<strong className="text-yellow-400">
|
|
fast, reliable, and genuinely intuitive
|
|
</strong>
|
|
, guided by the principles of clean and efficient code.
|
|
</p>
|
|
</section>
|
|
|
|
<section id="future-goals" className="mt-12">
|
|
<h2>Future Goals</h2>
|
|
<p>
|
|
I'm always eager to learn and grow. My goal is to continue
|
|
honing my skills in backend development and system architecture.
|
|
Here's what's on my radar:
|
|
</p>
|
|
<ul className="list-none p-0">
|
|
{futureGoals.map((goal) => (
|
|
<li key={goal} className="flex items-center gap-2 not-prose mb-2">
|
|
<Check className="text-yellow-400 flex-shrink-0" size={20} />
|
|
<span>{goal}</span>
|
|
</li>
|
|
))}
|
|
</ul>
|
|
</section>
|
|
|
|
<section id="writings" className="mt-12">
|
|
<h2>Writings</h2>
|
|
<p>Sometimes I dabble in writing, here are some of my works</p>
|
|
<div className="not-prose flex justify-center mt-4">
|
|
<WritingsList writings={writings} />
|
|
</div>
|
|
</section>
|
|
|
|
<section id="faq" className="mt-12">
|
|
<h2>FAQ</h2>
|
|
<div className="not-prose flex flex-col gap-4">
|
|
{faqItems.map((item) => (
|
|
<div key={item.q}>
|
|
<h3 className="text-xl font-bold">{item.q}</h3>
|
|
<p>{item.a}</p>
|
|
</div>
|
|
))}
|
|
</div>
|
|
</section>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default AboutPage;
|