export interface Project { category: ProjectCategory; id: string; isOngoing: boolean; // whether the project is currently active (true) or a past project (false) banner: string; date: string; title: string; subtitle: string; 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", banner: "", title: "LIGHTYEARS font", subtitle: "stylised font", isOngoing: false, date: "March 2026", status: ProjectStatus.FINISHED, }, { category: ProjectCategory.DRAWINGS, id: "firstmonth", banner: "", title: "My First Month Drawing", subtitle: "self-imposed drawing challenge", isOngoing: false, date: "February – March 2026", status: ProjectStatus.FINISHED, }, { category: ProjectCategory.ELECTRONICS, id: "3ds-usb-c", banner: "", title: "3DS USB-C mod", subtitle: "DIY charging port mod", isOngoing: false, date: "October 2024", status: ProjectStatus.FINISHED, }, { category: ProjectCategory.ELECTRONICS, id: "deej0461", banner: "", title: "deej0461", subtitle: "PC companion audio source controller", isOngoing: false, date: "August 2024", status: ProjectStatus.FINISHED, }, { category: ProjectCategory.GAMES, id: "projectn5", banner: "/projects/projectn5/banner2.webp", title: "Homesick", subtitle: "", isOngoing: true, date: "September 2023 – now", status: ProjectStatus.ACTIVE, }, { category: ProjectCategory.GAMES, id: "magician", banner: "/projects/magician/banner.webp", title: "Magician", subtitle: "Online Multiplayer Card Game", isOngoing: false, date: "July 2025", status: ProjectStatus.ABANDONED, }, { category: ProjectCategory.GAMES, id: "projektike", banner: "/projects/projektike/banner.webp", title: "Projektike", subtitle: "PvP Game", isOngoing: false, date: "August 2024 – May 2025", status: ProjectStatus.ABANDONED, }, { category: ProjectCategory.GAMES, id: "swordsnstuff", banner: "/projects/swordsnstuff/banner.webp", title: "Swords & Stuff", subtitle: "Unity 2D RPG", isOngoing: false, date: "August 2023", status: ProjectStatus.ABANDONED, }, { category: ProjectCategory.GAMES, id: "tads", banner: "/projects/tads/banner.webp", title: "Totally Accurate Dating Simulator", subtitle: "HTML Text Adventure", isOngoing: false, date: "August 2023", status: ProjectStatus.FINISHED, }, { category: ProjectCategory.ELECTRONICS, id: "daisyfm", banner: "/projects/daisyfm/banner.webp", title: "Daisy", subtitle: "Electro-Smith Daisy-based FM synth", isOngoing: false, date: "July – September 2024", status: ProjectStatus.FINISHED, }, { category: ProjectCategory.APPS, id: "weserplaner", banner: "/projects/weserplaner/banner.webp", title: "WeserPlaner", subtitle: "University Timetable & Canteen Info App", isOngoing: false, date: "April 2023 – January 2024", status: ProjectStatus.EOL, }, { category: ProjectCategory.APPS, id: "textbasic", banner: "", title: "Text Basic", subtitle: "Extremely Basic Text Widget App", isOngoing: false, date: "May – November 2023", status: ProjectStatus.EOL, }, { category: ProjectCategory.APPS, id: "qwark", banner: "", title: "Qwark Grade Log", subtitle: "Grade Logging App", isOngoing: false, date: "June 2019 – March 2020", status: ProjectStatus.EOL, }, { category: ProjectCategory.APPS, id: "avhplan", banner: "", title: "AvH-Vertretungsplan", subtitle: "Substitution Plan App", isOngoing: false, date: "April 2019 – March 2020", status: ProjectStatus.EOL, }, { category: ProjectCategory.MUSIC, id: "dreamworld", banner: "/projects/dreamworld/banner.webp", title: "Dreamworld", subtitle: "My First Album", isOngoing: false, date: "July 2019 – September 2021", status: ProjectStatus.FINISHED, }, { category: ProjectCategory.MUSIC, id: "anewbeginning", banner: "", title: "A New Beginning", subtitle: "", isOngoing: false, date: "May – August 2018", status: ProjectStatus.FINISHED, }, { category: ProjectCategory.MUSIC, id: "soundcloud", banner: "", title: "Soundcloud", subtitle: "Demo Dump & Archive", isOngoing: false, date: "", status: ProjectStatus.INACTIVE, }, ];