Inspirado en SCP-5094 — "Miss J's Whimsical Campfire"
Software educativo con estética retro CRT que genera programas de aprendizaje personalizados usando inteligencia artificial. La "profesora virtual" Miss J crea lecciones, evaluaciones y narración por voz sobre cualquier tema que el usuario elija.
| Funcionalidad | Descripción |
|---|---|
| 🖥️ Interfaz CRT Retro | Pantalla con efecto de monitor antiguo, scanlines, fosforescencia y pizarrón verde |
| 🤖 Generación con IA | Contenido educativo generado por OpenAI GPT-4o-mini adaptado al tema y nivel |
| 🔊 Text-to-Speech | Narración de lecciones con ElevenLabs o OpenAI TTS (fallback automático) |
| 💾 Persistencia | Programas guardados en PostgreSQL para no consumir tokens al revisitar |
| 📋 Temas Guardados | Sección para acceder a programas generados previamente |
| 🎵 Cache de Audio | Audio TTS almacenado en DB para evitar regenerar |
| 📝 Evaluaciones | Quiz automático al final de cada programa |
| 🎭 Miss J Animada | Sprite animado con diferentes poses según el contexto |
┌─────────────────┐ ┌──────────────────┐ ┌──────────────┐
│ Frontend │ │ Backend │ │ Services │
│ (Vite) │────▸│ (Express) │────▸│ │
│ │ │ │ │ OpenAI API │
│ - HTML/CSS/JS │ │ /api/health │ │ ElevenLabs │
│ - CRT Effects │ │ /api/generate │ │ PostgreSQL │
│ - Audio Player │ │ /api/tts │ │ │
│ - UI Controller│ │ /api/programs │ └──────────────┘
└─────────────────┘ └──────────────────┘
:5173 :3001
Proyecto-5094/
├── assets/ # Assets del proyecto
│ └── main.png # Sprite sheet de Miss J
├── server/ # Backend (Express)
│ ├── index.js # Servidor principal
│ ├── routes/
│ │ ├── content.js # Generación de contenido (/api/generate-program)
│ │ ├── programs.js # CRUD de programas guardados (/api/programs)
│ │ └── tts.js # Text-to-Speech con cache (/api/tts)
│ └── services/
│ ├── ai-content.js # Servicio de generación con OpenAI
│ ├── database.js # Conexión y queries PostgreSQL
│ ├── prompt-builder.js # Constructor de prompts educativos
│ └── tts-service.js # TTS con ElevenLabs/OpenAI + fallback
├── src/
│ ├── css/
│ │ ├── main.css # Estilos principales y design system
│ │ ├── crt-effect.css # Efectos de monitor CRT
│ │ ├── chalkboard.css # Estilos del pizarrón
│ │ └── animations.css # Animaciones y transiciones
│ └── js/
│ ├── app.js # Aplicación principal (orquestador)
│ ├── api-client.js # Cliente API con fallback a demo
│ ├── ui-controller.js # Controlador de eventos UI
│ ├── audio-player.js # Reproductor de audio TTS
│ ├── character.js # Controlador de sprites de Miss J
│ ├── lesson-renderer.js # Renderizador de lecciones
│ └── crt-effects.js # Efectos visuales CRT
├── index.html # Página principal
├── vite.config.js # Configuración de Vite + proxy API
├── package.json
├── .env.example # Template de variables de entorno
└── .gitignore
- Node.js v18+
- PostgreSQL (servidor accesible, local o remoto)
- API Key de OpenAI (para generación de contenido)
- API Key de ElevenLabs (opcional, para TTS de mayor calidad)
git clone https://github.com/Vcarreon439/Proyecto-5094.git
cd Proyecto-5094npm installCopiar el archivo de ejemplo y completar con tus credenciales:
cp .env.example .envEditar .env con tus valores:
# --- AI Content Generation ---
OPENAI_API_KEY=sk-proj-tu-api-key-aqui
# --- Text-to-Speech ---
ELEVENLABS_API_KEY=tu-elevenlabs-key-aqui # Opcional
ELEVENLABS_VOICE_ID=tu-voice-id-aqui # Opcional
# --- Server ---
PORT=3001
NODE_ENV=development
MAX_LESSONS=5 # Máximo de lecciones por programa
# --- Database (PostgreSQL) ---
DB_HOST=localhost
DB_PORT=5432
DB_NAME=miss_j_edu
DB_USER=postgres
DB_PASSWORD=tu-passwordCrear la base de datos en PostgreSQL (las tablas se crean automáticamente al iniciar el servidor):
CREATE DATABASE miss_j_edu;Opción A — Dos terminales:
# Terminal 1: Backend
npm run server
# Terminal 2: Frontend
npm run devOpción B — Un solo comando (requiere concurrently):
npm install -D concurrently
npm run dev:fullAbrir en el navegador: http://localhost:5173/
| Variable | Requerida | Default | Descripción |
|---|---|---|---|
OPENAI_API_KEY |
✅ Sí | — | API key de OpenAI para generación de contenido |
ELEVENLABS_API_KEY |
❌ No | — | API key de ElevenLabs para TTS de alta calidad |
ELEVENLABS_VOICE_ID |
❌ No | 21m00Tcm4TlvDq8ikWAM |
ID de la voz de ElevenLabs (Rachel por defecto) |
PORT |
❌ No | 3001 |
Puerto del servidor backend |
NODE_ENV |
❌ No | development |
Entorno de ejecución |
MAX_LESSONS |
❌ No | 5 |
Número máximo de lecciones permitidas por programa |
DB_HOST |
✅ Sí | localhost |
Host del servidor PostgreSQL |
DB_PORT |
❌ No | 5432 |
Puerto de PostgreSQL |
DB_NAME |
❌ No | miss_j_edu |
Nombre de la base de datos |
DB_USER |
✅ Sí | postgres |
Usuario de PostgreSQL |
DB_PASSWORD |
✅ Sí | postgres |
Contraseña de PostgreSQL |
DATABASE_URL |
❌ No | — | URL de conexión completa (alternativa a variables individuales) |
Health check del servidor. Devuelve estado de servicios y configuración.
{
"status": "ok",
"version": "5.094",
"maxLessons": 5,
"services": {
"ai": true,
"tts": true,
"database": true
}
}Genera un programa educativo completo con IA.
Body:
{
"topic": "Volcanes",
"difficulty": "basico",
"lessonCount": 5
}Lista todos los programas guardados.
Obtiene un programa completo por ID (con todas las lecciones y quiz).
Elimina un programa guardado y su audio cacheado.
Genera audio TTS con cache automático.
Body:
{
"text": "Texto a convertir en voz",
"programId": 1,
"lessonIndex": 0
}El servidor crea automáticamente las tablas necesarias al iniciar:
Almacena los programas educativos generados.
| Columna | Tipo | Descripción |
|---|---|---|
id |
SERIAL |
Identificador único |
topic |
VARCHAR(500) |
Tema del programa |
difficulty |
VARCHAR(50) |
Nivel de dificultad |
title |
VARCHAR(500) |
Título generado por IA |
description |
TEXT |
Descripción del programa |
lesson_count |
INTEGER |
Número de lecciones |
program_data |
JSONB |
Datos completos (lecciones, quiz) |
created_at |
TIMESTAMPTZ |
Fecha de creación |
Cache de audio TTS para evitar regenerar.
| Columna | Tipo | Descripción |
|---|---|---|
id |
SERIAL |
Identificador único |
program_id |
INTEGER |
FK a programs |
lesson_index |
INTEGER |
Índice de la lección |
audio_text_hash |
VARCHAR(64) |
Hash del texto (para reusar) |
audio_data |
BYTEA |
Audio MP3 binario |
El sistema de TTS tiene un mecanismo de fallback automático:
- ElevenLabs (si está configurada) → Voz multilingüe de alta calidad
- OpenAI TTS (fallback) → Voz "nova" (femenina, cálida)
- Sin audio → La aplicación funciona sin TTS
| Voice ID | Nombre | Estilo |
|---|---|---|
21m00Tcm4TlvDq8ikWAM |
Rachel | Calmada, narración |
AZnzlk1XvdvUeBnXmlld |
Domi | Fuerte, clara |
EXAVITQu4vr4xnSDxMaL |
Sarah | Suave, cálida |
MF3mGyEYCl7XYWbV9V6O |
Emily | Calmada, gentil |
| Capa | Tecnología |
|---|---|
| Frontend | HTML5, CSS3 (Vanilla), JavaScript ES Modules |
| Bundler | Vite 7 |
| Backend | Node.js, Express 5 |
| IA | OpenAI GPT-4o-mini |
| TTS | ElevenLabs / OpenAI TTS |
| Base de datos | PostgreSQL |
| Tipografías | VT323, Press Start 2P, Patrick Hand (Google Fonts) |
Este proyecto es software educativo y de investigación, inspirado en la obra ficticia SCP-5094 de la SCP Foundation Wiki bajo licencia Creative Commons SA 3.0.
Desarrollado con 📚 por JadeEdTech — v5.094
