boletera
Propuesta técnico-económica · Plataforma de boletos · 2026
1 / 12
Propuesta técnico-económica · mayo 2026

Boletera de alta
concurrencia
para México

Plataforma de propósito general · primera prueba en campo: FNCR Chapingo · oct 2026

Plataforma de compra-venta de boletos diseñada desde el primer commit para soportar picos de venta tipo on-sale, con compliance PROFECO / CFDI / LFPDPPP de día uno y costos de infraestructura justificados al peso. Misma plataforma para conciertos, palenques, bailes, deportes, teatro, festivales y conferencias.

$500,000 MXN · 3 fases Jul – Oct 2026 Primera prueba en campo: oct 2026 UI premium · Stack Go · Postgres · Redis · Conekta

Socios fundadores · Saúl Arriaga liderazgo de proyecto · Diego Ramos backend · Javier Esqueda frontend

01 · Primera prueba en campo

El escenario ideal para validar el MVP

La plataforma es de propósito general: cualquier evento. Para la primera prueba en campo elegimos la FNCR Chapingo XXXI (oct 2026) porque combina volumen real, modelo de venta simple y ventana de fechas factible con nuestro roadmap de 14 semanas.

200k+
Visitantes acumulados · XXX FNCR 2025 · cifra oficial UACh — volumen suficiente para estresar el sistema en condiciones reales
35–45k
Asistencia día pico · sábado/domingo · 13 h de jornada (9:00–22:00)
15–18k
Concurrentes pico en mega concierto noche [ESTIMADO factor 0.27]
Modelo de venta — qué ejercita el piloto

Boleto único · acceso general (~$60 MXN)

La FNCR opera como General Admission, lo que nos permite estresar bajo carga real el inventario tipo contador atómico. La plataforma soporta ambos modelos desde el primer commit: contador (GA, festivales, ferias) y grafo de asientos numerados (estadio, teatro, arena). En Chapingo activamos solo el contador; el modelo de butacas queda listo para cualquier evento posterior sin tocar arquitectura.

11 días
Ventana de operación continua · tiempo real para corregir cualquier issue post-lanzamiento
post-MVP
La misma plataforma vende para palenques, bailes, conciertos, deportes, teatro, festivales y conferencias — sin rediseño

Fuentes: feriaculturarural.chapingo.mx · La Jornada (07-oct-2025) · cifras oficiales UACh XXX FNCR.

02 · Tesis

UI cuidada por fuera, motor sólido por dentro

El producto se vende por una experiencia premium: tipografía, micro-interacciones, fluidez móvil. Eso lo entrega el frontend. Pero el producto se sostiene por su motor: los primeros 180 segundos de una venta masiva son donde los sistemas mal diseñados se caen públicamente — y donde un sistema con las primitivas correctas aguanta con presupuesto modesto. Las 4 dimensiones aquí describen ese motor.

01

Atomicidad

Cada hold de boleto es una operación indivisible. Lua atómico en Redis Cluster con hash tags {event:N} garantiza correctitud sin coordinación distribuida cara.

Redis EVAL · hash tags · TTL · idempotency keys

02

Consistencia (CP)

En CAP elegimos Consistency + Partition tolerance. Preferimos rechazar una compra (HTTP 503) antes que oversell. Postgres es source of truth, Redis es cache caliente reconciliable.

SELECT FOR UPDATE SKIP LOCKED · saga orquestada · reconciliación

03

Backpressure

El sistema le dice la verdad al usuario: si no hay capacidad, devuelve 503 + Retry-After. Sin filas zombi, sin holds fantasma. Game days previos para calibrar el límite real.

rate limit edge · gateway · servicio · load test K6 100% del pico

04

Compliance día 1

Cada operación se diseña pensando en PROFECO, CFDI 4.0, LFPDPPP y PCI SAQ-A. No es retrabajo posterior — es restricción de diseño en cada decisión técnica.

all-in pricing · PAC async · tokenización · field-level encrypt

Referencia técnica: Kleppmann Designing Data-Intensive Applications · Shopify Engineering BFCM 2025 (flash-sale readiness) · investigación técnica interna.

03 · Stack

Decisiones opinionadas, no menú de opciones

