30 may -> 21 jun 2026
De repo vacío a app ciclista de misiones de pago.
Una timeline compartible de decisiones, commits, verificaciones y recortes de producto que dieron forma a BikeQuest entre el 30 de mayo y el 21 de junio de 2026.
El contexto de producto se convirtió en la fuente de verdad
El repo empezó con `BIKE_QUEST_CONTEXT.md`: un marco de producto escrito antes de que la app acumulara funcionalidades.
Commit 5e892ce- Cómo
- Inicializamos el repo, comprobamos la rama y el remote, guardamos el archivo de contexto y subimos el primer commit a `main`.
La idea estática se convirtió en una app Next.js
La primera landing pasó a Next.js, aportando rutas reales, despliegue sencillo y un lugar donde evolucionar el mensaje del producto.
Commit 3116a5f- Cómo
- Mantuvimos una primera implementación ligera: página App Router, CSS global, marca y un punto de entrada público sencillo.
La dirección visual abandonó los códigos de juego retro
BikeQuest encontró una aventura outdoor moderna: adulta, divertida, centrada en badges y alejada de un clon de Strava.
DA prompt and constraints- Cómo
- Comparamos la promesa con el público y descartamos pixel art retro, fantasía, neón gamer y estéticas de gráficos de rendimiento.
Las herramientas de Supabase entraron en el loop de build
Codex se conectó al proyecto Supabase para inspeccionar y verificar la base de datos desde el mismo entorno de trabajo.
Supabase MCP connected- Cómo
- Añadimos el servidor MCP de Supabase, completamos OAuth, verificamos la conexión con controles equivalentes al CLI e instalamos las skills de Supabase.
Llegó el primer loop del MVP
La app recibió su primer flujo de misión, pantallas protegidas, gestión de perfil, revelado de badges y catálogo.
Commits a9ab972 -> e55dc56- Cómo
- Construimos lo mínimo alrededor de la auth de Supabase, perfiles rider, catálogo y desbloqueo de badges antes de añadir funciones comunitarias.
La seguridad se trató como un hito de producto
Una revisión del repo trazó la verdadera frontera de confianza: RLS de Supabase, storage, rutas service-role y pantallas protegidas.
Security review completed- Cómo
- Empezamos por el modelo de amenazas, filtramos archivos generados, revisamos las superficies runtime y validamos cada pista con código y build.
La validación de pruebas entró en el loop principal
Las fotos y capturas de actividad se convirtieron en pruebas del producto, con rutas de validación y después límites de uso.
Commits 785a1c4 and 461e543- Cómo
- Añadimos la ruta de validación, conectamos los requisitos de cada misión y aplicamos límites para proteger el flujo apoyado por IA.
El onboarding móvil y los permisos de perfil se reforzaron
El recorrido inicial se afinó para reducir bloqueos y gestionar los permisos de forma más clara.
Commit 2af3e34- Cómo
- Revisamos auth y onboarding, ajustamos el flujo móvil y alineamos la creación del perfil con las rutas protegidas.
El precio se volvió simple: 19 € una vez
La landing eliminó la falsa urgencia de lanzamiento y adoptó un pago único y claro para acceder a todo BikeQuest.
Commit 49ee484- Cómo
- Primero fijamos el mensaje en tests, después centralizamos el precio en `src/lib/landing.ts` y actualizamos la sección visible.
El progreso pasó de XP a colección
La gamificación se convirtió en álbum: badges desbloqueados, familias completadas y badges visibles aún bloqueados en lugar de niveles y XP.
Commit f5db8e3- Cómo
- Derivamos el progreso del catálogo y `user_badges`, añadimos un helper puro y reutilizamos el cálculo en la app, badges y perfil.
El MVP se simplificó como panel de badges
Today, el feed y el progreso local salieron del loop rider. Misiones y badges se fusionaron en un panel fácil de recorrer.
Badge-first direction- Cómo
- Convertimos los badges en la unidad visual principal, redirigimos pantallas secundarias y centramos el detalle de misión en la prueba.
El panel de misiones y el perfil rider se pulieron
Las tarjetas de misión, acentos naranjas, previews de grupos, tarjetas rider y superficies de compartir hicieron el producto más intencional.
Commits eafecc9 -> deb47f2- Cómo
- Mejoramos las mismas pantallas centrales en vez de añadir otras: panel de misiones, jerarquía de tarjetas, perfil y compartir badges.
Las fotos de perfil se hicieron más ligeras y visibles antes del envío
La subida de avatar ganó una preview local inmediata y conversión WebP en cliente antes de enviar el formulario.
ProfilePhotoInput- Cómo
- Escribimos el test de regresión, extrajimos un pequeño componente cliente, redimensionamos a 640 × 640 con canvas y sustituimos el archivo mediante `DataTransfer`.
Los prompts de validación IA se alinearon con las reglas de producto
Prompts, catálogo, seed, migraciones, documentación y filas activas de Supabase se ajustaron conjuntamente.
Commit 09e7a56- Cómo
- Tras revisar la coherencia sin editar, corregimos Roundabout, Dirt Shortcut, 1H Outside y Quiet Road en cada fuente de verdad.
Las páginas de envío de pruebas se hicieron más claras
El recorrido de prueba se simplificó para que los riders entendieran mejor qué enviar antes de la validación.
Commit e223ee2- Cómo
- Limitamos el cambio al uploader y la pantalla de misión, comprobamos el diff, pasamos los tests y subimos un commit enfocado.
Stripe Checkout convirtió la app en un producto de pago
BikeQuest recibió un pago único real con Stripe, rutas de checkout, webhook y una tabla de acceso pagado.
Commit 1816723- Cómo
- Recuperamos la oferta del repo, creamos producto y precio en Stripe, añadimos las rutas, aplicamos la migración Supabase y verificamos producción.
El sitio público ganó superficies de confianza
Las páginas legales, un header y footer más simples y una navegación pública más clara completaron el lanzamiento.
Commits 6b00eee and cd27485- Cómo
- Mantuvimos el trabajo cerca de las rutas públicas y la estructura de la landing, sin cambiar el loop interno de la app.
Un usuario ficticio verificó todo el recorrido de pago
Una cuenta de prueba con email confirmado, perfil y compra pagada permitió recorrer todas las barreras de acceso.
alexis_test profile- Cómo
- Usamos Supabase Admin desde el entorno del repo, creamos o actualizamos perfil y compra, y verificamos el inicio de sesión y el acceso.
El refuerzo de seguridad y UX cerró las brechas principales
Redirecciones, propiedad de pruebas, likes del feed, intentos pagados y políticas de Supabase se reforzaron y subieron a `main`.
Commits e38f800 and 64b827e- Cómo
- Auditamos las superficies runtime, escribimos tests de esquema, aplicamos la migración y verificamos con tests, lint, build, auditoría y SQL.
El funnel de auth y onboarding se hizo más fluido
Los recorridos de registro, login y onboarding se ajustaron después de implantar el modelo de acceso pagado.
Commit f611ca6- Cómo
- Replanteamos auth alrededor de la secuencia real de rutas en vez de tratar checkout, onboarding y acceso como historias separadas.
La UX de lanzamiento, las tarjetas y el compartir rider se pulieron
El layout de misiones, las tarjetas rider, el conjunto de badges y los objetivos de misión recibieron una última pasada de producto.
Commits 2610fcb -> f8a1509- Cómo
- Seguimos iterando en superficies visibles: copy de auth, objetivos, espacios, contenido de las tarjetas compartidas y presentación del perfil.
La recuperación de cuenta y las promociones completaron el build
Los códigos promocionales de Stripe, la confirmación de auth y el reset de contraseña hicieron el lanzamiento pagado más resistente.
Commits 1d3ed86 and d46ef19- Cómo
- Añadimos estados prácticos que evitan soporte: descuentos, confirmación por email y recuperación de contraseña.