Before going further, take 30 seconds to head to chattersift.com and register a free account to see if it's useful to you. The hosted SaaS is the fastest way to find out — self-hosting is documented below if you'd rather run it yourself.
Reddit monitoring for keywords and topics you care about — open source and self-hostable.
ChatterSift is an open-source Reddit monitoring app: define keyword monitors across subreddits and get matching posts and comments delivered as alerts. Built as a Django app, HTMX/server-rendered first.
- Keyword matching — exact phrases, word boundaries, or regex across post titles, bodies, and comments, with negative filters to kill false positives.
- Multi-subreddit monitoring — one monitor configuration covers every community on its list. Scale from five subreddits to five hundred without rewriting a rule.
- Instant email alerts — matches delivered to your inbox within minutes. Per-keyword rate limits keep things usable.
- Your data, your control — use the hosted SaaS or self-host the open source. Either way, your keywords and match history stay in your stack.
- Background processing — Celery workers with retries and back-pressure. The monitor doesn't sleep, and alerts don't pile up.
- Open source, MIT-licensed — read it, fork it, extend it. No lock-in.
ChatterSift is designed to run on a single VPS with Docker Compose. Caddy terminates HTTPS, Postgres and Redis run as internal services on named volumes, and migrations run automatically before Django and Celery start.
You only need these on the VPS itself — everything else (Python, Node, Postgres, Redis) runs inside containers.
- VPS with at least 2 GB RAM and 15 GB disk (Postgres, Redis, Django, Celery worker, Celery beat, and Caddy all run on the same host).
- GNU Make
- Docker with the Compose v2 plugin (
docker compose, notdocker-compose) - Python 3 — stdlib only, used by
scripts/bootstrap-deploy-env - git — to clone the repo and pull upgrades
make deploy-init # generates .env.production with internal secretsEdit .env.production and set at minimum:
CHATTERSIFT_SITE_DOMAINCADDY_SITE_ADDRESSCADDY_ACME_EMAILDJANGO_ALLOWED_HOSTSDJANGO_CSRF_TRUSTED_ORIGINSDJANGO_DEFAULT_FROM_EMAIL/DJANGO_SERVER_EMAILCHATTERSIFT_EMAIL_PROVIDERand the matching provider credentials
Then bring up the production stack:
make deploy # alias for `make up production` — build + start
make deploy-logs # follow production logsThe production stack includes Postgres, Redis, Django (Gunicorn + Uvicorn workers), Celery worker, Celery beat, and Caddy. Health check: /healthz/.
git pull
make deployThe migrate service runs migrate --noinput and syncs django_site from CHATTERSIFT_SITE_DOMAIN before Django and Celery start.
make deploy-manage shell # Django shell in production container
make deploy-manage createsuperuser
make ps production # list running containers
make logs production [service] # follow logs for a single service
make down production # stop the stackmake backup # snapshot the production database
make backups # list snapshots
make restore <backup-file> # restore from a snapshotSee docs/deployment.md for the full reference, including email provider configuration, LLM credentials, and backup retention.
Install Python dependencies and run the local stack:
uv sync
make shell # serve Django on http://127.0.0.1:8000 (runs migrations + collectstatic)Or run everything in Docker:
make up # start the local Docker stack
make manage migrate # run management commands in the Docker django servicemake help lists every target. All Make targets accept an optional local / production mode argument (default: local).
npm install
npm run build:css # one-off build
npm run watch:css # rebuild on template / style changesSource: chattersift/static/src/project.css. Compiled output: chattersift/static/css/project.css (already linked from the base template).
make test # uv run pytest
make lint # uv run ruff check .
make type # uv run ty check
make template-lint # djlint
make migration-check # detect missing migrationsTests use pytest + pytest-django and read DATABASE_URL; use Postgres locally.
- Create a normal account through the Sign Up form; email verification shows up in the console (or Mailpit at
http://127.0.0.1:8025when running Docker). - Create a superuser with
uv run python manage.py createsuperuser(ormake manage createsuperuserin Docker).
cd chattersift
uv run celery -A config.celery_app worker -l info
uv run celery -A config.celery_app beat # periodic tasksRun celery from the directory containing manage.py so Celery's import magic resolves correctly. The Docker stacks run a worker and beat container automatically.
