Portafolio
En desarrollo activo
Case Study · Shoppipai

Ecosistema e-commerce enterprise en tres aplicaciones.

Modular Monolith en Django con arquitectura hexagonal y 27 bounded contexts. Storefront React 19 + Vite y dashboard Next.js 16 multi-tenant. Saga + Outbox, búsqueda semántica RAG con pgvector, pagos Stripe + Wompi y facturación DIAN.

27 bounded contexts · DDD
91.76% cobertura · 16,867 tests
3 apps Django · React · Next.js
01 — Contexto

Por qué existe.

Infraestructura completa de e-commerce diseñada para escalar: catálogos masivos, múltiples tenants con aislamiento total vía cabeceras dinámicas, cumplimiento legal colombiano (DIAN) y disciplina de ingeniería con piso mínimo de calidad. Tres proyectos independientes que se comunican por un contrato compartido (OpenAPI + GraphQL) — cada audiencia (backend, clientes, staff) opera con su propio ritmo y stack.

  • Modular Monolith con arquitectura hexagonal · 27 bounded contexts
  • Multi-tenant con aislamiento total vía X-Tenant-Id / X-Tenant-Slug
  • Cumplimiento fiscal Colombia (DIAN) integrado al flujo de órdenes
  • Disciplina Zero Shortcuts: 90% cobertura piso · tipado estricto · análisis estático
02 — Arquitectura

Tres apps, un solo dominio.

Cada app vive en su repo, comparte el contrato OpenAPI del backend y se despliega de forma independiente.

BACKEND :8000

backend_ecomerce

Django 5.2 LTS · DDD + Hexagonal

Modular Monolith con 27 bounded contexts (DDD + hexagonal). API dual REST + GraphQL. Saga Pattern para checkout (rollback automático si el pago falla), Outbox Pattern para resiliencia, particionamiento PostgreSQL para alta concurrencia y RAG con pgvector para búsqueda semántica. 16,867 tests · 91.76% cobertura.

Django 5.2DRFStrawberry GraphQLPostgreSQLpgvectorRedisCelerySentryPrometheusOpenTelemetry
STOREFRONT :5173

shoppipai-frontend

React 19.2 · Vite 7 · MVVM + Adapter

SPA premium del cliente con patrón MVVM + Adapter (lógica de presentación desacoplada del backend). React Compiler para memoización automática · SDK type-safe generado por Orval desde OpenAPI · Playwright × 6 configs (mobile, visual, cross-layer, strict, preflight) · Lighthouse CI con gates de perf.

React 19Vite 7React Router 7TanStack Query 5React CompilerTailwind 3.4OrvalSentryAxios
DASHBOARD :3001

dashboard

Next.js 16 · Turbopack · Multi-tenant

Panel administrativo multi-tenant con aislamiento total vía cabeceras dinámicas (X-Tenant-Id, X-Tenant-Slug). App Router + Turbopack para desarrollo instantáneo · Server Components · TanStack Table virtualizado para datasets masivos · gestión completa de catálogo, órdenes, métricas y configuración por tienda.

Next.js 16React 19Turbopackshadcn/uiRadix UITailwind v4TanStack QueryTanStack TableOrvalnuqs
Storefront en vivo

Cómo se ve para el cliente.

Storefront SPA (Vite 7 + React 19) · catálogo, drops y producto en detalle · diseño responsive de extremo a extremo · en producción.

shop.cristianarellano.com
LIVE
Captura del storefront de Shoppipai mostrando el banner 'Hecho para la calma antes', un producto destacado (Northline Court Classic) y la galería 'Campo de juego' con productos del catálogo.
Misma vista del storefront en formato móvil con nav inferior tipo app (Inicio, Buscar, Drops, Cuenta) y stacks adaptados al ancho del dispositivo.
Dashboard administrativo

Cómo opera el staff.

Panel Next.js 16 + shadcn · KPIs en vivo, gestión de catálogo y tablas virtualizadas para datasets grandes.

03 — Dominio

27 módulos DDD.

Bounded contexts agrupados por capa de negocio. Cada módulo tiene servicios, modelos, tests y, donde aplica, su propio endpoint OpenAPI.

Commerce
  • carts
  • orders
  • payments
  • pricing
  • subscriptions
Catálogo
  • catalog
  • inventory
  • search
  • storefront
  • wishlists
