
- Role:
E-commerce Operations & Platform Lead
- Period:
2025 — Present
- Stack:
Directus 11, PostgreSQL, Flutter, Docker, Nginx, ifthenpay, Odoo
- URL:
api.romanceinroom.com
Romance in Room — D2C E-commerce Platform
Own D2C adult-wellness store (18+) in Portugal — mature-content catalogue handled with strict age gating and app-store policy compliance — a Directus 12 + PostgreSQL backend, always on the latest release, with Flutter clients for web, iOS and Android, running in Docker on a VPS. I own the platform end to end, from data model and payments to store releases and day-to-day operations.
Highlights
- Platform: built and run the Directus 12 backend at api.romanceinroom.com for 9,600+ SKUs and 29,000+ images in five languages (PT / EN / ES / FR / IT), with per-product SEO records and Product + Breadcrumb JSON-LD.
- Data model: 200+ collections with multiple relationships (M2O, O2M, M2M, translations) and foreign keys, modelled together with the Directus MCP server I built and published (
@staminna/directus-mcp-server). - Scale: 100+ API endpoints (custom endpoint extensions and integration routes) and 50+ Directus Flows automating orders, payments, stock, notifications and content.
- Directus extensions: 18 custom extensions — API gateway for the Flutter app (token hiding, rate limiting), Firebase Google Sign-In → Directus sessions, typo- and accent-tolerant search (~10k SKUs, under 30 ms), orders, vouchers with anti-abuse validation, ifthenpay webhook, Odoo invoicing, dropship and supplier sync, tracking, OneSignal push, profit-margin hook and price-insight panels; roles, policies and ACLs for guest vs. authenticated checkout.
- Payments & reconciliation: MB WAY / Multibanco (ifthenpay) webhook that never marks an order paid on the callback alone — status confirmed against the provider's API, amount checked against the order total, constant-time key comparison, state-conditional updates and anti-replay checks, failing safe to a 10-minute reconciliation job; Odoo ERP invoicing with idempotency guards against duplicate invoices.
- Supplier integration: dropship order forwarding through the supplier's API (custom Directus extension) with an atomic, filtered reservation so concurrent events can't double-order — the same guarantee that prevents overbooking — state-gated retries for failed orders, a dry-run mode that validates the whole chain without committing, and error records kept for audit; stock and catalogue sync, and 30-minute tracking polling into shipment records.
- Order state machine: pending → paid → preparing → shipped → delivered / cancelled / refunded, with e-mail, push and in-app notifications at every transition; promotions run from the CMS with no code release.
- Compliance & coordination: 18+ age gate, cookie consent, privacy / terms, IARC rating and Play / App Store policy; sole coordinator across six external parties with runbooks, post-mortems and release plans.
Stack: Directus 12 (latest), PostgreSQL, Node.js / TypeScript extensions, Flutter / Dart, Docker, ifthenpay (MB WAY / Multibanco), Odoo ERP, OneSignal, Nginx.