Case study / 03
Vienna · 2026
Design & code
5 min read
The site you're
on. Built to edit,
not to impress.
I wanted a portfolio that didn't feel like a portfolio. Static files, one FTP upload, no build step, no CMS. Every section a plain HTML block I can rewrite in five minutes on a train.
Overview · what the job actually was
The brief I
gave myself.
Every personal site I've built before rotted. React versions, framework churn, broken builds two years later. This time: three folders, static files, FTP, done.
Every section is a banner-commented HTML block. Every behaviour is attribute-driven: data-mail, data-clock, data-img-slot. If I want to move, swap, or delete something, I open a file and do it. No build, no deploy script, no dependency graph.
Process · how it came together
01 · Scope
One homepage, a few cases
Decided up front: no blog, no tag system, no dark-mode toggle, no newsletter. If it adds a dependency, it waits.
02 · Type
Syne + Instrument Serif
Set the display face first, then the body, then the mono. Everything else is derivative. Colour system in OKLCH: ink, paper, one accent.
03 · Code
Claude as pair-programmer
Wrote the structure and the copy; Claude did the CSS fine-tune and wired Last.fm. Three JS files, zero bundling, one config.
04 · Ship
FTP to world4you
Upload, refresh, done. If it breaks in two years,
index.html will still open. That's the whole bet.Selected views · screenshots would be weird, here
uhm.. why don't you
just… look at the page?
you're already on it · refresh for the full tour
The whole repo · three folders, a handful of files
project/~45kb critical path
project/
├── index.html · home, seven sections
├── css/
│ ├── base.css · tokens, cursor, topbar
│ ├── home.css · home-only layout
│ ├── case-study.css · every case page
│ └── about-long.css · long-form article
├── js/
│ ├── config.js · one object, all the knobs
│ ├── base.js · cursor, clock, fade, copy, img
│ └── lastfm.js · now-playing + top 5 fallback
└── pages/
├── about-long.html
├── case-professional-shitposting.html
├── case-sip.html
└── case-nyp-at.html ←︎ you are here
Results · at launch
0
Build steps
Save, FTP, refresh. If Windows Notepad can open it, it's in scope.
3
JS files, total
config · base · lastfm. Loaded in that order. No minifier.~45kb
Critical path
Home page, before fonts hydrate. Loads anywhere, on anything.
Credits &
colophon.
- Design & code
- Niklas Yann Pühringer
- Pair
- Claude (Opus 4.7), CSS & JS fine-tune
- Host
- world4you, plain FTP, no CI
- Type
- Syne · Instrument Serif · JetBrains Mono
- Colour
- OKLCH tokens: ink, paper, one accent
- Live
- Last.fm now-playing, Vienna clock