AI-powered article aggregation and intelligence feed. Fetches articles from configured sources, scores and deduplicates them with an LLM, extracts full content, summarizes and categorizes each piece, and stores vector embeddings for semantic search.
A cron-scheduled pipeline fetches articles from configured sources and runs each batch through a sequence of BAML-powered steps: deduplication, LLM scoring, content extraction, summarization, categorization, and vector embedding. Results are served via a FastAPI REST API and a React frontend.
The stack:
db— PostgreSQL with pgvector, the only Docker container (docker compose up -d)- backend — FastAPI, runs natively via uv (systemd service in production)
- pipeline — article pipeline, runs natively via uv (systemd timer, daily 04:00)
- frontend — React SPA, built to static files and served by Caddy in production
See development.md for the local loop and deployment.md for the VPS setup.
- FastAPI — Python backend API
- BAML — structured LLM function definitions
- PostgreSQL + pgvector — article storage and vector search
- model2vec — fast static embeddings
- React + Vite + Tailwind CSS — frontend
- Docker Compose — the database
- Caddy + systemd — production serving
Started as a fork of fastapi/full-stack-fastapi-template. The fork is cut — upstream is no longer merged. CHANGES.md is frozen as the historical record of divergences.