← Volver a proyectos

Proyecto

Nauti Test Pro

PWA full-stack para preparación de exámenes náuticos. Construida, desplegada y operada en solitario — cubriendo diseño de producto, backend, pagos e infraestructura desde el inicio.

En producción Producto propio — en producción Fundador e Ingeniero (Full Stack — Producto, Backend, Infraestructura) Público

Proyecto propio. En producción en nautitestpro.com desde febrero de 2025.

Stack

Vue 3Ionic 7Capacitor (iOS/Android)TypeScriptViteFirebase HostingFirestoreFirebase AuthCloud FunctionsStripeResendWorkbox (PWA)GA4SentryGCP

Impacto

  • Desarrollé y mantuve una plataforma SaaS en producción en solitario, cubriendo cada capa desde la UI hasta la infraestructura cloud.
  • Monetización por tokens integrada con Stripe Checkout y webhooks, con historial de pagos por usuario.
  • PWA con service worker Workbox — instalable en iOS y Android sin depender de ninguna tienda de apps.
  • SMS MFA (autenticación multifactor de Firebase) aplicada en el login, con enrolamiento por usuario e incentivo de tokens.
  • Banco de preguntas encriptado con scripts AES de pre-build para proteger el contenido propietario del examen.
  • Dashboard de administración con mensajería broadcast, seguimiento de lectura por usuario, gestión de tokens y métricas de adopción de PWA.
  • Audité los bancos de preguntas contra la normativa fuente y apliqué 29 de 37 correcciones documentadas — 134 ediciones sobre seis bancos en inglés y sus seis gemelos en español. En preparación de exámenes, una clave equivocada enseña lo equivocado.

Lo que hice

  • Motor de tests con evaluaciones cronometradas, sets aleatorios, feedback por pregunta e historial de resultados.
  • Economía de tokens: los usuarios ganan tokens verificando correo y SMS, y compran más vía Stripe.
  • Cloud Functions manejan webhooks de Stripe, otorgamiento de tokens, validación de MFA y mensajes de bienvenida automáticos.
  • Emails transaccionales (reseteo de contraseña, verificación de correo) enviados vía Resend con plantillas HTML personalizadas.
  • Seguimiento de instalación PWA por usuario (isPWA / hasEverUsedPWA / platform) almacenado en Firestore y visible en el dashboard.
  • Dominio propio (nautitestpro.com) con Firebase Hosting, Google Search Console, sitemap y meta tags SEO.
  • Reglas de seguridad de Firestore que fuerzan escrituras solo de admin en subcolecciones sensibles.
  • Dos correcciones se rechazaron a propósito en vez de aplicarse: una habría roto una pregunta que ya estaba bien, y otra citaba una opción que no existía bajo STCW VIII/1, así que se reescribió la opción en lugar de mover la clave.
  • Toda la identidad visual se genera desde un único vector — favicon, íconos de PWA, splash, logo de correo, BIMI, imágenes para redes y el logo en Stripe —, lo que sustituyó cuatro marcas desincronizadas y un PNG de 2.2 MB que no se podía poner sobre ningún fondo.

Arquitectura

  • SPA Vue 3 + Ionic, build con Vite, desplegada en Firebase Hosting con PWA (Workbox autoUpdate)
  • Firestore: subcolecciones members/{uid}, messages, tokenLogs, payments, userLogs
  • Firebase Auth con email/contraseña + SMS MFA (enrolamiento multifactor por usuario)
  • Cloud Functions (Node.js): webhook Stripe, otorgamiento de tokens (bonus email/teléfono), triggers de ciclo de vida de miembros, envío de emails vía Resend
  • Sesiones de Stripe Checkout creadas server-side; webhook fulfills saldo de tokens atómicamente vía transacción Firestore
  • Script de encriptación pre-build (AES) empaqueta el banco de preguntas como .encrypted.ts — desencriptado client-side en tiempo de ejecución

Etiquetas

PWASaaSFirebaseStripeEducationMobileFull Stack