Custom Development

Web / portfolio infrastructure

A demo shelf that keeps itself: twenty-five builds from 2019 to 2026, one PHP file and a sitemap that follows

demo.grn.dk is where the experiments live: twenty-five of them, from an XHTML-era sunrise calculator for Silkeborg to procedural WebGL, a Blender orrery, a crystal hall, an AI receptionist, a UK accounting autopilot and a Danish ERP day. Many of the cases on this page open on a shelf entry. The shelf itself is one PHP file that lists the demos, groups them into Featured and Tools, filters as you type and derives the sitemap from the same list — so a demo that lands in the web root is on the shelf and in the sitemap before anyone writes it up.

GrN.dk — demo.grn.dk

Flutter / mobile and web apps

Thirty Flutter case studies where the page is the app — and a park you can walk through

flutter.grn.dk is a shelf of thirty small case studies, one per Flutter package worth knowing — routing, state management, animation, charts, maps, storage, i18n — and each one is a live demo the visitor can poke at, with the code beside it and real apps that use the package. There are no screenshots of Flutter on it: the site is itself the Flutter app, compiled for the web, with a real URL per case, a crawlable page behind each URL and a 3D “case park” where every case has its own stand.

GrN.dk — flutter.grn.dk

Logistics / TMS configuration

A transport management system you can break in sixty seconds: fourteen orders re-planned on every rule you flip

TMS Configuration Cockpit runs a small transport management system in the browser: one distribution centre in Aarhus, three countries, fourteen orders, and a configuration panel holding exactly what a TMS application and configuration manager owns — business rules, planning parameters, carrier tariffs, an ADR dangerous-goods workflow and group-versus-local country templates. Every lever you touch re-plans tonight’s tours live, moves the KPIs, shows up in the EDI interface monitor and writes itself up as a change request. It was built as a working answer to a job posting’s “why you?”.

GrN.dk — demo shelf (demo.grn.dk); built as a working job application

ERP / open-source business systems

There is a world outside Microsoft ERP: one Danish wholesaler's order, run on an open stack

Udenfor (“Outside”) follows one order through one day at Nordvind Foods, a fictional Aarhus wholesaler with 14 staff and a web shop — on an open stack instead of Business Central. It plays in three acts: the camera zooms out of the Microsoft walled garden onto a live system map where an order agent, an open-source ERP core on Postgres, the warehouse scanner, GLS, NemHandel/Peppol e-invoicing, a PSD2 bank feed and the tax export light up in turn while the ledger posts itself; then you ask the books a question in plain Danish and watch the SQL and the answer appear; then you change a business rule in one sentence and see it tested and deployed in seconds, next to the 26-day partner change-request timeline it replaces.

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

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