Dark

Resume

Programming Languages and Technologies

  • Frontend Technologies
  • React
  • React Native
  • Redux
  • Tailwind
  • Next.js
  • HTML5
  • JQuery
  • AngularJS
  • D3
  • SCSS/CSS
  • Android
  • Backend Technologies
  • Express
  • Rails
  • Django
  • Sequelize
  • Tauri
  • Zend
  • RabbitMQ
  • Bull
  • Kafka
  • Airflow
  • Databases & Caches
  • PostgreSQL
  • SQLite
  • MySQL
  • MongoDB
  • Redis
  • Memcached
  • Testing
  • RSpec
  • Jest
  • Jasmine
  • phpunit
  • Selenium
  • Teaspoon
  • Cloud
  • AWS
  • Vercel
  • Heroku
  • Cloudinary
  • DevOps & Infrastructure
  • Docker
  • Nginx
  • Vagrant
  • Jenkins
  • Grunt
  • NPM
  • Yarn
  • Terraform
  • HaProxy
  • DC/OS
  • Monitoring & Incident Management
  • Splunk
  • Grafana
  • Prometheus
  • Sentry
  • OpsGenie
  • Source Control & Project Management
  • Git
  • SVN
  • Github
  • Jira

Employment

Grand Resonance AB Founder / Software Consultant Jun. 2023 - Present
Klarna Senior Software Engineer

Software Engineer
Dec. 2019 - May 2022

Oct. 2017 - Dec. 2019
Getty Images Software Engineer Jan. 2014 - Jun. 2017
Basewarp Contract Software Developer Aug. 2013 - Dec. 2013
Rytmos Cofounder, Software Developer, Designer Jun. 2012 - Aug. 2012

Education

University of Edinburgh B.Eng. in Software Engineering
First Class Honours
Sep. 2009 - Jul. 2013

Selected Projects

Travel Map

Independant - March 2024

  • Technologies Used: Vercel, Next.js, Javascript, D3, Auth0
  • Website to display the visited countries of a well-travelled couple, as well as dynamic handwritten notes
  • Admin interface for authorized users to allow management of visited countries
  • Previous versions of this site were created with Ruby/Rails and PHP

Fix Consent Manager for Segment.io

Consultant - May 2023

  • Technologies Used: Next.js, React, Typescript, Github
  • As part of consultant work for a client, I created a fix for the Segment.io consent manager to work with Next.js 13
  • Fixed two outstanding issues as a consequence of this change

Merchant Directory

Backend Service and Frontend UI for merchants within the Klarna App

Klarna - February 2018 - May 2022

  • Technologies Used: React Native, Most.js, Ramda, Redux, ExpressJS, Sequelize, Jenkins, PostgreSQL, Redis, Docker, AWS S3, AWS RDS, AWS EC2, Airflow
  • Create both backend and frontend flows for these stores, featured on the homepage of the app
  • Service provided API for:
    • Listing merchants associated with Klarna and external online merchants that users could shop at, and api for searching merchants
    • Searching for merchants
    • Identifying merchants based on urls (including homepages, subdomains and CDNs)
  • Handled de-duplication of merchants, multi-country (23 different markets) support, and personalization for existing users
  • Responsible for identifying merchants based on URLs, used by several other teams as critical infrastructure for their features
  • Implemented feature for allowing users to save merchants and personalize their own lists (alongside flow for streamlining 'right to be forgotten' requests)
  • Created admin overview page integrated into LDAP to decrease customer service requests and ease troubleshooting for team
  • Built Jenkins flow for automating repetitive tasks and high-risk operations
  • Create separate repository for audit trail with authorizations required by security regulations

App Homepage

Iterated on homepage

Klarna - March 2020 - May 2022

  • Technologies Used: React Native, GraphQL, NodeJS, ExpressJS, Cloudinary
  • Work on several iterations of homepage. Display content fetched from numerous other teams via GraphQl in grid layout
  • Track and evaluate which content was performing well and making adjustments based off this information
  • Reduce and optimize requests for initial page to be as low as possible to increase TimeToLoad (TTL) for the app
  • Implemented for both web and Klarna application
  • Served 2.8 million daily active users

Shopping Team On-Call

Defined and operated the on-call role

