I build backend services and web applications, mainly with Python, SQL and TypeScript. My projects explore what happens when requests overlap, a service goes down, or a payment is retried. I also work with Java and Spring Boot for transactional applications.
Looking for graduate, junior and internship opportunities in software engineering.
Portfolio / LinkedIn / Accepted contributions
Try the demos: RelayForge · Pressroom · Backstop · ClearLedger
|
Webhook delivery through receiver failures. Stores events, signs webhook requests and retries failed deliveries. Expiring leases let another worker recover abandoned jobs. The live demo runs the actual Python worker through lease recovery and two receiver failures using a temporary SQLite database. Python · FastAPI · PostgreSQL · Docker |
Write, review, approve. Keep unfinished edits private. A publishing workspace with author/editor roles, revision history and a REST API. Public pages serve the approved version while the next draft stays private. Python · Django · PostgreSQL · Playwright |
|
One origin fetch. Many waiting requests. A public JSON cache that shares concurrent origin fetches and serves recent cached content during slow responses or outages. Includes repeatable concurrency and outage experiments. TypeScript · Cloudflare Workers · Durable Objects |
A retried transfer should not become a second payment. A React operations console and Java API for account transfers. Each transfer commits balances, journal postings and outgoing events in one PostgreSQL transaction. The public UI uses sample data and resets on refresh. The Java, PostgreSQL and Kafka workflow runs locally with Compose. Java · Spring Boot · React · PostgreSQL · Kafka Live UI — sample data · Code · Run the authenticated backend |
Changes reviewed and merged by the projects' maintainers:
| Project | My contribution | Merged PR |
|---|---|---|
| Black | Fixed formatting of long quoted return annotations on functions with parameters; added regression tests. | #5427 |
| urllib3 | Fixed gzip cleanup raising an error that decoding had already ignored. | #5271 |
| Sotto | Announced search-result updates to screen readers while preserving keyboard focus. | #509 |
| NASA / OpenMDAO Aviary | Added regression coverage for alphabetical ordering of dynamic-variable metadata. | #1320 |
- SplitCheck — a Python CLI for finding exact text matches and shared groups across ML dataset splits. Includes streaming checks and an algorithm/memory comparison.
- MSc LLM benchmark — a completed synthetic multi-turn evaluation project with experiment tooling, annotation workflows and offline checks. Public demonstration data is separate from private study evidence.
Backend: Python, FastAPI, Django, Java, Spring Boot, REST APIs
Web: TypeScript, JavaScript, React, HTML, CSS
Data & delivery: SQL, PostgreSQL, Kafka, Docker, GitHub Actions, Cloudflare Workers
Verification: pytest, JUnit, Playwright, database integration tests
For a quick look, run a delivery recovery or try the payments workspace. For the engineering details, each repository includes setup instructions and verification notes. To get in touch, message me on LinkedIn.


