Custom Development

Web design / Drupal

Redesigning grn.dk in the open: eight directions, one pick, a live theme switch

The site you are reading redesigned itself with the same card-driven AI pipeline it writes about. Eight complete design directions were built as static previews from the site's real content — real articles, real cases, both languages — and published side by side on demo.grn.dk. One won. It then became a brand-new Drupal 11 theme, built in phases on the live site behind a logged-in preview, and switched on with a single config change.

GrN.dk — this site

AI receptionist / small-business automation

An AI receptionist that never misses a call — with the back office on screen

Frontdesk 24/7 is an AI receptionist for a fictional Danish plumbing firm, Nordlys VVS, that you talk to the way a customer would — by voice or text, in opening hours or after them. The point of the demo is the split screen: while the receptionist answers on the left, the back office animates on the right — the calendar books itself, the caller lands in the CRM, a confirmation SMS goes out and the owner gets a message. Nothing is described; everything is shown happening.

GrN.dk — demo shelf (demo.grn.dk)

Retail — point of sale

One till, many sellers: a market POS that splits every sale by stall

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.

A community market in Thailand (client kept anonymous)

3D on the web / product presentation

A crystal hall rendered live in the browser — then profiled until it ran everywhere

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?

GrN.dk — demo shelf (demo.grn.dk)

Community platforms / legacy migration

Fifteen years of community ideas, carried from Drupal 7 to Drupal 11

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.

Ideahunters — crowdsourced-challenge platform

Personal automation, public-source scraping and AI-assisted filtering

A private job radar that reads seven boards every morning — and throws away most of what it finds

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.

GrN.dk — internal build

Quantitative research tooling and automation

A trading rig that tests its own strategies every hour — and never places an order

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.

GrN.dk — internal build

Browser and mobile games

A 2020 phone game rebuilt for the browser, with a global leaderboard

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.

GrN.dk — internal build

Browser games and language learning

A 3D browser game where every monster is a Japanese word

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.

GrN.dk — internal build

Educational apps for children

Learning to write Thai, one traced letter at a time

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.

GrN.dk — internal build