Aggregates proxy configs posted in your Telegram channels, tests them, and serves the working ones as a subscription URL for your proxy client. One Docker service: FastAPI backend + built React frontend, SQLite storage, xray-core for testing, an offline DB-IP Lite geo db for country flags.
- Get Telegram API credentials. Log in at
my.telegram.org → API development tools →
create an app → copy the
api_idandapi_hash. - Configure.
Edit
cp .env.example .env.envand fill inTELEGRAM_API_ID/TELEGRAM_API_HASH. Everything else has a working default — see the comments in.env.example(LAN access, session/db paths, an optional Telegram connection proxy). - Run.
Open
docker compose up --buildhttp://127.0.0.1:8000, log in with your phone number, enable a few channels, and let it scan.docker restart(or a host reboot) keeps your session and proxy pool — both live in host-mounted volumes.
To reach the /sub subscription URL from your phone, set a LAN-facing
BIND_HOST in .env (e.g. your machine's LAN IP, or 0.0.0.0 to bind
every interface) before docker compose up, then point your proxy client
(e.g. v2rayNG) at http://<that-ip>:8000/sub. Only do this on a network
you trust — there's no auth or TLS on /sub (NFR-3, NFR-8).
Backend:
cd backend && pip install -e ".[dev]"
uvicorn app.main:app --reload
Frontend:
cd frontend && npm install && npm run dev
config.py autoloads the repo-root .env; a locally installed xray
binary and a manually downloaded geo mmdb (free, no signup:
https://db-ip.com/db/download/ip-to-country-lite) under assets/ are
picked up via XRAY_BIN / GEOLITE_DB in .env.example.
secrets/ (Telethon session, chmod 600 host-side), *.session, data/
(SQLite db), .env, node_modules/, dist/ — see .gitignore. Never
commit these.