Hagen Aad Fock — Vienna
I build things nobody asked for.
Maps, games, data analysis, a terminal from a time that never existed. Some of it is useful, all of it works — and the next bit of mischief is already under way.
Projects
14 entries
-
date.fock.rocks
CupidLeaks
A lexicon of the dating-app ecosystem — plus a tool that reads your Hinge export without a single file ever leaving your browser.
Details
A bilingual educational site on the dating-app ecosystem, with an analyzer for your own data.
Lexicon
- 11 modules, DE and EN: overview, asymmetries, attention economy
- Communication and ghosting, metrics (PVS/SMR/MRR/MDC), algorithmic mechanics
- Monetisation and surveillance pricing, algorithmic bias
- Safety and trust, LGBTQIA+ and non-binary reality, glossary
Analyzer
- Platform-agnostic pipeline; Hinge first, Tinder/Bumble/OkCupid prepared
- A Web Worker unpacks the ZIP with fflate, validates against a Zod schema, computes the metrics
- Strictly client-side — no API, no server storage, no tracker
- Dashboard with funnel, activity timeline, distributions, repeat detection
Stack
Astro 5, Svelte 5, TypeScript in strict mode, Tailwind 4, MDX, Pagefind, Observable Plot, Vitest. Content Security Policy
default-src 'self'. -
schabernack.fun
schabernack.fun
A curated Vienna planner: what is actually happening in the next ten days — researched by two agents, approved by hand.
Details
An events planner for Vienna that deliberately keeps a short horizon: the next ten days only, and only what has been checked.
Editing
- A research run is started by hand, never on a timer
- Hits arrive in the editor as candidates and are approved one by one
- Only then do they become public
- A failed run changes neither events nor decisions already made
Research
- Two agents run independently and in parallel
- Their results are then condensed into one deduplicated, verified candidate pool
- Existing events are updated without overwriting approvals
Stack
FastAPI with SQLite, shipped as a rootless Podman stack. The admin area sits behind the central Authelia login with a second factor, the runner API behind a bearer token. Display face is Barlow Condensed, self-hosted.
-
sexpo.schabernack.fun
sexpo.schabernack.fun
An outfit guide for sex-positive parties in Vienna: sources checked one by one at the source, dress-code orientation, and a separate page of places to look.
Details
A private guide to the question that comes before every sex-positive party: what do I wear, and where do I get it.
Directory
- Vienna shops, European mail order and hardware-store material
- Filter by assortment, vibe, place, budget and lead time
- Every card states how well it is evidenced and when it was checked
- Where an earlier version got something wrong, the correction sits on the card
Inspiration
- A point of its own for places to look: archives, magazines, communities, tutorials
- No shop, no prices, only places that show what is possible
- Access, language and explicit content are named on every entry
Stack
Static HTML with no framework, served by nginx in a rootless Podman container. Content Security Policy
default-src 'none', no cookies, no tracker, no third-party origin: fonts, images and mascots all live in the site's own tree. The design system follows a GSAP reference, with every deviation documented at/styleguide/. The site carriesnoindexand is not meant for search engines. -
art.fock.rocks
Generative Art Gallery
Over 50 interactive canvas pieces: fractals at BigInt precision, physics simulations, cellular automata.
Details
A collection of algorithmic work where the mathematics makes the picture.
Highlights
- Mandelbrot set in a Web Worker, 96-bit BigInt precision for effectively endless zoom
- Physics: cloth with Verlet integration, double pendulum, Brownian motion
- Cellular automata: Game of Life, Langton's Ant, Wireworld, Brian's Brain
- Particles: Boids flocking, flow fields with Perlin noise, diffusion-limited aggregation
Controls
- Touch-optimised
- Immersive mode (H key) hides the interface
- Over 20 colour palettes
- An explanatory note with further reading on every piece
-
arena.fock.rocks
Any Arena
A ranking for anything comparable: create an arena, vote head-to-head, let Elo settle it.
Details
An Elo-based comparison platform for anything you can put up against something else: films, food, songs, games.
Core
- Arenas with any number of entries, added one by one or via CSV import
- Head-to-head matchups with matchmaking by similar Elo rating
- Live leaderboard via polling with ETag caching
- Draw option when both sides are equally good
Elo
- Standard calculation with K-factor 32
- Atomic transactions using PostgreSQL row locks
- Match history showing the Elo change per duel
Controls
- Keyboard: arrow keys or A/D/S
- Mobile: swipe left or right
- Optimistic UI, the result lands immediately
Also
- Private arenas, reachable only via link
- Editing protected by password (bcrypt)
- Light and dark mode
-
vesica.fock.rocks
Vesica
Answers "where should we meet?" geometrically: two circles, their overlap, and the places inside it.
Details
Named after the vesica piscis, the overlap of two circles.
Maths
- Haversine formula for distances across the curvature of the Earth
- Two intersection points (P1 and P2) mark the geometrically fair meeting points
- Circle radius = 60% of the distance between the two locations
Search
- Overpass API for OpenStreetMap data
- Restaurants, cafés, bars, fast food
- Two modes: intersection area (fast) or vesica lens (thorough)
- Marker clustering so the map stays readable
Controls
- Drag a marker, everything recalculates at once
- Address search via Nominatim
- Filter sidebar with swipe gestures
- Haptic feedback on mobile, first-visit walkthrough, DE and EN
-
games.fock.rocks
Drinking Games
101 drinking games from around the world, searchable and filterable by category, group size, kit, duration and intensity.
Details
A collection for the evening when nobody can remember what to play.
Categories
- Cards: Kings, Bus Driver, Horse Race
- Dice: Mäxchen, Schocken, 21
- Word: Never Have I Ever, Truth or Dare
- Physical: Beer Pong, Flunky Ball, Flip Cup
- Cups: Rage Cage, Slap Cup, Chandeliers
Features
- Full-text search with fuzzy matching as a fallback
- Filter by category, group size, duration, intensity, kit and favourites
- Shareable filter URLs, favourites and restored scroll position
- Random game within the active filters
- Large-type and print views for the rules
- Fully bilingual, mobile-first, 208 statically generated pages
-
bricks.fock.rocks
Brick Breaker
A 1984 arcade game nobody built in 1984: seven hand-placed boards, a pixel renderer, a CRT picture — all of it forced by a wall of tests.
Details
Breakout in cabinet dress, written without a single runtime dependency.
Game
- Seven stages, each a shape of its own: INVADER, PYRAMID, FORTRESS, TUNNEL, CROSSHATCH, SKULL, HEART
- 77 to 114 bricks per board, every board mirror-symmetric and placed by hand
- Brick types: normal, hardened, indestructible steel, explosive with chain reactions
- Six power-ups: wide paddle, slow ball, multiball, sticky paddle, laser, extra life
- Keyboard, mouse and touch; the high score stays in your browser
Engineering
- Physics lives in a DOM-free module with its own seeded random source — the same input replays exactly
- The renderer draws to a small pixel grid and upscales hard; the bitmap font is painted glyph by glyph
- Scanlines, vignette and screen shake, all yielding to
prefers-reduced-motion - Chiptune from square waves via WebAudio, no audio files
- Three files, about 1600 lines, no build step
How it was made
Built by a loop rather than by hand: 43 locked tests describe the physics, the levels and the look, and an agent ran against them until every gate went green. The tests themselves were off limits — a checksum kept score.
-
leet.fock.rocks
1337 C0NV3R73R
Leet speak both ways, in three intensities, in a terminal that never existed.
Details
A converter with hacker-terminal aesthetics. Server-rendered, so it works without JavaScript too.
Levels
- N00B — the basic substitutions: A→4, E→3, I→1, O→0
- PR0 — plus S→$, T→7, L→1, B→8, G→6
- H4X0R — plus H→|-|, W→\/\/, M→|/|, N→|\|, K→|<
Features
- Both directions: text→leet and leet→text
- Decoder works longest-match-first for multi-character patterns
- Scanlines, neon, typewriter output
Easter eggs
- Konami code (↑↑↓↓←→←→BA)
- The secret "Hack the Planet" command
- ASCII art in the source, for anyone who looks
-
anime.fock.rocks
Anime.js Showcase
Eleven sections showing what anime.js can do — built as one continuous sci-fi interface.
Details
A multi-page demonstration of anime.js v3, held together by a mission-control overview.
The eleven sections
- Boot — character stagger with cursor trail and CRT glitch
- Tweening — translateX, rotate, scale, color and skewX, hands-on
- Easing — eight easing functions side by side, linear through spring
- Timeline —
anime.timeline()with overlaps and reverse play - Stagger — grid propagation: center, corner, random
- SVG — path drawing, morphing, follow-path
- Parallax — multi-layer starfield with planets
- Physics — spring physics to play with: RUBBER / STEEL / JELLY
- Sequencer — 16-step sequencer with a speed control
- Morph — SVG morphing gallery with pause and play
- Finale — particle explosion and letter burst
Stack
Plain JavaScript, no framework, no build step. Custom cursor, scroll progress, HUD elements.
-
mitfiebern.wien
Public Viewing Vienna
Map and list of every screening venue for the 2026 World Cup in Vienna — with sources and a plausibility rating per venue.
Details
Collects the public screening venues for the 2026 World Cup (11 June to 19 July) in Vienna: bars, sports pubs, fan zones, squares.
Features
- List and map (Leaflet/OpenStreetMap), filterable by district, type, indoor/outdoor and rating
- Per venue: every source linked, retrieval date, rating with a transparent explanation
- "Dispute / correct" with a unique tracking code and optional email delivery
- Status page and admin console for answering reports
Plausibility rating
Weighs source type, number of independent sources, recency, completeness and community confirmations into one score.
Stack
Astro 5 with SSR, Svelte 5 islands, TypeScript, Drizzle ORM, PostgreSQL, Nodemailer, argon2. No external SaaS, no Google Maps.
-
cf-ventures.tirol
CF-Ventures FlexCo
Corporate site for an Austrian FlexCo based in Tyrol — development, trade, distribution.
Details
The web presence of CF-Ventures FlexCo, based in Tyrol.
Design
- Quiet corporate design with emerald and gold accents
- Dark hero with an animated grid
- Responsive throughout, mobile-first
Stack
Static HTML, CSS and JavaScript, no framework. Open Graph and structured data for search. Served by nginx behind a Traefik reverse proxy.
-
ibex-drink.com
IBEX Alpenbreeze
Brand and sales presence for an Austrian hard seltzer — lemon, lime, mint, 4% ABV.
Details
The presence for IBEX Alpenbreeze, a brand of CF-Ventures FlexCo.
Product
- Hard seltzer with lemon, lime and mint
- 4% ABV
- Developed and produced in Austria
Presence
- Age gate on entry, as required for alcoholic drinks
- Product presentation and sales
- Privacy policy and imprint under Austrian law
Domains
ibex-drink.comas the main address,ibex-original.atandibex-original.comas redirects. -
instagram.com/romy.nyx
Romy Nyx
A fully AI-generated influencer, openly labelled as one — an experiment about where the line actually sits.
Details
An experiment at the intersection of generative AI and social media.
Stack
- Higgsfield AI for video with an identity that stays consistent across scenes
- Image generation with current diffusion models
- The same character across different scenes and styles
The question behind it
- Where is the line between real and generated, and do people notice it?
- How does a platform react to openly labelled AI content?
Position
The profile is labelled as AI-generated. There is no deception about its artificial nature — that is the entire point.
The workshop
This site is my digital workshop. I build things — sometimes because they are useful, often because the technology behind them is interesting, and always because it is fun.
When I am not tinkering with a project, I am probably trying out a new tool or automating something I would only ever have to do once.