bjorntirsen.se

~/portfolio — v4.0.0

BjörnTirsén.

Björn Tirsén

Software engineer in Stockholm. Full stack by training, platform engineer by habit — now building the identity platform behind login and digital signing at SBAB.

role
Software Engineer, SBAB
focus
Full stack & platform engineering
now
Identity platform
based
Stockholm, Sweden
TypeScriptReactNode.jsJavaSpringExpressNext.jsOAuth 2.0 + OIDCCI/CD

What I work on

01 — Areas, roughly in the order I got to them

01

Full stack

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

02

Platform engineering

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

03

Identity & auth

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

04

Engineering practice

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

Experience

02 — git log, newest first

  1. Sep 2026 – nowCurrent

    Identity platform

    Software Engineer · SBAB

    Authentication and digital signing for the bank, with Java, Spring, OAuth 2.0, OpenID Connect and Swedish BankID.

  2. Apr 2024 – Sep 2026

    Web platform & developer experience

    Software Engineer · SBAB

    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.

  3. Aug 2022 – Apr 2024

    Public websites & digital sales

    Software Engineer · SBAB

    Helped start the move to a headless CMS and server-side rendering for the bank’s public websites.

  4. Nov 2021 – Aug 2022

    Web platform

    Web Developer (intern first) · Handelsbanken

    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.

  5. 2020 – May 2022

    Full Stack Open Source

    Nackademin

    Two-year web development program. Most of the projects below come from here.

  6. 2019 – 2020

    Hello, world

    Evening courses in Java

    Found out how much fun programming is, then spent almost a year of evenings learning Java before going full time.

  7. Before code

    Cars, factories, abroad

    Volvo Cars · Scania · UK & France

    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.

Off the clock

  • Family
  • Running
  • Lifting heavy things
  • Books
  • Movies

Projects

04 — Personal and school projects

#012026-04 · Solo

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
#022026-06 · Solo

bt-auth

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.

  • React
  • Express
  • Spring Boot
  • Docker
#032021-11 · Solo

Couples Expenses

Splits shared household expenses month by month. My first TypeScript and Next.js app, responsive from the start.

  • TypeScript
  • Next.js
  • Responsive
#042021-10 · Group

Cats & Dogs

A full MERN webshop for pet supplies, from product catalog to cart. Built with a team.

  • MongoDB
  • Express
  • React
  • Node.js

Archive

Everything else, newest first

DateProjectNotesTypeLinks
2025-02-01Portfolio 3.0Previous version of this site. Next.js and Supabase, with Renovate and GitHub Actions.Solorepo
2021-11-25Markdown RemindersMERN to-do app where every reminder is written in Markdown.Grouprepo
2021-09-20Developing the Developer 2.0Previous portfolio. Create React App, REST API, CSS modules, Bootstrap.
Lessons learned

It was fun to make my first front end for my new portfolio API. With this, I can update my portfolio very quickly.

Solorepolive
2021-05-28ManCavePHP, MySQL and EJS webshop. Responsive.
Lessons learned

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

Grouprepo
2021-05-10The Fakestore CreatorPHP: paste a product REST API, get a generated store. Grew out of my first PHP fakestore.
Lessons learned

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

Solorepo
2021-03-28WackSlack-style chat on Node, Express, MongoDB, Socket.IO.
Lessons learned

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

Solorepo
2021-01-17MIB Customer DataReact customer data app, later backed by my own Node.js + MongoDB CRUD API. Responsive.
Lessons learned

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

Solorepolive
2020-12-20EZORRO!Stock market site in React. Responsive.
Lessons learned

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

Grouprepolive
2020-11-13Developing the Developer 1.0First portfolio. Retired.
Lessons learned

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

Solorepo
2020-10-30ACME EventsEvents site on Local Storage, in Swedish.
Lessons learned

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

Grouprepolive
2020-10-12JavaScript QuizQuiz that loads questions from a REST API.
Lessons learned

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

Solorepolive
2020-09-24YahtzeeBrowser dice game.
Lessons learned

For 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!

Grouprepolive
2020-05-31Dice GameWhere it started: a small Java game.
Lessons learned

One of the few things I have written in Java. Enable “Interactive” to try the game out. In English.

Sololive

05 — Contact

Say hej.

Always happy to talk shop — software engineering, platforms, authentication — or something else entirely.