Files
portfolio/app/_data/projects.ts

100 lines
3.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export type ProjectLink = { label: string; href: string };
export type ProjectSection = {
title: string;
content: string;
};
export type Project = {
slug: string;
title: string;
description: string;
tag: string;
href: string;
image: string;
year?: string;
stack?: string[];
status?: "Live" | "WIP" | "Archived";
links?: ProjectLink[];
sections?: ProjectSection[];
gallery?: string[];
};
export const projects: Project[] = [
{
slug: "unraid-docker",
title: "Unraid + Docker Homelab",
description:
"Cloudflare Tunnel → NPM → Docker services. Clean routing, access control, and observability-first layout.",
tag: "Infrastructure + UI",
href: "/projects/unraid-docker",
image: "/projects/unraid_docker.png",
year: "2026",
stack: ["Unraid", "Docker", "Cloudflare", "NPM"],
status: "WIP",
links: [
{ label: "Home", href: "/" },
{ label: "Lab", href: "/lab" },
{ label: "Projects", href: "/#projects" },
],
gallery: [
"/projects/unraid_docker.png",
"/projects/image_2026-02-21_112603143.png",
],
sections: [
{
title: "Goal",
content:
"A secure, cleanly routed homelab with no open router ports—Cloudflare Tunnel into Nginx Proxy Manager, backed by containerized services and a structured dashboard UI.",
},
{
title: "Architecture",
content:
"Cloudflare → Tunnel → NPM → service containers. The portfolio and dashboard live behind NPM; access lists protect sensitive routes.",
},
{
title: "Next",
content:
"Wire read-only Docker discovery via docker-socket-proxy, then implement the Lab dashboard: metrics row, service list, and topology visualization with Hide IP/Ports ON by default.",
},
],
},
{
slug: "macropad",
title: "Macropad Controller",
description:
"A tactile control surface for workflows: 12 macro keys, 4 encoders, and RGB feedback — paired with a desktop app for press/hold macros and per-app volume control.",
tag: "Embedded + Desktop",
href: "/projects/macropad",
image: "/projects/macropad.png",
year: "20252026",
stack: ["ESP32", "USB HID", "FastLED", "Python", "GUI", "EEPROM"],
status: "WIP",
links: [
{ label: "Home", href: "/" },
{ label: "Projects", href: "/#projects" },
],
gallery: [
"/projects/macropad.png",
"/projects/Model.png",
],
sections: [
{
title: "What it is",
content:
"A programmable macropad with physical controls and real-time RGB feedback. Its built for fast actions (macros), precise adjustments (encoders), and clear state visibility (LED bars/rings).",
},
{
title: "Why it exists",
content:
"Keyboard shortcuts are powerful but invisible. This gives you a physical interface where macros, holds, and volume states are obvious and consistent across apps.",
},
{
title: "How it works",
content:
"The desktop app assigns press/hold macros and target apps for volume control. The ESP32 executes input logic and drives LED animation synced to system state.",
},
],
},
];