Portfolio
Flagship
Mappa
Compile-time mapping that stays Native AOT friendly, readable, and reusable.
A C# source generator that emits plain mapping code between types — similar in spirit to AutoMapper, but the work happens at compile time. Attributes configure the mapper without changing source or target types; missing nested maps are generated for you. Methods can live on any partial class, including static types and extension methods. Companion packages cover Google.Protobuf well-known types and MongoDB BSON. Recent releases add IQueryable projection, polymorphic mapping, reference and cycle handling, and dependency-injection registration.
Comment TODO Analyzer
TODOs without a ticket number rot; this makes the format a compiler rule.
A Roslyn analyzer that requires every TODO comment to follow the same shape. Built-in formats are GitHub (TODO [#33] This needs to be handled.), Jira (TODO [COMMON-1234] This needs to be handled!), and plain (TODO: Should we handle this?), or a custom regex from .editorconfig. Optional rules fail the build on any leftover TODO (TA0002) or on a list of task IDs you want closed (TA0003).
Libraries
PrettyCode.StringBuilder
Generated source is easier to debug when indent and directives nest and unwind themselves.
A StringBuilder wrapper for emitting formatted source. Disposable scopes handle indentation, curly-brace blocks, #pragma warning, #nullable, and #region, and restore the previous state when the scope ends.
Web
sanelli.github.io
The default Jekyll theme was already enough; this is the site after opening the hood.
This page. A Jekyll site on GitHub Pages: YAML-driven work, projects, and media lists, an SVG sprite, dark / light / system theme, and a GitHub Actions build on Jekyll 4 so plugins like the sitemap, redirects, cached includes, and pagination can run.
Games
Blocchi
Learn Rust and Bevy’s ECS by implementing Tetris.
Fifteen
A small C++ and SDL2 sliding-tile puzzle to practise native game setup.
Tic-tac-toe
The same kind of small game, this time to learn Ada and SDL2 bindings.
Tic-tac-toe in Ada with SDL2, built with Alire.
Connect Four
A Go and SDL2 take on the same “learn the stack by shipping a game” idea.
Connect Four in Go using veandco/go-sdl2.
Interpreters
Turing machine emulators
One Turing-machine interpreter, many languages, so the idioms are comparable.
The same Turing machine interpreter written in C#, Python, C++, Go, Pascal, Ada, C, D, and Rust. Shared PowerShell scripts check toolchains, build, run a substitute-machine sample, and test every language the same way.
Brainfuck interpreters
The same cross-language exercise for a tiny language, including Erlang.
A Brainfuck interpreter in C#, Python, C++, Go, Pascal, Ada, C, D, Rust, and Erlang. The same Check / Build / Test scripts as the Turing suite, plus a hello-world runner.