# 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 `ffmpeg` y 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 ```bash 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: ```bash 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 ```bash 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 defecto `mistral-ocr-latest`; puedes fijarlo a `mistral-ocr-2512`. - `DEEPGRAM_API_KEY`: transcripción de audio/video. No subas claves reales al repositorio. ## Flujo API Basico Crear materia: ```bash curl -X POST http://localhost:8000/subjects -H "Content-Type: application/json" -d '{"name":"Comportamiento Organizacional"}' ``` Crear semana: ```bash curl -X POST http://localhost:8000/subjects/1/weeks -H "Content-Type: application/json" -d '{"number":1,"title":"Grupos y equipos"}' ``` Subir archivo: ```bash curl -X POST -F "file=@clase-01.mp4" http://localhost:8000/subjects/1/weeks/1/files ``` Consultar trabajo: ```bash curl http://localhost:8000/jobs/1 ``` Exportar semana: ```bash curl -L http://localhost:8000/subjects/1/weeks/1/export -o semana-01.md ```