Skip to content

paskuvan/cuncuna

Repository files navigation

Cuncuna

Aprende Lengua de SeΓ±as Chilena, de seΓ±a en seΓ±a

Plataforma gamificada para personas oyentes que quieren aprender LSCh

Next.js React Tailwind CSS Supabase

Status Made in Chile Audience


Sobre el proyecto

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"


Stack

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

Funcionalidades implementadas

  • 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.

Estado del MVP

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.

Instalacion

Requisitos

  • Node.js 18 o superior.
  • npm.
  • Proyecto en Supabase.
  • Google OAuth configurado en Supabase Auth.

Pasos

git clone https://github.com/paskuvan/cuncuna.git
cd cuncuna
npm install
cp .env.local.example .env.local
npm run dev

Abre http://localhost:3000.

Variables de entorno

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>

Lista de espera por correo

La pagina publica esta en:

/lista-espera

El formulario guarda cada email en la tabla waitlist de Supabase mediante:

/api/waitlist

Si quieres recibir un aviso en tu correo por cada nuevo registro:

  1. Crea una cuenta en Resend.
  2. ObtΓ©n una API key.
  3. 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>
  1. 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.


Supabase

El proyecto usa:

  • Supabase Auth para login con Google.
  • PostgreSQL con RLS para datos de usuario.
  • Supabase Storage para buckets videos y posters.
  • Tabla admin_users para controlar acceso al panel admin.
  • Tabla contenido_senas para contenido subido desde el panel.

Migraciones actuales:

supabase/migrations/20260708_panel_contenido.sql
supabase/migrations/20260708_lectura_contenido_publicado.sql

Para 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;

Estructura

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.json

CurrΓ­culum

El 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.


Planes

El control de acceso actual esta centralizado en:

app/lib/acceso-plan.js

Por ahora usa la seleccion local de:

app/lib/seleccion-plan-local.js

Cuando Mercado Pago este conectado, este helper debe leer el estado real de suscripcion desde Supabase.


Comandos

npm run dev
npm run lint
npm run build

Privacidad y camara

La 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.


Contribuir

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.

Creditos

  • DiseΓ±o y desarrollo: Majo Paskuvan.
  • Marca: CΓ³diseΓ±as.
  • Inspiracion: Duolingo, con identidad chilena propia.
  • Audiencia: personas oyentes que quieren aprender LSCh.

Hecho en Santiago, Chile

Cuncuna es parte de CΓ³diseΓ±as.

codisenas.com Β· Contacto

About

πŸ› Aprende LSCh paso a paso

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors