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
Para Coolify, configura backend y frontend como servicios separados. Monta un volumen persistente para /app/data en el backend y define NEXT_PUBLIC_API_URL en el frontend apuntando a la URL publica del backend.
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