OpoSAS: preparando oposiciones con Flutter
Preparar unas oposiciones es un proceso largo y exigente. Meses —a veces años— de estudio para un examen que puede marcar tu carrera entera. En el caso del SAS (Servicio Andaluz de Salud), categorías como TCAE o Celador tienen temarios extensos y un nivel de competencia alto. Y la mayoría de las herramientas disponibles son PDFs descargados, Excel caseros o plataformas web que no funcionan bien en el móvil.
OpoSAS empezó como un proyecto personal para ayudar a mi pareja a preparar sus oposiciones. Lo que iba a ser una app sencilla fue tomando forma, le vi el potencial y decidí lanzarla al mercado.
Qué hace la app
La parte fuerte de OpoSAS es la realización de tests. Puedes elegir entre diferentes modos: simulación de exámenes, tests sobre temas concretos, sobre partes del temario, o sobre las preguntas en las que más fallos has cometido. Tiene también un dashboard completo de estadísticas donde ver tu evolución y en qué puntos debes hacer más hincapié.
Otras funcionalidades destacadas:
- Preguntas favoritas — Marcas las que quieres revisar, las tienes en un sitio.
- Notas por pregunta — Puedes añadir anotaciones personales directamente sobre cada pregunta.
- Asistente de IA — Un chat integrado para resolver dudas sin salir de la app.
- Modo invitado — Alguien puede probar la app sin crear una cuenta.
La app tiene dos niveles: gratuito con anuncios y Premium. Los usuarios Premium tienen acceso completo a todos los exámenes, más cuota de IA y funcionalidades extra. Las suscripciones van por RevenueCat, que abstrae las compras de App Store y Play Store.
La tecnología
OpoSAS está construida con Flutter, lo que significa que iOS y Android comparten la misma base de código. La arquitectura sigue Clean Architecture estricta: cuatro capas (Presentación, Aplicación, Dominio, Infraestructura) con dependencias siempre apuntando hacia adentro.
Para el estado, solo Bloc. Sin Provider, sin Riverpod. La inyección de dependencias es manual —sin get_it— lo que fuerza a ser explícito sobre qué necesita cada componente.
El backend corre sobre Supabase (PostgreSQL con migraciones versionadas). Uso feature flags para controlar funcionalidades en producción sin tocar el código —por ejemplo, dar 30 días de Premium gratis a usuarios nuevos.
Es un monorepo con varios paquetes compartidos entre la app de usuarios y la app de administración: el SDK de la API, los modelos de dominio, la galería de componentes, los repositorios…
El 100% del código tiene cobertura de tests, tanto en los paquetes compartidos como en las dos apps. Para eso combino unit tests, widget tests y golden tests con Alchemist. Los flujos de extremo a extremo los cubro con Maestro, lo que me permite validar los recorridos críticos del usuario en dispositivo real.
El proyecto admin
OpoSAS tiene también una app de administración separada, también en Flutter. Desde ahí gestiono las preguntas, los códigos de regalo, las estadísticas de usuarios y la configuración de la plataforma. Tener todo en el mismo monorepo hace que compartir código entre las dos apps sea directo.
Dónde descargarla
Disponible para iOS y Android en oposas.xyz. Si estás preparando oposiciones para el SAS, puedes descargarla directamente en Google Play o en el App Store y probarla sin necesidad de cuenta con el modo invitado.