Backend engineer · Tehran · open to remote & relocation

I build backend systems for moving money — and keep them correct when things fail.

About 2 years with Java & Spring Boot. Right now I'm building OpenPSP, a payment orchestrator I designed — idempotent APIs, a payment state machine, a transactional outbox on Kafka, and a double-entry ledger. Step through a simulated payment just below, or break the provider and watch what holds.


01 — What I'm building

Run a payment through OpenPSP

OpenPSP is a payment orchestrator I'm building. Press run and follow one simulated request through the system — the idempotency check, the state machine, the provider call, the callback, the outbox, and the ledger. You can also make the provider fail and watch how it holds up.

POST /payments  ·  orchestration trace
1
API · POST /payments
Idempotency-Key + SHA-256 request hash
idle
2
Idempotency store · Redis
First key → proceed · reuse → replay stored result
idle
3
Payment state machine
CREATED → AUTHORIZING → AUTHORIZED → CAPTURED
idle
4
PSP adapter · anti-corruption layer
Retry (backoff+jitter) · circuit breaker · timeout
idle
5
Acquirer callback
HMAC-verified · Redis replay protection
idle
6
Transactional outbox → Kafka
acks=all · idempotent producer · key = payment_id
idle
7
Double-entry ledger
Append-only journal · debit = credit
idle
payment state
—
circuit breaker
CLOSED
idempotency key
—
kafka partition
—
Trace is idle. Press Run a payment to emit a request.
journal · ledger—
No entries yet — the ledger is only written after capture settles.
An animation of how the system works — not a live connection to a server.

02 — Tools

What I work with

Languages & frameworks

Java 17 / 21Spring Boot Spring MVCSpring Data JPA HibernateSpring Security

Data & messaging

PostgreSQLKafka RedisRabbitMQ ElasticsearchFlyway

Architecture

HexagonalDDD Event-drivenTransactional outbox IdempotencyOptimistic locking Microservices

Resilience & observability

Resilience4jCircuit breaker Retry + backoffTimeout PrometheusGrafana

Testing & tooling

JUnit 5Mockito TestcontainersDocker Docker ComposeMaven GradleCI/CD

Workflow engines

Flowable (BPMN)Camunda (BPMN)

03 — Work

Some things I've built

Open-source 2026 — in progress github.com/Hurdadd/openpay-platform

OpenPSP — Payment Orchestrator

Sole architect · AI-assisted implementation · in progress

  • Hexagonal architecture with a framework-free domain module and an explicit payment state machine that rejects illegal transitions outright.
  • Idempotent payment API — Idempotency-Key plus request hash; a reused key with a different body returns 409. Optimistic locking verified by a concurrent-thread test.
  • PSP adapters behind an anti-corruption layer with a circuit breaker and timeouts. Status checks retry with exponential backoff + jitter; authorize is never retried, because a timeout means the outcome is unknown, not failed.
  • HMAC-verified callbacks with Redis replay protection, and a scheduled reconciler that asks the PSP about payments stuck in CREATED, PENDING_PSP or AUTHORIZED.
  • Transactional outbox to Kafka — idempotent producer, acks=all, payment_id partition key for per-payment ordering.
  • Double-entry ledger — append-only journal, balanced-entry invariant, minor-unit amounts, consumer idempotent under redelivery.
  • Failure-injection e2e suite (Testcontainers, Toxiproxy, WireMock): PSP timeouts, lost and duplicate callbacks, Kafka outage, killed process. The PSP is simulated; it has not run against a real provider or real traffic.
  • The first tickets I wrote by hand; later tickets, diagrams, docs and code comments were written with an AI coding agent (Claude Code) and reviewed by me.
Java 27Spring BootPostgreSQLKafkaRedisResilience4jTestcontainers
Open-source 2026 jpos/jPOS#785

jPOS — ThroughputControl fix

Merged upstream · jpos/jPOS#785

  • Fixed a bug where swapped min/max bounds pinned the poll interval to 50 ms regardless of the configured period. Math.clamp now fails loudly if the bounds are ever swapped again.
  • Added a regression test that fails before the fix, and documented the behaviour change for throttled threads (less frequent polling, same rate limit) in the PR.
JavaJUnitjPOS
Open-source 2026 portfolio-service

Portfolio Position Service

A multi-tenant caching service

  • Redis cache-aside with Lua-based distributed locking, TTL jitter against cache stampedes, and fail-open behaviour on a Redis outage.
  • Post-commit Kafka publishing via @TransactionalEventListener, so events only fire once the transaction actually commits.
  • Grafana dashboards and Sentry error tracking wired in from the start.
Spring BootRedisKafkaPrometheusGrafana

DDIA Study Lab — Bilingual Study Guide

Author · AI-assisted · live site

  • A Persian and English study guide to Designing Data-Intensive Applications (2nd ed.): 14 chapters, 100+ interactive diagrams, exercises with worked solutions and an AI-platform design capstone with 15 ADRs.
  • Built with an AI coding agent (Claude Code) and reviewed by me. Independent study project, not affiliated with the book's authors or O'Reilly.
Static siteVercel

04 — Experience

Where I've worked

Oct 2025 — Present

Ashiyaneh Hezareh Sevom

Tehran, Iran
Full-Stack Developer · Part-time

Built the company website and admin panel end-to-end — Java/Spring backend, React/Next.js frontend — owning requirements through delivery.

Jun 2025 — Sep 2025

Fanavaran Khebreh Lotus

Tehran, Iran
Backend Developer

Primary developer (two-person team with a senior engineer) on a Spring Boot integration platform — 12 domain modules over Sepidar ERP, serving 500+ active users.

  • Integrated Sepidar's RSA-based authentication API and propagated access tokens across downstream calls.
  • Added Elasticsearch as a search layer, and built custom Spring AOP annotations for logging and validation.
  • Implemented Flowable (BPMN) workflows, containerized the stack with Docker Compose, and wrote JUnit/Mockito tests for core business logic.
Jan 2024 — Jun 2025

Independent

Tehran, Iran
Java Developer · Freelance

Built a medical appointment scheduling system solo — Spring Boot, Spring Security, Hibernate, PostgreSQL, SpringDoc — from requirements and schema through APIs, authentication, and documentation.

2024 — Present

Islamic Azad University

Tehran, Iran
B.Sc. Software Engineering · 3rd year, in progress

05 — GitHub

GitHub, live

These numbers are pulled from the GitHub API when the page loads. If it's rate-limited, the page falls back to a saved snapshot.

6
public repos
2
followers
0
stars earned
2025
member since
Connecting to GitHub… · View full profile →

06 — Contact

Get in touch.