Why exact decimals?
No rounding ambiguity. The backend calculates with BigDecimal; the UI displays returned strings.
A working credit-card ledger, independently tested through Java and Cucumber. Explore the behavior, inspect the contracts, follow the evidence.
Fresh synthetic data for your session. Changes persist until its 30-minute expiry.
Start an account to see live balances and transaction history.
| Sequence | Operation | Amount | Balance after | Posted at |
|---|---|---|---|---|
| Start a synthetic account to view its ledger. | ||||
Versioned endpoints, structured errors and explicit request identity.
/api/v1/accounts/{id}/paymentsAuthorization: Bearer <session-token>
Idempotency-Key: payment-001
Content-Type: application/json
{ "amount": "50.00" }Representative request. Amount is a decimal string. Initial post: 201. Identical replay: 200. Conflicting key: 409.
// Submit a transaction to inspect // its actual response here.
Execution reports live with the exact source commit. No invented pass history.
Money precision, immutable state and credit boundaries.
Inspect implementation ↗02Persistence, rollback, constraints, replay and concurrent updates.
Inspect implementation ↗03Gherkin → scenario context → REST Assured → running API.
Inspect implementation ↗04Separate TestNG matrix, Bruno collection and Jenkins pipeline.
Inspect implementation ↗Scenario: Concurrent requests cannot overspend available credit When I submit 12 simultaneous purchases of "100" Then exactly 7 responses have status 201 And exactly 5 responses have status 422 And the account has outstanding "950.00" and available "50.00" And there are 7 ledger entries
Source and CI links are pinned to verified implementation 20c91f5. See the current evidence record for later runs and limitations, including Jenkins server execution. Authored configuration is not execution proof.
No rounding ambiguity. The backend calculates with BigDecimal; the UI displays returned strings.
Concurrent operations serialize per account. The credit check and ledger entry share one transaction.
API automation imports no application classes, so it validates observable contracts rather than implementation details.
Domain rules → transactional service → Cucumber architecture → execution evidence → trade-offs.
Open the interview guide ↗This portfolio project was built with AI assistance. The interview goal is to understand, reproduce and debug the engineering personally.