EnglishDeutschPortuguês (Brasil)

Allan Valim Ribeiro da Fonseca

Applied computer science (M.Sc. student, Hochschule Fulda). I build games, VR prototypes, robots that drive themselves, and tools that read speech and old documents. This page collects the things that are finished enough to show.

Games & VR

Playable builds on itch.io. Project sources in Multimedia-Projects.

Unity · C# · 2024

IPA Quest

A Metroidvania where you collect the symbols of the International Phonetic Alphabet. Each symbol plays its sound. Bosses, abilities, a persistent world.

Dev log: 123456
Unreal Engine 5.5 · OpenXR · Blueprints

NewVRDrums

VR drumming game in the spirit of Rock Band. Training stages, air drumming, two precision stages and 30+ patterns from different styles.

Dev log: 123
Unreal Engine 5 · Blueprints

LAGAGA

Galaga clone with a roguelike twist: the first three levels replay the original patterns, then every 10 kills earns an upgrade.

Versions: earlyfinal
C++23 · OpenGL 4.6 · 2025/26

OpenGL Game Prototype

2D platformer written from scratch for the Computer Graphics course: handcrafted lighting, spike traps, a level editor.

Builds: earlylate
GPS Tour Run in the browser: a grid of numbered waypoints and the tour controls
Pure Data → browser · 2025

GPS Tour Run

Zombies, Run!-style audio tour: narration and effects fire when the runner reaches given coordinates. Prototyped in Pure Data, ported to a single web page with a real GPS mode.

The 3D-printed snare being hit with a drumstick
Arduino · 3D print

Arduino Drumming

Piezo sensor inside a 3D-printed snare shell triggers a snare sample. Small hardware sibling of NewVRDrums.

Software & robotics

ROS 2 · Nav2 · slam_toolbox

Autonomous Volksbot

Bring-up and tuning that lets a Volksbot differential-drive robot map an unknown indoor space and pick its own goals with frontier exploration. No new nodes: the work is the wiring and the parameters.

Runs: 123
Desembarque: a scanned page beside its line-by-line transcription
Python · FastAPI · Next.js · local VLM/OCR

Desembarque

Transcription and side-by-side verification of Brazilian ship passenger manifests (Arquivo Nacional, Santos and Rio). Cursive handwriting read by open-weight vision models, never asserting what the page does not say.

Table: ten speech-to-IPA models on one Icelandic word, PER and PFER narrow to broad
Python · CPU-only benchmark

Phonetic Eval

Reproducible benchmark of nine speech-to-IPA model configurations over shared audio, scored by phone error rate and phonological feature error rate. Companion code to the survey below.

Workout app: a lower-body routine with the muscles it works highlighted on a body map
Kotlin · Jetpack Compose · Room

Workout

Offline-first Android workout tracker with importable training cycles. Built by orchestrating Claude; a good record of what that workflow produces.

Zbor on a phone: a Portuguese sentence being corrected, then its Macedonian translation
Kotlin · Compose · whisper.cpp · NLLB-200 / ONNX Runtime · eSpeak NG · 2026

Zbor

Offline Android translator for talking in person with someone who speaks only Macedonian, where there is no signal. Speak or type, fix what speech recognition misheard before anything is translated, and the translation is spoken aloud — Macedonian included, which Google Translate no longer speaks. Speech recognition, translation and voice all run on the phone; a face-to-face mode turns the top half towards the person across the table. Macedonian, Portuguese, English and German.

DigSiViz: a three-router network topology with live link rates
containerlab · gNMI

DigSiViz & DigSiNet

Real-time visualisation of network digital twins (DigSiViz) and a multi-sibling digital-twin environment (DigSiNet). University projects I worked on.

Two files with arrows going both ways between them
Networking

P2P file transfer

Simple peer-to-peer file transfer.

Tools

Casus: the language bar with flags, Caesar's first sentence as blocks coloured by case, a German gap exercise and a Japanese lesson with furigana
Svelte · Python · Wiktionary · Tatoeba · 2026

