Ancho
Identidad · Propuesta

RIFAZO

Corto, inequívocamente colombiano, y el sufijo -azo convierte una rifa cualquiera en un evento. Fácil de dictar por teléfono, fácil de escribir en WhatsApp.

Marca
RIFAZO

Boleta troquelada: perforación al centro, muescas laterales, la balota en oro a la izquierda y los renglones del talonario a la derecha. Legible a 16 px como favicon.

Paleta
Sello#2438D8
acción / acento
Tinta#0A1230
fondo de impacto
Oro#A87513
premio / reservado
Verde#0A7A59
pago confirmado
Rojo#B32A19
vencido / error
Porcelana#E6EAF2
fondo claro

Los grises llevan sesgo azul hacia el acento. Verde y rojo son solo semánticos: nunca decoran. El oro marca lo que vale — el premio y el número apartado.

Tipografía
Archivo Black · display
Gánate el anillo
Archivo · texto
Cada boleta participa por el premio mayor. El sorteo se juega con la Lotería de Bogotá.
DM Mono · números
0 1 4 7
2 5 8 9

Todo número va en monoespaciada con tabular-nums. En una grilla de 100 boletas, dígitos de ancho variable rompen la retícula.

Nota técnica

Este prototipo usa los nombres de clase de Bootstrap 5 (row, col-md-6, form-control, card, badge, table). El marcado se traslada tal cual al proyecto PHP enlazando bootstrap.min.css más una hoja rifazo.css con estos tokens de color.

1 sorteo abierto · quedan 38 boletas

Escoge tu número.
El resto es suerte.

Apartas tu número, transfieres por Bre-B y quedas participando. Confirmación por correo, y el comprobante lo mandas por WhatsApp si prefieres.

Boleta
$30.000
Total boletas
100
Juega
05 sep

Sorteos abiertos

Piloto privado · por invitación
Activo Últimas 38

Anillo en oro 18 kilates

62 de 100 boletas62%
Boleta
$30.000
Próximamente

Más sorteos en camino

Déjanos tu correo y te avisamos cuando abra el siguiente.

Ganadores

Sorteos ya jugados

Bono Éxito $500.000 47
Audífonos Sony 03
Cómo funciona

1. Escoges tus números y los apartas.  2. Transfieres por Bre-B con la referencia que te damos.  3. Subes el comprobante o lo mandas por WhatsApp.  4. El organizador confirma y tus números quedan tuyos. Tienes 24 horas para pagar; a las 20 te recordamos.

Sorteo RF-2026-001

Anillo en oro 18 kilates

Activo Del 20 ago al 04 sep Lotería de Bogotá · 05 sep 2 últimas cifras
Elige tus números
Rango 00 – 99 · toca para apartar
Libre Reservado Vendido Tuyo
Condiciones del sorteo
  1. El sorteo se juega con el premio mayor de la Lotería de Bogotá del 5 de septiembre de 2026. Gana la boleta cuyo número coincida con las dos últimas cifras.
  2. Al apartar un número queda bloqueado a tu nombre por 24 horas. A las 20 horas recibes un recordatorio; si a las 24 no se ha recibido y confirmado el pago, el número se libera automáticamente y vuelve a estar disponible para cualquiera.
  3. El organizador valida cada comprobante dentro de esas 24 horas. Solo participan las boletas con pago confirmado antes del cierre del 4 de septiembre.
  4. Si las dos cifras ganadoras corresponden a una boleta no vendida, el premio se define con el siguiente sorteo de la misma lotería, y así hasta que haya ganador.
  5. Devoluciones y cualquier reclamo se atienden por WhatsApp directamente con el organizador al número publicado en esta página.
  6. Mayores de 18 años. Piloto privado por invitación.
Organizador

Dudas, devoluciones o envío de comprobante: 300 481 2277abrir WhatsApp

Tu boleta
Sin números aún
Boletas0
Valor unitario$30.000
Disponibles38 de 100
Total $0

Al apartar, tus números quedan bloqueados 24 horas mientras completas el pago.

Paso 1 de 3 · Tus datos

¿A nombre de quién van los números?

Necesitamos cómo contactarte si ganas. Nada más.

Resumen
Anillo en oro 18 kilates
07 · 42 · 88
Total$90.000
Decisión de diseño

No pedimos dirección. Solo se le solicita al ganador, y solo si el premio requiere envío. Menos datos recolectados es menos riesgo bajo la Ley 1581.

