Fun

Portfolio

Rasmus Haversen

[email protected]

Software engineering student at Aarhus University. I build full-stack web applications, write tests, set up CI/CD pipelines, and deploy everything to a self-managed Kubernetes cluster on a Raspberry Pi. Most of these projects are live and used by real people.

I work mostly with TypeScript, Express, Next.js, and MongoDB, but I also write C++ and Java when the problem calls for it. I'm interested in infrastructure, AI agents, and algorithm design.

Infrastructure

All web projects share a common deployment setup. This isn't a separate project, it's just how everything below gets built and run.

Kubernetes

Every service has staging and production deployments with Kustomize overlays. Production runs 2+ replicas with horizontal pod autoscaling (up to 10). Liveness and readiness probes on all pods.

CI/CD

Reusable GitHub Actions workflows run tests, lint, spellcheck, and build Docker images on every PR. On merge, images are built for ARM64 + AMD64 and pushed to DockerHub. ArgoCD syncs the cluster.

Docker

All containers run as non-root users on Debian slim. Production dependencies only. Multi-platform builds (ARM64 for the Raspberry Pi, AMD64 for CI).

Monitoring

Sentry with performance tracing and profiling on all backends. Structured JSON logging via Winston with separate error/info/combined files, forwarded to BetterStack for centralized aggregation.

Security

Helmet, CORS restricted per domain, httpOnly/secure/SameSite session cookies, tiered rate limiting, environment secrets verified at startup, K8s secrets via secretRef.

TLS

All public endpoints served over HTTPS via cert-manager with Let's Encrypt certificates, auto-renewed on the cluster.

Projects

Competitive programming platform where submitted JavaScript strategies play automated tournaments against each other.

isolated-vmesbuildesprimaMonaco EditorThree.js

SeedGPT

AI agent that modifies its own source code, opens PRs, waits for CI, and merges — changing itself each cycle.

Anthropic ClaudeMulti-Agent PipelineOctokitArgoCDsimple-git

Observability dashboard for SeedGPT. Inspect every LLM call with token counts, costs, and cache statistics.

Prompt Cost BreakdownCache Hit TrackingPer-Phase InspectionMongoDB

Event tracking service. Log events with a single HTTP request from any device, see patterns on a dashboard.

Chart.jsPassport.jsNodemailerSentry

Group scheduling app. Invite people, mark availability, and find the best time in real-time.

Socket.ioRedisPassport.jsNodemailer

C++ tool that generates and classifies Conway's Game of Life patterns as still lifes, oscillators, or spaceships.

C++Floyd's Cycle DetectionBit-Packed GridCanonical HashingMultithreading

Diecup-2

Genetic algorithm that evolves strategies for a Danish dice game across a population of 1000 variations.

JavaCommon Random NumbersMulti-Objective FitnessAdaptive MutationStatistical Testing