Personal Project
tolken
LLM-powered subtitle translator
CLI for translating subtitles between any language pair, powered by LLMs via OpenRouter. Converts between SRT and EBU-TT-D TTML, with parallel translation, sliding-window context for tonal consistency, integrity validation, and a resumption cache for interrupted runs.
PythonLLMOpenRouterSubtitles
Personal Project
travel-aggregator
Travel deal aggregator
Travel deal aggregator built on Next.js with built-in authentication and a credit system. Multi-source ingestion with deduplication.
Next.jsTypeScriptAuth
Personal Project
simple-music-editor
Browser audio mastering tool
Browser-based audio mastering with album export and de-clipping restoration. React + Tailwind v4 frontend with a Python audio processing backend.
ReactTailwindPythonAudio
Personal Project
suno-bot
Suno music-production toolkit
Toolkit for the Suno music-generation platform. Browser-driven generator that creates tracks by genre and style prompts, an AI lyric refiner using Google GenAI, and hardened driver patterns with retry logic and rate awareness underneath.
TypeScriptPythonPlaywrightGoogle GenAI
Personal Project
event-scraper
Distributed event scraping platform
Aggregates Danish events across multiple ticket and event data sources. Producer-consumer architecture with BullMQ workers, four ingestion strategies (HTML, JSON API, reverse-engineered API, headless browser), AI-augmented extraction for the harder pages, normalized into a Drizzle and Postgres schema.
TypeScriptBullMQDrizzlePostgreSQLScraping
Personal Project
skoleskema-api
School schedule as an iCal API
Reverse-engineered the Danish VTG Skoleskema system to expose my school schedule as an iCalendar feed that Google Calendar can subscribe to. TypeScript and Express with JWT auth and MySQL persistence.
TypeScriptExpressMySQLiCal
Personal Project
chatbot-api
Local-first RAG chatbot
Local-first retrieval-augmented chatbot API with citation parsing and timestamp-aware fact extraction. Built as an exploration of on-premise RAG patterns.
TypeScriptNode.jsRAG