Klarna - March 2018 - May 2022

  • Technologies Used: Opsgenie, Datadog, Prometheus, Splunk
  • Defined initial on-call team responsibilities and SLAs for services
  • Onboarded dozens of teammates across domain on various services about the shopping service and integrating individuals in the on-call rotation
  • Defined troubleshooting error queries to use in Splunk for teams, alongside error dashboards to dive into technical problems
  • Defined alert thresholds for services to trigger when a problem had occurred
  • Served on the on-call rotation for several years, mitigating several incidents and assisting troubleshooting others
  • Create error runbook for common problems

Non-Technical Roles

Work with Interview Pipeline and Architecture Groups

Klarna - May 2018 - May 2022

  • Technologies Used: Draw.io, Swimlanes.io, Google Meet, Slack
  • Review technical submissions from prospective candidates
  • Conduct in-person interviews for both full-time employees and consultants
  • Meet with other teams within domain as head of team to ensure alignment and discuss solutions to problems
  • Devise technical architecture documents to present to stakeholders

Affiliation Service

Monetize links throughout app

Klarna - June 2018 - November 2019

  • Technologies Used: React Native, NodeJS, Docker, Postgres, AWS RDS
  • Helped create backend service that would allow monetization of links within app
  • Responsible for ensuring that front-end application would use this affiliation service for all links
  • Integrated affiliation links into other services (wishlist and merchants)
  • Large impact on the finacial success of our team - responsible for large part of revenue
  • Responsible for handover to another team

Wishlist Service

Create backend and frontend for wishlisting items on internet

Klarna - August 2018 - January 2020

  • Technologies Used: React Native, Most.js, Ramda, Redux, NodeJS, Express, Redis, Bull, Postgres, AWS RDS, AWS EC2, Docker
  • Allow users to wishlist any project across the internet. Store in database
  • Assist with web scraper to remotely fetch websites and scrape prices
  • Create push notifications to indicate a price drop was detected by our automated scraper
  • Implemented multiple wishlists per user, migrating existing records to new format without downtime, and implemented sharing functionality

One Time Card Creation Flow

Create UI for Generating Single-Use Credit Cards

Klarna - March 2018 - June 2018

  • Technologies Used: React Native, Most.js, Ramda, Redux
  • Created front-end flow for creating and viewing single-use credit cards for the Klarna App
  • Ensured that the flow was PCI compliant

Biometric Login

Implemented biometric login for Klarna App launch

Klarna - February 2018

  • Technologies Used: React Native, Redux
  • Handpicked to deliver biometric login flow for app launch under tight deadline
  • Responsible for handover to next team - code fundamentals still the same two years later

Browser Wrapper

Wrap WebView with React Native for Klarna App

Klarna - October - December 2017

  • Technologies Used: React Native, Java, ObjectiveC, Webview, Redux, Javascript, Jest
  • Create React Native Wrapper to present WebView as functional browser
  • Add logic and UI elements for handling multiple tabs
  • Fetch scripts that would perform automatic checkout when visiting website (based on URL)

Invision Partnership

Add Invision plugin to iStockphoto asset pages

iStockphoto - April - May 2017

  • Technologies Used: SCSS, Autonomy TeamSite, Coffeescript
  • Delivered prototypes of download buttons and modals under a changing set of requirements

Hackathon Project

Automatic keyword tagging for assets based off combined results of multiple image APIs

iStockphoto - March 2017

  • Technologies Used: Sinatra, Ruby/Rails, DC/OS, Gitlab Builds, Docker, Artifactory
  • Setup Gitlab build server to deploy Docker instance to DC/OS for team to use multiple image library APIs.
  • Pair-programmed on code to tag images with keywords.

Search By Image

Add search by image front-end to the iStockphoto website

iStockphoto - February 2017

  • Technologies Used: Angular, AWS S3, Jasmine, Teaspoon, Ruby/Rails, SCSS, JQuery
  • Extended existing library to allow users to drag-and-drop/select files and upload files to the cloud, adding inline validation and tests.
  • Created responsive modal to be used site-wide as a re-usable mixin.
  • Adapted search to use fingerprint as search parameter. Maintained search functionality for three different sites.
Migrate the iStockphoto asset page from PHP to Rails

