JUNTOS es un prototipo de plataforma educativa con IA para acompañamiento personalizado en materias universitarias iniciales.
El sistema está pensado para dos perfiles:
- Estudiante: recibe teoría guiada, ayuda en ejercicios, diagnóstico personalizado, recomendaciones de práctica y sugerencias de grupos de estudio.
- Docente: visualiza alertas tempranas, dificultades frecuentes, seguimiento de estudiantes, grupos sugeridos y asistencia para planificar la semana.
La demo está enfocada en la materia Probabilidad y Estadística, especialmente en la unidad Variables aleatorias discretas.
La vista estudiante permite:
- ver el resumen de la semana;
- acceder al material de la materia;
- recorrer teoría guiada con IA;
- resolver ejercicios obligatorios;
- subir una resolución escrita de un ejercicio;
- consultar dudas al tutor IA;
- recibir pistas sin obtener la respuesta directa;
- ver diagnóstico personalizado;
- recibir ejercicios adicionales recomendados;
- sumarse a grupos de estudio.
La vista docente permite:
- ver un dashboard de avance de la comisión;
- detectar estudiantes en riesgo;
- ver dificultades frecuentes;
- consultar ejercicios problemáticos;
- recibir recomendaciones de JUNTOS para la próxima clase;
- configurar una semana con objetivos, materiales y directivas pedagógicas;
- revisar estudiantes individualmente;
- ver grupos de estudio sugeridos;
- consultar a JUNTOS sobre decisiones docentes.
- HTML
- CSS
- JavaScript
- Nginx como servidor estático dentro de Docker
- Python 3.12
- FastAPI
- Uvicorn
- Google GenAI
- Pydantic
- pypdf
- Docker
- Docker Compose
BigD/
├── docker-compose.yml
├── backend/
│ ├── Dockerfile
│ ├── requirements.txt
│ ├── .env
│ └── app/
│ ├── __init__.py
│ └── main.py
├── frontend/
│ ├── index.html
│ ├── estudiante.html
│ ├── docente.html
│ ├── styles.css
│ ├── script.js
│ ├── app-layout.js
│ ├── student-demo.js
│ └── teacher-demo.js
└── material_demo/
└── distribuciones_discretas/
├── instrucciones_tutor.md
├── apuntes/
│ ├── apunteprobabilidad_discretas.pdf
│ ├── Esperanza VA discretas.pdf
│ └── probabilidad_distribuciones.pdf
└── ejercicios/
├── TP1.pdf
├── rtasP1.pdf
├── ejercicios_adicionales_variables_discretas.pdf
└── ejercicios_examenes_variables_discretas.pdf
Antes de correr el proyecto, instalar:
- Git
- Docker
- Docker Compose
En Windows se recomienda instalar Docker Desktop.
Para verificar que Docker está instalado:
docker --version
docker compose versiongit clone https://github.com/DanielaVol/BigD.git
cd BigDEl backend necesita una clave de API para usar Gemini.
Crear el archivo:
backend/.env
Con este contenido:
GEMINI_API_KEY=TU_API_KEY_DE_GEMINI
GEMINI_MODEL=gemini-2.5-flash-lite
GEMINI_FALLBACK_MODEL=gemini-2.5-flashReemplazar:
TU_API_KEY_DE_GEMINI
por una clave válida.
Importante: no subir el archivo .env al repositorio.
Si no se cuenta con una API key válida, la interfaz puede cargarse igual, pero las funciones que llaman al tutor IA del backend no van a responder correctamente.
Desde la raíz del proyecto:
docker compose up --buildEsto levanta dos servicios:
juntos-backendjuntos-frontend
El frontend queda disponible en:
http://localhost:8080
El backend queda disponible en:
http://localhost:8001
Abrir en el navegador:
http://localhost:8080
No abrir los archivos directamente con file:///, porque la demo necesita ejecutarse desde el servidor web de Docker.
La demo tiene dos usuarios precargados.
ana.torres@fiuba.edu.ar
Este usuario redirige a:
estudiante.html
mariana.lopez@fiuba.edu.ar
Este usuario redirige a:
docente.html
No hace falta contraseña para la demo. El login valida solo el email.
Con los contenedores levantados, abrir:
http://localhost:8001/api/health
La respuesta debería mostrar información del servicio, por ejemplo:
{
"ok": true,
"service": "JUNTOS Backend IA",
"model": "...",
"has_api_key": true,
"material_root": "...",
"corpus_chunks": 43
}Si has_api_key aparece en false, revisar el archivo:
backend/.env
El backend carga material desde:
material_demo/distribuciones_discretas/
Ese material se usa para construir el contexto del tutor IA.
La carpeta incluye:
instrucciones_tutor.md
apuntes/
ejercicios/
El backend lee archivos PDF y Markdown, extrae texto y lo divide en fragmentos para responder preguntas de los estudiantes.
GET /api/healthSirve para verificar que el backend esté activo y que haya cargado el material.
POST /api/tutorRecibe una consulta del estudiante y devuelve una respuesta generada con IA.
Ejemplo de body:
{
"studentName": "Ana Torres",
"currentTopic": "Variable aleatoria discreta",
"currentBlock": "Teoría guiada",
"question": "No entiendo qué valores puede tomar X."
}Para detener los contenedores:
docker compose downPara reconstruir desde cero:
docker compose down
docker compose up --build --force-recreateLa demo guarda estado en localStorage, por ejemplo:
- usuario logueado;
- semana seleccionada;
- avance de teoría;
- diagnóstico;
- chats de ejercicios;
- estado de ejercicios;
- grupo de estudio.
Para borrar todo el historial desde la consola del navegador:
localStorage.clear();
location.reload();Para borrar solo datos de ejercicios:
Object.keys(localStorage)
.filter(k => k.startsWith("juntos_exercise_chat_"))
.forEach(k => localStorage.removeItem(k));
location.reload();Verificar que Docker esté corriendo y que el contenedor frontend esté activo:
docker psLuego entrar a:
http://localhost:8080
Verificar logs:
docker compose logs backendTambién revisar:
http://localhost:8001/api/health
Revisar que exista:
backend/.env
y que tenga:
GEMINI_API_KEY=...Luego reiniciar:
docker compose down
docker compose up --buildForzar recarga:
Ctrl + F5
o:
Ctrl + Shift + R
También se puede borrar el estado local desde la consola:
localStorage.clear();
location.reload();Reiniciar los contenedores:
docker compose down
docker compose up --build --force-recreateRevisar:
- Que el backend esté activo:
http://localhost:8001/api/health
- Que
backend/.envtenga una API key válida:
GEMINI_API_KEY=...- Que el contenedor backend haya cargado los archivos del material:
docker compose logs backendEn los logs debería aparecer la carga de archivos desde:
material_demo/distribuciones_discretas/
Este proyecto es una demo funcional, no un sistema productivo completo.
Algunas partes están simuladas para mostrar el flujo del producto:
- usuarios precargados;
- datos del dashboard docente;
- grupos sugeridos;
- seguimiento docente;
- carga visual de algunos materiales;
- respuestas simuladas en ciertas secciones docentes.
La parte de tutor IA del estudiante sí se conecta al backend y utiliza el material cargado en material_demo.
- Procesar resoluciones escritas con OCR o visión.
- Agregar administración de cursos, comisiones y semanas.
- Desplegar en un servidor cloud.
JUNTOS busca mostrar cómo la IA puede acompañar la cursada desde dos lados.
Para el estudiante:
explica → pregunta → diagnostica → recomienda → acompaña
Para el docente:
resume → detecta patrones → alerta → recomienda intervenciones → ayuda a planificar
La idea central es que la IA no reemplace al docente, sino que ayude a escalar el acompañamiento personalizado en cursos numerosos.
Resumen de comandos:
git clone https://github.com/DanielaVol/BigD.git
cd BigDCrear backend/.env:
GEMINI_API_KEY=TU_API_KEY_DE_GEMINI
GEMINI_MODEL=gemini-2.5-flash-lite
GEMINI_FALLBACK_MODEL=gemini-2.5-flashLevantar el proyecto:
docker compose up --buildAbrir:
http://localhost:8080
Ingresar como estudiante:
ana.torres@fiuba.edu.ar
o como docente:
mariana.lopez@fiuba.edu.ar