Paso 2 de 3 · Pago

Transfiere $90.000 por Bre-B

QR de ejemplo
Bre-B · llave del organizador
@rifazo
Referencia obligatoria
RF01-8802

Escanea el QR o usa la llave, y escribe la referencia en la descripción de la transferencia. Es lo que nos deja emparejar tu pago con tus números sin llamarte.

Ahora envía el comprobante — elige un camino
Opción A · aquí mismo

Subir el comprobante

Captura o PDF, máximo 5 MB. Queda registrado al instante.

Toca para elegir archivo
JPG · PNG · PDF
Opción B · por WhatsApp

Mandarlo al organizador

Se abre WhatsApp con el mensaje y la referencia ya escritos. Solo adjuntas la captura y envías.

Hola, aparté los números 07 42 88 del Anillo en oro. Referencia RF01-8802. Adjunto comprobante.
Tus números
07 · 42 · 88
Total$90.000
Riesgo que asumes con pago manual

Un comprobante puede ser falso o reutilizado. El panel compara monto, referencia y el hash del archivo para avisarte si algo se repite, pero la confirmación final la haces tú a ojo contra tu app del banco. Con 50 sorteos en paralelo esto se vuelve el cuello de botella.

Reloj

Tienes 24 horas desde que apartaste. A las 20 horas te llega un recordatorio por correo y WhatsApp. Si a las 24 no hay pago confirmado, los números vuelven a quedar libres.

En verificación

Recibimos tu comprobante

Tus números 07 · 42 · 88 quedan apartados a tu nombre mientras el organizador valida el pago. Tiene 24 horas para hacerlo, normalmente responde el mismo día.

SorteoAnillo en oro 18 k
ReferenciaRF01-8802
MedioBre-B · @rifazo
Vence28 ago, 10:42 a.m.
Correo enviado Comprobante recibido

Te escribimos en cuanto el pago quede confirmado.

Consulta sin contraseña

Mis números

Escribe tu celular y te enviamos un código de 6 dígitos. No creamos cuentas ni contraseñas para compradores: menos fricción y menos datos que proteger.

SorteoNúmerosReferenciaEstadoVence
Anillo en oro 18 k07 · 42 · 88RF01-8802 Verificando28 ago 10:42
Bono Éxito $500.00047RF00-2210 ¡Ganaste!
Audífonos Sony15 · 16RF00-7734 Reserva vencida14 ago 09:10

Panel de administración

Acceso restringido al organizador

Bloqueo temporal tras 5 intentos fallidos. Cada ingreso queda en la bitácora con IP y dispositivo.

Seguridad

2FA obligatorio para todo rol administrativo. El módulo que confirma pagos mueve dinero: no puede depender solo de una contraseña.

Jueves 27 de agosto, 2026

Buenos días, Omar

Por validar
7
Recaudado
$1,86M
Boletas vendidas
62
Vencen hoy
3
Avance de sorteos activos
Anillo en oro 18 kilates 62 / 100
Audífonos Sony (cerrado) 100 / 100
Proyección

A este ritmo el sorteo del anillo se agota el 2 de septiembre, dos días antes del cierre. Faltan 38 boletas por $1.140.000.

Necesita tu atención
Vence en 2 h

3 reservas se liberan hoy sin comprobante recibido. Los números vuelven a la grilla automáticamente.

Comprobante repetido

RF01-8811 tiene el mismo archivo que RF01-8802. Revísalo antes de confirmar.

WhatsApp

Enlaces wa.me activos. La Cloud API sigue sin configurar en Ajustes.

Cron

Última corrida del liberador: hace 47 segundos. Todo al día.

Sorteos

SorteoRangoVendidasLoteríaJuegaEstado
Anillo en oro 18 k
RF-2026-001
00 – 9962Bogotá05 sep Activo
Audífonos Sony WH-1000
RF-2026-000
00 – 99100Medellín15 ago Finalizado
Cafetera Oster
RF-2026-002
00 – 990Valle19 sep Borrador
Sorteos · RF-2026-001

Editar sorteo

Datos generales
1
2
+
Boletas y reserva

100 boletas · recordatorio automático al comprador a las 20 horas (80% del plazo) · liberación a las 24.

Definición del ganador
Condiciones

