---
title: "Visualizing 17 Years of Code"
date: "2026-02-02"
---
# Visualizing 17 Years of Code
4.3 million lines. 250+ projects. 17 years.
I had no idea until I built a tool to count them.
Turns out most of it is JavaScript and Ruby; TypeScript is where the last six years went. That works out to about 700 lines a day, every day, for 17 years straight.
## The problem
My portfolio was scattered across git repos in ~/src and old projects in ~/archive, client work mixed in with side projects, some of it with git history and some without. Different languages, different eras, different me.
I wanted the shape of the whole thing, not a list of repos.
## The analyzer
First, I built a CLI that crawls directories and extracts everything: languages, frameworks, LOC, commit history, contributors.
The hard parts:
• Monorepo detection. Lerna, Turbo, pnpm, npm workspaces, Cargo workspaces. Each has different config formats. Each needs glob expansion to find subpackages.
• Git blame at scale. Processing thousands of files in parallel to calculate my actual contribution percentage. Had to filter binary files, handle encoding issues, timeout on massive repos.
• Framework fingerprinting. Rails vs Next.js vs Django vs FastAPI. Detection by config files, directory structure, and dependency inspection. 25+ frameworks.
• Customer attribution. Parsing git remotes to figure out which client each project belonged to. Mapping freelance work to the right company.
Output: a single JSON file with everything. Languages, LOC, commits per year, framework, customer, status. Ready for visualization.
// CLI analyzer output showing project analysis with language detection, LOC counting, and metadata extraction
## The dashboard
JSON is data. I wanted a cockpit. Something that feels like htop for your career.
So I built a terminal-style dashboard. Click a year, filter to projects from that era. Click a language, see only TypeScript or Ruby or Rust. Click a customer, see everything I built for IKEA or ING or Philips.
Navigate with j/k like vim. Search with /. Sort by commits, LOC, status, start date. Select a project, see the language breakdown, contribution level, customer context.
// Projects dashboard showing 17 years of code
Check it out: /projects
## What the data told me
2008-2012: The Ruby years. Rails everywhere. Agency work for newspapers, logistics companies, healthcare.
2013-2018: The transition. Ruby fading, JavaScript rising. First React projects. First mobile apps. CTO roles.
2019-2024: TypeScript dominance. Every new project. Backend, frontend, tooling. I still love writing Ruby, but the industry moved. The freelance work moved. You follow the work.
2024-now: Rust curiosity. After years of web work, systems programming uses completely different muscles.
The commit graph doesn't lie. You can see the slow years. The burnout periods. The peak? COVID. 80-hour weeks at Homigo, a corporate proptech startup for ING Bank. The pandemic hit, everyone went remote, and I just... coded. Non-stop and I was loving it!
## Why I built this
This is a proof of work.
I've been writing code since I was 8, on the 386 my dad got for his banking job. But I could only recover projects going back 17 years. The earlier stuff is lost to time and dead hard drives.
In 2004, during my studies, a teacher referred his best students to TNO for a project: building a corporate website. To get paid, we needed to register at the Chamber of Commerce. That's how Re-invention was born. I'm forever grateful to that teacher. Re-invention still exists today, 20 years later.
My bet: in a few years hardly anyone will hand-write a system this size. So I wanted the record — the decades I spent doing it by hand, debugging at 3am, learning languages the hard way.
I used AI to build the tool that documents my pre-AI work.
Try it: /projects
#typescript #react #tooling #portfolio #visualization #career