Gabryel Veríssimo Software Engineer

I build reliable systems for fintech: payments, ledgers and the services around them, in Python, Java and TypeScript. Every project here is tested, deployed and open to read.

Open to graduate & junior roles · London · from summer 2027

01

Selected work

Three projects written up like design docs: the problem, the hard parts, and the tests that prove them.

PayLedgerLive demo

A double-entry payments API that stays correct when transfers race, requests are retried, and callers try wallets that aren't theirs.

Concurrency
SELECT … FOR UPDATE, locked in id order
Retries
Idempotency-Key claimed inside the transfer's transaction
Proof
Parallel-retry and 20-thread tests on real PostgreSQL
Stack
Python · FastAPI · PostgreSQL · Alembic
Read the case study about PayLedger
PayLedger transfer pathA transfer request locks both wallets in id order, writes two balancing ledger entries and commits once.POST /transfersidempotency_keyslock wallets ↑identries −100 / +100COMMIT
One transaction: lock, write both sides, commit.

Webhook InspectorLive demo

A public endpoint that captures any webhook sent to it and shows it live, and never tells the sender that something went wrong on its side.

Capture
Body streamed, capped at 1 MB, always answers 200
In prod
Cold-start crash and wrong client IP, found live and fixed
Proof
47 pytest · 7 Vitest · CI on every PR
Stack
FastAPI · PostgreSQL · React · TypeScript
Read the case study about Webhook Inspector
Webhook Inspector capture pathA webhook sender reaches Vercel's edge, then the capture route, which stores at most one megabyte per request in Postgres and always answers 200. The browser polls every two seconds.senderVercel edge/in/{bin} ≤1 MB200 OKPostgresUI · poll 2s
Capture first, fail quietly, never block the sender.

Taskboard APILive demo

A Trello-style API where two people can drag the same card at once, and a reused refresh token signs its owner out everywhere.

Ordering
Columns locked in UUID order; positions stay dense
Auth
Refresh rotation; reuse revokes every session
Proof
72 tests, 59 on real PostgreSQL (Testcontainers)
Stack
Java 21 · Spring Boot · PostgreSQL · Testcontainers
Read the case study about Taskboard API
Taskboard card move pathA move request passes the JWT filter, locks the source and target columns in UUID order, shifts positions, and commits. Non-members get 404.PATCH moveJWT filterlock cols ↑uuid404 if not membershift positionsCOMMIT
Lock in a fixed order; two moves never wait on each other.
02

Experience

Client work and education.

Sep 2026 – now

Freelance Software Engineer · Self-employed, London

Auto Boutique London (pro bono): designed, built and deployed the production site for a Central London car-storage business, replacing a WordPress install with a static Astro build, a PHP enquiry endpoint sending mail through Resend, and push-to-deploy from GitHub Actions.

2023 – Jul 2027

BSc Computer Science · University of Greenwich

Final year, following a foundation year. Expected to graduate July 2027.

03

More work

Everything else tagged showcase on GitHub, pulled in automatically each day.

  • fx-service

    Async FX-rate microservice: FastAPI + httpx + Redis, scheduled refresh with stale-fallback (ECB/Frankfurter rates).

    PythonRepoLive demo
  • owasp-security-lab

    Intentionally vulnerable FastAPI app demonstrating 6 OWASP Top 10 issues — each with an exploit, a fix, and tests for both

    PythonRepo
  • webhook-dispatcher

    Reliable webhook delivery service: Redis queue + separate worker, HMAC signing, exponential backoff, dead-letter + replay (FastAPI).

    PythonRepo
  • store-demo

    Animated demo storefront: product grid, quick-view, cart drawer (Next.js 16, TypeScript, Tailwind 4, GSAP).

    TypeScriptRepoLive demo
04

About

I'm a software engineer in London. I build small, production-shaped services, tested, containerised and deployed, and I care most about the parts that fail quietly: concurrency, retries, and what happens when a dependency is down.

I work with AI-assisted development and treat it like any other tool: I set the design, review every change, and don't ship what I can't explain or test.

Languages
Python, Java, TypeScript, SQL, C#, JavaScript
Backend
FastAPI, Spring Boot, PostgreSQL, Redis, REST APIs
Front-end
React, Next.js, Vite, Tailwind CSS
Tools
Docker, Git, GitHub Actions, pytest, Vitest, Testcontainers
05

Contact

Open to graduate and junior software engineer roles in London from summer 2027.

hello@gabryelverissimo.dev