El sistema añade automáticamente al final: el plazo de reserva de 24 horas con recordatorio a las 20, la liberación automática del número, la regla de cifras no vendidas y el canal de devoluciones. Así ninguna publicación queda sin esas cláusulas.

Estado
PublicaciónActivo
Boletas totales100
Vendidas62
Recaudo$1.860.000
Reglas que el sistema impone

Con boletas vendidas no se puede reducir el rango ni cambiar el valor de la boleta ni las cifras a comparar. Cambiar cualquiera de los tres rompe el contrato con quien ya compró. El sistema los bloquea con la primera venta.

Coherencia rango-cifras

El rango y las cifras a comparar tienen que cuadrar: 2 cifras exige 00–99. Si eliges 3 cifras con 100 boletas, el formulario no guarda.

Validación de compras

7 reservas esperando · la más urgente vence en 1 h 12 min

ReferenciaCompradorNúmerosMontoComprobanteVence enAcción
RF01-8802
hace 12 min
Laura R.
•••• 2277
07 42 88 $90.000 Subido 23 h 48 m
RF01-8809
hace 22 h
Andrés M.
•••• 6610
31 $30.000 Por WhatsApp 1 h 12 m
RF01-8811
hace 1 h
Diego S.
•••• 0193
55 56 $30.000 (esp. $60.000) Archivo repetido 22 h 59 m
RF01-8795
hace 25 h
Sandra P.
•••• 4412
19 Sin comprobante Liberada
Alerta automática

RF01-8811: el monto no cuadra con los números apartados y el archivo tiene el mismo hash que RF01-8802. El sistema no deja confirmar sin que registres el motivo.

Al confirmar

Los números pasan de reservado a vendido dentro de una transacción, sin vuelta atrás, y sale el correo de confirmación al comprador.

Al vencer

El cron de cPanel corre cada minuto: libera los números, marca la reserva como vencida y deja el registro. Nada se borra.

Formas de pago

Se muestran al comprador en el orden que definas

Bre-B

Principal
Llave
@rifazo
QR
Cargado · 12 ago

Nequi

Activa
Destino
300 481 2277

Enviar y adjuntar captura. Respaldo por si el comprador no usa Bre-B.

Wompi

Sin configurar

Pasarela con confirmación automática por webhook: tarjeta, PSE y Nequi. La interfaz ya existe; solo faltan las llaves.

Cuando llegues a varios sorteos en paralelo, esto deja de ser opcional.

NombreTipoDestinoOrdenEstado
Bre-BManual · QR + llave@rifazo1Activa
NequiManual300 481 22772Activa
DaviplataManual311 902 44153Inactiva
BancolombiaManual•••• 44714Inactiva
WompiPasarela5Sin configurar
Nota de arquitectura

Las formas de pago son datos, no código. Agregar una es insertar una fila con su tipo, destino, instrucciones y QR: el flujo del comprador no cambia.

Usuarios y roles

Solo el equipo organizador. Los compradores no tienen cuenta.

UsuarioRol2FAÚltimo ingresoEstado
Omar P.
o•••@rifazo.co
SuperadminActivoHoy 08:14Activo
Carolina M.
c•••@rifazo.co
TesoreríaActivoHoy 07:52Activo
Julián R.
j•••@rifazo.co
OperaciónPendiente25 ago 16:30Bloqueado
Marcela T.
m•••@rifazo.co
Solo lecturaActivo12 jul 09:05Inactivo
Qué puede hacer cada rol
  • Superadmin — todo, incluido crear usuarios y cambiar roles.
  • Tesorería — validar y rechazar compras, ver reportes de recaudo.
  • Operación — crear y editar sorteos, enviar campañas. No toca pagos.
  • Solo lectura — ve todo, no modifica nada.
Regla dura

Los usuarios se inactivan, nunca se borran: sus acciones en la bitácora deben seguir siendo atribuibles. Y un superadmin no puede inactivarse a sí mismo ni quedar como el único activo.

Ajustes · Canal WhatsApp

WhatsApp Business

Todo parametrizable desde aquí, sin tocar código. Hoy el MVP funciona con enlaces wa.me; la Cloud API se activa cuando tengas la verificación de Meta.

Modo activo
Enlaces wa.me

Variables disponibles: {{numeros}} {{sorteo}} {{referencia}} {{monto}} {{nombre}}

Cloud API de Meta
Sin configurar

Se habilitan cuando los cuatro campos estén completos y la prueba de conexión pase.

