Add new documents and images to the public directory
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
This commit is contained in:
2026-08-20 01:39:14 +02:00
parent 97e8260def
commit 9e95d5c544
46 changed files with 1538 additions and 3108 deletions

View File

@@ -1,5 +1,8 @@
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";
@@ -7,9 +10,24 @@ 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", "Gaming", "Playing guitar"];
const hobbies = ["Programming", "Filmmaking", "Photography", "Gaming", "Playing guitar"];
const interests = [
"Computer Science",
"Sci-Fi Books",
@@ -82,7 +100,7 @@ const AboutPage = () => {
<div className="prose prose-invert lg:prose-lg xl:prose-xl max-w-3xl mx-auto w-full">
<section id="more-info">
<h1 className="text-center">More info about me!</h1>
<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&apos;m fluent in
@@ -105,7 +123,7 @@ const AboutPage = () => {
processes using cellular automata&quot; is available{" "}
<a
target="_blank"
href="/licencjat.pdf"
href="/documents/other/licencjat.pdf"
className="text-yellow-400 underline"
>
here
@@ -136,8 +154,18 @@ const AboutPage = () => {
</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">
<h1>My Philosophy</h1>
<h2>My Philosophy</h2>
<p>
I believe much of today&apos;s software is bloated, inefficient, and
disrespectful of the user&apos;s resources. My passion, which
@@ -150,35 +178,8 @@ const AboutPage = () => {
</p>
</section>
<section id="toolkit">
<h1>My Toolkit</h1>
<div className="not-prose bg-black/20 backdrop-blur-sm glass-effect rounded-2xl p-4 text-white text-shadow-sm">
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<div>
<h3 className="text-xl font-bold">OS & Hardware</h3>
<p>
Arch Linux, Custom-built PC (Ryzen 7 5800X3D, RTX 4070 Ti,
48GB RAM)
</p>
</div>
<div>
<h3 className="text-xl font-bold">Editor</h3>
<p>Jetbrains IDEs (Pycharm, Rider) & VS Code</p>
</div>
<div>
<h3 className="text-xl font-bold">Primary Languages</h3>
<p>Rust, Python, C#, TypeScript</p>
</div>
<div>
<h3 className="text-xl font-bold">Favorite Tech</h3>
<p>Axum, Godot, React, TailwindCSS</p>
</div>
</div>
</div>
</section>
<section id="future-goals" className="mt-12">
<h1>Future Goals</h1>
<h2>Future Goals</h2>
<p>
I&apos;m always eager to learn and grow. My goal is to continue
honing my skills in backend development and system architecture.
@@ -194,8 +195,16 @@ const AboutPage = () => {
</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">
<h1>FAQ</h1>
<h2>FAQ</h2>
<div className="not-prose flex flex-col gap-4">
{faqItems.map((item) => (
<div key={item.q}>

46
app/fun-zone/page.tsx Normal file
View File

@@ -0,0 +1,46 @@
import FunZoneCarousel from "@/components/fun-zone-carousel";
import { funZoneItems } from "@/lib/data";
import { Metadata } from "next";
export const metadata: Metadata = {
title: "Fun Zone | Gabriel Kaszewski",
description: "Games, tools, and toys I built for fun. Try them out!",
keywords: [
"games",
"pixel canvas",
"wordle",
"game jam",
"interactive",
"playground",
],
alternates: {
canonical: "https://gabrielkaszewski.dev/fun-zone",
},
openGraph: {
title: "Fun Zone | Gabriel Kaszewski",
description: "Games, tools, and toys I built for fun. Try them out!",
url: "https://gabrielkaszewski.dev/fun-zone",
},
twitter: {
card: "summary",
title: "Fun Zone | Gabriel Kaszewski",
description: "Games, tools, and toys I built for fun. Try them out!",
},
};
const FunZonePage = () => {
return (
<div className="flex w-full min-h-screen flex-col items-center gap-8 pt-24 px-4 pb-16">
<div className="text-center">
<h1 className="text-5xl font-bold text-yellow-400 text-shadow-lg">
Fun Zone
</h1>
<p className="text-white/50 mt-2">stuff I made for fun</p>
</div>
<FunZoneCarousel items={funZoneItems} />
</div>
);
};
export default FunZonePage;

View File

@@ -1,6 +1,28 @@
import { Metadata } from "next";
import Image from "next/image";
import { ExternalLink, Github } from "lucide-react";
export const metadata: Metadata = {
title: "K-Suite | Gabriel Kaszewski",
description:
"A cohesive ecosystem of open-source, self-hosted applications designed to restore digital sovereignty to the user.",
alternates: {
canonical: "https://gabrielkaszewski.dev/k-suite",
},
openGraph: {
title: "K-Suite | Gabriel Kaszewski",
description:
"A cohesive ecosystem of open-source, self-hosted applications designed to restore digital sovereignty to the user.",
url: "https://gabrielkaszewski.dev/k-suite",
},
twitter: {
card: "summary",
title: "K-Suite | Gabriel Kaszewski",
description:
"A cohesive ecosystem of open-source, self-hosted applications designed to restore digital sovereignty to the user.",
},
};
interface KSuiteApp {
id: number;
name: string;

View File

@@ -101,7 +101,7 @@ export default function RootLayout({
/>
<Navbar />
{children}
<main>{children}</main>
<Footer />
</body>
</html>

View File

@@ -1,9 +1,24 @@
import { Metadata } from "next";
export const metadata: Metadata = {
title: "Movie Corner",
title: "Movie Corner | Gabriel Kaszewski",
description:
"My personal cinema journal — what I watch and how I feel about it.",
alternates: {
canonical: "https://gabrielkaszewski.dev/movie-corner",
},
openGraph: {
title: "Movie Corner | Gabriel Kaszewski",
description:
"My personal cinema journal — what I watch and how I feel about it.",
url: "https://gabrielkaszewski.dev/movie-corner",
},
twitter: {
card: "summary",
title: "Movie Corner | Gabriel Kaszewski",
description:
"My personal cinema journal — what I watch and how I feel about it.",
},
};
const MOVIE_REVIEWS_URL =

View File

@@ -1,9 +1,33 @@
import { Metadata } from "next";
import AboutSummary from "@/components/about-summary";
export const metadata: Metadata = {
title: "Gabriel Kaszewski | Software Engineer",
description:
"Portfolio of Gabriel Kaszewski, a software engineer building fast, reliable software with Rust, Python, and modern web technologies.",
alternates: {
canonical: "https://gabrielkaszewski.dev",
},
openGraph: {
title: "Gabriel Kaszewski | Software Engineer",
description:
"Portfolio of Gabriel Kaszewski, a software engineer building fast, reliable software with Rust, Python, and modern web technologies.",
url: "https://gabrielkaszewski.dev",
},
twitter: {
card: "summary_large_image",
title: "Gabriel Kaszewski | Software Engineer",
description:
"Portfolio of Gabriel Kaszewski, a software engineer building fast, reliable software with Rust, Python, and modern web technologies.",
},
};
import CommercialProjects from "@/components/commercial-projects";
import Experience from "@/components/experience";
import FunZoneCta from "@/components/fun-zone-cta";
import Hero from "@/components/hero";
import Skills from "@/components/skills";
import { skills, jobs } from "@/lib/data";
import { featureFlags } from "@/lib/feature-flags";
export default function Home() {
return (
@@ -13,6 +37,7 @@ export default function Home() {
<AboutSummary />
<Skills skills={skills} />
<CommercialProjects />
{featureFlags.funZone && <FunZoneCta />}
<Experience jobs={jobs} />
</div>
</div>

39
app/photos/page.tsx Normal file
View File

@@ -0,0 +1,39 @@
import PhotoGallery from "@/components/photo-gallery";
import { photos } from "@/lib/data";
import { Metadata } from "next";
export const metadata: Metadata = {
title: "Photos | Gabriel Kaszewski",
description: "A small collection of photos taken by Gabriel Kaszewski.",
keywords: ["photography", "Sony a6400", "Nikon D5300", "photo gallery"],
alternates: {
canonical: "https://gabrielkaszewski.dev/photos",
},
openGraph: {
title: "Photos | Gabriel Kaszewski",
description: "A small collection of photos taken by Gabriel Kaszewski.",
url: "https://gabrielkaszewski.dev/photos",
},
twitter: {
card: "summary",
title: "Photos | Gabriel Kaszewski",
description: "A small collection of photos taken by Gabriel Kaszewski.",
},
};
const PhotosPage = () => {
return (
<div className="flex w-full min-h-screen flex-col items-center gap-8 pt-24 px-4 pb-16">
<div className="text-center">
<h1 className="text-5xl font-bold text-yellow-400 text-shadow-lg">
Photos
</h1>
<p className="text-white/50 mt-2">shot on Sony a6400 and Nikon D5300</p>
</div>
<PhotoGallery photos={photos} />
</div>
);
};
export default PhotosPage;

View File

@@ -23,7 +23,7 @@ export async function generateStaticParams() {
export async function generateMetadata({
params,
}: {
params: { projectName: string };
params: Promise<{ projectName: string }>;
}): Promise<Metadata> {
const { projectName } = await params;
const project = getProjectByName(projectName);
@@ -32,12 +32,18 @@ export async function generateMetadata({
return { title: "Project Not Found" };
}
const slug = encodeURIComponent(project.name.replace(/\s/g, "+"));
return {
title: `${project.name} | Gabriel Kaszewski`,
description: project.short_description,
alternates: {
canonical: `https://gabrielkaszewski.dev/projects/${slug}`,
},
openGraph: {
title: project.name,
description: project.short_description,
url: `https://gabrielkaszewski.dev/projects/${slug}`,
images:
project.thumbnails && project.thumbnails.length > 0
? [
@@ -50,13 +56,18 @@ export async function generateMetadata({
]
: undefined,
},
twitter: {
card: "summary",
title: project.name,
description: project.short_description,
},
};
}
export default async function ProjectDetailPage({
params,
}: {
params: { projectName: string };
params: Promise<{ projectName: string }>;
}) {
const { projectName } = await params;
const project = getProjectByName(projectName);

View File

@@ -6,6 +6,21 @@ export const metadata: Metadata = {
title: "My Projects | Gabriel Kaszewski",
description:
"A showcase of my work, including web applications, games, and developer tools built with Rust, Next.js, and more.",
alternates: {
canonical: "https://gabrielkaszewski.dev/projects",
},
openGraph: {
title: "My Projects | Gabriel Kaszewski",
description:
"A showcase of my work, including web applications, games, and developer tools built with Rust, Next.js, and more.",
url: "https://gabrielkaszewski.dev/projects",
},
twitter: {
card: "summary",
title: "My Projects | Gabriel Kaszewski",
description:
"A showcase of my work, including web applications, games, and developer tools built with Rust, Next.js, and more.",
},
};
const ProjectsPage = () => {