01Client, paidSeptember 2026
Kontinuum
An atelier website rebuilt for a painter and mineralogist
Harald Wicht is a mineralogist who paints. His website was built for neither: a 2015 WordPress theme with an orange script logo, a gallery page that loaded 84 images at once, and an English version that said “Nothing Found”.
- Role
- Audit, concept, design, build, migration, handover
- Client
- Harald Wicht, Atelier Kontinuum, Balzhausen, Germany
- Timeline
- Brief 1 September 2026, live 15 September 2026
- Stack
- HTML · CSS · JavaScript · Python · Render
- Live
- kontinuum.biz
- from brief to launch
- 2 weeks
- gallery page, every work loaded
- 41 → 1.5 MB
- WCAG 2.1 AA violations, axe-core
- 224 → 0
- catalogued, filterable, zoomable, DE + EN
- 81 works
After2026

Before2015

Drag or click the card to see 2015.
What was wrong
- WordPress 4.4.33, a 2015 release, with the plugins of its time. Nothing updated since.
- The gallery loaded all 84 images at once: 41 MB, no lazy loading.
- Paintings were served at 1,000 pixels wide, and pinch-zoom was disabled in the viewport tag. On a painter’s website.
- The English site returned “Nothing Found”. Five of its pages were 404s.
- Fonts came from Google’s servers, a data-protection problem for a German site.
- Duplicate pages had piled up, and the menu offered two different Mineralogie items.
- The domain was registered to the agency, not to him.
What I did
- Set the positioning first. Not a mineral collector’s site: a crystallographer who paints. The surround went neutral so the colour comes from the work instead of from a background texture.
- Built a real catalogue. 81 works at true relative scale beside a 1,000 mm scale bar, filterable by series, each opening in a viewer that takes focus, traps Tab and hands it back on close.
- Gave the type a job. Source Serif 4 for his own writing, IBM Plex for catalogue data. Self-hosted, so nothing is fetched from Google.
- Made it static. One template and two JSON files go through a Python build on every push. No database, no CMS to patch, no monthly bill.
- Gave him the keys. The editing panel commits to GitHub rather than writing to a database, so he can add works and journal entries himself and the repository is always a complete backup.
- Fixed the images. WebP, responsive sizes, lazy loading. The full catalogue now transfers 1.5 MB instead of 41.
- Moved the domain into his name with zero downtime, redirected every old URL, and set SPF and DMARC to reject so nobody can send mail as him.
- Treated accessibility as a release gate. axe-core across all nine pages and the viewer: 224 violations down to 0, checked again in Safari and on an iPhone.
- Dropped my own headline feature. I had planned museum-grade deep zoom until I found the largest originals were 3,000 pixels. There was nothing to zoom into, so it went.
Result
| Measure | Before, 2015 site | After, September 2026 |
|---|---|---|
| Gallery page, every work loaded | 41.4 MB · 84 images | 1.5 MB · 81 works |
| Largest painting served | 1,000 px, zoom disabled | Up to 2,166 px, in a viewer |
| English | “Nothing Found”, 5 pages 404 | Every page, with hreflang |
| Accessibility, WCAG 2.1 AA (axe-core) | 224 violations | 0 |
| Software to keep patched | WordPress and its plugins | None |
| Domain | Registered to the agency | Registered to Harald |
Page weights measured on 20 September 2026 in the same browser and viewport, against the archived old site and the live new one. Accessibility measured on 16 September 2026 with axe-core.
“He did an excellent job! Short regarding time, focussing on my aim and reflecting my service to the visitors respectively customer.”