Identidad
  • users
  • customers
  • staff
  • tenants
Operaciones
  • analytics
  • cms
  • i18n_app
  • locations
  • notifications
  • shipping
  • webhooks
Plataforma
  • gql
  • invoicing
  • gift_cards
  • meta_ai
  • site_config
  • task_engine
04 — Seguridad

Defensa en profundidad.

JWT
RS256 con keys RSA Rotación de claves vía env · fallback HS256
2FA
TOTP · django-otp + django-two-factor-auth Permiso StaffOnlyWithMFA en endpoints sensibles
RBAC
4 roles · CUSTOMER / STAFF / OWNER / ADMIN Ownership estricto vía IsOwner permission
Multi-tenant
Aislamiento via X-Tenant-Id / X-Tenant-Slug headers Sin cross-tenant queries posibles
Audit log
StaffActionLog · todas las acciones críticas de staff
Headers
CSP estricto · HSTS · referrer-policy · X-Frame DENY
Hardening
OWASP review · rate limiting · CORS · CSRF protection
Análisis estático
Ruff · MyPy strict · Bandit (security) · SonarQube
05 — Pagos & Facturación

Saga Pattern + Outbox + DIAN.

El checkout cruza varios bounded contexts (inventory · orders · payments · invoicing · notifications). Se modeló como una Saga con compensaciones automáticas: si el pago falla, el stock se libera y la orden se revierte sin intervención manual. Persistencia transaccional vía Outbox Pattern garantiza que acciones críticas (reembolsos, correos, integraciones) se ejecuten incluso ante fallos temporales del sistema.

Flujo del checkout
  1. 01 Reservar stock
  2. 02 Crear orden
  3. 03 Capturar pago (Stripe / Wompi)
  4. 04 Emitir factura DIAN
  5. 05 Notificar cliente
  • Pagos globales (Stripe) y locales (Wompi · Colombia) con flujos asíncronos de verificación
  • Outbox Pattern · drainer asíncrono con retry exponencial e idempotencia
  • Compensaciones automáticas por paso (liberar stock, refund, anular factura)
  • Facturación electrónica DIAN vía Factus integrada al flujo · notas crédito automáticas
07 — Calidad (Zero Shortcuts)

16,867 tests · 91.76% cobertura.

16,830 tests pasando · 1 falla · 36 skipped
91.76% cobertura de líneas · piso 90%
6 configs Playwright × storefront
  • Backend: Pytest + Factory Boy · CI gate fail_under=90 · pytest-xdist paralelo
  • Tipado estricto: prohibido any en TS · noqa / type: ignore en Python
  • Análisis estático: Ruff · MyPy strict · Bandit (security) · SonarQube
  • Capas de tests: unit · integration · chaos · race conditions · DDD compliance
  • Storefront E2E: chromium · mobile · visual regression · cross-layer · strict · preflight
  • A11y: axe-core en Playwright + vitest-axe
  • Performance: Lighthouse CI gates (LCP ≤2.5s · CLS ≤0.1 · score ≥0.85)
  • Documentación viva: Swagger · ReDoc · GraphQL Playground autogenerados
08 — Observabilidad

Sentry + Prometheus + OpenTelemetry.

Cada app instrumentada para detectar regresiones antes de que escalen. Tracing distribuido entre las tres apps vía OTel.

  • Sentry: Django + Celery + Redis integrations · release tagging · sample rates
  • Prometheus: django-prometheus · métricas por módulo · scraping desde el cluster
  • OpenTelemetry: traces y spans distribuidos · context propagation
  • Structured logging con correlation IDs en todos los servicios
09 — Estado

Qué está vivo, qué viene.

Shipped
  • Backend completo con 27 módulos DDD y suite de tests
  • Saga de checkout con Wompi + Factus en producción
  • Storefront cliente con SDK type-safe y E2E completo
  • Dashboard de staff con gestión de catálogo y órdenes
  • Observabilidad full-stack en Sentry + Prometheus
En flight
  • Pulido del flujo multi-tenant en dashboard
  • Métricas de búsqueda semántica en producción
  • Reportes BI exportables desde el módulo analytics
  • Hardening adicional de Stripe Connect para split payments

¿Quieres profundizar?

Si trabajas en algo similar y quieres revisar decisiones de arquitectura o ver el código, escríbeme.

Volver al portafolio