Frontend engineer · Copenhagen, Denmark

Mads Hærup

I am a frontend developer in Copenhagen. Right now I work on the payroll platform at Azets in Vue and TypeScript. Before that I spent three years on SAP products at Cygni, mostly in Angular and React. A lot of my work has involved large datasets and making them workable on screen.

Selected work

Shipped products, 2021 to now
Azets · payroll and HR platform

Epos

Payroll software used daily by accountants and payroll administrators across the Nordics. A Vue 3 single-page app in TypeScript, served by an AWS backend through services generated from OpenAPI specifications.

  • AG Grid views over payroll datasets large enough that row virtualisation, and keeping derived values out of the render path, decide whether the screen stays usable.
  • Replaced nested lookups with keyed maps on a list that grew with every payroll run, turning a scan that squared with the data into a single pass.
  • Parallel loading with Promise.all so independent requests stop queueing behind each other.
  • Tests in Vitest and Testing Library, end to end in Cypress, delivered through Bitbucket Pipelines.
  • Vue 3
  • TypeScript
  • Pinia
  • AG Grid
  • SCSS
  • Vitest
  • Cypress
  • AWS
SAP via Cygni · api.sap.com

SAP Business Accelerator Hub

SAP's public API portal, where developers browse and test the APIs behind SAP's products. Built in Angular and TypeScript, with RxJS driving search, filtering and the catalogue views, against a catalogue large enough that the listing had to stay responsive while filters changed.

  • Angular
  • TypeScript
  • RxJS
  • SCSS
  • Jenkins
SAP via Cygni · shared across teams

UI5 component library

Extended the SAP UI5 library with custom React components used by other teams inside SAP. Strict TypeScript conventions, documented states, and every component checked against WCAG with axe and keyboard testing before it was released to the other teams.

  • Worked from Figma with the designers, pushing back where a pattern would not hold up for keyboard or screen reader users.
  • Kept the public API of each component narrow so consuming teams could upgrade without rewrites.
  • React
  • TypeScript
  • SAP UI5
  • Storybook
  • WCAG
  • ARIA
  • axe
SAP via Cygni · Next.js application

Search over a graph database

A Next.js application pulling ranked results from Apache Solr alongside a graph database queried with SPARQL, so a search returned both matching documents and the entities related to them. Result sets ran long enough that the lists were virtualised and the queries were kept off the render path.

  • Next.js
  • React
  • TypeScript
  • Apache Solr
  • SPARQL
  • FastAPI
Grafikr

Storefronts for Scandinavian retail brands

E-commerce front ends built in JavaScript, Liquid and SCSS: product filters, discount rules and cart flows, measured on conversion and on how quickly the storefront became usable on a phone over mobile data.

  • JavaScript
  • Liquid
  • SCSS
  • Tailwind
  • Responsive

Open source

Built outside work, published
Meta-framework · @useavalon on npm

Avalon

A meta-framework on Preact, Bun and Nitro using islands architecture: a page ships server-rendered HTML and hydrates only the components that have to be interactive, so the JavaScript sent to the browser scales with the interactive parts rather than the page. Written to understand rendering, hydration and routing from the inside.

  • Preact
  • Bun
  • Nitro
  • TypeScript
  • SSR
  • Islands
Agent harness · MIT licensed

Caelence

A harness for coding agents: a turn loop built on Strands, evaluation suites, Langfuse tracing, MCP integrations and a skill format written in Markdown. Ask, plan and agent modes decide what the agent is allowed to do, with shell execution and commits held behind an explicit approval. Ships as a terminal interface, a desktop app and a library.

  • TypeScript
  • Strands
  • MCP
  • Langfuse
  • Evals
  • Bedrock

Stack

What I reach for

Frameworks

Vue 3, React, Angular, Next.js, Preact

Language

TypeScript, ES6+, Node

State

Pinia, Vuex, Redux, RxJS, TanStack Query

Styling

SCSS, Less, Tailwind, Storybook, design tokens

Data

AG Grid, OpenAPI clients, REST, SPARQL, Solr

Build & delivery

Vite, Webpack, Bitbucket Pipelines, Jenkins, Docker, AWS

Testing

Vitest, Jest, Testing Library, Cypress, Playwright

Accessibility

WCAG 2.2 AA, ARIA patterns, axe, keyboard testing

AI tooling

Claude Code, Cursor, Kiro, MCP servers, Bedrock

Experience

Five years, three companies
Nov 2025 – now Senior Frontend Developer Azets, Herlev
Oct 2022 – Oct 2025 Software Developer, consulting for SAP Cygni, part of Accenture
Nov 2021 – Oct 2022 Frontend Developer Grafikr, Copenhagen
Jan 2020 – Oct 2021 Web development Roskilde Technical College

How I work

Most of my work has been in larger codebases where other teams use what I build, so I spend time on keeping components clear and stable. I like working on products that get used a lot, like payroll software or an API portal, where mistakes show up quickly.

I work closely with designers and I ask questions early if something looks like it will be difficult with real data or on a keyboard. I try to deal with performance and accessibility while I build rather than afterwards, and I take code review seriously in both directions.

I use AI tools every day and I have built an agent harness myself, so I have a reasonable idea of what they are good at and where I still need to check the work.

Based in

Copenhagen, Denmark. On site, hybrid or fully remote.

Languages

Danish and English, both working languages.

Certification

Microsoft Certified: Azure Fundamentals, 2024.