Casus

A reader and course for twenty languages on three sites (Casus, Casus Asia, Casus World). The text stays on the page; its words become blocks coloured by case or role that you drag, pin and sort until the sentence's structure shows, with ambiguous endings shown as ambiguous, never guessed. A Learn tab follows each language's syllabus (JLPT, HSK 3.0, CEFR) with lessons, tables and thousands of exercises from real sentences; drills for endings and scripts. Interface in English and Portuguese, dark mode, colour schemes from each language's flags, works on a phone.

Five speech-to-IPA models on the Icelandic word “bið”, in aligned columns, with the consensus band below and the disputed symbol highlighted
onnxruntime-web · ONNX · Web Audio · 2026

Speech to IPA

Record a word in any language and get a narrow IPA transcription of what was said, not of what a dictionary says. Five phone recognizers (PhoneticXeus, POWSM, ZIPA, MultIPA, WhIPA) run in the browser and vote; symbols without a majority are highlighted, and tapping one plays that slice of the recording. Every model's reading sits in aligned columns above the consensus; a hand-correction editor uses the layout of the IPA chart. Exports a zip with the audio, every model's IPA, timings and a Praat TextGrid, and imports it back. Interface in eight languages. Nothing leaves the device; the models download once (about 1.3 GB for all five). Built on the phonetic-eval benchmark.

Drum notation editor: a groove with a fill, the focused beat enlarged above the whole score
Svelte · Web Audio · Bravura (SMuFL) · 2026

Drum notation

A drum notation editor for the phone browser, faster than writing on paper. Pick a note value, tap the staff at the instrument's height; heads, stems, beams and rests are drawn for you. Cells split one at a time, time signature per bar, % and repeats, drum noteheads and technique marks, and playback with a recorded kit, synth or silent with metronome. English, Portuguese and German.

PokeType with Fire and Flying selected
Java 2020 → web

PokeType

Type-weakness calculator for competitive play. Unlike a 2×2 chart it takes any number of defending types, which is what you need when a move like Forest's Curse adds a third one.

Research & writing

  • A Comparative Survey and Evaluation of Language-Agnostic Speech-to-IPA Transcription Systems (2026). Seven self-supervised speech-to-IPA approaches surveyed, the public ones re-evaluated on one benchmark with PER and PFER. Removing narrow diacritics cuts PER by 9 to 22 points while PFER barely moves. Code: phonetic-eval.
  • Arbeits- und Führungstechniken im interkulturellen Vergleich: Brasilien und Deutschland (2026, German). Leadership, communication and knowledge management compared across the two working cultures.
  • Machine Learning for Particle Counting (bachelor thesis, 2025). Automatic counting of ions measured by a scintillation counter in a synchrotron: algorithmic labelling of clear cases, manual labelling of the rest, networks trained on both. Research conducted at a heavy-ion research centre; the ML code base was provided, my part was the labelling pipeline, the manual labelling and the evaluation. Cover and declaration pages removed. My two scripts: thesis-code.
  • Replaying Recorded Traffic in Network Digital Twins: Storage Granularity, Window Alignment, and Fidelity (with F. Stumpf and S. Rieger, in preparation, 2026). Storage and replay of network monitoring data in time-series databases for the DigSiViz visualisation. Code: digsiviz.
  • Virgílio Marão Gramático: Tradução de uma Paródia (undergraduate monograph in linguistics, UFPR, 2013, Portuguese). Partial Latin–Portuguese translation of the first four epitomes of Virgilius Maro Grammaticus, a 7th-century parody of Latin grammar, with a comparison to Donatus and to an Italian translation.

Animation & film

Blender · 2023

3D short

Course short film. I modelled and animated the segment from 0:30 to 1:00 and edited all cuts together.

Photography

Environment shots from the digital photography course, 2023. Mostly HDR merges of 3 to 5 exposures at ISO 100, f/8.