# Nikolaj Gade

Software Developer

they/them · he/him

GitHub
Gitea LinkedIn nikolaj@gade.gg

## About

Hi 👋 I'm Nikolaj, a software developer based in Nørrebro, Copenhagen. I started programming around 2007 as a kid tinkering in Game Maker, and I haven't stopped since.

My main language is Python, but I'm a chameleon by nature: I love picking up new tools and languages, and there's nothing quite like the feeling of new concepts snapping into place. I do my best work when I can sink my teeth into something and not let go until it's done.

When I'm not at the keyboard, you might find me reading a book or running a Dungeons & Dragons campaign as a Dungeon Master. I live in an apartment in Nørrebro with my cat, Pepsi (pictured here).

Full name: Pepsi Max Lime Gade

## Skills

I have significant experience across a range of languages and pick up new ones quickly.

Python Bash C C# SQL Go Haskell JavaScript

### Environment

I've been running Arch Linux (btw) as my daily driver for around five years, so the command line feels like home. I'm comfortable with Docker for containerization and have a solid grasp of Linux system administration.

### Communication

I'm good at explaining complex ideas to non-technical people; a skill picked up from working IT Support in multiple companies. Fluent in English and Danish.

## Projects

### Sly 2 & 3: Archipelago Randomizers

Sly 2 Sly 3

Archipelago is a multiworld randomizer platform that lets players shuffle items across different games simultaneously. I've built full Archipelago implementations for two PS2 games: Sly 2: Band of Thieves and Sly 3: Honor Among Thieves. Gadgets, episodes, treasures, and, in Sly 3, the playable crew members all get shuffled into a shared item pool across a multiplayer session.

The core technical challenge in both is real-time memory manipulation of a running PCSX2 emulator instance via the PINE protocol, reading and writing game state at precise memory addresses to track checks, deliver items, and keep the randomizer in sync with what's happening inside the game. The two games share an engine but not much else, so every address, item, and check had to be dug out of RAM again for Sly 3.

Both are projects I actively maintain and support, with a small but dedicated community of around 500 players.

PythonPCSX2 / PINEReverse engineeringArchipelagoasyncio

### Centvrion

Source

An esoteric programming language designed to be usable by an ancient Roman. The letters W, J, and U are banned (non-classical Latin), all numbers must be written as Roman numerals, and every keyword is in Latin: `DEFINI` for function definitions, `INVOCA` to call them, `DICE` for output, `AVDI` for input, `SI`/`TVNC` for conditionals, and so on.

The language includes a tree-walking interpreter and a compiler that targets C. Optional modules extend the standard library with `FORS` (random numbers), `FRACTIO` (base-12 fractions for floats), `MAGNVM` (higher numbers than standard roman numerals), and `SVBNVLLA` (negative numbers).

PythonLanguage designCompilerLSP

### WikiTCG

Live Source

A trading card game where every card is generated from a Wikipedia article. Built for friends, it features booster pack opening, a fully implemented card game, and trading between players. Matches run in real time against friends or AI opponents, one of which is a neural network trained through self-play. It also, naturally, includes predatory microtransactions.

The frontend is built in Svelte and the backend in Python, deployed with Docker Compose.

SveltePythonDockerAPIsGame AIPostgreSQL

### Home Network Project

Personal infrastructure

Born out of a deep distrust of Microsoft and Google, this project is my ongoing effort to self-host as much of my digital life as possible. Every device on my network is named after a Pokémon and assigned a local IP of `10.0.0.x`, where `x` is its Pokédex number.

The primary server, Charizard, runs Unraid OS and manages a disk array totalling 44 TB. It hosts a Gitea instance for personal projects, a file server, and a media server, exposed to the internet through Nginx Proxy Manager with SSL certificates from Let's Encrypt.

An extension of the setup lives on Bulbasaur, a Raspberry Pi running Pi-hole for network-wide ad blocking and a WireGuard VPN server for secure remote access.

Charizard is turning five this year. In that time I've learned an enormous amount about networking, Linux administration, and the particular satisfaction of fixing something broken at 2 in the morning that nobody asked you to build in the first place.

UnraidDockerReverse ProxyNetworkingSelf-hosting

## Experience

Sep 2024 — Jul 2026 Part-time

### Junior Developer

Copenhagen Capacity · Copenhagen

Working on a Python codebase of web crawlers that scrape job postings from across the web, feeding a database that powers a job portal. The work involves maintaining and extending scraping pipelines, handling the messiness of real-world HTML, and keeping the data clean and consistent.

PythonWeb scrapingDatabases
Sep 2023 — Aug 2024 Full-time

### IT Project Manager

360 Law Firm · Copenhagen

Brought in to introduce business intelligence to the firm, where I planned and managed the build of a reporting pipeline that ran from API to finished report. The role broadened from there into wider data science work and internal tech support, and I served on the firm's AI task force, helping figure out how AI should be used in the organization.

Business intelligenceData scienceProject management
Apr 2022 — Aug 2023 Part-time

### Junior Data Scientist

Valuer.ai · Copenhagen

Database management for a neural network startup, keeping the data infrastructure that fed the core model clean, organised, and running reliably.

Data scienceDatabases

## Education

### MSc Computer Science

University of Copenhagen

2024 — 2026

Specializing in programming language design. Graduated July 2026.

Master's Thesis

### BSc Computer Science

University of Copenhagen

2019 — 2023

General specialization.

Are you sure?

This is a permanent deletion of this entire website.