Cada elección está sustentada por trade-offs medibles. Lo que descartamos también es información: Redlock no es safe para inventory; Cloudflare Waiting Room no es FIFO; Stripe MX no tiene OXXO competitivo.

Capa
Elección
Por qué (y qué descartamos)
Lenguaje hot-path
Go 1.22+ (servicios inventory, checkout, payments)
Goroutines escalan a 100k+ conexiones/nodo con poca RAM. Latencia p99 predecible (sin GC pause tipo JVM, sin event-loop bloqueante tipo Node). Descartado Node hot-path; queda como BFF/admin.
Source of truth
PostgreSQL 16 · particionado por event_id
SELECT FOR UPDATE SKIP LOCKED resuelve asignación sin bloqueo en cascada. CockroachDB descartado fase 0–1 (licencia post-2024, complejidad operativa sin necesidad multi-región).
Cache / coordinación
Redis Cluster · hash tags + Lua scripts atómicos
Atomicidad dentro del mismo slot. Redlock descartado para inventory (Kleppmann demostró no es safe para correctness). Hazelcast descartado: comunidad muerta.
Cloud + región
AWS · mx-central-1 (Querétaro, lanzada Q1 2025) · DR us-east-1
Soberanía de datos cumple LFPDPPP; latencia CDMX↔Querétaro <10ms. Multi-cloud descartado fase 0–2: complejidad > beneficio. GCP solo si necesitas BigQuery/Vertex.
Pagos MX
Conekta primario + MercadoPago secundario
Conekta tiene SPEI/OXXO de primera clase, settlement 2–3d, ~3.4% + $3 MXN. Stripe MX descartado para venta nacional (sin OXXO competitivo, settlement 7d, menos local).
Edge / WAF
Cloudflare (CDN + WAF + Turnstile invisible)
Turnstile gratis para anti-bot, Workers para edge logic (firma JWT del QR en el edge). Akamai descartado: costo equivalente a 5 ingenieros sr.
Factura electrónica
Facturapi · async post order.confirmed
PAC bien documentado, sandbox decente. Nunca bloquear checkout esperando timbrado (2–30s). Capturar datos fiscales solo si requires_invoice = true.

Investigación técnica: Jack Vanlightly (Kafka vs Redpanda benchmarks) · Kleppmann "How to do distributed locking" · Shopify BFCM 2025 readiness · Rebill payment gateways MX 2026.

04 · Arquitectura

El sistema en un solo flujo

Arriba: usuarios y canales de venta. Abajo: servicios backend. La saga orquestada cruza el sistema completo en <1.5s p99.

Público · usuario final Hot-path · venta Validación · venue Webhook pago · async Backend interno

Patrones implementados: Saga orquestada · CQRS lite (lectura desde réplica) · idempotency keys · circuit breakers a payment providers · Zero Trust mTLS service-to-service.

05 · Núcleo algorítmico

El hold atómico — qué hace que esto funcione

Dos primitivas matemáticas sostienen toda la plataforma: atomicidad dentro de un slot Redis (Lua script) y SKIP LOCKED en Postgres. El resto del stack es plomería alrededor de estas dos.

