My personal site, drawn as a dark manga page rather than a portfolio template. The front page mixes current presence, favourite books, selected work and a small Black Flash timing game. /work/ gives the work its own, quieter case-study surface.
The site is plain HTML, CSS and JavaScript. There is no framework or frontend build step; the npm dependencies exist for the checks.
/— personal homepage and the short work preview/work/— EntdeckerWerkStadt case study, plus honest WIP notes for Sonitor and Centauri/404.html— the matching not-found page
index.html— homepage markup and inline SVG drawingsstyles.css— shared composition, motion and accessibility modesscript.js— presence, AniList data, reveals and page interactionsflash.js— Black Flash, Domain Expansion, wheel and 404 behaviourwork/index.html,work/work.css— dedicated work pageassets/work/— screenshots from running project buildsfonts.css,fonts/— self-hosted typetests/— source and Playwright checks
The Right Now chapter reads Discord presence from Lanyard. The favourites chapter asks AniList for the three named books and their adaptations. Both surfaces fail quietly when their upstream is unavailable.
Right Now can only show activities that Discord shares with Lanyard. An empty activities array means no activity was shared; the page cannot infer that Roblox or another local app is running.
There is no analytics code in this repository. Short-lived interaction state uses sessionStorage and ends with the browser tab.
The images in assets/work/ are captures from working project builds. Sonitor and Centauri stay text-only until their own captures are ready.
python3 -m http.server 8000Open http://localhost:8000. Live-data chapters need network access; the rest does not.
npm install
npm testThe runner keeps three release gates: source integrity, desktop/mobile smoke journeys and the Lanyard/AniList fallbacks. It also writes local review captures to tests/out/.
When a versioned CSS or JavaScript asset changes, bump its ?v= value on every page that loads it.