2026-04-08 12:41:54 +02:00
|
|
|
|
export interface Project {
|
|
|
|
|
|
category: ProjectCategory;
|
|
|
|
|
|
id: string;
|
|
|
|
|
|
banner: string;
|
2026-04-08 12:59:26 +02:00
|
|
|
|
bannerAlt: string;
|
2026-04-08 12:41:54 +02:00
|
|
|
|
title: string;
|
|
|
|
|
|
subtitle: string;
|
2026-04-08 13:46:09 +02:00
|
|
|
|
description: string;
|
2026-04-08 12:59:26 +02:00
|
|
|
|
isOngoing: boolean; // whether the project is currently active (true) or a past project (false)
|
|
|
|
|
|
date: string;
|
2026-04-08 12:41:54 +02:00
|
|
|
|
status: ProjectStatus;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
export enum ProjectCategory {
|
|
|
|
|
|
DRAWINGS = "drawings",
|
|
|
|
|
|
GAMES = "games",
|
|
|
|
|
|
ELECTRONICS = "electronics",
|
|
|
|
|
|
MUSIC = "music",
|
|
|
|
|
|
APPS = "apps",
|
|
|
|
|
|
MISC = "misc",
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export enum ProjectStatus {
|
|
|
|
|
|
ACTIVE = "active",
|
|
|
|
|
|
INACTIVE = "inactive",
|
|
|
|
|
|
ABANDONED = "abandoned",
|
|
|
|
|
|
FINISHED = "finished",
|
|
|
|
|
|
EOL = "end-of-life", // end of life
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Returns static codes that can be used to reference same-name CSS classes
|
|
|
|
|
|
* without relying on display text.
|
|
|
|
|
|
*/
|
|
|
|
|
|
export function getStatusCode(project: Project): String {
|
|
|
|
|
|
switch (project.status) {
|
|
|
|
|
|
case ProjectStatus.ACTIVE:
|
|
|
|
|
|
return "act";
|
|
|
|
|
|
case ProjectStatus.INACTIVE:
|
|
|
|
|
|
return "ina";
|
|
|
|
|
|
case ProjectStatus.ABANDONED:
|
|
|
|
|
|
return "aba";
|
|
|
|
|
|
case ProjectStatus.FINISHED:
|
|
|
|
|
|
return "fin";
|
|
|
|
|
|
case ProjectStatus.EOL:
|
|
|
|
|
|
return "eol";
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export const projects: Project[] = [
|
|
|
|
|
|
{
|
|
|
|
|
|
category: ProjectCategory.MISC,
|
|
|
|
|
|
id: "lightyears-font",
|
2026-04-08 13:46:09 +02:00
|
|
|
|
banner: "banner.webp",
|
|
|
|
|
|
bannerAlt: "A rainbow-like holographic effect produced by bending a reflective sheet of cardboard.",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
title: "LIGHTYEARS font",
|
|
|
|
|
|
subtitle: "stylised font",
|
2026-04-08 13:46:09 +02:00
|
|
|
|
description: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
isOngoing: false,
|
|
|
|
|
|
date: "March 2026",
|
|
|
|
|
|
status: ProjectStatus.FINISHED,
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
category: ProjectCategory.DRAWINGS,
|
|
|
|
|
|
id: "firstmonth",
|
2026-04-08 14:01:58 +02:00
|
|
|
|
banner: "banner.webp",
|
|
|
|
|
|
bannerAlt: "Several Faber-Castell Polychromos colour pencils lined up with markings next to them in the same colour on a sheet of paper.",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
title: "My First Month Drawing",
|
|
|
|
|
|
subtitle: "self-imposed drawing challenge",
|
2026-04-08 13:46:09 +02:00
|
|
|
|
description: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
isOngoing: false,
|
|
|
|
|
|
date: "February – March 2026",
|
|
|
|
|
|
status: ProjectStatus.FINISHED,
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
category: ProjectCategory.ELECTRONICS,
|
|
|
|
|
|
id: "3ds-usb-c",
|
|
|
|
|
|
banner: "",
|
2026-04-08 12:59:26 +02:00
|
|
|
|
bannerAlt: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
title: "3DS USB-C mod",
|
|
|
|
|
|
subtitle: "DIY charging port mod",
|
2026-04-08 13:46:09 +02:00
|
|
|
|
description: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
isOngoing: false,
|
|
|
|
|
|
date: "October 2024",
|
|
|
|
|
|
status: ProjectStatus.FINISHED,
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
category: ProjectCategory.ELECTRONICS,
|
|
|
|
|
|
id: "deej0461",
|
|
|
|
|
|
banner: "",
|
2026-04-08 12:59:26 +02:00
|
|
|
|
bannerAlt: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
title: "deej0461",
|
|
|
|
|
|
subtitle: "PC companion audio source controller",
|
2026-04-08 13:46:09 +02:00
|
|
|
|
description: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
isOngoing: false,
|
|
|
|
|
|
date: "August 2024",
|
|
|
|
|
|
status: ProjectStatus.FINISHED,
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
category: ProjectCategory.GAMES,
|
|
|
|
|
|
id: "projectn5",
|
|
|
|
|
|
banner: "/projects/projectn5/banner2.webp",
|
2026-04-08 12:59:26 +02:00
|
|
|
|
bannerAlt: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
title: "Homesick",
|
|
|
|
|
|
subtitle: "",
|
2026-04-08 13:46:09 +02:00
|
|
|
|
description: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
isOngoing: true,
|
|
|
|
|
|
date: "September 2023 – now",
|
|
|
|
|
|
status: ProjectStatus.ACTIVE,
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
category: ProjectCategory.GAMES,
|
|
|
|
|
|
id: "magician",
|
|
|
|
|
|
banner: "/projects/magician/banner.webp",
|
2026-04-08 12:59:26 +02:00
|
|
|
|
bannerAlt: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
title: "Magician",
|
|
|
|
|
|
subtitle: "Online Multiplayer Card Game",
|
2026-04-08 13:46:09 +02:00
|
|
|
|
description: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
isOngoing: false,
|
|
|
|
|
|
date: "July 2025",
|
|
|
|
|
|
status: ProjectStatus.ABANDONED,
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
category: ProjectCategory.GAMES,
|
|
|
|
|
|
id: "projektike",
|
|
|
|
|
|
banner: "/projects/projektike/banner.webp",
|
2026-04-08 12:59:26 +02:00
|
|
|
|
bannerAlt: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
title: "Projektike",
|
|
|
|
|
|
subtitle: "PvP Game",
|
2026-04-08 13:46:09 +02:00
|
|
|
|
description: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
isOngoing: false,
|
|
|
|
|
|
date: "August 2024 – May 2025",
|
|
|
|
|
|
status: ProjectStatus.ABANDONED,
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
category: ProjectCategory.GAMES,
|
|
|
|
|
|
id: "swordsnstuff",
|
|
|
|
|
|
banner: "/projects/swordsnstuff/banner.webp",
|
2026-04-08 12:59:26 +02:00
|
|
|
|
bannerAlt: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
title: "Swords & Stuff",
|
|
|
|
|
|
subtitle: "Unity 2D RPG",
|
2026-04-08 13:46:09 +02:00
|
|
|
|
description: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
isOngoing: false,
|
|
|
|
|
|
date: "August 2023",
|
|
|
|
|
|
status: ProjectStatus.ABANDONED,
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
category: ProjectCategory.GAMES,
|
|
|
|
|
|
id: "tads",
|
|
|
|
|
|
banner: "/projects/tads/banner.webp",
|
2026-04-08 12:59:26 +02:00
|
|
|
|
bannerAlt: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
title: "Totally Accurate Dating Simulator",
|
|
|
|
|
|
subtitle: "HTML Text Adventure",
|
2026-04-08 13:46:09 +02:00
|
|
|
|
description: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
isOngoing: false,
|
|
|
|
|
|
date: "August 2023",
|
|
|
|
|
|
status: ProjectStatus.FINISHED,
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
category: ProjectCategory.ELECTRONICS,
|
|
|
|
|
|
id: "daisyfm",
|
2026-04-08 12:59:26 +02:00
|
|
|
|
banner: "banner.webp",
|
|
|
|
|
|
bannerAlt: "Close-up of Daisy, focussed on the effect knobs",
|
|
|
|
|
|
title: "Daisy FM Synth",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
subtitle: "Electro-Smith Daisy-based FM synth",
|
2026-04-08 13:46:09 +02:00
|
|
|
|
description: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
isOngoing: false,
|
|
|
|
|
|
date: "July – September 2024",
|
|
|
|
|
|
status: ProjectStatus.FINISHED,
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
category: ProjectCategory.APPS,
|
|
|
|
|
|
id: "weserplaner",
|
|
|
|
|
|
banner: "/projects/weserplaner/banner.webp",
|
2026-04-08 12:59:26 +02:00
|
|
|
|
bannerAlt: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
title: "WeserPlaner",
|
|
|
|
|
|
subtitle: "University Timetable & Canteen Info App",
|
2026-04-08 13:46:09 +02:00
|
|
|
|
description: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
isOngoing: false,
|
|
|
|
|
|
date: "April 2023 – January 2024",
|
|
|
|
|
|
status: ProjectStatus.EOL,
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
category: ProjectCategory.APPS,
|
|
|
|
|
|
id: "textbasic",
|
|
|
|
|
|
banner: "",
|
2026-04-08 12:59:26 +02:00
|
|
|
|
bannerAlt: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
title: "Text Basic",
|
|
|
|
|
|
subtitle: "Extremely Basic Text Widget App",
|
2026-04-08 13:46:09 +02:00
|
|
|
|
description: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
isOngoing: false,
|
|
|
|
|
|
date: "May – November 2023",
|
|
|
|
|
|
status: ProjectStatus.EOL,
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
category: ProjectCategory.APPS,
|
|
|
|
|
|
id: "qwark",
|
|
|
|
|
|
banner: "",
|
2026-04-08 12:59:26 +02:00
|
|
|
|
bannerAlt: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
title: "Qwark Grade Log",
|
|
|
|
|
|
subtitle: "Grade Logging App",
|
2026-04-08 13:46:09 +02:00
|
|
|
|
description: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
isOngoing: false,
|
|
|
|
|
|
date: "June 2019 – March 2020",
|
|
|
|
|
|
status: ProjectStatus.EOL,
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
category: ProjectCategory.APPS,
|
|
|
|
|
|
id: "avhplan",
|
|
|
|
|
|
banner: "",
|
2026-04-08 12:59:26 +02:00
|
|
|
|
bannerAlt: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
title: "AvH-Vertretungsplan",
|
|
|
|
|
|
subtitle: "Substitution Plan App",
|
2026-04-08 13:46:09 +02:00
|
|
|
|
description: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
isOngoing: false,
|
|
|
|
|
|
date: "April 2019 – March 2020",
|
|
|
|
|
|
status: ProjectStatus.EOL,
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
category: ProjectCategory.MUSIC,
|
|
|
|
|
|
id: "dreamworld",
|
|
|
|
|
|
banner: "/projects/dreamworld/banner.webp",
|
2026-04-08 12:59:26 +02:00
|
|
|
|
bannerAlt: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
title: "Dreamworld",
|
|
|
|
|
|
subtitle: "My First Album",
|
2026-04-08 13:46:09 +02:00
|
|
|
|
description: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
isOngoing: false,
|
|
|
|
|
|
date: "July 2019 – September 2021",
|
|
|
|
|
|
status: ProjectStatus.FINISHED,
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
category: ProjectCategory.MUSIC,
|
|
|
|
|
|
id: "anewbeginning",
|
|
|
|
|
|
banner: "",
|
2026-04-08 12:59:26 +02:00
|
|
|
|
bannerAlt: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
title: "A New Beginning",
|
|
|
|
|
|
subtitle: "",
|
2026-04-08 13:46:09 +02:00
|
|
|
|
description: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
isOngoing: false,
|
|
|
|
|
|
date: "May – August 2018",
|
|
|
|
|
|
status: ProjectStatus.FINISHED,
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
category: ProjectCategory.MUSIC,
|
|
|
|
|
|
id: "soundcloud",
|
|
|
|
|
|
banner: "",
|
2026-04-08 12:59:26 +02:00
|
|
|
|
bannerAlt: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
title: "Soundcloud",
|
|
|
|
|
|
subtitle: "Demo Dump & Archive",
|
2026-04-08 13:46:09 +02:00
|
|
|
|
description: "",
|
2026-04-08 12:41:54 +02:00
|
|
|
|
isOngoing: false,
|
|
|
|
|
|
date: "",
|
|
|
|
|
|
status: ProjectStatus.INACTIVE,
|
|
|
|
|
|
},
|
|
|
|
|
|
];
|