Skip to main content
GrN.dk

Main navigation

  • Articles
  • Cases
  • Contact
  • Your Digital Project Manager
  • About Greg Nowak
  • Services
  • Container
    • Excel Freelancer
    • Kubuntu - tips and tricks
    • Linux Apache MySQL and PHP
    • News
    • Image Gallery
User account menu
  • Log in

Join my community / free newsletter — sign up here

Breadcrumb

  1. Home

Cases

A selection of the work: what the client needed, what was built, and what it changed. Each case links through to the full write-up.

AllGames & 3DApps & deliveryAI & automationWeb & commerce
Diagram of the delivery pipeline in three lanes: Android to Google Play (commit on main, host gate of 44 tests, signed build, emulator smoke on a real device, Play production); iOS to TestFlight (App Store Connect subscription-approval gate, cloud macOS build, build number from Apple); and a daily device round that reseeds four subscription states and reads the screen back by OCR. Beside it, the real screenshot the pipeline pulls off the emulator on every publish.

Mit Håndværk publishes itself to two app stores — and a real phone holds the veto

Mit Håndværk — Danish marketplace app for craft, art and design (mithaandvaerk.dk); Flutter on Android and iOS, Laravel backend
Mobile delivery automation — Flutter CI/CD, on-device acceptance testing, Google Play and App Store publishing

Mit Håndværk is a Danish marketplace app for craft, art and design — a Flutter app on Android and iOS over a Laravel backend, with subscriptions, real-time chat and push. This case is not about the app's screens. It is about the machinery that puts a new version of it in front of users: a pipeline that takes a commit on main and, roughly ten minutes later, has published it to Google Play production — but only after the release has been installed and cold-started on a real Android device and survived it.

The same pipeline covers Apple from a Linux server that cannot build iOS at all: a release tag hands the build to a cloud macOS machine, which signs it and uploads it to TestFlight — and the tag itself cannot be pushed unless the app's subscriptions are actually approved and priced in App Store Connect.

Everything in the picture above is read off the running system: the counters come out of the pipeline's own log, and the phone panel is the screenshot the publish gate pulls off the emulator on every single release.

The POS sale screen, recreated with sample products: a grid of Thai market goods with per-seller badges, a basket split across three sellers, and a Charge ฿290 button offering cash or PromptPay QR.

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

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.

The Kristallsaal entrance view: a dark exhibition hall with cones of light from the ceiling, a mirror-polished floor, and the title card 'Kristallsaal — ein 3D-Erlebnis in geschliffenem Kristall' over the walkway.

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

GrN.dk — demo shelf (demo.grn.dk)
3D on the web / product presentation

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?

A pipeline-written article on grn.dk — 'Your AI Agent Has Shell Access. What Can It Reach?' — with its auto-drawn sketch infographic of a shell doorway, a host/workspace wall and a credentials safe, next to a sidebar of other daily articles.

This site writes its own articles — every morning, with a hand-sketched infographic

GrN.dk (this site) and nowa.dk
AI content automation

The articles on this site are written by a pipeline: every morning it scouts what changed in the web-development and AI world, picks one topic worth a practitioner's attention, writes the piece, draws a sketch-style infographic for it, and publishes — 138 articles since mid-April 2026, one per day, without a stock photo or an image-API key anywhere in the chain. A second, deliberately slower instance runs on nowa.dk: one guarded article a week, with a kill switch.

The rebuilt Ideahunters front page on Drupal 11: the tagline 'Great ideas, sourced from the crowd' over a blue-green hero card, with an archived brand challenge below.

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

Ideahunters — crowdsourced-challenge platform
Community platforms / legacy migration

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.

The gate's weekly fleet report: twelve vhosts with their Drupal core version, web PHP, queued safe bumps and held breaking majors, plus the rule that composer resolves against each site's own web PHP.

The boring superpower: a weekly gate that keeps twelve sites' dependencies current

GrN.dk — server fleet (12 production vhosts)
Maintenance automation / DevOps

Twelve production websites on one server, each with its own Composer dependency tree, and the oldest question in hosting: are they up to date, and is it safe to make them so? The dependency-currency gate answers it weekly and automatically — it inventories every vhost, checks each dependency tree against the PHP version that site's web server actually runs, queues the semver-safe updates for approval, and reports the breaking ones instead of applying them.

The job finder's job list, captured from a throwaway demo copy seeded with invented rows — the header reads "Job finder — demo data" beside the list of sources. Each card carries a job title, a source chip (jobindex, verama, freelancermap, emagine, weworkremotely, amino), an AI score out of 5, an optional contact-mail chip, a location and a seen-date, then three actions: applied, draft email, and discard with a "why discard?" note. No real advertisement or employer appears.

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

GrN.dk — internal build
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.

The crypto-dash.grn.dk status page: the heading "nexus auto-trader" beside an orange PAPER ONLY badge, over the line "hourly strategy sweep → leaderboard → paper promotion · no real orders, ever". Stat tiles read 649 configs tested, 715 backtests last 24h, 2 sweep windows, 3 paper strategies and +0.00 paper P&L in USD. Below them a Paper strategies panel lists three promoted configurations with all-zero P&L rows, and a Promotion pipeline table shows each candidate's streak and score.

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

GrN.dk — internal build
Quantitative research tooling and automation

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.

