queues and jobs, automated testing, observability, application security
scale
thousands of merchants · ~20k recurring subscriptions
location
Itapema, Brazil — remote
Work
LWSA — Tray, Bling and Bagy now
Multi-tenant e-commerce SaaS, thousands of merchants.
Technical ownership of 4 production modules: bulk promotions, AI integration, per-platform feedback and the new menu. Legacy migration, RabbitMQ queues, observability on New Relic, Graylog, Grafana and Elastic APM. White-box analysis and remediation of vulnerabilities — OWASP Top 10, IDOR, Broken Access Control.
Petiko
Subscription e-commerce, around 20k active subscriptions.
Subscription core and checkout, carrying most of the revenue. I integrated 3 payment gateways — Pagar.me, E-Rede and MaxiPago — and 3 ERPs: Magento 2, Bling and Omie.
Domestilar
Internal management system.
Customer service, Python dashboards and Java desktop apps.
Decisions
The suite ran twice
Two core merchant-admin projects, at roughly 10% coverage. Every release was a bet, and the pipeline took twice as long as it needed to.
The second full run of the suite existed only to merge the coverage report. Instead of speeding the tests up, I made each parallel job persist its partial report and merged them at the end.
50 minutes less per pipeline run, and coverage from 10% to 92% across both projects.
Requests timing out
Flows that ran end to end inside the request, on a multi-tenant platform. The more data a merchant had, the closer to the limit — and some were already failing in production.
Raising the timeout would only push the problem forward. I moved the processing out of the request and onto a queue, with RabbitMQ and Laravel jobs: the request answers immediately and the work happens outside it, with its own retry.
Timeouts gone on the migrated flows. The cost I took on: the answer is no longer immediate, and the caller has to track the state.
Three flaws in one checkout
The checkout of a subscription e-commerce. White-box analysis turned up three flaws open at once: account takeover, payment confirmation accepted without server-side validation, and stored XSS.
I ordered them by how far each one got an attacker, not by how easy each was to fix. The account first, because everything else follows from it. Then the payment, moving confirmation to the server instead of trusting what the client sent back. The XSS last: it reaches whoever opens the page.
All three closed. Payment confirmation now happens where the client cannot reach it.
PSR-11 dependency injection container with Reflection-based autowiring, custom router, service layer and repositories. No framework, to understand what a framework does.
One database per tenant, created and migrated on user signup. Isolation by database, not by a tenant_id column.
Laravel 11, TALL Stack
project-amaterasu
Offensive security agent with local RAG. Knowledge base indexed in ChromaDB and tools behind a fail-closed scope gate: outside the declared target, nothing runs. Phases resume from the last saved state.
Python, ChromaDB, MCP, Docker private repository
quest-leveling
Gamified productivity app. Domain split into services and DTOs, Vue 3 front end with Inertia, and LLM task classification behind its own interface — the provider is swappable.