Let's build something.
A card game built from scratch: game engine, simulations, balancing, and a web server for playtesting. Instead of manually tweaking numbers until things "feel right," RL agents play thousands of games and the math tells you what's balanced.
- custom game engine supporting 2 to 5 players
- self-play RL agents that learn strategy through millions of simulated games
- multi-phase tuning pipeline: 2,000+ configurations narrowed down to a single champion
- composite balance scoring across win fairness, entropy, player influence, and game stretch
- web server for live playtesting with the tuned configuration
Built with Python, PostgreSQL, and a lot of patience.
An automated pipeline that aggregates Italian public contest listings from multiple official sources and delivers a filtered newsletter via email.
- multi-source retrieval from official government feeds and APIs (e.g. Gazzetta Ufficiale, InPA)
- fuzzy keyword matching using Levenshtein distance to filter relevant contests across all sources
- domain-driven design with independent retriever packages, shared pipeline kernel, and dependency injection
- Gmail API integration for automated email delivery with results grouped by source
- CI pipeline running ruff, mypy, and pytest on every PR
Built with Python 3.13, feedparser, requests, and marshmallow-dataclass.
A web framework for searching, downloading, and analyzing satellite imagery. Born as a Master's thesis, then hardened with security fixes, modern tooling, and proper test coverage.
- satellite imagery search via the Planet API (PlanetScope Ortho Visual), filtered by GeoJSON area of interest and date range
- map lab for viewing downloaded TIFF rasters as PNG with coordinate metadata reprojected to WGS84
- OpenStreetMap integration loading vector data into DuckDB for spatial queries
- full auth flow with email verification, password recovery, CSRF protection, and secure hashing
- CI pipeline running ruff, mypy, and pytest on every PR
Built with Python 3.12, Flask, PostgreSQL, GDAL, Docker Compose, and Alembic.