Featured project
Merchant Panel
An e-commerce backend with a merchant panel, built without a framework to show the fundamentals: a PHP 8.5 JSON API, a React panel, asynchronous messaging, and a CI pipeline that deploys every commit that passes its tests.
- Demo email
demo@example.com- Demo password
demo-merchant-2026
The demo account is shared with other visitors, so its data may change.
What it does
-
Checkout under concurrency
Carts and checkout reserve stock with row locks, accept retries through idempotency keys, and release unpaid reservations when they expire.
-
Payments and webhooks
Simulated payment providers report results through signed webhooks that are applied exactly once, even when delivered concurrently.
-
Secure sign-in
Session cookies with CSRF protection, email confirmation sent through a transactional outbox, rate limits, and panel access only for merchants.
-
Merchant panel
Orders, product editing with optimistic locking, and revenue reports, in a React app typed from the OpenAPI contract.
-
Legacy replaced safely
A legacy page was characterized with golden-master tests and replaced with the strangler fig pattern, keeping old links working.
-
Traceable in production
JSON logs carry a request id from the HTTP request through the message queue to the worker that sent the email.
How it is built
- BrowserReact merchant panel
- CaddyHTTPS, security headers
- PHP-FPMJSON API, middleware, CQRS
- MySQL & Redisorders and outbox; cache, sessions, limits
- Outbox relaypublishes stored messages
- RabbitMQemails, expiries, cache
- Workersends emails, expires orders
- Mailpitcatches the demo's emails
- Test-driven: unit, functional, end-to-end, and load tests
- PHPStan level 8 and architecture rules enforced by Deptrac
- Contract-first API documented in OpenAPI
- Every green commit deployed from GitHub Actions to Oracle Cloud