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
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:
@@ -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'm fluent in
|
||||
@@ -105,7 +123,7 @@ const AboutPage = () => {
|
||||
processes using cellular automata" 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's software is bloated, inefficient, and
|
||||
disrespectful of the user'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'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
46
app/fun-zone/page.tsx
Normal 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;
|
||||
@@ -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;
|
||||
|
||||
@@ -101,7 +101,7 @@ export default function RootLayout({
|
||||
/>
|
||||
|
||||
<Navbar />
|
||||
{children}
|
||||
<main>{children}</main>
|
||||
<Footer />
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -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 =
|
||||
|
||||
25
app/page.tsx
25
app/page.tsx
@@ -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
39
app/photos/page.tsx
Normal 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;
|
||||
@@ -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);
|
||||
|
||||
@@ -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 = () => {
|
||||
|
||||
Reference in New Issue
Block a user