Vegan Power running in a browser tab on a phone-shaped screen: seven full hearts and the score line "Vegan Power: 1" across the top, a blue sky of cartoon clouds with two oranges and a pear falling through it, a chicken, a dog and a penguin drifting down among them, and the round yellow player waiting with its mouth open at the bottom of the play column.

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

GrN.dk — internal build
Browser and mobile games

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.

KotobaMon running in a browser: the low-poly island in third person, the trainer standing on a green meadow with cherry trees and pines, two wild monsters roaming nearby and a healing pad ahead. The HUD shows the score, the current biome そうげん · Meadow and the party slot コダマ.

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

GrN.dk — internal build
Browser games and language learning

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.

The abc.grn.dk alphabet screen: all 44 Thai consonants as cards colour-coded by class — mid blue, high orange, low green — each with its romanized name, above a practice-range picker and a "Practice 44 letters" button.

Learning to write Thai, one traced letter at a time

GrN.dk — internal build
Educational apps for children

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.

The TableFlow booking page: the hour grid for Bord 4 on 19 August 2026, with three hours struck through as taken, 10:00-12:00 selected in green, and the price updated live to 40 kr.

Pay-to-book table reservations for a coworking space

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.

cases.grn.dk: the interactive kanban demo with two cards labelled ai:working and one finished card in Done

An interactive demo of the Trello-to-AI workflow

GrN.dk — internal build
AI workflow automation

One Trello card asked for something that would show — not tell — how a Danish company can hand work to an AI colleague. The answer was cases.grn.dk: a self-contained interactive page where the visitor types a task, watches an AI pick it up, gets asked a question, answers it, and sees the finished card land at the top of Done. The brief, the domain, the design, the copy, the sound and the publication were all handled by the AI setup the page describes.

Want something like this built?

Most of these started as a one-line idea on a kanban card. Tell me yours and I will tell you what it would take.

Get in touch

Looking for older work? See the earlier-work archive (1998–2021).

Review Greg on Google

Greg Nowak Google Reviews

 

Illustrated infographic summarizing: WordPress 7.1 Forces the Editor Into an iframe—Test Your Custom Blocks
WordPress 7.1 Forces the Editor Into an iframe—Test Your Custom Blocks
2026-08-15

WordPress 7.1 removes the non-iframe editor fallback. Learn how to audit custom blocks, test real workflows and fix compatibility issues before launch.

Illustrated infographic summarizing: GitHub will stop sending jobs to stale self-hosted runners
GitHub will stop sending jobs to stale self-hosted runners
2026-08-14

GitHub starts enforcing runner versions on August 24, 2026. Audit and upgrade self-hosted runners before builds and deployments start stalling.

Illustrated infographic summarizing: Your AI Agent Has Shell Access. What Can It Reach?
Your AI Agent Has Shell Access. What Can It Reach?
2026-08-13

A practical guide to mapping what a shell-enabled AI agent can reach, then containing its access to files, credentials, networks, tools, and high-impact actions.

Illustrated infographic summarizing: Cloudflare Changed DoH JSON. What Else Is Parsing DNS as Text?
Cloudflare Changed DoH JSON. What Else Is Parsing DNS as Text?
2026-08-12

Cloudflare’s DoH JSON change exposes brittle DNS parsing. Find affected scripts, test both formats, and choose a safer integration contract.

Illustrated infographic summarizing: Your Website Can Answer Questions Now. Should It?
Your Website Can Answer Questions Now. Should It?
2026-08-11

NLWeb makes conversational website search practical to deploy. The real question is whether your content, users and team are ready to support it.

Illustrated infographic summarizing: AI Search Finally Has Reports. Now Connect Visibility to Revenue
AI Search Finally Has Reports. Now Connect Visibility to Revenue
2026-08-11

Google and Bing now expose first-party AI search data. The real task is connecting citations and impressions to analytics, CRM outcomes, and revenue.

Illustrated infographic summarizing: The Bot Passed Your CAPTCHA. What Did It Do Next?
The Bot Passed Your CAPTCHA. What Did It Do Next?
2026-08-11

Passing a challenge is only one signal. Session analysis, server-side validation and endpoint-specific controls help reduce bot abuse without blocking customers.

Illustrated infographic summarizing: WordPress 7.1 Moves Image Work Into the Browser—Test Every Media Hook
WordPress 7.1 Moves Image Work Into the Browser—Test Every Media Hook
2026-08-11

WordPress 7.1 shifts image processing into supported browsers. Here is what to test across hooks, CDNs, formats, security headers, and fallbacks.

Illustrated infographic summarizing: Prompt Caches Have Write Costs Now—Audit What Your Workflow Reuses
Prompt Caches Have Write Costs Now—Audit What Your Workflow Reuses
2026-08-10

GPT-5.6 makes cache writes billable. See how to spot wasted writes, stabilise prompt prefixes, place breakpoints and measure whether caching pays.

Illustrated infographic summarizing: The AI Crawler in Your Logs May Be Wearing a Borrowed Name
The AI Crawler in Your Logs May Be Wearing a Borrowed Name
2026-08-09

A User-Agent is a claim, not proof. See how to verify AI crawler traffic before it shapes reporting, robots.txt decisions, or WAF exceptions.

More articles
RSS feed

Footer

  • All articles
  • Contact

GrN.dk web platforms, web optimization, data analysis, data handling and logistics.