-- Hold atómico en Redis Cluster (Lua, ejecución atómica por slot) -- KEYS[1] = "{event:1}:seat:N" ← hash tag fija el slot -- ARGV[1-3] = user_id, hold_token, ttl_segundos local status = redis.call('HGET', KEYS[1], 'status') if status == 'available' or status == false then redis.call('HMSET', KEYS[1], 'status', 'held', 'user_id', ARGV[1], 'hold_token', ARGV[2]) redis.call('EXPIRE', KEYS[1], ARGV[3]) return {ok = "HELD"} end return {err = "ALREADY_HELD"}
Garantía: Redis EVAL ejecuta el script como una transacción atómica dentro del mismo slot. Dos hold requests sobre el mismo asiento producen exactamente un winner — sin Redlock, sin Paxos, sin coordinador.
# Erlang C — fórmula de dimensionamiento de servidores # Necesarios para mantener cola virtual en SLO p95 λ = 2500 req/s # tasa de llegada (pico FNCR + margen) μ = 125 req/s # servicio por instancia (medido en bench) ρ = λ / (c · μ) # utilización; mantener ρ < 0.8 # Despejando c (instancias) para ρ = 0.7: c = ⌈ λ / (0.7 · μ) ⌉ = ⌈ 2500 / (0.7 · 125) ⌉ = 29 pods # Probabilidad de espera P(W > 0) — fórmula Erlang C # con c=29, ρ=0.69 → P(W>0) ≈ 0.04 ✅ ───────────────────────────────────────── # Capacidad de un slot Redis Cluster # Single thread, ~100k ops/s sostenido shards = ⌈ N_eventos_activos / 10# 10 eventos/shard FNCR fase 0: shards = 3 # 1 evento + slack
Lectura: Erlang C nos dice cuántos pods de checkout necesitamos. Para 2,500 req/s sostenidos con un servicio que procesa 125 req/s por instancia, queremos 29 pods con utilización 70% — fila virtual cubre el resto.
CAP · elegimos CP Sharding por event_id Idempotency keys Saga orquestada (Temporal pattern) SKIP LOCKED — cola de trabajo

Referencias matemáticas: Martin Kleppmann Designing Data-Intensive Applications §7 (transacciones) · §9 (consistencia) · Erlang C en queueing theory (Agner Erlang, 1917) · Redis Cluster docs (hash tags + multi-key ops).

06 · Capacidad

Dimensionado para Chapingo con margen 100%

Cada número viene de los datos públicos de la FNCR 2023–2025 multiplicados por 2. El sistema debe sostener el peor escenario realista, no el promedio.

90k
Visitantes/día procesables

Pico real día sábado: 45k. Con margen 100%: 90k. El sistema de validación en accesos debe escalar a este número sin degradar p99 de scan QR.

36k
Concurrentes pico

Pico real noche concierto: 18k. Con margen 100%: 36k sesiones activas. WebSocket/SSE para mapa de disponibilidad en tiempo real.

2,500
req/s pico checkout

Estimación venta on-sale: 25k boletos vendidos en 10 min = 2,500 req/s sostenidos. Con margen 100%: 5,000 burst absorbido por cola virtual.

99.9%
SLO disponibilidad

43 min/mes de downtime tolerado. Critical path (checkout, validación) en 99.95%. Game days mensuales con load test al 100% del pico.

Bench plan obligatorio antes de oct 2026: K6 con 5,000 req/s sostenidos durante 10 minutos sobre staging idéntico a prod. Validación de QR con 100 escáneres concurrentes simulando los accesos del campus UACh. Cualquier punto que no pase el bench no entra al MVP.

Datos fuente: La Jornada 2023/2025 (aforo histórico) · feriaculturarural.chapingo.mx · cálculo de concurrentes con factor de simultaneidad 0.27 (rotación 3.5h en jornada 13h, estándar ferias mexicanas FENAPO/Caballo).

07 · Pagos

Pagos pensados para cómo paga México

En MX, ~40% de los pagos online no son con tarjeta. Si el sistema no maneja SPEI/OXXO con holds asíncronos de 24–48h, pierdes ~40% del mercado. Sub-stack opinionado:

Tarjeta + 3DS2
~3.6% + IVA · ~60% del volumen

Conekta Elements (iframe hospedado) → SAQ-A. 3DS2 selectivo por risk score, no en todo: subir conversión sin sacrificar antifraude. Apple/Google Pay nativos.

SPEI · referencia
~1.0% + $3 MXN · ~25% del volumen

Hold de boleto extendido 24–48h. Webhook idempotente con HMAC. CFDI generado solo en charge.paid, nunca antes.

OXXO Pay
~1.9% + fija ~$10 · ~15% del volumen

Voucher PDF + WhatsApp con referencia. Cierre forzado de venta OXXO 72h antes del evento (trampa conocida: el usuario que paga la noche antes es problema operativo).

MSI 3 / 6 / 9
~2–4% absorbido · opcional

Para tickets > $1,500 MXN. En el MVP Chapingo (boleto $60) NO aplica — se evalúa para fase 2 cuando aceptemos venues con tickets > $1k.

Kueski Pay (BNPL)
vía dLocal · fase 2