iStockphoto - April - November 2016

  • Technologies Used: Angular, SCSS, Ruby/Rails, PHP, JQuery, Coffeescript, C#, Rspec
  • Wrote logic to handle 30 unique download states, adapted responsive carousel to display similar images, and handled backwards compatibility for routing structures.
  • Styled the page to be identical to previous iteration, despite different underlying HTML.
  • Improved page performance - page load time decreased by 50%.
  • Scripted user creation to increase team productivity.
  • Delivered progress updates to entire company as part of monthly summaries.

Unifying iStockphoto with Getty Images

Critical first step in unifying two codebases

iStockphoto - January - March 2016

  • Technologies Used: HaProxy, Ruby/Rails, Sinatra
  • Updated load balancer to route iStockphoto requests from old servers to new.
  • Coded proxy rules to strip iStock’s country/language from URL request, redirect to appropriate Rails app, and re-append country/language for SEO.
  • Developed tests to validate routing behavior for both iStockphoto and Getty Images.

Autonomy Teamsite CMS

Create system to allow site to deliver content via Teamsite CMS

iStockphoto - March 2014 - March 2016

  • Technologies Used: Autonomy TeamSite, PHP, phpunit, CSS, XML, XSLT, C#
  • Designed system to fetch complete webpages, and to show fallback content on error.
  • Deployed system to update prices on a per-user basis.
  • Took responsibility for training individuals on CMS implementation.

Update to Credit Purchase Logic

Create new behavior for credit expiry logic.

iStockphoto - June - August 2015

  • Technologies Used: MySQL, RabbitMq, PHP, phpunit, Git
  • Worked with legacy code to update credit expiry logic.
  • Wrote queries to process and update expiry dates on all active credits (some spanning several decades).
  • Deprecated a purchase flow, removing hundreds of lines of code.
  • Improved dozens of unit tests - decreased test suite runtime by 16%.

Allow Anonymous Users to Purchase

iStockphoto - December 2014 - March 2015

  • Technologies Used: PHP, Zend, Jasmine, Grunt, MySQL, Angular, phpunit
  • Refactored checkout process to allow anonymous users to purchase items.
  • Created API to allow detection of existing users and creation of new users before purchase.
  • Improved testability of checkout by separating functionality into modular services.
  • Developed a session-based cart for anonymous users, with capability to transfer to database for checkout.

Update iStockphoto SEO

Update and maintain URLs sitewide for SEO purposes

iStockphoto - May - July 2014 and

October - December 2015

  • Technologies Used: PHP, nginx, Javascript, AngularJS, SCSS
  • Reworked routes for all photo and search pages
  • Later, worked on country picker to allow users to change languages
  • Helped add country and language into all URLs, depending on the users preference
Take existing dissertation work about Word Storms and build scalable website around it

University of Edinburgh - September 2012 - April 2013

  • Technologies Used: Javascript, Ruby/Rails, Java, CSS, EC2, S3
  • Create scalable website to generate 'Word Storms' - shared collections of word clouds from a corpus
  • Delivered code onto EC2 instance and images were uploaded to S3
  • Learned Javascript, Ruby on Rails, and CSS while undergoing this project

Independant Android Game

Music and rhythm game, based off user-submitted MP3. Analyzed waveform of song, and created game based around it.
  • Technologies Used: C#, Unity, Photoshop, SQLite, C, Java, SVN
  • Developed core game mechanics and setup database for tracking player scores.
  • Assisted with art creation, sound processing and marketing.
  • Released on Google Play within three-month deadline, employing rapid prototyping to deliver finished result.
One of 12 teams competing in tournament

University of Edinburgh - January 2012 - May 2012

  • Technologies Used: Java, Git
  • Robot took input from overhead camera. In charge of team that analyzed realtime data from camera feed and sent pitch information to robot
  • Designed two separate vision systems (first abandoned due to random segfaults in Java). Swapped seamlessly during middle of project
  • Delivered summary presentation in front of all peers and several representatives from large corporations
Individual Practical - Create Android application for tourism

University of Edinburgh - September - December 2011

  • Technologies Used: Android SDK, Eclipse, Java
  • Built Android 2.3.1 application to allow users to find their position without using Google maps and find directions to the Informatics Forum in Edinburgh.
  • Delivered list of hotels, restaurants and cafes that may be of interest to individuals as a database.