Backend engineer, Payaza
- Built a foreign-exchange rate module end to end in Java 17 and Spring Boot: buy and sell rates per currency pair, a change history you can filter by currency, and analytics endpoints that tie every rate to its source.
- Extended the checkout payment service with Redis-cached fee recalculation, rejection of duplicate payment references, rounding per currency and support for ZAR, AED and XAF. Replaced console output with structured, asynchronous logging.
- Secured MFA administration in the back office: TOTP soft-token provisioning, an API to switch MFA on or off, callers checked against the admin user store, and an audit entry for every privileged change.
- Found why MFA updates were silently reverting in a multi-tenant service: the re-read ran before a tenant was bound. Binding the tenant context first and forcing a transactional flush made the settings stick.
- Fixed three notification-settings defects (updates that reverted, came back blank or reached old recipients) and wrote the service’s first unit tests.
- Shipped merchant onboarding features: scheduled reminder emails, admin uploads of KYC documents on a business’s behalf, and country, currency and bank lookup APIs.
Try paying twice
The same payment can reach a server twice: a client retries after a timeout, or someone taps Pay again. The checkout service refuses a reference it has already seen, so the customer is charged once. This is a small model of that check. It runs in your browser and no money moves.
No requests yet. Press Pay, then press it again.


