Projects
Web applications
Aerides
A multi-tenant web app for organising gaming sessions: role-based slots, a FIFO waitlist and automatic promotion without overbooking. Java and Spring Boot APIs, a bilingual Angular frontend, WebSocket updates, email and per-group permissions.
Runebog GM
An app for organising tabletop RPG campaigns: navigable maps, D&D monster stat blocks, dungeon generation and encounter management. Includes cloud saves, a table view that can be shared with players, offline use as a PWA and a portable Windows app.
Matchday
A simulated sports betting platform with real fixtures from Europe’s top five leagues, odds generated by the app and fictitious credits. A TypeScript monorepo with a React site, an Express API on PostgreSQL and an Angular back-office, tested with Vitest and Cypress and deployed on Vercel.
Covershift
A multi-tenant platform for scheduling shifts and swapping them between colleagues, with manager approval and certification checks. A TypeScript monorepo with a NestJS API, a React web app and shared Zod contracts; data access is enforced by Postgres Row Level Security on Supabase. Over 380 tests, including Playwright e2e and accessibility checks.
Vagabondando
A bilingual travel-journal site for a trekking guide, live at vagabondando.site. The client writes her stories in Sanity Studio and pages update within a minute; the contact form is protected by BotID, a honeypot and a Redis rate limit. The first version handled bookings with Stripe and PostgreSQL.
qrinventory
A self-hosted inventory of physical objects with QR codes: every item and container has a label that opens its page when scanned with a phone. A FastAPI and SQLModel API on SQLite, nested containers with cycle protection, PDF label sheets and a camera scanner. It runs in Docker on a home PC, over HTTPS with Caddy and Let’s Encrypt, without opening any router ports.
StudyBuddy v2
A local-first AI study tutor: every downloaded online course becomes a Socratic tutor that cites the exact minute of the video. Hybrid retrieval (sqlite-vec + BM25, RRF fusion, GPU cross-encoder), LLM-graded quizzes, SM-2 review, explorable concept maps and eval sets to measure prompts. In daily use.
ordonselli.info
This site: a bilingual portfolio in Next.js 16 and React 19, migrated from a Vite SPA while keeping the old URLs. The language is stored in a cookie and read on the server to avoid a content flash, with a per-request nonce Content Security Policy, an interactive three-style interface demo and Playwright tests on desktop and mobile.
Tools & security
StudyBuddy
A local study assistant that turns documents, audio and video into summaries, flashcards and quizzes. Supports questions about the material with source references, plus spaced repetition for review.
Full Studio
An audio lesson player with synchronised code: a synthetic voice explains four full-stack guides while the examples appear on screen, with the lines being discussed highlighted. Over 10 hours of audio generated by an idempotent Python pipeline with a validator, and a React player with no gaps between segments. Built by orchestrating Claude Code and Codex, with my own review and testing.
Diario KH
An offline app for completing Kingdom Hearts Final Mix to 100%: a checklist of 794 goals with search and filters, a materials inventory and a planner that resolves dependencies between recipes. Rewritten from React to Flutter while keeping backups compatible, with atomic saves, undo and save-file imports with a diff preview.
PokéHome Organizer
A desktop app for organising a Pokémon HOME Living Dex box by box, just like in the game, showing where to find each Pokémon via PokéAPI. A port of a community Google Sheets tracker: a dataset extracted from Excel with Python, a local response cache, file-based saves and AppImage and .deb packages.
D&D Transcription App
D&D session transcription using faster-whisper and pyannote.audio, with speaker identification and a distinction between character dialogue and player conversation.
Sub Tracker
A desktop app for tracking subscriptions, built with PyQt6 and SQLite and integrated with systemd on Linux.
Security Log Analysis
An analysis project using simulated SSH events to identify repeated failed logins and suspicious IP addresses, with charts by hour and day. Built with Python, Pandas, Matplotlib and Seaborn.
Data analysis
NTSB Aviation Safety Analysis
Analysis of 7,438 aviation accidents in the United States, with Python data cleaning and a Power BI dashboard. Explores flight categories, severity and geographic distribution, highlighting gaps in dataset coverage.
Customer Churn Analysis
Analysis of 7,043 customers from the IBM Telco dataset: Python data cleaning and a Tableau dashboard covering churn, contracts, customer tenure and payment methods.
Azure Data Pipeline
A Python ETL pipeline that reads CSV files from Azure Data Lake, normalises columns and loads data into Azure SQL. The repository includes Terraform infrastructure configuration.
SQL Northwind Analysis
SQL queries on the Northwind database to analyse revenue, customers, sales by employee and stock levels. A Python script generates charts and a CSV report of the results.
E-commerce Sales Analysis
Python analysis of the Online Retail sales dataset: data cleaning, monthly revenue, leading products and orders by time of day and country. Results are presented as charts and summaries.