Vista previa del mensaje
Rifazo
Listo, Laura. Confirmamos tu pago de $90.000.

Tus números para Anillo en oro 18 k: 07 42 88

Juega el 5 de septiembre con la Lotería de Bogotá. Mucha suerte.
10:42 a.m.
Lo que Meta no permite

Con la Cloud API, los mensajes de marketing exigen plantilla aprobada y consentimiento verificable por número. Mandar promoción en frío a una lista es la vía rápida a que te suspendan el número. Para captar nuevos compradores el canal es el botón de compartir, no el envío masivo.

Por qué wa.me en el MVP

Cero trámite, cero costo por mensaje y funciona hoy. Lo que pierdes es el envío automático: el comprador toca un botón en lugar de recibir el mensaje solo. Las notificaciones automáticas del MVP salen por correo.

Plantillas de notificación

Un solo catálogo de disparadores. Cada uno decide si sale por correo, por WhatsApp o por los dos.

PlantillaCuándo se disparaCorreoWhatsAppEstado
Sorteo activado
sorteo_nuevo
Al publicar un sorteoOnCompartirActiva
Reserva creada
reserva_creada
Al apartar númerosOnEnlaceActiva
Recordatorio a las 20 h
reserva_recordatorio
80% del plazo sin pagoOnEnlaceActiva
Reserva vencida
reserva_vencida
Al liberar el númeroOnActiva
Pago confirmado
pago_confirmado
Al validar en el panelOnEnlaceActiva
Pago rechazado
pago_rechazado
Al rechazar un comprobanteOnActiva
Últimas boletas
sorteo_por_cerrar
Manual · campañaOnCompartirSolo correo
Resultado del sorteo
resultado_sorteo
Al registrar el actaOnEnlaceActiva
Cómo leer la columna WhatsApp

Enlace = el correo y la pantalla incluyen un botón wa.me. Compartir = botón para que el comprador reenvíe el sorteo a sus contactos. Cuando actives la Cloud API estas pasan a On con plantilla aprobada.

Cola de envíos

Cada notificación entra a una tabla notif_queue y el cron de cPanel la despacha cada minuto con reintentos. Si tu hosting limita correos por hora, la cola respeta el tope en lugar de perder mensajes.

Propuesta técnica · v2

PHP puro, MySQL y un cron

Ajustado a lo que tu hosting con cPanel realmente soporta, y a las tecnologías que mantienes tú.

Stack
CapaElecciónPor qué
ServidorPHP 8.2+ · ApacheLo que trae cPanel. Sin Composer ni dependencias externas obligatorias.
EstructuraFront controller + MVC ligeroUn index.php enruta, controladores en /app, vistas en /views. Nada mágico que no puedas leer.
Base de datosMySQL 8 / MariaDB · PDOConsultas preparadas siempre. Se crea desde el asistente de cPanel.
FrontendBootstrap 5.3 + JS vanillaBootstrap local (no CDN) más rifazo.css con los tokens de este prototipo.
Tareas programadasCron de cPanel · cada minutophp cron/tick.php libera reservas vencidas y despacha la cola de correos.
CorreoSMTP autenticado del dominioCuenta del cPanel con SPF y DKIM. Sin mail() a pelo, que cae en spam.
WhatsAppwa.me · Cloud API opcionalEnlaces hoy; credenciales de Meta parametrizables en el panel.
ArchivosFuera de public_htmlComprobantes en /storage con .htaccess denegando todo, servidos por un PHP que valida sesión.
TLSAutoSSL de cPanelLet's Encrypt automático, con redirección forzada a HTTPS.
El costo de "PHP puro"

Sin framework, cosas que Laravel te daría gratis las escribo a mano: enrutado, CSRF, sesiones seguras, migraciones y plantillas. Es perfectamente mantenible y tú lo entiendes, pero la seguridad depende de que ese código esté bien hecho, no de una librería probada por miles. Lo compenso con un archivo único de helpers de seguridad que toda página incluye de entrada.

Estructura de carpetas en cPanel
/home/usuario/
├── rifazo/                      ← fuera de public_html, no accesible por web
│   ├── app/                     Controladores y modelos
│   ├── views/                   Plantillas PHP
│   ├── lib/                     db.php · security.php · mailer.php · wa.php
│   ├── storage/comprobantes/    Subidas (con .htaccess Deny from all)
│   ├── cron/tick.php            Corre cada minuto
│   └── config.php               Credenciales · CHMOD 600, fuera de la web
└── public_html/
    ├── index.php                Front controller (require ../rifazo/app)
    ├── admin.php                Front controller del panel
    ├── assets/                  bootstrap.min.css · rifazo.css · app.js
    └── .htaccess                HTTPS forzado, cabeceras, sin listado
