Projects
Everything I have built, from websites to a booking system. Tap a project for the full story.
Sparsom
THE PROBLEMGetting an overview of your own finances means keeping the budget yourself, and the recurring charges you have forgotten keep going out. Fifteen suggestions in a list becomes no action at all.
WHAT I DIDI built the landing page and the waiting list. The one move worth mentioning: the site refuses to publish a claim about security until a human has checked the source. If the source is missing, the whole build stops.
STATUS TODAYThe website is delivered. The app has not been published yet.
STACKsparsom.aiNEXT.JS · REACT 19 · TAILWIND V4 · MOTION · PLAYWRIGHT · VERCEL
Ice Dream
WHAT I DIDI built the site for the kiosk and café. The whole menu is sorted into groups, so a guest finds ice cream, waffles and pizza without reading the lot. The opening hours are not a picture of a table: an indicator works out whether it is open right now, and says when it opens again if it is not. At the foot it says where in the centre they are. I also built an admin panel where they can swap the whole menu and update the opening hours themselves.
STACKicedreamstrommen.noNEXT.JS · REACT 19 · TYPESCRIPT · TAILWIND V4 · VERCEL
Varingskollen Borettslag
THE PROBLEMThe document links to bylaws, house rules and application forms pointed at nothing. The news items lived in the browser’s own memory, behind a password field in the frontend code. The shared trailer had no booking system.
WHAT I DIDI ported the site to Next.js and built the board’s tooling: one-time-code sign-in locked to the board’s five addresses, an admin panel for news and notices, and trailer booking against a database with row-level security, where a neighbour deletes their own booking with a key instead of having to sign in. The conditions at the top of the page are pulled from three sources: Fnugg supplies lifts, slopes and snow depth, MET supplies the forecast, and Frost supplies the station’s measurements. Fnugg’s terms require the credit to sit with the data, so it renders only on the page that shows the conditions, and disappears if a source is down. The hero follows the season: it shows winter while the ski centre is running or there is snow on the ground, and otherwise the season by the calendar.
STACKvaringskollenbrl.noNEXT.JS · TYPESCRIPT · TAILWIND · VERCEL
hweider.no
THE PROBLEMThe client is a carpenter and runs the firm on his own. Jobs came in over the phone, and he had no page showing what he actually does.
WHAT I DIDI built the site. Two things are worth naming. One is a clickable house: you point at the part of the building the job concerns, and get the service that belongs to it. The other is the hero video, which is fetched only once it is a quarter in view, and never on a small screen, on data saver or on 2G, so an expensive file is not sent to anyone who did not ask for it.
STACKhweider.noNEXT.JS · REACT 19 · TYPESCRIPT · TAILWIND V4 · VERCEL
Pawsome Plushies
WHAT I DIDI set up the store for the US market, with Meta Pixel and the Conversions API for tracking, Klaviyo for e-mail and Judge.me for reviews.
STACKpawsomeplushies.comONLINE STORE · META PIXEL/CAPI · KLAVIYO · JUDGE.ME
devmyc.no
WHAT I DIDI built the site as a dossier: six levels that decrypt as you scroll, and a gate where you press and hold to authenticate. The site is two standalone HTML files with no framework and no build step, served from Cloudflare Workers. It is built mobile-first and comes in Norwegian and English.
STACKdevmyc.noHTML · CLOUDFLARE WORKERS · GITHUB
Autonomous trading system
WHAT I DIDA system of my own where several agents trade on two crypto exchanges, Firi and Revolut X, through one shared dashboard. I built it with decisions made by AI through Claude, and with rule-based strategies that are backtested and must pass a paper test, with no real money, before they get real capital. A switch chooses between the two. Every bot has fixed risk limits and an emergency brake, and the system sends a notification to my phone when something happens.
STATUS TODAYMy own project, not client work, built to test how AI agents make decisions in an environment where mistakes cost money. The dashboard is private, and the image is redacted.
STACKAI AGENTS · CLAUDE · FIRI · REVOLUT X · DASHBOARD
NorsePixel Studio
THE CLIENTNorsePixel Studio is a small game studio from Norway making free-to-play games on Roblox. Its first game is Boo Bandits: Steal a Ghost, and the next one, Trivia or Splat!, is coming. That is how the studio puts it on its own site.
WHAT I DIDI built the landing page for the game Boo Bandits: Steal a Ghost, with how the game plays, a trailer, a sneak peek of the next game and links to the community on Discord, YouTube, TikTok and Instagram.
STACKnorsepixelstudio.noHTML · REACT · VERCEL
Booking system
THE PROBLEMA booking system is not a booking button. It is availability computed against holidays, blocked hours and what is already booked, roles that each see their own data, and a log that records who opened what.
WHAT I DIDBooking in six steps (practitioner, service, date, time, details, confirmation), where every day in the month grid shows the actual number of free slots, computed against holidays, blocked hours, extra opening days and existing bookings. The admin panel is ten routes: calendar, all bookings with filtering and CSV export, customers, services, practitioners, documents, message inbox, settings, blocked hours, and an append-only audit log. Cancellation, waiting list and a contact form come with it. The copy exists in Norwegian and English.
STATUS TODAYThe clinic is invented, and the site says so on every page. All data resets every 24 hours, and the site asks the reader not to enter real personal data. Both admin logins are published openly on the front page, because half the system sits behind them.
STACKbooking-demo-rosy.vercel.appSUPABASE · POSTGRES · EDGE FUNCTIONS · CLOUDFLARE TURNSTILE · VERCEL
WestengenGPT
THE PROBLEMAn AI assistant on a website is only useful if it answers with the business’s own prices and terms, and does not make up a figure when it does not know.
WHAT I DIDI built an AI assistant that answers questions about Westengen Studio. It reads the prices, terms and copy on this site every time it answers, and every amount in an answer is checked in code against the price list before it is shown. When it does not have the answer, it says so. The conversation goes to an external AI provider and is not stored by me.
STATUS TODAYThis is a demo built on the studio’s own data, not client work. The number of messages per conversation and per day is limited.
STACK/en/demo/assistantNEXT.JS · AI API · TYPESCRIPT · PLAYWRIGHT · VERCEL
WiseJourney
WHAT I DIDI built a trip planner: you type where you are going, answer three short screens and get every day planned hour by hour, with a reason for each pick and gaps left open on purpose. Any pick can be locked or swapped for one of five scored alternatives. No account is needed, the trip is saved in the browser, and the app comes in Norwegian and English.
STATUS TODAYThe app is in beta and sits on a preview domain.
STACKvoyra-wheat.vercel.appNEXT.JS · REACT 19 · TYPESCRIPT · TAILWIND V4 · VERCEL
Aarvik
WHAT I DIDConcept design for a fictional law firm, strict and monochrome, where every section is numbered like a statute paragraph. The hero is a 3D scene where section signs flow along a curve through the firm’s name, and it loads only once the rest of the page is done.
STATUS TODAYThe law firm is fictional, and the site says so itself at the top of every page.
STACKOpen the conceptNEXT.JS · REACT 19 · THREE.JS · TAILWIND V4 · VERCEL
Linde
WHAT I DIDConcept design for a fictional dental clinic, warm and calm, with an appointment book on the front page and booking in five steps. The next free time on the booking button comes from the same data as the appointment book.
STATUS TODAYThe clinic is fictional, and the site says so itself at the top of every page.
STACKOpen the conceptNEXT.JS · REACT 19 · TAILWIND V4 · VERCEL
MONTERT
WHAT I DIDConcept design for a fictional burger restaurant where the whole site is an assembly manual and the menu is a bill of materials. The burger is put together as you scroll: an image sequence is drawn to a canvas and driven by the page’s ordinary scrolling.
STATUS TODAYThe restaurant is fictional, and the site says so itself at the top of the page. The site is in English.
STACKOpen the conceptREACT 19 · TANSTACK START · VITE · TAILWIND V4 · VERCEL
Toms Arena
THE CLIENTThe clinic is Tom Skjønnhaug’s. He has treated elite athletes since 1985, and Thor Hushovd, Lars Monsen and Nusa are among the clients. That is what the clinic says on its own page.
WHAT I DIDI built the clinic’s landing page: what the treatment is, who it is for, and who stands behind it. The booking is the clinic’s own, and it is untouched. I also built a system where they can change the videos shown on the page themselves.
STACKVANILLA JS · SETMORE · VERCEL
KMG Stansefabrikk
THE CLIENTKarl M. Gulbrandsen Stansefabrikk is a stamping works in Norwegian industry, established in 1917. They do sheet metal work, machining and wire erosion with CAD/CAM, and they draw and develop products together with the customer, from a specification of what the product is for and how it works. Those are the company’s own facts, stated on the company’s own page.
WHAT I DIDI rebuilt the site: 24 routes in Norwegian and English, every one statically prerendered, with every string and every number generated from the source files rather than typed by hand. The front page follows one workpiece through five states, from coil to finished part, and under each state stands the machine that does the job, with its own measurements. Where the source lacks a fact or contradicts itself, it is marked in the page and collected into a worksheet for the customer instead of being guessed.
STATUS TODAYThe site sits on a preview domain while the content is reviewed with the customer.
STACKkmg-beta.vercel.appNEXT.JS · REACT 19 · TYPESCRIPT · TAILWIND V4 · VERCEL














