Claude Code, GitHub Copilot and Cursor do the typing. The architecture, the acceptance
criteria and the verification before production are mine — and that is what separates a
prototype from something that stays up.
In production
Portal Brasileirão
— Companion app for the Brazilian Série A championship
Standings, fixtures and statistics for the Série A. OAuth login, Material Design 3
tokens and a live /api/health endpoint. Seven GitHub Actions workflows
including rollback, with a documented flip-back drill, and keyless deploys over
OIDC. When no API token is available the app falls back to a frozen snapshot instead
of failing.
React 19 · TypeScript · Express 5 · Tailwind 4 · AWS · 1,523 unit tests and 46
end-to-end Playwright specs · 910 commits in eight weeks (23 August–16 October
2026)
Monte Carlo simulator for qualification odds, using a Dixon-Coles model and the
Article 13 FIFA tie-breaking criteria applied in the correct order. External
integrations (FIFA API, Open-Meteo, Google Trends) each have their own fallback.
Served by nginx and systemd.
React 19 · TypeScript · Express · AWS · 283 unit tests and 37 end-to-end
Playwright specs · 1,204 commits
Experiments and tooling
ai_workflow
— Verification pipeline for AI-assisted development
Automates the step that usually gets skipped: making what an AI coding agent
produced verifiable before it ships — review, documentation and tests.
Dense retrieval (multilingual-e5-base) combined with BM25, over an index whose
integrity manifest refuses to load an inconsistent index, plus a plagiarism guard
calibrated on real answers. Orchestration is decided by rules, never by the model.
On the README gold set — 40 questions and 176 candidates graded by TREC pooling —
dense retrieval reaches an nDCG@5 of 0.719 against BM25's 0.488. Pluggable
generation, a FastAPI web layer and 292 tests passing.
trilhas_estudos
— Study-track control and suggestion, in Python
Domain in frozen dataclasses, with mypy --strict over all of
src/. History is event-sourced with UPDATE and DELETE forbidden by
SQLite trigger — correcting a fact means appending another event, never rewriting
the previous one. The suggestion engine is rules, not a model, and explainable by
construction: no suggestion comes out without the factors that produced it. 294
tests over 6,772 lines, 16 ADRs and five CI gates on every push and pull request —
compiled catalogue, pytest, ruff check, ruff format and mypy — each on a 3.12/3.14
matrix. Runs locally; not in production.