export interface Project { category: ProjectCategory; id: string; directLink?: string; // for linking somewhere directly instead of a project page banner: string; bannerAlt: string; title: string; subtitle: string; description: string; isOngoing: boolean; // whether the project is currently active (true) or a past project (false) date: string; status: ProjectStatus; links: Link[]; // may pass an empty array }; export interface Link { text: string; link: string; } 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: "banner.webp", bannerAlt: "A rainbow-like holographic effect produced by bending a reflective sheet of cardboard.", title: "LIGHTYEARS font", subtitle: "stylised font", description: "", isOngoing: false, date: "March 2026", status: ProjectStatus.FINISHED, links: [ { text: "download the font", link: "https://files.natconf.dev/public/lightyears.woff2", } ], }, { category: ProjectCategory.DRAWINGS, id: "firstmonth", 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.", title: "My First Month Drawing", subtitle: "self-imposed drawing challenge", description: "", isOngoing: false, date: "February – March 2026", status: ProjectStatus.FINISHED, links: [ ], }, { category: ProjectCategory.ELECTRONICS, id: "3ds-usb-c", banner: "", bannerAlt: "", title: "3DS USB-C mod", subtitle: "DIY charging port mod", description: "", isOngoing: false, date: "October 2024", status: ProjectStatus.FINISHED, links: [ ], }, { category: ProjectCategory.ELECTRONICS, id: "deej0461", banner: "", bannerAlt: "", title: "deej0461", subtitle: "PC companion audio source controller", description: "", isOngoing: false, date: "August 2024", status: ProjectStatus.FINISHED, links: [ ], }, { category: ProjectCategory.GAMES, id: "projectn5", directLink: "/projects/projectn5", banner: "/projects/projectn5/banner2.webp", bannerAlt: "", title: "Homesick", subtitle: "", description: "", isOngoing: true, date: "September 2023 – now", status: ProjectStatus.ACTIVE, links: [ { text: "view the development log", link: "/projects/projectn5", }, { text: "play an old web build (developed until 2025-05-16)", link: "https://apps.natconf.dev/projectn5", }, { text: "download the old Windows builds", link: "https://files.natconf.dev/public/projectn5", }, ], }, { category: ProjectCategory.GAMES, id: "magician", banner: "/projects/magician/banner.webp", bannerAlt: "", title: "Magician", subtitle: "Online Multiplayer Card Game", description: "", isOngoing: false, date: "July 2025", status: ProjectStatus.ABANDONED, links: [ { text: "view the latest Magician build", link: "https://apps.natconf.dev/magician", }, ], }, { category: ProjectCategory.GAMES, id: "projektike", banner: "/projects/projektike/banner.webp", bannerAlt: "", title: "Projektike", subtitle: "PvP Game", description: "", isOngoing: false, date: "August 2024 – May 2025", status: ProjectStatus.ABANDONED, links: [ ], }, { category: ProjectCategory.GAMES, id: "swordsnstuff", banner: "/projects/swordsnstuff/banner.webp", bannerAlt: "", title: "Swords & Stuff", subtitle: "Unity 2D RPG", description: "", isOngoing: false, date: "August 2023", status: ProjectStatus.ABANDONED, links: [ { text: "play Swords & Stuff", link: "https://apps.natconf.dev/swordsnstuff", }, ], }, { category: ProjectCategory.GAMES, id: "tads", banner: "/projects/tads/banner.webp", bannerAlt: "", title: "Totally Accurate Dating Simulator", subtitle: "HTML Text Adventure", description: "", isOngoing: false, date: "August 2023", status: ProjectStatus.FINISHED, links: [ { text: "play TADS 1", link: "https://apps.natconf.dev/tads/1", }, { text: "play TADS 2", link: "https://apps.natconf.dev/tads/2", }, ], }, { category: ProjectCategory.ELECTRONICS, id: "daisyfm", banner: "banner.webp", bannerAlt: "Close-up of Daisy, focussed on the effect knobs", title: "Daisy FM Synth", subtitle: "Electro-Smith Daisy-based FM synth", description: "", isOngoing: false, date: "July – September 2024", status: ProjectStatus.FINISHED, links: [ { text: "get the PCB and STL files", link: "https://files.natconf.dev/public/daisyfm/", }, { text: "view the code files on Codeberg", link: "https://codeberg.org/denizk0461/daisy-fm-synth", }, ], }, { category: ProjectCategory.APPS, id: "weserplaner", banner: "/projects/weserplaner/banner.webp", bannerAlt: "", title: "WeserPlaner", subtitle: "University Timetable & Canteen Info App", description: "", isOngoing: false, date: "April 2023 – January 2024", status: ProjectStatus.EOL, links: [ { text: "view on Codeberg", link: "https://codeberg.org/denizk0461/weserplaner/", }, { text: "link to the former Google Play store page", link: "https://play.google.com/store/apps/details?id=com.denizk0461.weserplaner", }, ], }, { category: ProjectCategory.APPS, id: "textbasic", banner: "", bannerAlt: "", title: "Text Basic", subtitle: "Extremely Basic Text Widget App", description: "", isOngoing: false, date: "May – November 2023", status: ProjectStatus.EOL, links: [ { text: "view on Codeberg", link: "https://codeberg.org/denizk0461/text-basic/", }, { text: "link to the former Google Play store page", link: "https://play.google.com/store/apps/details?id=com.denizk0461.textbasic", }, ], }, { category: ProjectCategory.APPS, id: "qwark", banner: "", bannerAlt: "", title: "Qwark Grade Log", subtitle: "Grade Logging App", description: "", isOngoing: false, date: "June 2019 – March 2020", status: ProjectStatus.EOL, links: [ { text: "view the Android app source code on GitHub", link: "https://github.com/denizk0461/qwark", }, ], }, { category: ProjectCategory.APPS, id: "avhplan", banner: "", bannerAlt: "", title: "AvH-Vertretungsplan", subtitle: "Substitution Plan App", description: "", isOngoing: false, date: "April 2019 – March 2020", status: ProjectStatus.EOL, links: [ { text: "view the Android app source code on GitHub", link: "https://github.com/denizk0461/avh-substitution-plan", }, { text: "view the iOS app source code on GitHub", link: "https://github.com/denizk0461/avh-plan-ios", }, ], }, { category: ProjectCategory.MUSIC, id: "dreamworld", banner: "/projects/dreamworld/banner.webp", bannerAlt: "", title: "Dreamworld", subtitle: "My First Album", description: "", isOngoing: false, date: "July 2019 – September 2021", status: ProjectStatus.FINISHED, links: [ { text: "listen & download on copyparty", link: "https://files.natconf.dev/public/my_tracks/Dreamworld/", }, ], }, { category: ProjectCategory.MUSIC, id: "anewbeginning", banner: "", bannerAlt: "", title: "A New Beginning", subtitle: "", description: "", isOngoing: false, date: "May – August 2018", status: ProjectStatus.FINISHED, links: [ { text: "listen & download on copyparty", link: "https://files.natconf.dev/public/my_tracks/A%20New%20Beginning/", }, ], }, { category: ProjectCategory.MUSIC, id: "soundcloud", banner: "", bannerAlt: "", title: "Soundcloud", subtitle: "Demo Dump & Archive", description: "", isOngoing: false, date: "", status: ProjectStatus.INACTIVE, links: [ { text: "demo dump on Soundcloud", link: "https://soundcloud.com/denizk0461", }, { text: "archive on Soundcloud", link: "https://soundcloud.com/djd4rkn355", }, ], }, ];