Snø Oslo

Sat Nov 02 2019

Snø is an indoor skiing and activity arena scheduled to open in January 2020.
Visit for more background information about the SNØ project.

Summary and goals

This post will cover the technical platform and website for the Snø project. The main task (out of many others) for these components is to facilitate the purchase and management of tickets (passes) to the arena and handle the integrations with the on-site gate system.

There where three main technical goals for this project.


Critical clients and platform services should scale to any amount of traffic and handle large spikes in traffic for periods of time. Clients and service should scale down in periods of low traffic.

Robust and maintainable

Critical clients and services should operate in a stable manner, not requiring any manual restarts, disk management, etc. No on-site servers and as close to 100% uptime as possible. There should also be a plan for mitigating various forms of attacks. A client or service should be easy to develop for and deploy without affecting other services or clients.

Cost efficient

The cost of the platform and clients should scale with the amount of traffic. No over scaled servers incurring costs and collecting dust. We also aimed to avoid static costs like licenses where possible.

The solution - The platform

The platform was build for the most part utilizing Amazon Web Services (AWS) applying the «micro-services» principles. All of the services (and the website servers) where implemented on AWS Lambda and made available to the world through the AWS API Gateway. Everything is sitting behind the Cloudflare firewall.

Several third party services was utilized for payment transactions, logging and monitoring, integration with physical gates on-site and so on. All logging data was piped into Elastic search (Elastic Cloud) via CloudWatch. Kibana was used for monitoring, trend watching and general stats.

See the diagram below for an overview of the platform.

Snø platform diagram

The solution - Frontend / Clients

The main client is the website located at The website is running on an AWS Lambda like the rest of the services. This allows for excellent scaleability and great cost management.

The web-site is build as part server rendered and part SPA. The SPA(s) are separated into business logic and presentation. The business logic is written in Typescript and is completely framework agnostic. This part also acts as the model for the presentation. The presentation part is written using the React framework.

My part in this

Solution architect for the service platform, including AWS infrastructure, services and other components needed to run everything. (Integrations with physical components, web-sites and so on). Server and client developer.

Tools and technologies used

  • All Lambdas and EC2 instances are running Linux.
  • All server code is written in Node.js
  • All client code is written in Typescript / React
  • Amazon Web Services
  • Cloudfront, VPC, API Gateway, EBS, Lambda, SNS, SQS, so on..
  • Third party tools includes Elastic Cloud, Stripe and so on

Additional images


Sun Oct 23 2016

(From WikiPedia) NorgesGruppen ASA is a Norwegian grocery wholesaling group which also runs various retail outlets. With a 38,5% market share in 2012, NorgesGruppen was the largest player in the Norwegian grocery retail market.

Norgesgruppen owns several store chains, like Kiwi, Meny, SPAR and others.

Executive summary

The several year long «Norgesgruppen project» encapsulated many things, native apps, web-sites, e-commerce and an entire server / client platform build from the ground up to serve data to all of the apps, websites and other solutions. My role as a lead in this project was to create, extend and maintain a service platform as well as advising and consulting with the chain teams.

My part in this

  • Creating and maintaining the platform REST services
  • Creating and maintaining the client SDK for apps and web-apps
  • Creating and maintaining the platform realtime sync service
  • Co-creating and maintaining the platform caching service
  • Tech-lead, responsible for the platform servers and client SDK
  • Advising and consulting chain teams

Tools and technologies used

  • Node.js
  • MongoDB / Mongoose
  • Web sockets server and client side
  • Azure WebApps
  • Azure TableStorage, ServiceBus...and more
  • Redis
  • React.js
  • TypeScript
  • GitHub
  • Elasticsearch
  • Jira / Confluence
  • TeamCity


My involvement started pretty much at the beginning of the project. My role was to lay the foundation for several mobile apps by building a client SDK which would abstract away the underlying complexities of the humongous Norgesgruppen system. Since Norgesgruppen owns several store chains, each of the major chains had it's own team of designers and developers tasked with using this client SDK as a foundation and build chain specific experiences on top of it.

After some time the need for an entire platform criss-crossing all chains emerged. The overall goal of this platform was to make available both server and client APIs which would offer an accessible, consistent, scalable, secure and high-performance way for chain teams to access Norgesgruppen's data. We also wanted to add value to existing data via different logging, searching and data gathering methods which could be used by Norgesgruppen and their chains to better serve their customers. Lastly we where able to offer new functionality which did not exist within the existing Norgesgruppen services, like realtime shopping list synchronization and awesome search enhancements utilizing Elasticsearch.

