Public website
Hacer Cerveza Casera
A Spanish website about homebrewing: a blog, an equipment catalogue, guides to 127 beer styles and a search over more than 15,000 beers.
- WordPress
- PHP
- Docker
- nginx
- MariaDB
- Valkey
- n8n
- Cloudflare
- Python
Hi, I'm
I build software I end up using myself: websites, command-line tools, desktop apps and the infrastructure that keeps them running.
One public website, two tools you can download and three private apps I use every day.
Public website
A Spanish website about homebrewing: a blog, an equipment catalogue, guides to 127 beer styles and a search over more than 15,000 beers.
Command-line tool · Open source
Batch-converts and resizes images to WEBP, AVIF, JPG, PNG and more. Reads iPhone HEIC photos and never touches the originals.
Desktop app · Windows
Shows what is filling your disk by file type and by application, draws it as a treemap and helps you clean up and find duplicates.
These are for personal use and sit behind Cloudflare Access, so there is no link. Here is what they do and how they are built.
PrivatePWA
My everyday dashboard: calendar, finances and a shopping list, synced between phone and PC and usable offline.
PrivateWatchdog service
Checks the server and the websites every five minutes and pings me on Telegram when something goes down, fills up or falls behind on patches.
PrivatePWA · End-to-end encrypted
A menstrual cycle tracker built to understand premenstrual symptoms with statistics, grounded in published clinical criteria.
What is actually inside the projects above, not a list of keywords.
Every project started with a problem of my own: a full disk, my calendar, the images for an online shop. If it does not work for me, it is not finished.
No open ports: Cloudflare tunnels and Access, end-to-end encryption where the data is sensitive, and a strict CSP.
Daily backups, automated tests and a watchdog that lives outside the server and messages me on Telegram.
If one of these projects caught your eye or you have something in mind, drop me a line. I answer myself, no forms in between.
Also on