diff --git a/app/k-suite/page.tsx b/app/k-suite/page.tsx
new file mode 100644
index 0000000..97b64ea
--- /dev/null
+++ b/app/k-suite/page.tsx
@@ -0,0 +1,433 @@
+"use client";
+
+import Image from "next/image";
+import Link from "next/link";
+import { ExternalLink, Github } from "lucide-react";
+
+interface KSuiteApp {
+ id: number;
+ name: string;
+ shortDescription: string;
+ description: string;
+ url: string;
+ githubUrl?: string | null;
+ icon: string;
+ technologies: string[];
+ color: string;
+}
+
+const kSuiteApps: KSuiteApp[] = [
+ {
+ id: 1,
+ name: "K-Notes",
+ shortDescription: "Google Keep replica",
+ description:
+ "A full-featured note-taking app designed for speed and simplicity.",
+ url: "https://knotes.gabrielkaszewski.dev/",
+ githubUrl: "https://github.com/GKaszewski/k-notes",
+ icon: "/images/k-notes.png",
+ technologies: ["Rust", "React", "TailwindCSS", "PWA"],
+ color: "from-amber-400 to-orange-500",
+ },
+ {
+ id: 2,
+ name: "Thoughts",
+ shortDescription: "Microblogging platform",
+ description:
+ "Nostalgic social platform with Frutiger Aero style. 128-char posts, custom CSS profiles.",
+ url: "https://thoughts.gabrielkaszewski.dev/",
+ githubUrl: "https://git.gabrielkaszewski.dev/GKaszewski/thoughts",
+ icon: "/images/thoughts.avif",
+ technologies: ["Rust", "Next.js", "Axum"],
+ color: "from-cyan-400 to-blue-500",
+ },
+ {
+ id: 3,
+ name: "K-Tuner",
+ shortDescription: "Instrument tuner",
+ description:
+ "Tune guitar, ukulele, and piano with this Frutiger Aero styled PWA.",
+ url: "https://tuner.gabrielkaszewski.dev/",
+ githubUrl: "https://github.com/GKaszewski/aero-tuner",
+ icon: "/images/k-tuner.png",
+ technologies: ["React", "PWA"],
+ color: "from-emerald-400 to-teal-500",
+ },
+ {
+ id: 4,
+ name: "K-QR",
+ shortDescription: "QR code generator",
+ description:
+ "High-performance QR generator. Single Rust executable serving clean HTML.",
+ url: "https://qr.gabrielkaszewski.dev/",
+ githubUrl: "https://github.com/GKaszewski/k-qr",
+ icon: "/images/k-qr.png",
+ technologies: ["Rust", "HTML"],
+ color: "from-amber-400 to-orange-500"
+ },
+];
+
+// Connection definitions for the organism
+const connections = [
+ { from: 0, to: 1 }, // K-Notes -> Thoughts
+ { from: 1, to: 2 }, // Thoughts -> K-Tuner
+ { from: 2, to: 3 }, // K-Tuner -> K-QR
+ { from: 3, to: 0 }, // K-QR -> K-Notes
+ { from: 0, to: 2 }, // K-Notes -> K-Tuner (cross)
+ { from: 1, to: 3 }, // Thoughts -> K-QR (cross)
+];
+
+const KSuiteOrganism = () => {
+ // Calculate positions for apps in a circular pattern
+ const getPosition = (index: number, total: number, radius: number) => {
+ const angle = (index * 2 * Math.PI) / total - Math.PI / 2;
+ return {
+ x: 50 + radius * Math.cos(angle),
+ y: 50 + radius * Math.sin(angle),
+ };
+ };
+
+ const radius = 35;
+ const positions = kSuiteApps.map((_, i) =>
+ getPosition(i, kSuiteApps.length, radius)
+ );
+
+ return (
+
+ {/* SVG Connection Lines */}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* Connection lines */}
+ {connections.map((conn, i) => {
+ const from = positions[conn.from];
+ const to = positions[conn.to];
+ return (
+
+ );
+ })}
+
+
+
+ {/* Lines from center to each app */}
+ {positions.map((pos, i) => (
+
+ ))}
+
+
+ {/* App Cards */}
+ {kSuiteApps.map((app, index) => {
+ const pos = positions[index];
+ return (
+
+
+ {/* Glow effect on hover */}
+
+
+ {/* Content */}
+
+
+
+
+
+ {app.name}
+
+
+ {app.shortDescription}
+
+
+ {/* Links */}
+
+
+
+
+ {app.githubUrl && (
+
+
+
+ )}
+
+
+
+
+ );
+ })}
+
+ );
+};
+
+const KSuiteAppCard = ({ app }: { app: KSuiteApp }) => {
+ return (
+
+ {/* Gradient glow */}
+
+
+
+
+
+
+
+
+
{app.name}
+
{app.shortDescription}
+
+
+
+
{app.description}
+
+
+ {app.technologies.map((tech) => (
+
+ {tech}
+
+ ))}
+
+
+
+
+
+ );
+};
+
+export default function KSuitePage() {
+ return (
+
+ {/* Hero Section */}
+
+
+
+ K-Suite
+
+
+ A cohesive ecosystem of open-source, self-hosted applications
+ designed to restore digital sovereignty to the user.
+
+
+ A "Personal Universe" containing interconnected applications ranging
+ from media playback to knowledge management.
+
+
+ {/* Organism Visualization */}
+
+
+
+
+ {/* Origin Story Section */}
+
+
+
+
+
+ Origin Story
+
+
+
+ The concept of K-Suite was born in 2017 .
+ As a middle school student, I envisioned a digital environment where every
+ tool I used was built by my own hands—a space customized exactly to my needs.
+ However, my vision at the time far outpaced my technical abilities.
+
+
+ K-Suite is the realization of that long-standing dream. It bridges the gap
+ between the middle schooler who wanted to build, and the developer who now can.
+
+
+
+
+
+
+
+ {/* Engineering Mission Section */}
+
+
+
+
+
+ Engineering Mission
+
+
+
+ This project represents my Magnum Opus .
+ It is the most ambitious software engineering undertaking I have attempted to date.
+ Beyond simply providing privacy and utility, K-Suite serves as a rigorous testing
+ ground for advanced System Design and{" "}
+ Software Architecture .
+
+
+
+ {/* Core Goals */}
+
+
Core Goals
+
+
+
+ Architectural Mastery
+
+
+ To design a distributed system where independent modules (like K-Notes)
+ function flawlessly on their own but become exponentially more powerful when connected.
+
+
+
+
+
+ Digital Sovereignty
+
+
+ To create a viable, privacy-first alternative to commercial ecosystems
+ (Google/Apple), focused entirely on open-source principles and self-hosting.
+
+
+
+
+
+ Seamless Integration
+
+
+ To solve the complex challenge of inter-app communication. In K-Suite,
+ a photo stored in K-Photos isn't just a file; it's an asset that can be
+ referenced in other apps or attached to a task in the upcoming K-Mood.
+
+
+
+
+
+
+
+
+ {/* Detailed Cards Section */}
+
+
+
+ Explore the Suite
+
+
+ Each application is designed to work independently, but together they form
+ something greater.
+
+
+ {kSuiteApps.map((app) => (
+
+ ))}
+
+
+
+
+ {/* Coming Soon Section */}
+
+
+
+
+ More Apps Coming Soon
+
+
+ K-Suite is still growing. The ecosystem will expand with more interconnected
+ applications including K-Photos, K-Mood, and more.
+
+
+ Built with Rust, React, and modern web technologies.
+
+
+
+
+
+ );
+}
diff --git a/components/navbar.tsx b/components/navbar.tsx
index 2524876..ee94b62 100644
--- a/components/navbar.tsx
+++ b/components/navbar.tsx
@@ -22,6 +22,7 @@ const Navbar = () => {
const navLinks = [
{ href: "/", label: "Home" },
+ { href: "/k-suite", label: "K-Suite" },
{ href: "/projects", label: "Projects" },
{
href: "https://blog.gabrielkaszewski.dev/",
@@ -31,6 +32,7 @@ const Navbar = () => {
{ href: "/about", label: "About" },
];
+
const baseClasses =
"fixed z-20 flex w-full items-center justify-center p-4 transition-all duration-300";
const scrolledClasses = "bg-gray-900/80 backdrop-blur-md";
@@ -38,17 +40,15 @@ const Navbar = () => {
return (
{navLinks.map((link) => {
const isActive = pathname === link.href;
- const linkClasses = `text-lg hover:text-yellow-400 transition-colors ${
- isActive ? "text-yellow-400 font-semibold" : "text-white"
- }`;
+ const linkClasses = `text-lg hover:text-yellow-400 transition-colors ${isActive ? "text-yellow-400 font-semibold" : "text-white"
+ }`;
if (link.external) {
return (
diff --git a/lib/data.ts b/lib/data.ts
index 37bfe73..995d330 100644
--- a/lib/data.ts
+++ b/lib/data.ts
@@ -166,6 +166,71 @@ export const jobs: Job[] = [
];
export const projects: Project[] = [
+ {
+ "id": 16,
+ "name": "K-Notes",
+ "short_description": "A Google Keep replica focusing on simplicity.",
+ "description": "A full-featured Google Keep replica designed for speed and simplicity. It allows users to manage their notes efficiently and is a core part of the K-Suite.\n\n**Technical details:**\n- **Backend:** Rust\n- **Frontend:** React",
+ "category": "Web",
+ "github_url": "https://github.com/GKaszewski/k-notes",
+ "visit_url": "https://knotes.gabrielkaszewski.dev/",
+ "download_url": null,
+ "technologies": [
+ "Rust",
+ "React",
+ "TailwindCSS",
+ "PWA"
+ ],
+ "thumbnails": ["/images/k-notes.png"]
+ },
+ {
+ "id": 6,
+ "name": "Thoughts",
+ "short_description": "Nostalgic microblogging platform with a Frutiger Aero aesthetic.",
+ "description": "Thoughts is a microblogging social website straight out of the 00s, featuring a distinctive Frutiger Aero style. Users can post short text-based thoughts (up to 128 characters), customize their entire profile page with their own CSS, and follow others in a purely chronological, algorithm-free environment. It's a return to the 'old times' of the web, focusing on genuine interaction and user expression.\n\n**Technical details:**\n- **Backend:** Rust\n- **Frontend:** Next.js",
+ "category": "Web",
+ "github_url": "https://git.gabrielkaszewski.dev/GKaszewski/thoughts",
+ "visit_url": "https://thoughts.gabrielkaszewski.dev/",
+ "download_url": null,
+ "technologies": [
+ "Rust",
+ "Next.js",
+ "TailwindCSS",
+ "Axum"
+ ],
+ "thumbnails": ["/images/thoughts.avif"]
+ },
+ {
+ "id": 17,
+ "name": "K-Tuner",
+ "short_description": "Web app to tune guitar, ukulele and piano.",
+ "description": "A web application for tuning musical instruments including guitar, ukulele, and piano. It features a nostalgic Frutiger Aero style and is built as a Progressive Web App (PWA) for use on any device.\n\n**Technical details:**\n- **Frontend:** React PWA",
+ "category": "Web",
+ "github_url": "https://github.com/GKaszewski/aero-tuner",
+ "visit_url": "https://tuner.gabrielkaszewski.dev/",
+ "download_url": null,
+ "technologies": [
+ "React",
+ "PWA",
+ "TailwindCSS"
+ ],
+ "thumbnails": ["/images/k-tuner.png"]
+ },
+ {
+ "id": 15,
+ "name": "K-QR",
+ "short_description": "Fast and simple QR code generator.",
+ "description": "A high-performance QR code generator built with Rust. It serves a clean HTML template and provides a fast, single-executable solution for generating QR codes. Part of the K-Suite.\n\n**Technical details:**\n- **Backend:** Rust\n- **Frontend:** HTML templates",
+ "category": "Web",
+ "github_url": "https://github.com/GKaszewski/k-qr",
+ "visit_url": "https://qr.gabrielkaszewski.dev/",
+ "download_url": null,
+ "technologies": [
+ "Rust",
+ "HTML"
+ ],
+ "thumbnails": ["/images/k-qr.png"]
+ },
{
"id": 2,
"name": "Spanish Inquisition",
@@ -177,7 +242,7 @@ export const projects: Project[] = [
"download_url": null,
"technologies": [
"C#",
- " Unity"
+ "Unity"
],
"thumbnails": []
},
@@ -192,7 +257,7 @@ export const projects: Project[] = [
"download_url": null,
"technologies": [
"Dart",
- " Flutter"
+ "Flutter"
],
"thumbnails": []
},
@@ -227,24 +292,6 @@ export const projects: Project[] = [
],
"thumbnails": []
},
- {
- "id": 6,
- "name": "Thoughts",
- "short_description": "A nostalgic social platform prioritizing chronological feeds and user customization.",
- "description": "Thoughts is a deliberate step away from algorithm-driven feeds. The vision is to create a digital \"third place\" that prioritizes genuine connection and user control, all wrapped in a nostalgic Frutiger Aero aesthetic.\n\nHere are the core principles I built this on:\n- **Chronological Above All:** Your feed is your feed, sorted by time. No algorithms, no \"you might also like.\"\n- **Radical Self-Expression:** Profiles are a canvas. I've brought back the ability for users to customize their pages with their own CSS, just like the good old days.\n- **Built for the Fediverse:** ActivityPub integration isn't in this MVP, but it's a top priority for the future to connect Thoughts with the wider decentralized web.\n\n**Technical details:**\n- **Backend:** Rust (Axum)\n- **Frontend:** Next.js\n- **Infrastructure:** Dockerized",
- "category": "Web",
- "github_url": "https://git.gabrielkaszewski.dev/GKaszewski/thoughts",
- "visit_url": "https://thoughts.gabrielkaszewski.dev/",
- "download_url": null,
- "technologies": [
- "Rust",
- "Axum",
- "Next.js",
- "Docker",
- "TailwindCSS"
- ],
- "thumbnails": []
- },
{
"id": 7,
"name": "Fleet Compass",
@@ -367,19 +414,5 @@ export const projects: Project[] = [
"Rust"
],
"thumbnails": []
- },
- {
- "id": 15,
- "name": "QR Generator",
- "short_description": "Fast and simple QR code generator.",
- "description": "A utility tool for generating QR codes instantly.",
- "category": "Api",
- "github_url": "https://github.com/GKaszewski/qr-generator",
- "visit_url": null,
- "download_url": null,
- "technologies": [
- "Rust",
- ],
- "thumbnails": []
}
];
diff --git a/public/images/k-notes.png b/public/images/k-notes.png
new file mode 100644
index 0000000..18bf68a
Binary files /dev/null and b/public/images/k-notes.png differ
diff --git a/public/images/k-qr.png b/public/images/k-qr.png
new file mode 100644
index 0000000..960dc98
Binary files /dev/null and b/public/images/k-qr.png differ
diff --git a/public/images/k-tuner.png b/public/images/k-tuner.png
new file mode 100644
index 0000000..7d7609c
Binary files /dev/null and b/public/images/k-tuner.png differ
diff --git a/public/images/thoughts.avif b/public/images/thoughts.avif
new file mode 100644
index 0000000..98b6282
Binary files /dev/null and b/public/images/thoughts.avif differ