+18–24% conversion lift en tickets > $2k según dLocal. Fuera de alcance fase 0–1 (boleto FNCR es muy chico). Activable cuando subamos a venues medianos.

CFDI 4.0 async
Facturapi PAC · post-webhook

Worker consume order.confirmed → genera XML + PDF en S3 → link por email. Nunca bloquea checkout. Cancelación = CFDI de egreso.

Investigación: Rebill Payment Gateways Mexico 2026 · MuralPay Top payment gateways MX · CNBV (3DS2 obligatorio desde 2021) · SAT (CFDI 4.0 vigente).

08 · Distribución y validación

QR firmado, offline-capable en el venue

El boleto es un JWT firmado HMAC-SHA256 con clave por evento. La app de validación en accesos del campus opera sin conexión, sincroniza cada 30s, y bloquea cualquier intento de doble uso entre puertas. También soporta venta en taquilla física: el operador activa al instante un QR pre-cargado en BD que el mismo scanner valida en la puerta.

QR firmado

Estructura del payload

JWT con {ord, tkt, evt, iat, exp, nonce}. Clave HMAC por evento, rotada cada 90 días. Tamaño < 256 bytes — QR denso pero leíble.

Wallet

Apple Wallet + Google Wallet

Pass server-side post order.confirmed. Google Wallet con rotating barcodes (60s); Apple Wallet con QR estático one-shot (limitación de iOS 2026).

Scanner

App nativa de validación

React Native. Bundle pre-evento con (ticket_id, hmac_key) sin PII. Valida local. Sync incremental cada 30s. Modo offline absoluto si red cae.

Anti-doble uso

Verificación cruzada multi-puerta

El campus UACh tiene varios accesos peatonales y vehiculares. Cuando un QR se escanea en la Puerta 1, su flag scanned_at propaga a las otras puertas en <5s vía pub/sub Redis. El segundo intento en cualquier otra puerta se rechaza con razón visible al staff. Bench objetivo: 100 escáneres concurrentes, p99 < 200ms por validación local + < 1s sincronizado.

Forense

Watermark visual

Microtexto con order_id en el QR para trazar fugas. Sin afectar la legibilidad del scanner.

Transfer

Reventa controlada

Transfer dentro de la app entre cuentas verificadas (teléfono SMS). Canaliza ~60% del scalping al ecosistema legítimo — sin StubHub/Viagogo.

Referencias técnicas: Google Wallet Rotating Barcodes (developers.google.com/wallet) · Apple PassKit · JWT RFC 7519 · HMAC-SHA256 (FIPS 180-4).

09 · Seguridad técnica + legal MX

Compliance como constraint de diseño

Cada capa del sistema se diseña sabiendo qué autoridad mexicana puede pedir cuentas. No es retrabajo posterior — es restricción técnica de día uno.

Lineamientos PROFECO 19-feb-2026

DOF · vinculantes para eventos >20k asistentes

Obliga all-in pricing desde el primer click, mapa de disponibilidad, transparencia de fila virtual, reembolso 100% en 30 días, protección antibots demostrable. Diseño: el precio que ve el usuario en el catálogo ES el que paga en checkout — sin cargos sorpresa.

LFPDPPP nueva (mar-2025)

INAI disuelto → Sec. Anticorrupción y Buen Gobierno

Aviso de privacidad separa finalidades necesarias (transacción) de voluntarias (marketing). PII sensible (CURP, INE, teléfono) cifrada field-level con KMS antes de tocar DB. Soberanía de datos: cómputo en AWS mx-central-1.

CFDI 4.0 · SAT

Obligación universal · PAC asíncrono

Worker timbra vía Facturapi post order.confirmed. Nunca bloquea checkout (timbrado 2–30s). Datos fiscales opt-in. Cancelación = CFDI de egreso (nota de crédito).

PCI-DSS · SAQ-A

Tokenización vía iframe del provider

Backend nunca toca PAN. Conekta Elements maneja la captura; recibimos solo tokens. Esto reduce el scope de PCI a SAQ-A (~22 preguntas) en lugar de SAQ-D (~300+).

CNBV / Banxico

Agregador de pagos · sin licencia directa

