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
16 entries
-
date.fock.rocks
CupidLeaks
Understand dating apps, analyze your Hinge export locally and compare model rules – with a lexicon, sample data and guided experiments.
Details
Three tools for an independent look at the dating economy: read, explore your own data and experiment with model assumptions. In German and English, with illustrated paper collages and a layout for smaller screens.
Lexicon & sources
- 11 chapters on attention, communication, algorithms, monetization, safety and diversity
- Source register with review dates and evidence limits; weekly link checks and scheduled content reviews
- Provider statements, research findings and model assumptions are clearly distinguished
Your data & demo
- Start without your own file: invented sample data, clearly labelled as a demo in the download too
- Step-by-step Hinge export guide; analyze a ZIP or individual JSON file locally
- Guided data story and detailed dashboard with a funnel, activity timeline, distributions and chart data tables
- Explanations of metrics, small samples, missing fields and excluded messages
Simulator
- Three guided comparisons: contact caps, pool composition and popularity weighting
- Two fresh runs with the same starting seed; compare contacts, matches, distribution and the frustration index
- Expert lab with five engines and adjustable parameters; contact caps work in every engine
- Synthetic teaching model: results do not predict a real dating app
Local processing
Export analysis runs in your browser without uploading the file. Website visits separately generate connection data at the hosting and CDN providers. The privacy notice explains this distinction.
-
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.
-
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
-
prompt.fock.rocks
Prompt Collection
Prompts for image models, each next to the picture it produces — and the one sentence that names the lever doing the work.
Details
A curated collection for everyone who stopped believing that "8k, ultra detailed" still does anything.
Contents
- 134 prompts across twelve categories — portrait, product, image editing, style transfer, cinematography, typography, character consistency, architecture, restoration, branding, analog looks, technical control
- Every entry names the models the syntax actually works on:
--crefis Midjourney,(word:1.3)is Stable Diffusion, whole sentences are Flux and Nano Banana - Each prompt comes with the English text to copy, the lever in one sentence, and two to four knobs to turn
- Researched against the prompting guides of Google, OpenAI, Black Forest Labs, Midjourney, Ideogram and Qwen; 17 prompts were cut as filler
Images
Every prompt sits next to its result. Where a prompt needs an input image — remove an object, restore a photo, swap a background — before and after stand side by side. All images come from a single model, not from the one named on the card; they show what the prompt aims at, not how Midjourney in particular reads it.
Engineering
Four files of vanilla JavaScript as ES modules, served by nginx. Search, model-family filter and copy button run in the browser; the 33 model names are normalised to nine families for the filter. No backend, no account, no tracker. The collection lives in a single data file — the HTML and JavaScript know nothing about any individual prompt.
-
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.
-
trinkspruch.fock.rocks
Trinkspruch
983 drinking toasts from 141 countries, each with its origin — plus table etiquette for 158 countries, from the Georgian supra to the Japanese kanpai.
Details
A reference for the moment everyone raises a glass and nobody knows what to say.
What is in it
- 983 toasts from 141 countries and 126 languages, in their own script with transliteration
- Each entry carries a literal translation, a pronunciation guide, its origin, current usage and a source
- Seven kinds — word, saying, rhyme, song, ritual, quotation, blessing
- 158 countries with etiquette: who speaks first, whether eye contact is mandatory, what to avoid
Provenance, not assertion
Every entry is graded. Documented means wording and origin are in the dictionaries; traditional means the toast is real but the story behind it is folklore; uncertain means the origin is disputed. Popular errors are named rather than passed on — "Na zdorovje" is not a Russian toast, Danish "prosit" answers a sneeze, and the drinking-from-skulls legend is a misreading of *skål*.
Using it
- Full-text search across wording, transliteration, translation and origin
- Seven filters: region, country, language, occasion, kind, provenance, tag
- A "cheers in 96 languages" sheet, set for printing
- A shortlist for your next speech, a toast of the day, a random pick, keyboard control
Engineering
Three files of vanilla JavaScript as ES modules with a hash router, served by nginx. No runtime dependency, no backend, no account. The data sits as JSON per cultural region and is merged by a Python script that checks the vocabulary, folds duplicates across buckets and assigns stable IDs.
How it was made
Collected by a fleet of agents, one per cultural region, then read back by a second, sceptical pass: does the toast exist, is the spelling right, does the origin story hold? What failed was cut. Where no formula could be documented for a language, there is deliberately no entry.
-
bj.fock.rocks
Blackjack Trainer
Blackjack that watches your hands: every decision is checked against basic strategy, and in strict mode the table refuses to play the wrong move at all.
Details
A blackjack table built to correct you rather than entertain you.
Training
- Every decision is checked against the optimal play at once, with the reason — "hard 16 against a dealer 10: hit"
- Strict mode: a non-optimal move is not played, you fix it
- Optionally the hint up front and the live cell in the strategy chart
- Accuracy, mistakes and the longest clean streak stay in your browser
- Keyboard:
H,S,D,P, space deals
Table
- 6 decks, dealer stands on soft 17, blackjack pays 3:2
- Double on any two cards and after a split, up to four hands
- Split aces get one card, no resplit; no surrender, no insurance
- The full basic strategy for exactly these rules stays on the page below the table
Engineering
Four files of vanilla JavaScript as ES modules, no runtime dependency, served by nginx. Rules and strategy sit apart from rendering and are pinned by a self-check that plays 2000 complete rounds on top of the table spot checks. No backend, no account, no real money — basic strategy pushes the house edge down to about 0.5%, it does not flip it.
-
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.