Plataforma gamificada para personas oyentes que quieren aprender LSCh
Cuncuna es una app educativa tipo Duolingo para aprender Lengua de SeΓ±as Chilena (LSCh). EstΓ‘ pensada para personas oyentes que quieren iniciar una ruta de aprendizaje visual, progresiva y respetuosa.
El contenido debe ser creado o validado junto a personas sordas, docentes de LSCh o usuarios nativos de la lengua.
"De seΓ±a en seΓ±a"
| Categoria | Tecnologia |
|---|---|
| Framework | Next.js 16 App Router |
| UI | React 19 + Tailwind CSS 4 |
| Auth | Supabase Auth con Google OAuth |
| Base de datos | Supabase PostgreSQL + RLS |
| Storage | Supabase Storage para videos y posters |
| Iconos | Lucide React |
| Tipografia | Fuentes del sistema, sin dependencia de Google Fonts |
- Autenticacion con Google mediante Supabase.
- Landing publica con planes Gratis, Plus y Familia.
- Flujo de seleccion de suscripcion en
/suscripcion. - Control de acceso por plan:
- Gratis: introduccion y primeras lecciones.
- Plus/Familia: curso completo.
- Mapa de aprendizaje con niveles, XP y racha.
- Lecciones con video, texto, quiz, verdadero/falso, ordenar, match y completar.
- Diccionario visual filtrado por plan.
- Repaso inteligente con repeticion espaciada.
- Mis errores.
- Misiones diarias.
- Estadisticas.
- Conversaciones guiadas.
- Favoritos.
- Practica con camara local, sin grabar ni subir video.
- Onboarding personalizado en
/app/onboarding. - Perfil de usuario en
/app/perfil. - Recordatorios locales en
/app/recordatorios. - Modo oscuro.
- Boton global para volver arriba.
- Panel admin de contenido en
/app/admin. - Carga de videos/posters a Supabase Storage desde admin.
- Flujo de borrador, vista previa y publicacion de contenido.
- Paginas legales:
- Terminos y condiciones.
- Politica de privacidad.
- Politica de cancelacion y reembolsos.
- Soporte.
- PWA/service worker preparado para cache y push futuro.
La app ya tiene la mayoria de la experiencia funcional. Antes de produccion faltan principalmente:
- Integrar pagos reales con Mercado Pago.
- Guardar el estado real de suscripcion en Supabase.
- Cambiar el acceso por plan desde localStorage a Supabase/Mercado Pago.
- Sincronizar datos locales: favoritos, errores, misiones, recordatorios, onboarding y repaso.
- Subir videos reales de LSCh.
- Revisar textos legales con un abogado en Chile antes de cobrar.
- Probar exhaustivamente en mobile, modo oscuro y navegadores principales.
- Node.js 18 o superior.
- npm.
- Proyecto en Supabase.
- Google OAuth configurado en Supabase Auth.
git clone https://github.com/paskuvan/cuncuna.git
cd cuncuna
npm install
cp .env.local.example .env.local
npm run devAbre http://localhost:3000.
NEXT_PUBLIC_SUPABASE_URL=https://tu-proyecto.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=tu_anon_key
# Opcional: notificar al correo admin por cada registro en lista de espera.
RESEND_API_KEY=re_xxxxxxxxx
WAITLIST_NOTIFY_TO=tu-correo@gmail.com
WAITLIST_NOTIFY_FROM=Cuncuna <onboarding@resend.dev>La pagina publica esta en:
/lista-esperaEl formulario guarda cada email en la tabla waitlist de Supabase mediante:
/api/waitlistSi quieres recibir un aviso en tu correo por cada nuevo registro:
- Crea una cuenta en Resend.
- ObtΓ©n una API key.
- Agrega estas variables a
.env.local:
RESEND_API_KEY=re_xxxxxxxxx
WAITLIST_NOTIFY_TO=tu-correo@gmail.com
WAITLIST_NOTIFY_FROM=Cuncuna <onboarding@resend.dev>- Reinicia el servidor con
npm run dev.
Si esas variables no existen, la lista de espera igual seguirΓ‘ guardando emails en Supabase, pero no enviarΓ‘ aviso por correo.
El proyecto usa:
- Supabase Auth para login con Google.
- PostgreSQL con RLS para datos de usuario.
- Supabase Storage para buckets
videosyposters. - Tabla
admin_userspara controlar acceso al panel admin. - Tabla
contenido_senaspara contenido subido desde el panel.
Migraciones actuales:
supabase/migrations/20260708_panel_contenido.sql
supabase/migrations/20260708_lectura_contenido_publicado.sqlPara dar acceso admin:
insert into public.admin_users (user_id)
select id
from auth.users
where email = 'TU_CORREO@gmail.com'
on conflict (user_id) do nothing;cuncuna/
βββ app/
β βββ app/
β β βββ admin/
β β βββ conversaciones/
β β βββ diccionario/
β β βββ errores/
β β βββ estadisticas/
β β βββ favoritos/
β β βββ logros/
β β βββ misiones/
β β βββ onboarding/
β β βββ perfil/
β β βββ practica/
β β βββ recordatorios/
β β βββ repaso/
β β βββ page.jsx
β βββ components/
β βββ data/
β βββ hooks/
β βββ legal/
β βββ lib/
β βββ login/
β βββ soporte/
β βββ suscripcion/
β βββ layout.jsx
β βββ page.jsx
βββ public/
βββ supabase/migrations/
βββ package.jsonEl contenido vive en app/data/curriculum.js.
Estructura actual:
- Nivel 0: Introduccion a la LSCh.
- Nivel 1: Fundamentos.
- Nivel 2: Vida cotidiana.
- Nivel 3: Conversacion.
El curso completo referencia cerca de 85 videos. Para un MVP de produccion conviene partir con 15 a 20 videos reales del Nivel 1, bien grabados y validados.
El control de acceso actual esta centralizado en:
app/lib/acceso-plan.jsPor ahora usa la seleccion local de:
app/lib/seleccion-plan-local.jsCuando Mercado Pago este conectado, este helper debe leer el estado real de suscripcion desde Supabase.
npm run dev
npm run lint
npm run buildLa practica con camara es local:
- No graba video.
- No sube imagenes.
- No analiza con IA.
- La camara se activa solo cuando el usuario lo solicita.
Esto es importante para mantener confianza y privacidad, especialmente durante practica de expresiones faciales y seΓ±as.
Cuncuna debe crecer con respeto por la LSCh y por las personas sordas. Aportes utiles:
- Validacion linguistica y cultural.
- Videos reales de seΓ±as.
- Mejoras de accesibilidad.
- Pruebas en dispositivos moviles.
- Integracion de pagos y sincronizacion en Supabase.
- DiseΓ±o y desarrollo: Majo Paskuvan.
- Marca: CΓ³diseΓ±as.
- Inspiracion: Duolingo, con identidad chilena propia.
- Audiencia: personas oyentes que quieren aprender LSCh.