Cobramos al cliente final y transferimos al organizador (UACh). Operamos como agregador sobre Conekta (adquirente regulado). NO retenemos fondos > 48h — evita la frontera con IFPE (Ley Fintech 2018).

Zero Trust · OWASP Top 10

mTLS service-to-service · WAF

Cloudflare WAF (OWASP CRS) en edge. Rate limit en 3 capas (edge, gateway, servicio). Service mesh con certs SPIFFE rotados 24h. Secretos en AWS Secrets Manager, nunca en envvars.

Cumplir es diferenciador, no carga: los lineamientos PROFECO de feb-2026 son recientes y muchos operadores en el mercado todavía están adaptándose. Un MVP que cumple desde el día uno tiene una narrativa defendible frente a cualquier venue, promotor o auditoría futura.

Fuentes: Proceso (19-feb-2026 lineamientos PROFECO) · La Jornada (19-feb-2026) · Hogan Lovells (LFPDPPP 2025) · SAT (CFDI 4.0) · PCI Security Standards Council (SAQ-A).

10 · Modelo económico — visión gruesa (detalle: Saúl)

$500,000 MXN en tres fases hasta el MVP

Foco técnico, no comercial. Cada fase tiene un entregable medible y un go/no-go antes de soltar la siguiente porción de capital. La validación de producto se cierra en la FNCR Chapingo de octubre.

Fase 1 · Fundación

Jul – Ago · 6 sem
$170,000 MXN
  • Monolito modular Go + Postgres + Redis
  • Catálogo de evento + checkout end-to-end
  • Integración Conekta (tarjeta + OXXO + SPEI)
  • CFDI vía Facturapi async
  • QR firmado + email/WhatsApp delivery

Fase 2 · Concurrencia

Sep · 4 sem
$165,000 MXN
  • Lua atómico Redis Cluster (hold + TTL)
  • App de validación React Native offline-capable
  • Anti-bot Cloudflare Turnstile + rate limit
  • Observabilidad: Grafana Cloud + OTel
  • Load test K6 con 5,000 req/s

Fase 3 · Piloto FNCR

Oct · 2 sem + feria
$165,000 MXN
  • Despliegue prod AWS mx-central-1
  • Game day 100% del pico real (45k/día)
  • War room durante los 11 días de feria
  • Reporte post-mortem + handover UACh
  • Reserva contingencia operativa
~70%
Equipo (3 ingenieros · 3.5 meses promedio)
~18%
Infra cloud + SaaS (Conekta, Facturapi, Cloudflare, Grafana)
~12%
Reserva operativa + contingencia + legal

Detalle de breakdown económico: presentación de Saúl Arriaga. Esta slide muestra la estructura técnica y los entregables que cada fase desbloquea — no el detalle del P&L ni la composición de costos por línea.

11 · Hoja de ruta

De kickoff a feria en 14 semanas

Cinco hitos no negociables. Si cualquiera falla, el siguiente se atrasa proporcionalmente — no hay forma de comprimir game days ni despliegue productivo sin sacrificar correctitud.

SEM 01–02
Kickoff técnico

Setup repo, CI/CD, AWS mx-central-1, observabilidad base. Reunión con UACh para confirmar accesos y operativa de venue.

SEM 03–06
Checkout end-to-end

Catálogo, hold, pago Conekta, CFDI async, QR. Demo interna con compras reales y boletos descargables.

SEM 07–10
Concurrencia + scanner

Redis Lua, app validación offline, anti-bot, OTel completo. Bench 5k req/s en staging.

SEM 11–12
Game day + producción

Load test 100% del pico real, runbooks de war room, despliegue prod. Última ventana para encontrar bugs.

SEM 13–14
FNCR · operación

11 días de feria con guardia 24/7. Métricas en vivo en dashboard. Post-mortem + handover.

Kickoff · 1 jul 2026 Code freeze · 21 sep 2026 FNCR XXXI · 1–11 oct 2026 [fechas estimadas] Handover UACh · 25 oct 2026

Siguiente paso inmediato: validación institucional formal del piloto + carta de intención con el comité organizador. Saúl Arriaga coordina. La parte técnica está dimensionada y defendible — falta el "go" institucional para arrancar kickoff el 1 de julio.