Selected Work

Things I've built
(and the stories behind them)

Three projects, three very different reasons. One is a tool for investors, one is the website you're on right now, and one is the most important one of all. Here's the honest version of how each came to be.

01

Vekstlab — making the stock market less noisy

Visit Vekstlab

"Vekst" is Norwegian for "growth" (yes, I'm learning Norwegian, and yes, I sneak it into everything). Vekstlab is a website that does one simple job: it looks at a huge pile of stocks and quietly hands you back the handful that are actually worth a second look.

Here's the problem it solves. There are thousands of companies you could invest in. Reading about all of them is impossible, and staring at a spreadsheet until your eyes water isn't much better. A stock screener is basically a very patient filter: you tell it what you care about — companies that are growing, that aren't drowning in debt, that don't cost a fortune — and it throws away everything that doesn't fit.

Under the hood, Vekstlab is really two projects wearing the same coat: a data engineering project and a web development project. Neither works without the other, so here's how they fit together.

The data engineering half — getting the numbers right

Before anyone can screen a single stock, the data has to exist and be trustworthy. That's a pipeline that runs quietly in the background, and it goes through a few steps:

  1. Collect. Reach out to financial data sources and pull in raw numbers for hundreds of companies — prices, earnings, revenue, debt, and so on.
  2. Clean. Real-world data is messy. Some numbers are missing, some are in different units, some are just plain wrong. This step fixes, fills, or throws them out so the rest of the app can trust what it's reading.
  3. Crunch. Raw numbers aren't that useful on their own, so the pipeline works out the ratios and growth figures that actually matter — is this company growing? is it overpriced? is it drowning in debt?
  4. Store. Everything lands in a database, tidy and ready, so the website can ask a question and get an answer instantly instead of recalculating the world every time.
  5. Refresh. Because markets move, the whole process runs on a schedule so the data stays reasonably fresh — delayed, not live. This isn't a trading terminal, and it says so right on the tin.

That's the data engineering part: less glamorous than it sounds, but it's the foundation everything else stands on. Garbage in, garbage out.

The web development half — making it usable

A great database nobody can touch is just an expensive spreadsheet. The web side turns all of that into something a human actually wants to open:

  • Accounts & login. You can create an account or sign in with Google, so your setup stays yours.
  • The screener itself. The heart of it — pick what you care about, and the app queries that database and hands back a clean, sorted short list in a blink.
  • The interface. Buttons, tables, and pages that (hopefully) feel obvious, whether you're on a phone or a laptop.
  • The server behind it. A Python web app that ties the front-end to the data, remembers who's logged in, and keeps every piece talking to the others.

I won't pretend I wrote every single line alone — I built it with a lot of help and an even larger amount of trial and error. But I understand every piece of it, which was the whole point. It started as "I wonder if I could," turned into something I genuinely use, and it's free forever — because the goal was to build the tool I wished existed, not to sell it.

02

This website — teaching myself web development in public

You're standing in it. This portfolio is the project where I decided to stop reading about web development and just... make a website. No template, no shortcuts — mostly stubbornness and a worrying number of open browser tabs.

The honest starting point: I'm an economist and a data person. HTML and CSS were not my native language. So I treated it like learning any language — badly at first, then slowly less badly. Every card, every hover effect, every slightly-too-clever animation on this site is something I broke at least three times before it finally behaved.

Under the hood it's a small Python app (built with Flask) that serves a few pages — home, about, work, and a contact form that actually saves your message instead of pretending to. Nothing flashy, but it's mine, and I can change anything I don't like at 2am if the mood strikes.

The real reward wasn't the finished site. It was going from "web development is scary magic" to "oh, it's just a bunch of files talking to each other." That shift in how I see it is worth more than any single page here.

03

Wedding website — the most important launch of my life

Visit the wedding site

Every other project on this page is professional. This one is personal, and honestly it's my favorite. It's a website for our wedding — mine and Therese's, on the 17th of July 2027 at Kronen Gaard Hotel in Sandnes, Norway — the one project where the stakeholder is the love of my life and the deadline is not the kind you can quietly push back (there's a countdown on the homepage, ticking down by the second, in case I forget).

A wedding website sounds simple until you build one. It needs to tell guests the important things (where, when, what to wear, how to get there) without making anyone dig for them. It has to work for family scattered across different countries and time zones. And it has to feel like us — warm, a little playful, and absolutely not a corporate landing page.

So it became part information desk, part love letter: our story, the details people always forget to ask about, and a simple way for everyone to say "yes, we'll be there." Somewhere along the way it turned wedding logistics into something I actually enjoyed instead of dreaded.

Of all the things I've made, this is the one with the highest stakes — and by far the best reward waiting at the end of it.

Got a project in mind, or just curious about one of these?

Let's talk →