Full-stack developer working mostly with Java, TypeScript and Python. I build products end to end, and I like digging into real bugs in open source projects and sending fixes with tests.
Portfolio: dodoshell.vercel.app, with a case study for each project below.
- Poltrona: cloud management for hair salons, where the database itself refuses double bookings (Next.js, Supabase, PostgreSQL). Live
- Corsia: exam prep for taxi and chauffeur drivers, with answers graded on the server and idempotent Stripe webhooks (Next.js, Supabase, Stripe). Live
- Sconti Nova: Amazon deals verified every hour, built with a partner (Next.js, Supabase, PostgreSQL). Live
- iter: leave request management with a state-machine approval workflow (Spring Boot, React, PostgreSQL, Docker). Live demo
- portfolio: the site above, with a three.js shader background (Next.js 16, React 19)
- The-PR-Agent/pr-agent#4425: make the LiteLLM handler the only retry layer, honouring
Retry-After(merged) - doobidoo/mcp-memory-service#1648: report memory load and save status to Codex through
systemMessage(merged) - doobidoo/mcp-memory-service#1676: make the dashboard's Quality tab actually save its settings (merged)
- LearningCircuit/local-deep-research#7886: behaviour tests for the Zotero collection picker (merged)
- btclib-org/btclib#2776: tests for the signature-operation boundaries (merged)
- btclib-org/btclib#2821:
assert_p2trnames the right witness version, with four new refusal tests (merged) - ludo-technologies/pyscn#865: LCOM4 no longer counts inherited method calls as instance state (merged)
- ludo-technologies/pyscn#866: the single-responsibility rule counts sibling modules as one concern (merged)
- Rizzo-AI-Academy/rizzo-pii#141: fix a torch thread leak on Windows
- RailtownAI/railtracks#1734: accept local
.avifattachments (merged) - LearningCircuit/local-deep-research#8124: the PDF export renders a table that directly follows text as a table (merged)
