Sift is a self-hosted RSS and content aggregation portal focused on a reliable Python backend, extensible ingestion/classification pipelines, and a modern reader experience.
- Backend: FastAPI API-only service (
/api/v1/*) insrc/sift. - Frontend: standalone React + TypeScript SPA in
frontend/. - Integration: frontend consumes backend APIs only (no server-rendered UI coupling).
- Aggregate RSS/Atom feeds into one personal workspace.
- Organize content with folders, rules, and keyword streams.
- Support future enrichment and automation through a plugin-ready architecture.
- Install guide — self-hosted setup from zero to first login.
- Getting started — local setup and first run.
- Development guide — day-to-day developer workflow, tooling, and notes.
- Deployment guide — containerized runtime profiles and service topology.
- Release cycle — GitFlow, CI/CD gates, SemVer labels, and GHCR release process.
- Architecture — system design and current/target architecture.
- Session notes — change log and near-term priorities.
For a self-hosted install:
- Clone repo and copy env file:
git clone https://github.com/pexnet/sift.git && cd siftcp .env.example .env(orCopy-Item .env.example .envon PowerShell)
- Set production values in
.env(SIFT_ENV=production, strong DB password, CORS origin). - Start release stack:
docker compose -f docker-compose.release.yml pulldocker compose -f docker-compose.release.yml up -d
- Open
http://localhost/registerand create the first user.
Full details: docs/install.md.
developis the default integration branch.mainis the protected release branch.- Releases are tag-driven (
vX.Y.Z) and automated from merges intomain. - Container artifacts are published to GHCR for both backend and frontend:
ghcr.io/pexnet/sift-backend:vX.Y.Zand:latestghcr.io/pexnet/sift-frontend:vX.Y.Zand:latest