Will My Tokens Last?
Paces AI token usage across the working days left in the month, with Swedish holidays, custom days off and half-days, calendar views and Swedish/English UI.
- React
- TypeScript
- Vite
- GitHub Actions
~/portfolio — v4.0.0

Software engineer in Stockholm. Full stack by training, platform engineer by habit — now building the identity platform behind login and digital signing at SBAB.
01 — Areas, roughly in the order I got to them
Where I started, and still home. React and TypeScript in the browser, Node.js or Java behind it, a relational or document database underneath, and features carried from data model to deploy.
TypeScript · React · Next.js · Node.js · Express · Java · Spring · SQL · MongoDB
Shared libraries, tooling and infrastructure that many teams depend on at once: dependency management, testing, CI/CD, and keeping a large monorepo modular.
Monorepos · shared packages · testing · CI/CD
My newest area. Authentication and digital signing services in Java and Spring, built on OAuth 2.0, OpenID Connect and BankID. Still plenty to learn.
Java · Spring · OAuth 2.0 · OpenID Connect · BankID
Less unnecessary complexity, clearer boundaries, and code that is easy to change. A real interest in architecture, worked on from inside the team.
Maintainability · modularity · code review · collaboration
02 — git log, newest first
Authentication and digital signing for the bank, with Java, Spring, OAuth 2.0, OpenID Connect and Swedish BankID.
Started in the Developer Experience team, which later became Web Platform & Design System. Shared platforms, libraries and tooling used by development teams across the bank — mostly about maintainability: how teams share code and infrastructure, a large TypeScript monorepo, and making a big backend-for-frontend more modular.
Helped start the move to a headless CMS and server-side rendering for the bank’s public websites.
On team Iglesias, the team behind code shared by about 20 of the bank’s web apps. Migrated reusable components from legacy technology to React without breaking the apps that depended on them, and kept shared dependencies and test tooling up to date.
Two-year web development program. Most of the projects below come from here.
Found out how much fun programming is, then spent almost a year of evenings learning Java before going full time.
Personal Service Technician at Volvo Cars — a mechanic with my own customers, from booking to handover. Then manufacturing and continuous improvement at Scania, and five years living and working in the UK and France.
03 — About
In the summer of 2019 I found out how much fun it is to code: an idea in the morning, a working program by evening. I haven't stopped since.
I came to software the long way round. I was a Personal Service Technician at Volvo Cars — a mechanic with my own customers, from booking to handover — then worked with manufacturing and continuous improvement at Scania, and spent five years living and working in the UK and France. Fixing cars turns out to be good training for debugging.
Technology is half the job. The other half — solving problems together with a team, and making complicated things clear to the people who depend on them — is at least as interesting, and it’s where I do my best work.
In code, I care about how easy it is to change: clear structure, no more moving parts than needed, and tooling that helps the next person.
04 — Personal and school projects
Paces AI token usage across the working days left in the month, with Swedish holidays, custom days off and half-days, calendar views and Swedish/English UI.
Work in progress: an identity provider built by hand to learn OAuth and OIDC from the ground up. React client and Express BFF in front of a Spring Boot authorization server.
Splits shared household expenses month by month. My first TypeScript and Next.js app, responsive from the start.
A full MERN webshop for pet supplies, from product catalog to cart. Built with a team.
Everything else, newest first
| Date | Project | Notes | Type | Links |
|---|---|---|---|---|
| 2025-02-01 | Portfolio 3.0 | Previous version of this site. Next.js and Supabase, with Renovate and GitHub Actions. | Solo | repo |
| 2021-11-25 | Markdown Reminders | MERN to-do app where every reminder is written in Markdown. | Group | repo |
| 2021-09-20 | Developing the Developer 2.0 | Previous portfolio. Create React App, REST API, CSS modules, Bootstrap.Lessons learnedIt was fun to make my first front end for my new portfolio API. With this, I can update my portfolio very quickly. | Solo | repolive |
| 2021-05-28 | ManCave | PHP, MySQL and EJS webshop. Responsive.Lessons learnedMade using vanilla PHP, a MySQL database and EJS templating. The code design is object oriented with an MVC structure and using dependency injection. We have tried to write descriptive, relatively short public methods in the classes that utilize helper methods to get the job done. | Group | repo |
| 2021-05-10 | The Fakestore Creator | PHP: paste a product REST API, get a generated store. Grew out of my first PHP fakestore.Lessons learnedI wanted to experiment a little with generating visual representations from a REST API. My plan was to let you customize how you could display the data. We’ll see if I’ll make an improved version in the future... | Solo | repo |
| 2021-03-28 | Wack | Slack-style chat on Node, Express, MongoDB, Socket.IO.Lessons learnedIndividual project. My first fullstack project. Made with Node/Express/MongoDB/Socket.IO/EJS. It took some time to learn how to use Socket.IO and websockets. And I could do with practicing it more. After several projects built using Bootstrap I wanted to get back to basics and used vanilla CSS to style this one. | Solo | repo |
| 2021-01-17 | MIB Customer Data | React customer data app, later backed by my own Node.js + MongoDB CRUD API. Responsive.Lessons learnedIn this individual project I learned how to use the hook “useContext”, as well as working with form validation and login functionality in a React app. We made use of a RESTful CRUD API provided by our teacher. | Solo | repolive |
| 2020-12-20 | EZORRO! | Stock market site in React. Responsive.Lessons learnedWe made this site with create-react-app and Bootstrap with a custom color palette. It is connected to a small read-only database on Firebase via an API. We made a dynamic arrow icon with styled-components (and Font Awesome) that is used on the currency and markets detail pages. With this site we have used Bootstrap’s responsive classes for the layout. A first for me. | Group | repolive |
| 2020-11-13 | Developing the Developer 1.0 | First portfolio. Retired.Lessons learnedI started the site by using Bootstrap 5 Alpha and customized the classes a bit as well as adding my own color palette. As you can see it’s autumn themed. But because the project required us to show we can use grid and flexbox I used that for the main layout of the page instead of Bootstrap’s classes. I used media queries and responsive images for the first time to make the site responsive. Of course, I also had to use some Font Awesome icons. I didn’t use any JS on this project other than Bootstrap’s built-in JS. | Solo | repo |
| 2020-10-30 | ACME Events | Events site on Local Storage, in Swedish.Lessons learnedFor this group project we were asked to create functionality for “CRUDing” events to/from Local Storage (LS). We opted for translating all JS event objects into JSON and saving them as one JSON object in LS each time any changes were made. If you load the page without any events already in LS, our JS will create five “default events” and save them there. | Group | repolive |
| 2020-10-12 | JavaScript Quiz | Quiz that loads questions from a REST API.Lessons learnedWe were asked to make a quiz web app by fetching questions from a REST API. This was interesting, because I had never used an API before and also never used async JavaScript. I chose to do this by making two HTML pages where the first is actually a form for choosing how many questions you want. The second HTML page is kind of a SPA (single-page application). If you pay attention, you might notice that there is a “fetching questions” text displayed for a fraction of a second before the “start quiz” button appears. | Solo | repolive |
| 2020-09-24 | Yahtzee | Browser dice game.Lessons learnedFor our first school project we were asked to make a Yahtzee game from scratch using JavaScript. We were introduced to DOM manipulation, object-oriented coding as well as basic HTML and CSS during our development of the site. Though we wanted to do more with this site, we didn’t find the time to complete the full functionality that we had intended. In order to meet the deadline, we opted for a very simple final product. Actually not bad for four guys completely new to web development to throw together in two weeks! | Group | repolive |
| 2020-05-31 | Dice Game | Where it started: a small Java game.Lessons learnedOne of the few things I have written in Java. Enable “Interactive” to try the game out. In English. | Solo | live |