2025–26in use
Browser music visualizer · Vanilla ES modules, Web Audio, Canvas
Turns a track into vertical video for short-form. Onset detection runs on
spectral flux, lyrics sync from LRCLIB, and the whole thing stays a static
page, nothing to install, nothing to host. Built for my own music channel,
which means it gets used every week and breaks in public. Several visual
modes, rewritten a few times into a module-based architecture.
Constraint
Stays lightweight or it dies. Every feature that would have
pulled in a model or a server got cut.
- Build stepnone
- Onsetsspectral flux
- LyricsLRCLIB
- Output9:16
Live demo →Repository →
2026in progress
Stats site · Next.js, Riot API, Docker (Postgres + Redis)
Match-history mining for Teamfight Tactics. An automated merger labels raw
board states into named compositions, so tier lists assemble themselves
instead of being hand-maintained. The labelling pass and the front end are
being built out now; anything that depends on live match volume waits its
turn.
Constraint
No production API key yet, so the work is sequenced around it.
Everything that can be finished without full match throughput gets
finished first.
- FrameworkNext.js
- Labellingautomated merger
- UpstreamRiot API
- RuntimeDocker — Postgres + Redis
Repository →
2026thesis
Bachelor thesis · Python, OpenCV, local LLM, speech recognition, Dobot Magician
Spoken instruction into a local language model, model output into arm
motion, and computer vision closing the loop on where the objects actually
are. The interesting failure mode was never the robot, it was the gap
between what a person says and what a gripper can be told to do.
Constraint
No cloud API. Speech recognition, the language model and the vision
pipeline all had to run on the machine sitting next to the arm.
- HardwareDobot Magician
- VisionOpenCV
- Inferencefully local
- Demo1:46, running
Demo video →Thesis PDF →Repository →
2026
Research pipeline · Python, pandas
Built to answer one question honestly: does a signal survive when you stop
leaking the future into it? The pipeline runs the same strategy twice —
once with leakage intact, once with purged walk-forward splits, and the
gap between the two curves is the actual result.
Constraint
No live capital, ever. The deliverable is a number you can trust,
not a bot.
- Marketcrypto, historical
- Validationpurged walk-forward
- Capital at risk0
Repository →Findings →
2026
React · content linting, job-description tailoring, multi-format export
Writes CVs that survive the parser before they reach a person.
Constraint: whatever renders on screen has to come back out of an
ATS intact, which rules out most of what makes a CV look good.
The CV linked at the top of this page came out of it.
Live demo →Repository →
2026
PowerShell · 35 apps, 16 tweaks, 7 scripts, 4 presets
A fresh machine reaches my full working environment in one pass.
Constraint: built because I rebuild often and refuse to do it by
hand twice.
Repository →