El problema difícil: dos personas, un mismo número

Con reservas de 24 horas y confirmación humana, la única forma de no vender dos veces el mismo número es que MySQL lo impida, no el PHP.

-- Un número por sorteo, garantizado por el motor
CREATE TABLE boleta (
  id             INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  sorteo_id      INT UNSIGNED NOT NULL,
  numero         SMALLINT UNSIGNED NOT NULL,
  estado         ENUM('libre','reservado','vendido') NOT NULL DEFAULT 'libre',
  pedido_id      INT UNSIGNED NULL,
  reservado_hasta DATETIME NULL,
  UNIQUE KEY uq_sorteo_numero (sorteo_id, numero),
  KEY ix_expira (estado, reservado_hasta),
  CONSTRAINT fk_b_sorteo FOREIGN KEY (sorteo_id) REFERENCES sorteo(id)
) ENGINE=InnoDB;

-- Apartar: transacción con bloqueo de fila
$db->beginTransaction();
$st = $db->prepare(
  "SELECT id FROM boleta
    WHERE sorteo_id = ? AND numero IN (?,?,?)
      AND (estado = 'libre'
           OR (estado = 'reservado' AND reservado_hasta < NOW()))
    ORDER BY numero
    FOR UPDATE");                  // ← serializa a los compradores simultáneos
// si devuelve menos filas de las pedidas → rollback y avisar "ya lo tomaron"
$db->prepare("UPDATE boleta SET estado='reservado', pedido_id=?,
                reservado_hasta = NOW() + INTERVAL 24 HOUR
               WHERE id IN (...)")->execute();
$db->commit();
Por qué así

UNIQUE(sorteo_id, numero) hace imposible duplicar un número aunque falle todo lo demás. FOR UPDATE serializa a dos compradores que tocan el mismo número en el mismo segundo, y ORDER BY numero evita interbloqueos entre pedidos que se cruzan. La reserva vencida se recicla en la misma consulta: si el cron se cae, la venta no se detiene.

Modelo de datos
usuario        id, email, pass_hash(bcrypt), rol, totp_secret_enc, activo, creado_en
sorteo         id, codigo, nombre, descripcion, condiciones, inicio, fin,
               num_desde, num_hasta, valor_boleta, horas_reserva,
               loteria, fecha_loteria, cifras, regla_no_vendida,
               estado, creado_por
sorteo_foto    id, sorteo_id, archivo, orden
boleta         id, sorteo_id, numero, estado, pedido_id, reservado_hasta   ← tabla caliente
comprador      id, cel_hash, cel_enc, nombre_enc, email_enc, depto, ciudad,
               consent_en, consent_ip, consent_version
pedido         id, codigo, sorteo_id, comprador_id, medio_pago_id, monto,
               estado(pendiente|confirmado|rechazado|vencido),
               comprobante, comprobante_sha256, canal_comprobante(web|whatsapp),
               validado_por, validado_en, motivo_rechazo, reservado_hasta
medio_pago     id, nombre, tipo(manual|pasarela), destino, qr_archivo,
               instrucciones, activo, orden
plantilla      id, clave, canal(email|whatsapp), asunto, cuerpo, activa
notif_queue    id, plantilla_id, pedido_id, destino_hash, intentos,
               estado, error, programado_para, enviado_en
bitacora       id, usuario_id, accion, entidad, entidad_id,
               antes_json, despues_json, ip, ua, creado_en
ajuste         clave, valor_enc          ← credenciales de Meta, SMTP
departamento   codigo, nombre       ciudad  codigo, depto_codigo, nombre

Los campos _enc van cifrados con openssl_encrypt AES-256-GCM y la llave en config.php fuera de la web. cel_hash permite buscar por celular sin descifrar la tabla entera.

Qué hace el cron cada minuto
  1. Libera las boletas cuya reserva venció: estado='libre', pedido a vencido, registro en bitácora.
  2. Encola el recordatorio de las 20 horas para los pedidos que llegaron al 80% del plazo sin comprobante.
  3. Despacha hasta N correos de notif_queue respetando el límite por hora del hosting, con reintento exponencial.
  4. Cierra los sorteos cuya fecha de fin ya pasó y avisa al organizador.
# Cron Jobs de cPanel · cada minuto
* * * * * /usr/local/bin/php /home/usuario/rifazo/cron/tick.php >> /home/usuario/rifazo/cron/tick.log 2>&1
Detalle que muerde

El cron tiene que ser reentrante: si una corrida se demora más de un minuto, la siguiente arranca encima. Se resuelve con un lock por archivo (flock) al inicio de tick.php. Sin eso, un correo puede salir dos veces.

Seguridad y cumplimiento
Aplicación
  • PDO con consultas preparadas siempre; cero SQL concatenado
  • Validación en servidor de todo dato, no solo en el navegador
  • password_hash con bcrypt y TOTP obligatorio en el panel
  • Sesiones con httponly, secure, samesite=Lax y regeneración al ingresar
  • Token CSRF por formulario, verificado en cada POST
  • Escape de salida con htmlspecialchars en todas las vistas
  • Límite de intentos por IP y por celular en apartar, consultar e ingresar
  • Comprobantes: validación por magic bytes y no por extensión; nunca ejecutables
  • Cabeceras CSP, HSTS, X-Content-Type-Options, Referrer-Policy en .htaccess
  • Bitácora con antes y después de toda acción administrativa
Cumplimiento
  • Autorización de datos guardada con fecha, IP y versión del texto aceptado
  • Minimización: sin dirección salvo al ganador
  • Canal para acceso, rectificación y supresión de datos
  • Retención definida y borrado de datos de sorteos cerrados
  • Términos versionados: se registra qué versión aceptó cada comprador
  • Piloto marcado como privado por invitación, con noindex mientras no haya permisos
  • Respaldo diario de la BD desde cPanel, descargado fuera del hosting
Antes de escribir código

Estado de las decisiones

Lo que quedó cerrado con tus aclaraciones y lo que sigue abierto.

TemaDefiniciónEstado
Medio de pagoBre-B con QR y llave como principal; Nequi de respaldo. Todo manual.Cerrado
ComprobanteDos rutas: subida en el checkout o envío por WhatsApp al organizador.Cerrado
Reserva24 h de bloqueo · recordatorio automático a las 20 h · liberación a las 24 h. Va en las condiciones de todo sorteo.Cerrado
GanadorLotería nacional elegida al crear el sorteo, con fecha y cifras a comparar.Cerrado
WhatsAppEnlaces wa.me en el MVP; credenciales de Cloud API parametrizables en el panel.Cerrado
Stack y hostingPHP puro + MySQL + Bootstrap sobre cPanel de BanaHosting.Cerrado
DevolucionesPor WhatsApp con el organizador. Falta la contraparte en el sistema: anular un pedido con motivo y liberar los números deja rastro; sin eso el dinero devuelto no queda registrado en ninguna parte.Parcial
Permisos de rifaSin autorización en el piloto, por decisión tuya. Vender boletas con dinero real sigue siendo una rifa aunque sea entre conocidos: no hay exención por grupo cerrado.Riesgo asumido
Dominio y correoFalta definir el dominio para configurar SPF, DKIM y el remitente de los correos.Abierto
Plan de construcción
  1. Fase 1 — Base de datos, ingreso con 2FA, CRUD de sorteos y formas de pago con QR.
  2. Fase 2 — Página pública, grilla de números y reservas de 24 h con el cron liberando. Con esto ya se puede vender el anillo.
  3. Fase 3 — Validación de compras, correos transaccionales y enlaces de WhatsApp.
  4. Fase 4 — Registro del acta del sorteo, anulaciones con motivo y pantalla de ganadores.
  5. Fase 5 — Cloud API de WhatsApp y pasarela, cuando el volumen lo pida.
La cuenta que no cierra

50 sorteos en paralelo de 100 boletas son 5.000 validaciones manuales, cada una con ventana de 24 h y comprobantes entrando por dos canales. El cuello de botella no va a ser el software: va a ser la persona revisando. Para el anillo vas bien; a partir del tercer o cuarto sorteo simultáneo la pasarela deja de ser opcional.

Sobre los permisos

Puedo construir todo sin esperar la autorización, y el piloto queda marcado como privado por invitación con noindex. Antes de abrirlo al público hay que sacar los permisos.