A community market in Thailand (client kept anonymous)
Retail — point of sale
A point-of-sale system for a physical market where dozens of independent sellers share the same tills. A cashier rings up one basket; the system knows which stall every item belongs to, splits the sale per seller at the moment it happens, and keeps the books each stall settles against. Thai-first interface with a synchronized English translation set, built on Laravel 12 with a Filament v4 admin panel and PostgreSQL underneath.
Kristallsaal is a walk-through jewellery hall that runs entirely in the browser: six vitrines of cut-crystal pieces under museum lighting, a mirror-polished floor, and light that actually splits into colour inside the stones. There is no engine download and no build pipeline — one HTML file, one JavaScript module and Three.js, served as static files. It exists to answer a client question with a demo instead of a slide: what does "3D product presentation on the web" feel like at the high end?
Ideahunters is a crowdsourcing platform where brands post a challenge and a community submits ideas against a deadline. The original site ran on Drupal 7 — end-of-life, unsupported, and increasingly a liability — with over a decade of challenges, discussions and member accounts in it. The platform was rebuilt on Drupal 11 and the legacy content migrated across: 426 pieces of content and 921 user accounts, anonymized on the way in.
Personal automation, public-source scraping and AI-assisted filtering
This one has no link on it, and that is the point: jobs.grn.dk answers 401 to the internet and always has. It is an internal tool — a job radar, built for its owner's own search for work. Every morning it reads seven contract and job boards, drops everything that cannot match a written profile, has what survives judged by a language model against that profile, and presents the handful worth reading as one screen with three buttons: applied, draft email, discard.
Because it holds one real person's live job search, nothing of it is published here. The screenshot above is a throwaway demo copy of the same interface, seeded with invented rows — every company, title, location and address in it is a placeholder, and it labels itself "demo data" in the header so it can never be mistaken for the live board.
crypto-dash.grn.dk is the public window onto a strategy-research rig that runs on our own server and trains itself. Every hour it backtests a fresh batch of trading-strategy configurations against five-minute crypto candles, scores each one on data it was not fitted to, keeps a running leaderboard, promotes the configurations that hold the top into a simulated book, and demotes them again as soon as their forward behaviour drifts away from what the backtest promised.
It is paper trading only. The installation holds no exchange keys, calls no order endpoint and has no account to spend from. Every fill, every position and every P&L figure on that page is simulated — which is why the page prints PAPER ONLY on itself, in orange, at the top of every hourly regeneration.
veganpower.grn.dk is Vegan Power, a catch-the-fruit arcade game with a rule you understand in one second: eat fruit, not friends. Fruit falls and you catch it. A chicken, a cow or a penguin falls and you dodge it — each one you hit costs one of your seven hearts. It began in 2020 as a small Flutter and Flame game for Android, released on Google Play that December. In 2026 it was taken apart and rebuilt: it now opens in any browser with no install and no account, keeps a global high-score table on its own small API, and carries a multiplayer beta where two to four players share one arena and shove each other off the fruit.
fantasy.grn.dk is コトバモン KotobaMon — a 3D monster-catching game that runs in an ordinary browser tab, where every monster is a Japanese word. ヒバナ hibana is a spark, コダマ kodama is a tree spirit, and catching one is how the word gets learned. It has a procedurally generated island with five biomes, twelve species, turn-based battles with a type chart, and full Japanese voice-over subtitled in Japanese, romaji and English at the same time. There is no download, no account, no build step and no backend: the whole game is 2,821 lines of vanilla JavaScript plus a vendored copy of Three.js, served as static files.
abc.grn.dk teaches a child to write an alphabet rather than to recognise one: pick a letter, trace it with a finger, and the app scores the shape you actually drew and tells you how close you got. Thai first — all 44 consonants, free — with Japanese hiragana and katakana behind a premium gate. Everything happens in the browser: the handwriting recogniser is plain Dart running on the device, the spoken letter names are files bundled with the app, and there is no account, no runtime backend and no advertising.
Danish coworking space — client brief, built as a working demo
Coworking and shared offices
A Danish coworking space wanted members to book a table by the hour and pay for it — because at 20 kr. per hour per table, a booking that has not been paid for is not a booking. tableflow.grn.dk is that system, built from the client's brief and running live: an hour grid that shows what is actually free, a fifteen-minute payment hold that releases itself, and an admin screen for the people who run the place. Plain PHP and MariaDB — no framework, no dependencies, 853 lines in seven files.