
Tamás Vigh
Software craftsman
Measured, not assumed, offline-first, always be shipping
Projects
- CV Mentorcvmentor.org
Reads a CV and scores it against jobs that are open right now: drop the file in and three live postings come back rated against it, with reasons, before you have given anything but the file. The paid review names what is holding the CV back and the ATS keywords missing from it, and writes a covering letter for the posting you choose. Name, email address and phone number are swapped for placeholders before the text reaches the model and put back in what comes out. It reads the experience, not the person.
- Rustamprustamp.tamasvigh.com
A classic Winamp 2.x player in Rust and WebAssembly. The whole interface is drawn to canvas from a sprite atlas, with no DOM widgets at all. Ten-band equaliser, spectrum analyser, durable storage for dropped files, full offline operation, installs as a PWA. The bundled skin is original artwork, painted at runtime.
- Heartrateheartrate.tamasvigh.com
Estimates a pulse from the colour of a face in the webcam image, without contact. MediaPipe finds the face, and a dependency-free Rust core, compiled to WebAssembly, turns three skin regions into beats per minute. Nothing leaves the device. A demo with a synthetic face runs without a camera, and the page installs as an app that works offline.
- Filesharefileshare.tamasvigh.com
Hands a file of up to 10 MB to the phone or computer next to you. Two QR scans pair the devices, and the file goes straight from one browser to the other over an encrypted WebRTC channel. No upload, no relay, no account. With no network at all, a file up to 2 MB can travel as an animated QR code instead.
- Hangpolcab.tamasvigh.com
The audiobooks and tales of the Hungarian Electronic Library (MEK) on one shelf, streamed from the MEK through the project’s own domain. A plain audio player that remembers where you stopped in every book, moves on to the next chapter by itself, and has a sleep timer. The page is in Hungarian.
- Playerplayer.tamasvigh.com
A music player for the songs on your device. They are stored in the browser, play offline and never leave it. Songs, favourites, albums and artists from the files’ own tags, a queue with shuffle and repeat, and the place you stopped kept across restarts. It took over Rustamp’s old address, and the songs Rustamp had stored there. Installs as an app.
- Squashsquashscore.tamasvigh.com
Scores a squash match on a court with no signal. Every match stays in the browser on the device that scored it, with no account and no server copy, and a result is shared as a link that carries the match itself: the events, replayed by the receiving device rather than looked up. Exports to JSON, CSV, text or an image, and installs as an app.
- Squash tournamentsquash.tamasvigh.com
Runs a Swiss-system squash cup. It pairs each round, takes the results, keeps the standings, and serves three kinds of browser at once: the organiser’s admin, the referees’ phones, and the display on the hall wall. The engine is Rust over an append-only event store, so a cup interrupted halfway reopens where it stopped rather than starting again. It also runs from a single laptop with no internet at all, which is how the club scored its own cup. It replaces the software they had used for years, and it is in Hungarian.
Thoughts
- A test that cannot fail is not evidence
Three ways a green suite lies. The test that never goes red, the one measuring the wrong thing, and the baseline that already contains the bug. All three cost me a day recently.
- The guard was on the wrong noun
A permission check that named one action instead of a capability, and survived four rounds of review because each round fixed the example rather than the category. What SOLID is actually for.
- Twelve factors when you do not own a process
The twelve-factor app was written for long-running processes on a platform that no longer describes how most things ship. Which factors survive a static front end and an edge function, which invert, and which quietly still bite.