Skip to content
Selected work

// Case study · N°03

NYMA.

Fashion-streetwear e-commerce. Led the 4-phase Sentry observability rollout that surfaced silent prod failures.

Role
Full-stack Engineer
Year
2025 → 2026
Status
shipped
Stack
TypeScript · Node.js · Sentry

Backend engineer on a US fashion auction and marketplace SaaS for streetwear and second-hand luxury. It began as a structured fork of the Bricks & Bids backend and evolved into its own product; I authored 172 commits across the migration and the new product surfaces.

// Context

NYMA runs three flows on one item model: timed auction, fixed-price marketplace, and in-person pickup. The migration was a tracked refactor: re-namespace 50+ packages, swap the LEGO taxonomy for a fashion one (brand, collab, sub-category, size, label), and rebrand the domain end-to-end.

Role

Backend engineer

Commits

172 authored

Observability

4-phase Sentry rollout

Emails

60+ event-driven

New product surfaces .

  • A full in-person Pickup sub-system: end-of-day deadlines in the buyer’s local timezone, admin actions, a "both" fulfillment type, and 9 dedicated email events.
  • A Power Seller program: enrollment, credit transactions, scheduled renewals, admin controls.
  • Item Authentication with automated label generation and lifecycle events.
  • AI-assisted listing descriptions with a per-user rate limiter, and OpenGraph previews for shared listings.

Payments & cost .

Re-architected the bid flow to hold a Stripe payment only on the first bid instead of every bid (a measurable fee saving without weakening the auction guarantee), plus Affirm and direct-payment integrations and webhook idempotency fixes.

Observability I led .

A deliberate four-phase Sentry rollout across auctions, bidding, payments, shipping, pickup, and marketplace: errors plus custom metrics through a shared SentryMetricsUtil with one naming convention. I codified the conventions afterward: no string-as-exception, PII hygiene in metric tags, and mandatory captureException inside @Async and @EventListener (Spring’s default async handler doesn’t forward to Sentry).