Datos de ejemplo Las cifras de disponibilidad, los incidentes, las fechas y los correos de esta página son inventados para mostrar cómo se leen las piezas. Ningún número corresponde a la operación real de Mogos.
Dos ausencias, un mismo problema 01 · Por qué ahora

La plataforma ya sabe quién entra y qué mueve — lo que no tiene es fricción para las máquinas en la entrada, ni una voz propia para el día en que algo falla. Las dos ausencias erosionan lo mismo: la confianza. Por eso viajan en un solo ship.

La puerta

Cualquiera puede tocar el timbre mil veces

Registro, login y recuperación no distinguen a una persona de un script. Un bot puede probar contraseñas filtradas toda la noche — y cada OTP por WhatsApp que dispara cuesta dinero real, mensaje a mensaje. El candado existe en Supabase; solo está sin echar.

La ventana

«¿Está caído?» hoy se responde a mano

Sin un lugar público que lo diga, cada caída se vuelve conversación: el cliente pregunta por WhatsApp, el equipo investiga, responde uno a uno y nadie guarda la historia. La confianza se gasta dos veces — cuando falla el sistema y cuando falla la respuesta.

Decisión · un solo ship

Proteger la entrada y dar la cara cuando algo falla son la misma obra: la plataforma que se toma en serio a sus usuarios. El cerrojo es de Supabase + Turnstile (sección 02) y el pulso es un Worker de Cloudflare (sección 03) — cero servicios pagos nuevos, cero servidores que cuidar.

El cerrojo: Turnstile en cada puerta 02 · Pruébalo — haz clic en el widget

Supabase trae la protección de fábrica: se enciende por proyecto y, desde ese momento, toda llamada pública de auth debe traer un token de captcha. El widget clásico — el recuadro visible de «Confirma que eres humano» — vive al pie del formulario. Y como nuestras apps web nunca hablan con Supabase desde el navegador, el token viaja como un argumento más hasta la server action:

Widget en el navegadoremite el token Server actionoptions.captchaToken Supabaseverifica con Cloudflare Sesióncomo siempre
supabase.com/dashboard · Authentication → Attack Protection Datos de ejemplo
Bot and Abuse Protection
Enable Captcha protection
Protect authentication endpoints from bots and abuse.
Choose Captcha Provider
Turnstile by Cloudflare
Captcha secret
Obtain this secret from the provider.
••••••••••••Reveal
How to set up Turnstile?

Ese es todo el lado de Supabase: el toggle de tu screenshot, con Turnstile elegido en lugar de hCaptcha y el secret que entrega Cloudflare al crear el sitio. La site key hermana vive en el frontend, junto al widget. Y como Supabase son dos proyectos, el cerrojo se ensaya en dev antes de echarse en producción.

Las superficies: portal del cliente (login, registro, recuperación, OTP por WhatsApp y activación de cuentas v1), admin y portal de agentes (login y recuperación). El portal de pagos no tiene login — el captcha no lo toca.

v2.mogosgroup.com/login Datos de ejemplo

Inicia sesión

Bienvenido de vuelta. Tu carga te espera.

maria@ferreteriapaez.com
●●●●●●●●●●

El botón se enciende cuando el widget verifica.

¿Olvidaste tu contraseña?
01 · Al cargar
Confirma que eres humanoUn clic — sin puzzles

El widget espera un clic y el submit duerme. Para lectores de pantalla es una casilla de verificación.

02 · Verificando
Verificando…Un momento

Cloudflare decide en segundos y casi nunca muestra un puzzle — esa es la ventaja sobre hCaptcha.

03 · Verificado
CorrectoPuedes continuar

El token emitido viaja con el submit hasta la server action y muere a los pocos minutos.

04 · Token expirado
Vuelve a verificarEl token venció

Si el usuario se distrae, el widget se reinicia solo y el botón vuelve a dormirse — sin recargar la página.

Decisión · el interruptor es global

Encender «Enable captcha protection» afecta todas las llamadas públicas de auth del proyecto, vengan de donde vengan: las tres webs, las cuatro apps móviles que hoy golpean a Supabase directo con usuario y contraseña, y hasta el OAuth del MCP en el API. No es una palanca — es un cutover. La sección 05 ordena el encendido y lo ensaya primero en el proyecto dev de Supabase.

Decisión · el registro por WhatsApp no se toca

El magic link del bot se genera del lado del servidor con service role (admin.generateLink) — y los flujos administrativos no pasan por captcha. La puerta favorita de los clientes queda idéntica: una pregunta, un botón, adentro.

El pulso: status.mogosgroup.com 03 · Pruébalo — apunta a las barras, cambia el escenario

Una página pública que responde sola. El Worker la alimenta minuto a minuto — nadie del equipo la redacta, nadie la olvida. Pasa el cursor por las barras para leer día a día, y cambia el escenario para ver la página el día que algo se cae: el estado global cambia, el incidente se abre solo y el aviso interno ya salió.

