Projects and experiments

Things I build on my own time, including the ones I stopped, and smaller experiments from work.

Varden

Live

A news reader where an LLM does the first read. Every hour, a pipeline fetches RSS feeds, and Claude scores each story for how urgent, how big and how new it is, groups the coverage of one story across sources, and summarises it. The app ranks the feed by those scores and by what I've shown interest in. Mutes hide topics I never want, and spoiler veils blur sports results I haven't seen yet.

Quality is measured against a hand-checked eval corpus, part of it graded against live model calls.

Stack. TypeScript, the Claude API, Vue as an installable web app on Vercel, and Supabase for optional sync.

Open Varden. It starts with a short setup, and the sources are mostly Norwegian.

Varden's feed on a phone: story cards from sources such as VG, BBC, E24 and NRK Sport, each with a headline, a summary, and how many articles it groups

The feed, ranked: each card is one story, its coverage grouped across sources.

Kompass

Stopped in 2026

A Norwegian-language AI assistant, private by default, running on an open Norwegian language model. Mostly integration rather than a custom build: Open WebUI in front of the model, on Azure.

It worked, and it was cheap to run. I stopped it after a research pass showed the idea underneath didn't hold:

Lykkepromille

Parked in 2026

An offline-first app that estimates your blood alcohol over an evening, designed to help you stay at a comfortable level rather than drink more.

Apple turned it down twice under App Store guideline 1.4, which requires paired hardware for an app that reports blood alcohol. The iPhone was the channel that mattered for the people it was for, so I parked it.

Stack. Vue and TypeScript, with no backend.

The app on a phone: an estimate of 0.66 per mille with a nudge to have some water in between, over a curve that rose into a shaded band, levelled off inside it and is projected to fall back to zero

An evening held inside the comfortable band, then the projected way down.

A private modelling tool

Ongoing

A tool that helps me play a sports game. It fits statistical models to historical results, turns them into a probability for every outcome, and uses optimisation to choose what to play. It isn't public, but I'm happy to talk about it.

Methods. Statistical modelling and model fitting, probability and combinatorics, optimisation.

Resolve Games

2023 to 2024

A small app for a recurring company tournament at Visma Resolve, in Mario Kart and foosball: teams, tables, matches and rules.

Stack. Flutter, on Firebase. The code is on GitHub.

The tournament app: a group table with wins, losses and point difference for teams with names like The Flawless Incompetence

Time registration suggestions

At Visma Resolve

Automated suggestions for project workers' time registrations, forecast with a convolutional neural network (CNN).

A chart of one worker's time registrations by project over two weeks, ending with one day's actual registrations above the model's prediction for that day

Two weeks of one worker's registrations by project, then a day's actual registrations above the prediction.

Calendar event categorisation

At Visma Resolve, a hackathon

Can a language model tell what kind of meeting a calendar event is, without being told? About 3,000 events from my own calendars were labelled by hand. I turned each into a vector with a free pretrained embedding model and clustered the vectors without the labels, to see whether the categories come out on their own, as a possible input to the time registration suggestions.

A scatter plot of calendar events, embedded by a language model and projected to two dimensions, coloured by category, with tight clusters inside a ring of scattered points

The embeddings projected to two dimensions with t-SNE, coloured by the hand labels.

Company type change

At Visma Resolve

An analysis of sole proprietorships' accounting data, to work out whether a business would be better off as a limited company.

The top levels of a decision tree that classifies companies as sole proprietorships or limited companies by salaries, revenue and profit

The top of a decision tree separating sole proprietorships (SP) from limited companies (LLC) on salaries, revenue and profit.