Mattia Vidoni

I build APIs by day, and firmware by night.

Backend developer who spends most of the time building APIs, automating things and arguing with databases. Outside work: ESP32 firmware, a home-built triaxial seismograph, ham radio and a homelab that has been running for over a decade.

Public repos
50
Top repo stars
105
Homelab running
10+ yrs
Self-hosted containers
~35

01 / About

Backend first, hardware always

By trade I work on backend software for industrial rolling-mill systems: C#, API design and database modeling. When the code drives heavy machinery, “it works on my machine” is not enough.

On my own time I follow the signal down to the hardware. I designed a triaxial seismograph around GD-4.5 geophones, wrote the acquisition daemon, the archive API and the live dashboard, and I keep recording local earthquakes with it. Around that: ESP32 and Arduino firmware, an antenna rotator for satellite passes, and tools for radiosonde hunters.

Due to my job, lately I am also learning PLC programming on Siemens TIA Portal V19 (the basics, in LAD and SCL). I also used to scan the sky for weather-satellite images: NOAA APT (RIP), Meteor LRPT on VHF, and on L-band Meteor HRPT, Metop AHRPT and Elektro-L LRIT.

Frontend is the part I am still learning to write “without emotional damage”, but Angular pages do ship, and they usually work.

  • Day jobC# backend · APIs · DB modeling
  • HobbiesSeismology · ham radio · SDR · photography · nature
  • LanguagesItalian, English
  • Open sourceAuthor of QBittorrentBot

02 / Projects

Things I built

QBittorrentBot

Python

Control qBittorrent from Telegram: add magnet links or torrent files, list active downloads, pause, resume and delete.

Community-maintained · PRs welcome

ACUDP

C++

Library for ESP32 that receives Assetto Corsa telemetry over UDP, for building sim-racing dashboards and gadgets.

ESP-Intervallometer

C++

DSLR trigger on an ESP32: a BLE GATT server with a web UI to fire the shutter, run bulb exposures and intervalometer sequences.

radiosonde_auto_rx_notifier

Python

Listens to radiosonde telemetry and sends real-time notifications when a weather balloon is near your location.

espnow-car

C++ · TypeScript

An RC car driven by another ESP over ESP-NOW, so no router is needed. Split into three repos: the car firmware, a hardware controller, and a web app.

esp-gear-indicator

C++

An ESP-based gear indicator for your car, reading its data from a Bluetooth OBD-II adapter.

Cisco-SG-200-port-leds

Python

A Selenium script that switches the port LEDs of a Cisco SG200 switch on and off, written for the switch in my home rack.

project-silos

Python

School project on managing silos with IoT protocols. The silos report temperature, humidity and level, and accept fill and empty commands, all over MQTT. I built a working prototype with an ESP32 talking to the app.

School project

Antenna rotator controller

C++

ESP32 azimuth/elevation controller for a Yagi, speaking EasyComm II so GPredict and Hamlib's rotctld can track satellites. PID motor control, encoder feedback, limit switches, USB and RS-485 variants, serial OTA.

FreeRTOS · PlatformIO

ARISS SSTV submission platform

Angular

Web platform for submitting and managing slow-scan TV images received from the ISS. Chunked uploads, EXIF extraction, SSTV validation, planned ISS-pass correlation with satellite.js and OCR callsign detection.

Signals · Tailwind

03 / Homelab

Self-hosting as a lifestyle (and a budget strategy)

Self-hosting has been my hobby for over ten years, and these days it’s partly powered by the sun. About 35 containers in 20 Docker Compose stacks run on a small ThinkCentre (Ubuntu LTS), managed with Ansible through Semaphore UI and housed in a 12U rack. Traefik routes the traffic and Authentik handles sign-in, with AdGuard Home for DNS filtering. The services themselves range from Paperless-ngx and Jellyfin to Syncthing and code-server, with Backrest taking the backups and Beszel and WatchYourLAN doing the monitoring.

To reach it from outside, I use WireGuard in a hub-and-spoke setup from a VPS, with Tailscale alongside. Inside the house, Home Assistant connects Zigbee2MQTT, ESPHome, a Modbus solar inverter and the 3D printer into one dashboard, and a small container even turns off the switch LEDs at night.

Docker ComposeAnsibleSemaphore UITraefikAuthentikAdGuard HomeWireGuardTailscalePaperless-ngxJellyfinSyncthingBackrestcode-serverBeszelWatchYourLANHomepageHome AssistantZigbee2MQTTESPHomeKlipper

04 / Skills

Toolbox

Backend

  • Python
  • C++
  • C# / .NET
  • FastAPI
  • Django
  • asyncio · ZeroMQ

Data

  • PostgreSQL
  • SQL Server
  • SQLite
  • SQLAlchemy · SQLModel
  • ObsPy · MiniSEED

Embedded

  • Arduino · PlatformIO
  • FreeRTOS
  • RS-485 · CAN
  • PCB & ADC interfacing

Industrial

  • Siemens PLC · TIA Portal V19
  • LAD · SCL (learning)
  • OPC UA

Frontend

  • Angular · TypeScript
  • JavaScript
  • PrimeNG · Tailwind
  • Bootstrap

Ops & tools

  • Docker
  • Ansible
  • Git
  • JetBrains IDEs
  • Linux

RF

  • Ham radio · SDR
  • HF propagation
  • Satellite tracking
  • Weather-sat imagery: APT · LRPT · HRPT · AHRPT · LRIT
  • Hamlib · rotctld

05 / On the bench

What I am poking at right now

06 / Contact

Say hi, or send a PR

The best way to reach me is through GitHub: open an issue, start a discussion or send a pull request.