Escenario
status.mogosgroup.com Datos de ejemplo
estado del sistema

Todos los sistemas operativos

Actualizado hace 38 s
Incidentes recientes
La página vive en Cloudflare — fuera de Render y de Supabase, a propósito Sonda cada 60 s · historial de 90 días

Los primeros días de cada fila aparecen en gris: la página nace sin historial y no lo inventa — cada barra verde se gana minuto a minuto. Y el incidente que ves en la lista se abrió y se cerró solo, con su duración medida por las sondas, no por la memoria de nadie.

Debajo del capó 04 · Cero servicios pagos, cero servidores nuevos
El motor

Un Worker, un cron, una base

Un Worker de Cloudflare con cron * * * * * sonda cada servicio con timeout corto, escribe el resultado en D1 (~10 mil escrituras al día, contra 100 mil que regala el free tier) y sirve la página y su status.json desde el mismo lugar. No hay nada más que desplegar.

Las sondas

Se monitorea lo que ya existe

El API expone /health/readiness — escrito justo «para consumidores de monitoreo», y verifica la base de datos. Autenticación responde en /auth/v1/health. Los portales se sondan con GET /, igual que Render lo hace hoy. Y el bot, con una sonda de presencia al webhook: responder es estar vivo. Nada que inventar el día uno.

Las alertas

El equipo se entera antes que el cliente

Una falla aislada no grita: hacen falta tres sondas seguidas para abrir un incidente. Al abrirse, sale la plantilla de WhatsApp al equipo y el correo por Postmark — dos canales que ya operan en el API. La recuperación cierra el incidente sola y deja la duración escrita.

El aislamiento

El pulso no vive en el paciente

Cloudflare no comparte nada con Render ni con Supabase: si la plataforma entera se cae, status.mogosgroup.com sigue en pie contando la historia. Es la única pieza de Mogos que vive fuera de la casa — a propósito.

El orden de encendido 05 · Un cutover, no una palanca

El captcha de Supabase se enciende por proyecto y alcanza a todo lo que haga login con la anon key. El orden importa: primero todas las puertas aprenden a llevar el token, después se echa el cerrojo — y el pulso ya está mirando cuando eso pasa.

La tubería web

En las tres apps (cliente, admin, agentes) el token atraviesa formulario → hook → server action y entra en options.captchaToken: login, registro, recuperación, OTP por WhatsApp y activación v1. El widget clásico queda visible al pie de cada formulario.

Las apps móviles

Delivery, cliente móvil y mensajería muestran el widget en un WebView — el patrón oficial de Turnstile para React Native — y pasan el mismo captchaToken. Almacén no usa supabase-js para entrar: a su POST manual solo se le agrega gotrue_meta_security.captcha_token.

El OAuth del MCP

El API hace signInWithPassword sin navegador — con el cerrojo echado quedaría afuera. Antes del switch, ese flujo migra a una página de login con widget, o se decide su retiro. Es el único consumidor que exige una decisión, no un parche.

Ensayo general en dev

El cerrojo se echa primero en el proyecto dev de Supabase — sin tocar producción — y se prueban todas las puertas, incluida la que no debe cambiar: el registro por WhatsApp con su magic link server-side.

Producción, con el pulso ya vivo

status.mogosgroup.com se publica antes del switch. Si el cutover tose, la página lo cuenta en tiempo real — y el estreno del cerrojo queda documentado por el pulso.

Qué NO hacemos 06 · Los límites también se diseñan

No hCaptcha. Puzzles frecuentes y peor trato de datos para el mismo trabajo. Turnstile verifica sin fricción y Supabase lo soporta igual de nativo.

No captcha invisible. El widget clásico se ve a propósito: es la señal de seguridad pedida. El modo administrado puede venir después sin tocar la tubería.

No captcha dentro de la sesión. Solo las puertas de auth; quien ya entró no vuelve a verlo jamás.

No romper el registro por WhatsApp. El magic link server-side es inmune por diseño — y el ensayo en dev lo verifica antes del switch.

No un SaaS de status ni la página dentro de la plataforma. El pulso no puede vivir en la infraestructura cuya caída debe contar.

No historial inventado ni SLA prometido. La página nace con los días en gris y se gana cada barra verde minuto a minuto.

No suscripción pública en la rebanada 1. Alertas internas primero; el «Suscríbete» del futuro no cambia nada de esta arquitectura.

Confianza · rebanada 1

La confianza se diseña dos veces.

Una vez en la puerta: un cerrojo que los bots no pueden cruzar y las personas casi no notan. Y otra en la ventana: un pulso público que responde «¿está caído?» antes de que alguien lo pregunte. Cero dólares al mes, cero servidores nuevos que cuidar — y toda la casa, web, móvil y bot, entra por el mismo plan.

mogos · diseño · agosto 2026 propuesta interactiva — los datos son de ejemplo