┌─ MANIFEST ──────────────────────────────────────────────────────────────────┐
│ │
│ I build small, opinionated web things — and the occasional desktop │
│ oddity. React, TypeScript, Cloudflare Workers, Hono, Python, numpy. │
│ │
│ Currently obsessed with: things that outlast their author. QR codes │
│ verified against the ISO spec. State-switch architectures. DSP that │
│ stays deterministic forever. Portfolios that load in under a second │
│ on a phone in a basement. │
│ │
│ Based in Stockholm. Open to interesting work. │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
|
personal finance terminal Connects to Lansförsakringar Bank via Enable Banking Open Banking API (RS256 JWT). Five-stage categorization pipeline: self-transfer detection → MCC codes → keyword rules → merchant cache → Gemini 2.0 Flash fallback. Budget periods run salary-cycle to salary-cycle, not calendar months. Savings goals with Vercel Blob images and monthly auto-sweep of surplus. Anomaly flagging, what-if budget simulator, recurring payment auto-detection, retro-CLI aesthetic throughout.
→ live |
Dark souls inspired personal portfolio React 19 · Vite 6 · Tailwind 4 ·
→ live |
|
verified-permanent QR codes A QR generator built for codes that get tattooed and must work for life. Encoder verified bit-for-bit against the ISO/IEC 18004 Annex I worked example. Every output round-tripped through three independent decoders (jsQR, zxing-js, native
|
subdermal |
|
a typing survival game Browser typing game, Dark-Souls aesthetic. Four zones, three bosses, parry system, dodge-roll i-frames. Three HiDPI canvases, game state in refs (HUD ticks at 10 Hz, no per-keystroke React renders). All audio synthesized via Web Audio on demand — cathedral reverb bus, dissonant tritone drones per zone, inharmonic bell partials.
→ live |
a desktop pet that chews audio Frameless, transparent, mouth-shaped Windows app for the artist Carpet Eater. Drag any audio file onto it — it chews and spits a mangled version next to the original. Five DSP chains, nine pure-numpy stages, deterministic from a SHA-1 of the input file (same input → same output, forever). PyInstaller + Inno Setup, GitHub Actions CI builds EXE + installer + portable on every push.
|
|
3D scroll-driven portfolio for a designer Built (pro bono) for designer Ema Stoyanova.
→ live |
horror-realism portfolio · live calendar booking Built (pro bono) for tattoo artist Sharon Shakti (@sharonnshakti). Next.js 14 App Router with a React Three Fiber hero, simplex-noise displacement shader + canvas2D oxblood ember particles. Google Calendar is the sole source of truth for availability; no database. Three API routes handle slot queries, 28-day horizon availability, and atomic booking with race-condition guard. Gothic ornament system: SVG quatrefoils, arcade arches, tracery corners, pointed-arch clip-path buttons.
→ live |
|
generative art — N-body attractor simulation Single-file p5.js canvas piece. Particles are pulled by four orbiting inverse-square attractors and perturbed by layered Perlin noise. Velocity is mapped to HSB colour — slow particles burn deep crimson, fast ones shift blood-orange. Trails accumulate on a persistent off-screen buffer and decay frame-by-frame. A counter-rotating sigil of concentric polygons (hexagon · nonagon · dodecagon) sits beneath as geometric substrate.
→ live |
┌─ PRIMARY ──────────────────────────────────────────────────────────────┐
│ TypeScript React Vite Hono Cloudflare Workers Tailwind │
└────────────────────────────────────────────────────────────────────────┘
┌─ ALSO COMFORTABLE WITH ────────────────────────────────────────────────┐
│ Python numpy PySide6/Qt Three.js / R3F GLSL Node │
│ D1 / SQLite Postgres Vercel GitHub Actions Playwright │
└────────────────────────────────────────────────────────────────────────┘
$ contact --priority high
↳ max.wik@icloud.com
↳ +46 70 736 05 15
↳ stockholm, se
↳ open to: cool projects · full-stack · creative engineering
// EOF — built with care, on a ground of ink, in a font of bone, with one drop of blood.

