diff --git a/AGENTS.md b/AGENTS.md
index 86893c3..38c64d7 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -4,7 +4,7 @@
This version (16.2.6) has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices.
-# Contexto para asistentes de IA — Plataforma de Programación CETI
+# Contexto para asistentes de IA — Índice Cero
## Qué es esto
Plataforma web para que estudiantes del **CETI Guadalajara** aprendan a programar
diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md
index 16ad460..22111d5 100644
--- a/DEPLOYMENT.md
+++ b/DEPLOYMENT.md
@@ -1,4 +1,4 @@
-# Guía de despliegue — Plataforma de Programación CETI
+# Guía de despliegue — Índice Cero
Esta guía te lleva de cero a tener la plataforma corriendo en producción.
diff --git a/README.md b/README.md
index dba0c2f..59070e2 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Plataforma de Programación CETI
+# Índice Cero
Plataforma para **aprender a programar escribiendo código**, pensada para estudiantes
del **CETI Guadalajara**. Lecciones cortas, un editor con compilador de verdad y retos
diff --git a/prisma/content/courses/bases-de-datos/shared/local-lab-guides.ts b/prisma/content/courses/bases-de-datos/shared/local-lab-guides.ts
index 1962fe9..69dc5b5 100644
--- a/prisma/content/courses/bases-de-datos/shared/local-lab-guides.ts
+++ b/prisma/content/courses/bases-de-datos/shared/local-lab-guides.ts
@@ -13,7 +13,7 @@
export const MYSQL_LOCAL_LAB_GUIDE = `## Laboratorio local: MySQL
-Este bloque requiere **MySQL 8.x** corriendo en tu máquina — el editor web de CPP-CETI sólo ejecuta SQLite, así que esto NO corre ahí.
+Este bloque requiere **MySQL 8.x** corriendo en tu máquina — el editor web de Índice Cero sólo ejecuta SQLite, así que esto NO corre ahí.
1. **Levanta el motor.** Instala \`mysql-server\` con el paquete de tu sistema, o usa un contenedor: \`docker run --name ceti-mysql -e MYSQL_ROOT_PASSWORD=ceti -p 3306:3306 -d mysql:8\`.
2. **Conéctate** con el cliente \`mysql\` (o MySQL Workbench): \`mysql -h 127.0.0.1 -u root -p\`.
@@ -23,7 +23,7 @@ Este bloque requiere **MySQL 8.x** corriendo en tu máquina — el editor web de
export const MONGODB_LOCAL_LAB_GUIDE = `## Laboratorio local: MongoDB
-Este bloque requiere **MongoDB local** — el editor web de CPP-CETI sólo ejecuta SQLite, así que esto NO corre ahí.
+Este bloque requiere **MongoDB local** — el editor web de Índice Cero sólo ejecuta SQLite, así que esto NO corre ahí.
1. **Levanta el motor.** Instala MongoDB Community Server, o usa un contenedor: \`docker run --name ceti-mongo -p 27017:27017 -d mongo:7\`.
2. **Conéctate** con \`mongosh\` (MongoDB Shell): \`mongosh "mongodb://localhost:27017"\`.
diff --git a/prisma/content/unidad-09-archivos.ts b/prisma/content/unidad-09-archivos.ts
index 7de6935..1e0415e 100644
--- a/prisma/content/unidad-09-archivos.ts
+++ b/prisma/content/unidad-09-archivos.ts
@@ -64,7 +64,7 @@ streams, separada de la consola). Para imprimir EN la TERMINAL ya usas
> **Qué puedes probar aquí, y qué no.** Todos los ejemplos y retos de
> esta unidad crean el archivo, escriben, cierran y vuelven a leer **en
> el mismo programa, en una sola ejecución** — eso es exactamente lo que
-> el editor en línea de CPP-CETI puede demostrar. Lo que el editor en
+> el editor en línea de Índice Cero puede demostrar. Lo que el editor en
> línea **no** garantiza es que ese archivo siga ahí para una ejecución
> *distinta* (correr el programa hoy y que otro programa lo lea mañana,
> o volver a correr el mismo reto esperando encontrar lo que dejó la vez
diff --git a/src/app/(auth)/registro/page.tsx b/src/app/(auth)/registro/page.tsx
index 1022823..ec4ec7b 100644
--- a/src/app/(auth)/registro/page.tsx
+++ b/src/app/(auth)/registro/page.tsx
@@ -1,5 +1,7 @@
import Link from "next/link";
+import { UNOFFICIAL_NOTICE } from "@/lib/branding";
+
import { RegisterForm } from "./register-form";
export const metadata = {
@@ -32,8 +34,15 @@ export default function RegisterPage() {
- Al registrarte aceptas que tus datos se usen únicamente para tu
- progreso académico.
+ Al crear tu cuenta, usamos tus datos para tu cuenta, tu progreso
+ académico y mejorar la plataforma, como se explica en el{" "}
+
+ aviso de privacidad
+
+ . {UNOFFICIAL_NOTICE}
diff --git a/src/app/global-error.tsx b/src/app/global-error.tsx
index b2aab7a..9131398 100644
--- a/src/app/global-error.tsx
+++ b/src/app/global-error.tsx
@@ -1,5 +1,7 @@
"use client";
+import { PRODUCT_MARK } from "@/lib/branding";
+
/**
* Last-resort error boundary. Renders its own / because
* it can fire before the root layout renders.
@@ -54,7 +56,7 @@ export default function GlobalError({
>
C++
- CETI
+ {PRODUCT_MARK}
Algo salió mal
diff --git a/src/app/privacidad/page.tsx b/src/app/privacidad/page.tsx
new file mode 100644
index 0000000..ed2c8fd
--- /dev/null
+++ b/src/app/privacidad/page.tsx
@@ -0,0 +1,261 @@
+import Link from "next/link";
+
+import { LandingFooter } from "@/components/landing/footer";
+import { LandingNavbar } from "@/components/landing/navbar";
+import { PRODUCT_NAME, UNOFFICIAL_NOTICE } from "@/lib/branding";
+
+export const metadata = {
+ title: "Aviso de privacidad",
+ description:
+ "Qué datos trata la plataforma, para qué los usa y cómo pedir acceso, corrección o eliminación. Proyecto independiente, no oficial del CETI.",
+};
+
+/**
+ * Describe fielmente lo que el producto YA hace, leído del schema y de los
+ * flujos reales (auth, progreso, analítica, social, feedback) — no una
+ * plantilla legal genérica. Donde falta un dato real (domicilio, correo
+ * dedicado) se deja una marca explícita en vez de inventarlo.
+ */
+export default function PrivacyPage() {
+ return (
+ <>
+
+
+
Legal
+
+ Aviso de privacidad
+
+
+ Última actualización: 13 de septiembre de 2026.
+
+
+
+
+
+ {PRODUCT_NAME} es un proyecto independiente hecho por un solo
+ desarrollador para apoyar a estudiantes del CETI Guadalajara.{" "}
+ {UNOFFICIAL_NOTICE} Este aviso describe, sin
+ relleno legal, qué información recopila el producto realmente,
+ para qué la usa y cómo puedes pedir que la corrijamos o la
+ borremos.
+
+
+
+
+
+ El responsable de esta plataforma y del tratamiento de tus
+ datos es César Manzo Olivares (usuario de GitHub{" "}
+
+ CesarManzoCode
+
+ ), quien la desarrolla y opera de forma independiente. No es
+ una empresa constituida ni una entidad del CETI ni de ninguna
+ institución educativa o gubernamental.
+
+
+ Pendiente: este
+ proyecto no tiene un domicilio fiscal ni de operación
+ publicado. Complétalo aquí manualmente si el CETI u otra
+ autoridad lo requiere para fines de cumplimiento.
+
+
+
+
+
Sólo la que el producto usa de verdad, agrupada por para qué sirve:
+
+
+ Cuenta y autenticación. Nombre, correo,
+ nombre de usuario, contraseña (guardada con hash, nunca en
+ claro) o el enlace con tu cuenta de Google si entras con
+ “Continuar con Google”, foto de perfil y
+ biografía opcionales. El sistema de sesiones guarda además un
+ token de sesión y, por sesión, la dirección IP y el user
+ agent del dispositivo — se usan para mantenerte conectado y
+ detectar accesos anómalos, nunca para analítica de producto.
+
+
+ Identidad académica (opcional). Campus,
+ programa, semestre y grupo, sólo si decides declararlos.
+ Nunca es obligatorio para aprender.
+
+
+ Progreso académico. Qué unidades, lecciones
+ y pasos completaste, tu racha de días, tu XP y tu nivel.
+
+
+ Intentos y actividad de aprendizaje. El
+ código que envías a calificar en un reto o práctica (se
+ guarda el envío calificado, no cada tecla que presionas), si
+ pasó las pruebas, y qué pistas pediste.
+
+
+ Sesiones de estudio. Tiempo activo
+ aproximado por visita a una lección o práctica —pestaña
+ visible y actividad reciente—, no tiempo de pantalla total ni
+ grabaciones de lo que haces.
+
+
+ Analítica de producto. Eventos internos como
+ qué lección viste o en qué paso estás, para entender dónde se
+ atoran los alumnos. No incluye tu IP, tu user agent,
+ grabaciones de pantalla ni las teclas que presionas.
+
+
+ Funciones sociales (opcionales). Amigos,
+ rachas compartidas, invitaciones, kudos y ligas — sólo
+ existen si tú decides usarlas.
+
+
+ Reportes y feedback. Si reportas un error de
+ contenido o mandas retroalimentación desde el botón dedicado,
+ guardamos tu mensaje, tu cuenta y la lección, ejercicio o
+ ruta (sin parámetros de la URL) donde lo enviaste, para darle
+ seguimiento.
+
+
+ Operación y seguridad. Conteos de uso por
+ endpoint (para evitar abuso del compilador) y los registros
+ de servidor necesarios para operar el servicio.
+
+
+
+
+
+
+
Darte acceso a tu cuenta y conservar tu progreso entre sesiones y dispositivos.
+
Compilar y ejecutar el código que envías a un reto o práctica, y calificarlo contra los casos de prueba.
+
Entender qué tan bien funciona el contenido —qué lección confunde, dónde se abandona un curso— para mejorarlo.
+
Darte seguimiento cuando reportas un error o mandas feedback.
+
Prevenir abuso del compilador con límites de envíos.
+
Si activas las funciones sociales, mostrar tu progreso a los amigos que agregaste.
+
+
+
+
+
+
+ El código que envías a un reto o práctica se manda al
+ proveedor de ejecución configurado (hoy, Wandbox) sólo para
+ compilarlo y correrlo contra los casos de prueba; recibe el
+ código y las entradas, no tu identidad.
+
+
+ Si entras con “Continuar con Google”, Google
+ procesa esa autenticación conforme a su propia política.
+
+
+ Si usas “olvidé mi contraseña”, ese correo se
+ envía a través de Resend, el proveedor de correo
+ transaccional del proyecto.
+
+
+ Todo lo demás —progreso, intentos, analítica, datos sociales,
+ reportes— vive únicamente en la base de datos del proyecto y
+ en su infraestructura de hosting. No se vende ni se comparte
+ con terceros para fines comerciales o publicitarios.
+
+
+
+
+
+
+ Mientras tu cuenta exista, conservamos los datos anteriores
+ para que tu progreso no se pierda entre sesiones. Puedes
+ eliminar tu cuenta tú mismo, en cualquier momento, desde{" "}
+
+ tu perfil
+
+ , sin tener que escribirle a nadie. Al hacerlo se borra tu
+ cuenta y, en cascada, tu progreso, intentos, sesiones de
+ estudio, pistas vistas, reportes, feedback y datos sociales —
+ de forma permanente e inmediata. No existe una copia que se
+ restaure después.
+
+
+
+
+
+
+ Acceder a lo que sabemos de ti: tu progreso,
+ tu perfil y tu actividad son visibles directamente en tu
+ cuenta.
+
+
+ Rectificar tu nombre, biografía, foto e
+ identidad académica desde tu perfil, en cualquier momento.
+
+
+ Cancelar (eliminar) tu cuenta y tus datos
+ desde tu perfil, con efecto inmediato, como se describe
+ arriba.
+
+
+ Oponerte al tratamiento, o pedir algo que la
+ interfaz no resuelva directamente (por ejemplo, corregir tu
+ correo), escribiendo por el medio de contacto de abajo.
+
+
+
+
+
+
+
+ Para privacidad y solicitudes sobre tus datos —acceso,
+ rectificación, cancelación u oposición— que la interfaz no
+ resuelva directamente, escribe a{" "}
+
+ indice0.ceti@gmail.com
+
+ , la dirección dedicada del proyecto para este tipo de
+ solicitudes.
+
+
+ Para reportar un problema de contenido o dejar
+ retroalimentación general sobre una lección o ejercicio, usa
+ el botón de reporte dentro de la plataforma (lo ve cualquier
+ cuenta con sesión iniciada).
+
+
+
+
+
+
+ Si el producto empieza a tratar datos de una forma distinta a
+ la descrita aquí, esta página se actualiza para reflejarlo —
+ no hay una versión “real” distinta a la publicada.
+
+ {children}
+
+ );
+}
diff --git a/src/components/landing/footer.tsx b/src/components/landing/footer.tsx
index d5ea4b9..2867218 100644
--- a/src/components/landing/footer.tsx
+++ b/src/components/landing/footer.tsx
@@ -7,6 +7,7 @@ const links: { href: string; label: string; external?: boolean }[] = [
{ href: "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/login", label: "Iniciar sesión" },
{ href: "/registro", label: "Crear cuenta" },
{ href: "#temario", label: "Temario" },
+ { href: "/privacidad", label: "Privacidad" },
{
href: "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/CesarManzoCode/cpp-ceti",
label: "GitHub",
diff --git a/src/components/shared/logo.tsx b/src/components/shared/logo.tsx
index df6b174..26a304a 100644
--- a/src/components/shared/logo.tsx
+++ b/src/components/shared/logo.tsx
@@ -1,4 +1,4 @@
-import { PRODUCT_NAME } from "@/lib/branding";
+import { PRODUCT_MARK, PRODUCT_NAME } from "@/lib/branding";
import { cn } from "@/lib/utils";
interface LogoProps {
@@ -58,7 +58,7 @@ export function Logo({ className, size = "default", glyphOnly = false }: LogoPro
layout.word,
)}
>
- CETI
+ {PRODUCT_MARK}
);
diff --git a/src/lib/branding.ts b/src/lib/branding.ts
index 43482d8..735f13e 100644
--- a/src/lib/branding.ts
+++ b/src/lib/branding.ts
@@ -5,13 +5,20 @@
// de un solo lenguaje: el nombre no puede prometer C++ a alguien que
// viene a POO I. Cada curso pone su propio título dentro de su ruta.
//
-// Esto es wording PROVISIONAL, no una marca definitiva. Los identificadores
-// internos (paquete, base de datos, prefijo de cookie, slug del curso de
-// C++) NO son marca visible y no se tocan.
+// Nombre definitivo: Índice Cero. Los identificadores internos (paquete,
+// base de datos, prefijo de cookie, slugs de curso) NO son marca visible
+// y no se tocan.
// =====================================================================
-/** Título neutral del producto. */
-export const PRODUCT_NAME = "Plataforma de Programación CETI";
+/** Nombre canónico del producto — el que va en texto y metadata. */
+export const PRODUCT_NAME = "Índice Cero";
+
+/**
+ * Representación visual compacta, para donde el contexto lo permita
+ * (isotipo + wordmark, marcas pequeñas). El nombre textual/canónico
+ * sigue siendo `PRODUCT_NAME`.
+ */
+export const PRODUCT_MARK = "índice[0]";
/** Descripción corta, sin comprometerse con un lenguaje. */
export const PRODUCT_TAGLINE =