I build software I want to use myself, and I hold it to the standard I expect as a user: private, fast, documented, and proven to work.
- 🦀 In the terminal, I write keyboard-driven tools in Rust with ratatui: a full manager for KVM/libvirt virtual machines, a dashboard for API quotas and a watcher for coding agents running in parallel.
- 📱 On Android, I make Kotlin apps and games, mostly with Jetpack Compose, that work without an internet connection: no ads, no accounts and no tracking.
- 🧪 I prefer proof to promises: my games run on deterministic engines, and every level of the Night series and NeonLine ships with a machine-checked solution certificate.
- 🐧 Day to day, I live on Linux and care about virtualization, tooling and small, fast binaries.
- 🇵🇹 Some of my games are made first for European Portuguese, a language most word games ignore.
Keyboard-driven Rust tools built on ratatui, each shipped as a single fast binary.
Five offline Android games built the same way: a deterministic Kotlin engine shared by the game and its offline solver, 600 levels in three separately tuned difficulties, and a solution certificate for each of the 1,800 variants in every game. CI replays all of them, so an impossible level can never ship. The only permission they ask for is VIBRATE.
Bubble Night · bubble shooter 600 constellations across 12 orbits |
Block Night · falling blocks 600 floors across 12 Lisbon districts |
Night Fleet · naval battle 600 missions against 12 admirals who never cheat |
Duck Night · reflex game Photograph ducks at dusk: 600 levels, 48 birds |
NeonLine · four in a row 600 levels along a neon road, against 12 rivals |
How it works · one engine, two jobs The build fails if any level can no longer be won |
Retro arcade games drawn entirely in code, word games written for European Portuguese, and a habit tracker that keeps your data on your phone.
📸 Screenshots
virsh-tui: domains dashboard
quotop: balances and quotas at a glance
lictor: a live, read-only mirror of two rotating lanes in Herdr
NeonLine: the neon road, a duel against Sparky with his threat marked, and the rival gallery
Steel Eagle: defending the eagle with the NES-style cross pad, one of four touch layouts
Kaboom: the four worlds, every sprite drawn in code
Palavras Cruzadas and Sopa de Letras
| Principle | In practice |
|---|---|
| 🔒 Private by default | Nine of my ten Android apps don't even request the INTERNET permission, so they can't phone home. The tenth, Steel Eagle, uses the network only for two-player co-op over local Wi-Fi, phone to phone. No ads, no accounts, no analytics anywhere, and your data stays on the device. |
| 🧪 Proven, not hoped | The Night games and NeonLine ship more than 9,000 solution certificates that CI replays with the real engine; if a level becomes impossible, the build fails. Steel Eagle runs a deterministic 60 Hz simulation covered by 466 JVM tests, including host/guest sync over real sockets. Night Fleet and Duck Night also rebuild every release from two fresh clones and compare the APKs byte for byte. |
| ⌨️ Keyboard first | Vim keys, discoverable shortcuts and which-key hints. virsh-tui shows the exact virsh command before it runs, and Lictor only ever observes your agents, never types into them. |
| ♿ Accessible | Colour-blind palettes, TalkBack descriptions, left-handed layouts and reduced motion, built into most of my games. |
| 📖 Documented | Real screenshots, install guides, changelogs, READMEs in English and Portuguese, and mdBook sites for virsh-tui and Lictor. |
| 🆓 Open | MIT licensed. Fork it, read it, learn from it. |
| Languages |
|
| Terminal |
|
| Android |
|
| Systems |
|
| Shipping |
|
Questions, feedback or an idea worth building together? Email me at tiagorcorreia87@gmail.com. For bugs or feature requests, open an issue on the project's repository.
exit_group(0): thanks for stopping by. ⭐ a repo if it's useful to you.











