Open to backend roles · Tehran / remote

I build payment systems that stay correct under failure.

Backend engineer, 2+ years in Java & Spring Boot. I care about the unglamorous part — idempotency, state machines, transactional outbox, and a double-entry ledger that always balances — so a payment does the right thing exactly once, even when a network, a broker, or a provider decides not to cooperate.


01 — The product, running

OpenPSP: watch one payment cross the system

A payment orchestrator I'm building open-source. Press play and follow a request through every guarantee — idempotency, an explicit state machine, a resilient provider call, a verified callback, the outbox, and a ledger that must balance to zero. Then try breaking it.

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.
A faithful animation of the architecture in the README — not a live connection to a server.

02 — What I reach for

A stack chosen for correctness and observability

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 — Selected work

Projects where the hard part was the guarantee

Open-source · flagship 2026 — building github.com/Hurdadd

OpenPSP — Payment Orchestrator

Sole author · designing for transactional correctness end-to-end

  • 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 retry (exponential backoff + jitter, no retry on 4xx), circuit breaker, and timeouts.
  • HMAC-verified callbacks with Redis replay protection, and a scheduled reconciler that resolves payments stuck in PENDING.
  • 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.
Java 21Spring BootPostgreSQLKafkaRedisResilience4jTestcontainers
Open-source 2026 portfolio-service

Portfolio Position Service

Multi-tenant caching service under real failure modes

  • 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

04 — Experience

Shipped in production, on small teams

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 — Live signals

GitHub, read at page load

Fetched directly from the public API when this page opens. If the API is rate-limited, it fails open to the last known snapshot — the same way I'd treat a flaky dependency in production.

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

06 — Contact

Let's talk about something that has to not lose money.