OSFeed is a Telegram-first OSINT platform for collection, translation, deduplication, and daily digests.
- Telegram collection with flood-wait handling
- LLM translation with model routing (Gemini Flash default, GPT-4o-mini for high-priority) + fallback
- Vector deduplication (Qdrant) + semantic search hooks
- Daily digests v2 (HTML + PDF export + key entities)
- Collections to group channels, filter digests, and export scoped messages
- Collection stats + dashboard scope selector
- Collection alerts + in-app notifications
- Collection sharing (viewer/editor/admin)
- KPI dashboard (messages, channels, duplicates) with CSV export
- Frontend refonte (React 18 + Vite + Tailwind + Zustand + React Query)
- Command palette (⌘K) + global shortcuts
- Virtualized message feed + lazy-loaded routes
- Full-text + semantic search with similar-message view
- Message exports CSV/PDF/HTML + digests history pagination
- Collection-aware search filters
- Trust indicators (duplicate score, primary source)
- i18n FR/EN
- PWA (offline install ready)
- Redis cache for translations (persistent)
- Audit logs for sensitive actions (RGPD)
- Refresh tokens + session rotation
- API usage tracking (LLM cost monitoring)
OSFeed runs entirely in Docker for both development and production. Hot-reloading is enabled via volume mounts.
- Start everything
./start.shThis command starts Docker services, waits for readiness, and applies database migrations.
- Open the app
- Frontend: http://localhost:5173
- Backend: http://localhost:8000
- API Docs: http://localhost:8000/docs
- Stop the app
./stop.shView logs for all services:
docker compose logs -fView specific logs:
docker compose logs -f backend
docker compose logs -f frontendThe first run copies .env.example to .env if missing. Update .env with:
- SECRET_KEY (required) - Application secret key for JWT tokens and session signing
- PostgreSQL credentials
- OpenAI / Qdrant settings
- Telegram API credentials
- Redis settings (optional but recommended for translation cache)
- Optional settings:
SCHEDULER_ENABLED(defaulttrue)AUDIT_LOG_RETENTION_DAYS(default365)AUDIT_LOG_PURGE_TIME(default02:30)API_USAGE_TRACKING_ENABLED(defaulttrue)LLM_COST_INPUT_PER_1K(default0.0)LLM_COST_OUTPUT_PER_1K(default0.0)
The start.sh script automatically handles PostgreSQL startup and migrations.
If you have an existing SQLite database in data/osfeed.db, run:
MIGRATE_SQLITE=1 ./start.shdocker compose up -d
docker compose exec backend alembic upgrade head
# Migration script if needed:
docker compose exec backend python scripts/migrate_sqlite_to_postgres.py- Auth refresh flow:
POST /api/auth/loginreturnsaccess_token+refresh_tokenPOST /api/auth/refreshrotates refresh token and returns a new access token
- API usage stats:
GET /api/stats/api-usage?days=7
For detailed technical documentation:
- Architecture Overview - System components, deployment, and infrastructure
- Data Flow Guide - Message processing pipeline and data flows
- Docker + Docker Compose (PostgreSQL, Qdrant, Redis, Backend, Frontend)
- No local Python/Node dependencies required!