> maagero.dev
[email protected] Tønsberg, Norway Norsk

Mathias Maagerø Lekven

Fullstack developer · frontend and accessibility

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.

Available for freelance and consultant work

Send me an email

Selected work

Samvar — Hemvar and Fagvar

A professional writes the condition analysis in Fagvar; the report is shared through the common .NET API into the board’s Hemvar.FagvarAnalysisReportShared API.NETHemvarBoard

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

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

Admincontrol — board portal and virtual data room

Boards and advisers reach confidential documents through a React portal and .NET access control, into the SQL Server data room.BoardadviserPortalReactAccess.NET APIData roomSQL Server

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

Electronic voting for a public referendum

Voter authenticates through ID-porten and a .NET Backend-for-Frontend, into the Vue voting portal.VoterID-portenOIDCBFF.NET 7Voting portalVue

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

SyntPop — synthetic test data for healthcare

A synthetic population register feeds a model and a .NET API behind the React SyntPop interface.SyntheticpopulationModelAPI.NETSyntPopReact

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

Point-of-sale systems: operations and modernisation

Tills emit events over RabbitMQ into .NET services and on into the store data system.TillRabbitMQServices.NETStore data

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

Tastaturbo and modernising educational games

Old Flash games ported to JavaScript, tested with screen readers and braille displays.Flash gamesPort toJavaScriptScreen readerbraille

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

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

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

  3. ContentCloud Fullstack developer Independent contract

    Independent contract on a UGC platform and marketplace, from planning through launch — architecture and stack, design and final polish.

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

  5. Capgemini Consultant, frontend developer

    Placed as a frontend consultant, primarily with Norsk Helsenett.

  6. Extenda Retail Software engineer

    Debugging and fixing business-critical legacy systems, working from customers' own reports.

  7. 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.
  • 2018–2019
    One-year teacher training programme, NTNU
    Pedagogy, mathematics and chemistry.

Certifications

  • Microsoft Certified: Azure Developer Associate
    Nov 2021
  • Kotlin for Java Developers
    Nov 2025

Languages

  • Norwegian
    Native
  • English
    Fluent, written and spoken
  • Norwegian Sign Language
    Basic

Contact

[email protected] Tønsberg, Norway