// Academia Pilar Garijo — Área privada (prototipo)
// Login simulado → curso contratado con lecciones, visor, notas y exportación.
const CURSO = {
titulo: "Curso de Masaje Método Garijo",
modulos: [
{
nombre: "Módulo 1 · Introducción",
lecciones: [
{ id: "l01", nombre: "Bienvenida al curso", dur: "04:32" },
{ id: "l02", nombre: "Cómo aprovechar la formación", dur: "06:15" },
],
},
{
nombre: "Módulo 2 · Fundamentos del método",
lecciones: [
{ id: "l03", nombre: "Principios del Método Garijo", dur: "18:40" },
{ id: "l04", nombre: "Preparación, camilla y entorno", dur: "12:05" },
{ id: "l05", nombre: "Las manos: presión y ritmo", dur: "21:18" },
],
},
{
nombre: "Módulo 3 · El masaje completo",
lecciones: [
{ id: "l06", nombre: "Espalda I", dur: "24:50" },
{ id: "l07", nombre: "Espalda II", dur: "19:32" },
{ id: "l08", nombre: "Zona cervical", dur: "16:44" },
{ id: "l09", nombre: "Extremidades inferiores", dur: "22:10" },
{ id: "l10", nombre: "La secuencia completa", dur: "32:00" },
],
},
{
nombre: "Módulo 4 · Aplicación en consulta",
lecciones: [
{ id: "l11", nombre: "Protocolos con tus clientes", dur: "14:25" },
{ id: "l12", nombre: "Cierre y siguientes pasos", dur: "08:12" },
],
},
],
};
const LECCIONES = CURSO.modulos.flatMap((m) => m.lecciones);
// Texto de cada lección (contenido provisional hasta tener el real)
function textoLeccion(leccion) {
return [
`En esta lección, Pilar desarrolla «${leccion.nombre}» dentro del ${CURSO.titulo}. Mira el vídeo completo antes de pasar a la siguiente lección: cada gesto del método se apoya en el anterior.`,
"Debajo tienes el espacio de notas. Apunta lo que quieras recordar al aplicar la técnica en tu consulta: presiones, ritmos, errores a evitar. Al terminar el curso podrás exportar todas tus notas en un solo documento.",
];
}
// --- persistencia ---
const LS_NOTAS = "pg-academia-notas";
const LS_HECHAS = "pg-academia-completadas";
const LS_LECCION = "pg-academia-leccion";
const LS_SESION = "pg-academia-sesion";
function leerLS(clave, porDefecto) {
try {
const v = localStorage.getItem(clave);
return v ? JSON.parse(v) : porDefecto;
} catch (e) {
return porDefecto;
}
}
// ============================================================
// Login
// ============================================================
function LoginScreen({ onLogin }) {
const enviar = (e) => {
e.preventDefault();
onLogin();
};
return (
);
}
// ============================================================
// Área privada
// ============================================================
function AreaPrivada({ onLogout }) {
const [leccionId, setLeccionId] = React.useState(() => leerLS(LS_LECCION, "l01"));
const [notas, setNotas] = React.useState(() => leerLS(LS_NOTAS, {}));
const [hechas, setHechas] = React.useState(() => leerLS(LS_HECHAS, []));
const leccion = LECCIONES.find((l) => l.id === leccionId) || LECCIONES[0];
const idx = LECCIONES.indexOf(leccion);
const numero = (i) => String(i + 1).padStart(2, "0");
React.useEffect(() => {
localStorage.setItem(LS_LECCION, JSON.stringify(leccionId));
}, [leccionId]);
const cambiarNota = (texto) => {
const siguientes = { ...notas, [leccion.id]: texto };
setNotas(siguientes);
localStorage.setItem(LS_NOTAS, JSON.stringify(siguientes));
};
const alternarHecha = (id) => {
const siguientes = hechas.includes(id)
? hechas.filter((h) => h !== id)
: [...hechas, id];
setHechas(siguientes);
localStorage.setItem(LS_HECHAS, JSON.stringify(siguientes));
};
const exportarNotas = () => {
const fecha = new Date().toLocaleDateString("es-ES", { day: "numeric", month: "long", year: "numeric" });
let texto = `MIS NOTAS — ${CURSO.titulo.toUpperCase()}\n`;
texto += `Academia Pilar Garijo · Exportado el ${fecha}\n`;
texto += "=".repeat(56) + "\n\n";
let conNotas = 0;
LECCIONES.forEach((l, i) => {
const nota = (notas[l.id] || "").trim();
if (!nota) return;
conNotas++;
texto += `Lección ${numero(i)} — ${l.nombre}\n`;
texto += "-".repeat(40) + "\n";
texto += nota + "\n\n";
});
if (conNotas === 0) {
texto += "(Todavía no has escrito ninguna nota.)\n";
}
const blob = new Blob([texto], { type: "text/plain;charset=utf-8" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = "Mis notas - Curso de Masaje Metodo Garijo.txt";
document.body.appendChild(a);
a.click();
a.remove();
URL.revokeObjectURL(url);
};
const completadas = hechas.filter((id) => LECCIONES.some((l) => l.id === id)).length;
const pct = Math.round((completadas / LECCIONES.length) * 100);
return (
{/* ---------- menú de lecciones ---------- */}
{/* ---------- visor ---------- */}
Lección {numero(idx)} · Vídeo
{leccion.dur}
Lección {numero(idx)} de {numero(LECCIONES.length - 1)}
{leccion.nombre}
Sobre esta lección
{textoLeccion(leccion).map((parrafo, i) => (
{parrafo}
))}
Mis notas
Se guardan automáticamente
);
}
// ============================================================
// Raíz
// ============================================================
function AcademiaApp() {
// Siempre se entra por el login: no recordamos la sesión al cargar la página.
const [dentro, setDentro] = React.useState(false);
const entrar = () => { setDentro(true); };
const salir = () => { setDentro(false); };
return dentro ? : ;
}
ReactDOM.createRoot(document.getElementById("root")).render();