Projects

Everything I have built, from websites to a booking system. Tap a project for the full story.

  1. Sparsom

    THE PROBLEM

    Getting 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 DID

    I 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 TODAY

    The website is delivered. The app has not been published yet.

    STACK

    NEXT.JS · REACT 19 · TAILWIND V4 · MOTION · PLAYWRIGHT · VERCEL

    sparsom.ai
  2. Ice Dream

    WHAT I DID

    I 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.

    STACK

    NEXT.JS · REACT 19 · TYPESCRIPT · TAILWIND V4 · VERCEL

    icedreamstrommen.no
  3. Varingskollen Borettslag

    THE PROBLEM

    The 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 DID

    I 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.

    STACK

    NEXT.JS · TYPESCRIPT · TAILWIND · VERCEL

    varingskollenbrl.no
  4. hweider.no

    THE PROBLEM

    The 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 DID

    I 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.

    STACK

    NEXT.JS · REACT 19 · TYPESCRIPT · TAILWIND V4 · VERCEL

    hweider.no
  5. Pawsome Plushies

    WHAT I DID

    I 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.

    STACK

    ONLINE STORE · META PIXEL/CAPI · KLAVIYO · JUDGE.ME

    pawsomeplushies.com
  6. devmyc.no

    WHAT I DID

    I 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.

    STACK

    HTML · CLOUDFLARE WORKERS · GITHUB

    devmyc.no
  7. Autonomous trading system

    WHAT I DID

    A 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 TODAY

    My 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.

    STACK

    AI AGENTS · CLAUDE · FIRI · REVOLUT X · DASHBOARD

  8. NorsePixel Studio

    THE CLIENT

    NorsePixel 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 DID

    I 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.

    STACK

    HTML · REACT · VERCEL

    norsepixelstudio.no
  9. Booking system

    THE PROBLEM

    A 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 DID

    Booking 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 TODAY

    The 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.

    STACK

    SUPABASE · POSTGRES · EDGE FUNCTIONS · CLOUDFLARE TURNSTILE · VERCEL

    booking-demo-rosy.vercel.app
  10. WestengenGPT

    THE PROBLEM

    An 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 DID

    I 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 TODAY

    This 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

    NEXT.JS · AI API · TYPESCRIPT · PLAYWRIGHT · VERCEL

    /en/demo/assistant
  11. WiseJourney

    WHAT I DID

    I 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 TODAY

    The app is in beta and sits on a preview domain.

    STACK

    NEXT.JS · REACT 19 · TYPESCRIPT · TAILWIND V4 · VERCEL

    voyra-wheat.vercel.app
  12. Aarvik

    WHAT I DID

    Concept 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 TODAY

    The law firm is fictional, and the site says so itself at the top of every page.

    STACK

    NEXT.JS · REACT 19 · THREE.JS · TAILWIND V4 · VERCEL

    Open the concept
  13. Linde

    WHAT I DID

    Concept 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 TODAY

    The clinic is fictional, and the site says so itself at the top of every page.

    STACK

    NEXT.JS · REACT 19 · TAILWIND V4 · VERCEL

    Open the concept
  14. MONTERT

    WHAT I DID

    Concept 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 TODAY

    The restaurant is fictional, and the site says so itself at the top of the page. The site is in English.

    STACK

    REACT 19 · TANSTACK START · VITE · TAILWIND V4 · VERCEL

    Open the concept
  15. Toms Arena

    THE CLIENT

    The 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 DID

    I 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.

    STACK

    VANILLA JS · SETMORE · VERCEL

  16. KMG Stansefabrikk

    THE CLIENT

    Karl 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 DID

    I 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 TODAY

    The site sits on a preview domain while the content is reviewed with the customer.

    STACK

    NEXT.JS · REACT 19 · TYPESCRIPT · TAILWIND V4 · VERCEL

    kmg-beta.vercel.app