I'm a fullstack developer with my centre of gravity in frontend and accessibility. For the past few years I've built things in Vue and React with .NET or Supabase behind them — from electronic voting in a public referendum to a board portal and data room where access control and auditability are the product itself. This past year I've worked AI-assisted on exactly that kind of code — fast on the writing, with verification staying mine rather than the machine's. I work closely with design and business stakeholders, and I'm happiest when what I ship is genuinely usable by everyone who has to use it.
Samvar is two products on one platform. Hemvar is the operations app for Norwegian housing companies — borettslag and sameier — where the board looks after its property: deviations with photos, recurring maintenance tasks, long-term plans and documents, all per building. Fagvar is the tool professionals use to carry out condition analyses. The point is the link between them: the report a professional writes in Fagvar lands straight in the board's Hemvar, instead of becoming a PDF attached to an email.
I started on Samvar in autumn 2025, evenings and weekends alongside the Admincontrol assignment — with Sopra Steria's knowledge, and for equity in the company rather than pay. Since September 2026 it has been my main work. I'm the sole developer, working closely with a designer, and I made the technical calls. Three React 19 apps — Hemvar, Fagvar and an internal admin tool — in a pnpm and Turborepo monorepo with Vite and TanStack Router, against one shared .NET API on PostgreSQL. A single API keeps hosting costs down for a small company, and Next.js was more framework than we needed. Clerk handles sign-in, tenants are typed per app, and roles are enforced on every endpoint, not just in the UI. The hardest problem was report sync: a Fagvar report becomes snapshots tied to their source report, so the board sees the right state per building part and history is never overwritten. The billing model changed several times, so I built a migration path in the API to switch provider per tenant from the admin app. Building parts are keyed on NS 3451 codes, properties are looked up against Kartverket's cadastre, and billing runs per building through Tripletex. Green tests gate every deploy: the API ships to Azure with azd on merge to main, the frontends through Vercel. I set the architecture and built the first features by hand, then worked AI-assisted, with project-specific instructions and my own code as the pattern to follow.
Live in production with paying customers.
React 19
TypeScript
Vite
TanStack Router
.NET
PostgreSQL
Clerk
Turborepo
Azure
Vercel
Tripletex
02
KveppFounder and developer
Kvepp — one challenge a day, just with your friends
Kvepp (kvepp.app) is an app where you and your friends get one shared challenge every morning at eight. You have one day and one photo to take, and you only see what your friends posted once you have posted your own. Groups with QR invites and custom challenges make it a tool for a group of friends on a trip. No public feed, no followers you don't know, no ad tracking.
Kvepp is my own product, from idea to App Store, and I did all of it myself. The mobile app is React Native with Expo, the website React, and behind them a .NET API on PostgreSQL with S3-compatible object storage for the photos. The most important decision was where the data lives. Backend, database and storage run in containers on a Hetzner server in Finland, email goes through Brevo, and location and other metadata are stripped from photos before they are stored. I chose European providers wherever an alternative existed, so as little user data as possible goes to the US. The lesson from Samvar was to spend time on operations and deployment early, so here it was planned before the first line of code. Technically none of it was hard. It was a project for the fun of it, and for running the whole course alone: app, website, backend, operations and store submission.
Approved on the App Store, launch pending.
React Native
Expo
React
TypeScript
.NET
PostgreSQL
S3
Docker
Hetzner
Brevo
03
AdmincontrolFullstack developervia Sopra Steria
Admincontrol — board portal and virtual data room
Admincontrol provides a board portal and virtual data room for boards, management teams and advisers across the Nordics. Everything inside it is confidential — board papers, transaction documents, sensitive personal data — and access control and auditability aren’t a detail around the product, they are the product.
I was one of three fullstack developers from Sopra Steria, alongside a QA engineer from our side and a product owner, architect and designer in-house at Admincontrol. We worked kanban-style against fixed release cycles rather than sprints. The codebase dates from 2010 and has been modernised along the way: React and TypeScript on the front end, .NET against SQL Server behind it. Large, mature, and with a lot of history to respect. The demand for precision ran through every layer: a mistake in access control or the data model isn’t a cosmetic bug here, it’s a security breach. GDPR underpinned everything, in practice as established rules and patterns in existing code that new work had to follow. Every change went through a strict pull request process with automated tests, security checks in CI and peer approval before it could move on. I wrote the unit tests for my own code; integration and end-to-end tests sat with QA and the architect. I used AI heavily to keep the pace high, but with my own verification as a deliberate layer of its own. That layer caught something every week: naming that broke the codebase’s conventions, logic errors at the edges, and above all far too much code for simple problems. Speed from the machine, control from the human.
React.js
TypeScript
.NET
C#
SQL Server
04
ValgdirektoratetFrontend and fullstack developer
Electronic voting for a public referendum
The Norwegian Directorate of Elections runs national election operations. For the referendum in Søgne, Songdalen and Kristiansand, it needed — for the first time — a platform where eligible voters could cast their vote electronically.
We were three developers, a designer, a product owner and QA. I owned the frontend and built the voting portal in Vue and TypeScript, on a new design system derived from the directorate's own. I also owned authorisation: I set up Duende Identity Server and the ID-porten sign-in, and built the Backend-for-Frontend layer in .NET 7 together with my mentor. The BFF was a deliberate choice over letting the Vue app talk straight to the backend. It gave us one place to meet ID-porten's strict OIDC rules, a security layer in front of the backend, and a place to scrub data on the way out and validate it on the way in. Around 30,000 eligible voters, and more than 80 percent of them voted electronically. Much of the work went into making sure every vote was registered exactly once, and that an abandoned attempt did not strike the voter off the roll. The backend systems were kept separate and the data encrypted, so a vote cannot be traced back to a person. Hired penetration testers found, among other things, that the vote could be blocked by flooding it with spoofed requests. That was fixed in code and additionally handled with rate limiting by operations, before the voting window opened. Accessibility was a strict requirement, with WCAG 2.1 as the target. I ran user testing with the Norwegian Association of the Blind (Blindeforbundet), and it led to concrete changes: features they asked for, better contrast, and hover states that change shape and not just colour.
More than 80 percent of the votes came in electronically — simpler and cheaper to administer than a purely paper-based vote.
Vue.js
TypeScript
.NET 7
OIDC / ID-porten
WCAG 2.1
C#
Duende Identity Server
Scrum
GitLab
05
Norsk HelsenettFrontend developervia Capgemini
SyntPop — synthetic test data for healthcare
Norsk Helsenett needed realistic but synthetic test people, so digital health services could be quality-assured without touching real personal data. SyntPop is the self-service tool for finding, creating and editing them.
We were two developers, an architect and a product owner. The frontend was mine alone: React and TypeScript against a .NET API documented with OpenAPI. SyntPop piloted Norsk Helsenett's new design system, so the components came from another team while they were still being built. I was the first real user: I tested them, reported back, and sometimes adapted a component locally and showed them what I had needed to do, so the change went back into the system. WCAG 2.1 was built in from the start the same way. Outside the frontend I worked on the prescription generator: the test people already existed, but needed realistic medication histories. The rules for what may link a person to a diagnosis are strict, so I wrote Python rules that cleaned a prescription and medication dataset down to what could be used as training data, and helped train and test the model.
React.js
TypeScript
.NET
WCAG 2.1
Python
OpenAPI / Swagger
Scrum
06
Extenda RetailSoftware engineer
Point-of-sale systems: operations and modernisation
Extenda Retail supplies point-of-sale and store systems to leading grocery chains across Norway and the Nordics. These systems are business-critical: if they stop, the shops stop.
The systems ran at NorgesGruppen and Reitan, across a large number of stores and tills, with back office on the chains' own servers. My job was debugging and fixing large .NET systems in daily production, working from the customers' own reports: finding the right place in a system I had not written, understanding what was actually happening, and fixing it without breaking something else. Parts were event-driven over RabbitMQ. The move from .NET Framework 4.5 towards .NET 5 happened component by component, triggered by bug reports rather than run as a project. The team worked test-first, so the job was often writing tests around existing code before it could safely change.
C#
.NET Framework
RabbitMQ
TDD
MySQL
.NET Core
GitHub
07
StatpedFullstack developer
Tastaturbo and modernising educational games
Statped builds digital learning tools for children and young people with special needs. Tastaturbo is a writing tool used in schools, alongside a portfolio of older learning games built in Flash.
I was the only developer. I rewrote at least eight Flash games in JavaScript from scratch: with no access to the source files, I played the games, documented the rules and the pedagogical intent, and rebuilt them in HTML5 and CSS. Tastaturbo I built from the first line, my first big project, working with a blind tester, two teachers and a designer and illustrator. I user-tested regularly with blind and deaf pupils. The most important thing I learned there was how a blind user actually experiences a page: that semantic HTML, the right elements and the right document order are not decoration, they are the interface.
The learning tools stayed usable in schools after Flash was discontinued.
JavaScript
Universal design
User testing
HTML5
CSS
Scrum
##Experience
Kvepp/Founder, developer and everything else
My own app for daily photo challenges among friends — built, run and submitted to the App Store single-handed, on European infrastructure.
Sopra Steria/Senior software engineer
Senior software engineer out of the Drammen office, the whole period on assignment with Admincontrol — security-critical software for boards and transactions.
Independent contract on a UGC platform and marketplace, from planning through launch — architecture and stack, design and final polish.
Valgdirektoratet/Adviser and fullstack developer
Part of a small team maintaining parts of the EVA election system, alongside the referendum platform. During elections I supported the election offices with debugging and fixes, which meant knowing the whole system from the back-office side.
Capgemini/Consultant, frontend developer
Placed as a frontend consultant, primarily with Norsk Helsenett.
Extenda Retail/Software engineer
Debugging and fixing business-critical legacy systems, working from customers' own reports.
Statped/Adviser and developer
Modernising learning games for blind and deaf pupils, including porting from Flash to JavaScript.
##Skills
Day to day
TypeScript
React
Tailwind CSS
HTML
CSS
.NET (C#)
PostgreSQL
REST-API
Git
Comfortable with
Next.js
Vue.js
Nuxt
OIDC and authentication
WCAG 2.1
Semantic HTML and ARIA
Supabase
User testing
GitHub Actions
Scrum
OpenAPI / Swagger
TDD
i18n
Familiar with
Python
Kotlin
RabbitMQ
Azure
Docker
Accessibility isn't a checkbox for me. I've worked to WCAG 2.1 across public sector, healthcare and education, user-tested with blind and deaf users, and helped build design systems where the requirements are baked in from the start rather than retrofitted.
##Education
2015–2018
BSc in Informatics, NTNU
Electives in frontend development and design. Thesis on privacy and security online.