Note that I'm not (at the time of writing this) personally an expert in the field of Elasticsearch, on this I depend on the excellent skills of my colleagues while I'm absorbing more knowledge about how to work with it.

REST / Sync services

Both the REST API, the caching services and the realtime sync services are build using Node.js and it's running on Azure WebApps.

The REST API is in place to act as a traffic buffer for Norgesgruppens own services and it's build to be easily scalable and extendable. The api provides custom services such as custom user data sync (not to be confused with the realtime sync services) as well as acting as cache layer enabling faster serving of data to clients.

The cache services are build on top of Redis and Elasticsearch. This system grabs data from underlying sources and serves it to client through the REST api, either as is or customized / optimized.

The realtime sync services is a high performance WebSocket based service used for instantly syncing data between many clients at once. It is a distributed system handling client sockets between many server instances and it uses a high performance queuing system to distribute messages between clients. This system also has a client side implementation provided as part of the client SDK (see below).

The client SDK

This is a JavaScript based SDK (written in TypeScript) used both by native iOS / Android applications as well as web based applications / web sites. For applications using this SDK it will handle all transactions with all of the servers mentioned above. In addition it will provide APIs that remain consistent over time, even when the underlying server api's are updated. It will also abstract away most complexities with storing data locally (IndexDB, WebSQL...) and many other nifty things.


Working with all of the talented people in this project has been and continues to be joy both from both a technical standpoint and a social one. Challenging tasks are commonplace and in this project this is a good thing. Working this way incrementally makes all of us more skilled and aware of what we are trying to accomplish, which is constantly improving on the user experience.

Fagforbundet web-site

Wed Aug 01 2012

The new website for Fagforbundet is a 100% responsive site utilizing cutting edge technologies like those provided by HTML 5 and accompanying technologies.

Even more so, the site is a visual treat due to in large part our awesome graphic designer which in cahoots with the rest of the team made creating a fast, responsive and cool site into really inspiring work.

The front page in a desktop browser

The site being responsive simply means that it adapts to different screen sizes and in this case also to different platforms and input methods. If you're on a touch device the site knows this and gives your the optimal experience tailored for touch input, all the way down to how scroll works and how memory usage is handled.

The front page on an iPad

Since we all know that traditional computers soon will be a thing of the past, we took special care to have the site perform and look particularly good on smaller devices like the iPhone. Making the site perform well within a bunch of different environments was a challenge, but a worthwhile one.

The front page on an iPhone

My part in this

  • Technical lead
  • Concept refinement
  • Interaction principles (modules, search, responsiveness + more)
  • Technical architecture
  • Markup and styling for about 50% of the site
  • All CoffeeScript / JavaScript development

Tools and technologies utilized

  • CoffeeScript
  • JavaScript
  • HTML 5 + companion technologies ( on..)
Disclaimer: The current website at does not look, behave and perform as we intended to when we made it. This is due to some later work and additions performed by others. Please refer to the screenshots and the video above to get an accurate impression of our work on this site.

Additional screenshots

Tavleboka - Interactive learning tool

Thu May 17 2012

Tavleboka is a tool meant to be used on computers or a touch enabled blackboard, like the Smartboard.

This system features two parts, an admin part making it easy for the publisher to upload and enrich print based books in pdf format. The "presentation" application is what the teacher uses to create a rich and highly interactive learning experience for the pupils. This application can be run in any browser through the Adobe Flash platform and is capable of playing back interactive media such as sounds, animations. It will also take user input such as text, drawings, sticky notes and so on. This project was two years is the making and is an essential part of gradually enriching the world of education.

My part in this

  • Concept development
  • System architect / Tech lead
  • Development of the presentation application
  • Development of the admin application

Tools and technologies utilized

  • Adobe Flashbuilder (Flex)
  • JavaScript

«Kupongrettere» - Interactive lottery apps/games

Thu Sep 22 2011

«Kupongrettere» or something like "coupon checkers" in english, are four interactive web applications / games giving users of «Norsk Tippings» (Norwegian money game provider) lottery the possibility of reliving the actual lottery, only in an interactive manner.

The applications are written using JavaScript and the latest HTML/CSS standards. The applications was especially tailored to work well on both modern desktop browsers as well as on the iPad. To make this happen we had to utilize CSS 3 technologies, such as transitions and 3D transforms.

My part in this

  • Concept development (part of team)
  • Most of the JavaScript development
  • HTML & CSS for two of the games

Tools and technologies utilized

  • HTML 5
  • CSS 3
  • JavaScript
  • jQuery