Knowledge Station
Plataforma para organizar conocimiento escolar por materia y semana, procesar documentos/audio/video y generar archivos Markdown optimizados para ingesta en LLM.
El archivo estacion documentos.html queda como prototipo funcional de referencia. La plataforma principal usa backend/ (FastAPI) y frontend/ (Next.js).
Capacidades Iniciales
- Materias y semanas persistidas en SQLite.
- Estructura de archivos por materia/semana en
data/subjects/. - Ingesta de
.txt,.md,.docx,.pdf, audio y video. - PDF con texto mediante PyMuPDF.
- OCR opcional de PDF con Mistral.
- Audio con Deepgram en español.
- Video con extracción temporal de audio vía
ffmpegy transcripción con Deepgram. - Exportación semanal consolidada a Markdown.
- UI dedicada con materias, semanas, subida de archivos, polling de trabajos y editor Markdown con preview.
Desarrollo Local
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
copy .env.example .env
uvicorn backend.app.main:app --reload
En otra terminal:
cd frontend
npm install
set NEXT_PUBLIC_API_URL=http://127.0.0.1:8000
npm run dev -- -p 3000
La plataforma queda en http://localhost:3000, la API en http://localhost:8000 y la documentación interactiva en http://localhost:8000/docs.
Para usuarios no tecnicos en Windows, usa abrir_estacion.bat; detecta puertos libres, prepara backend/frontend y abre el navegador. Usa cerrar_estacion.bat para detener todo.
Docker / Coolify
docker compose up --build
El despliegue de Coolify usa docker-compose.yaml, que construye una sola imagen con Dockerfile.coolify:
Dockerfile.coolifycompila el frontend Next.js y prepara el backend FastAPI en la misma imagen.scripts/start-coolify.shinicia FastAPI en127.0.0.1:8000y Next.js en0.0.0.0:3000.- Next.js redirige las rutas
/api/...al backend interno mediantefrontend/next.config.mjs. - El volumen
station-datamantiene/app/datapersistente entre redeploys.
En Coolify se debe usar expose: "3000", no ports: "3000:3000". Coolify/Traefik enruta el trafico hacia el puerto expuesto del contenedor. Publicar un puerto fijo del host puede romper el despliegue si otro contenedor ya usa ese puerto, con un error como:
Bind for 0.0.0.0:3000 failed: port is already allocated
Usa ports solo para pruebas locales cuando necesites acceder directamente desde tu maquina. Para Coolify, deja que el proxy gestione el puerto publico.
Variables
APP_DATA_DIR: carpeta de datos persistentes.DATABASE_PATH: ruta SQLite.MISTRAL_API_KEY: OCR para PDFs escaneados.MISTRAL_OCR_MODEL: modelo OCR de Mistral. Por defectomistral-ocr-latest; puedes fijarlo amistral-ocr-2512.DEEPGRAM_API_KEY: transcripción de audio/video.
No subas claves reales al repositorio.
Flujo API Basico
Crear materia:
curl -X POST http://localhost:8000/subjects -H "Content-Type: application/json" -d '{"name":"Comportamiento Organizacional"}'
Crear semana:
curl -X POST http://localhost:8000/subjects/1/weeks -H "Content-Type: application/json" -d '{"number":1,"title":"Grupos y equipos"}'
Subir archivo:
curl -X POST -F "[email protected]" http://localhost:8000/subjects/1/weeks/1/files
Consultar trabajo:
curl http://localhost:8000/jobs/1
Exportar semana:
curl -L http://localhost:8000/subjects/1/weeks/1/export -o semana-01.md