Open-source Telegram bot for learning English collocations through short daily lessons.
Collocation Coach helps learners build more natural English with a small daily loop:
- pace-based new collocations
- due review items first
- short explanations in Russian
- common mistake contrast
- simple spaced repetition
- gentle return flow after missed days
/progressfor lightweight progress visibility- broader timezone and delivery-time choices
- low-noise
Report a problemaction on study cards - optional extra practice after the main session
Implemented now:
- Telegram bot with polling runtime
- onboarding flow
/today,/review,/settings- per-level learning tracks for
a2_b1andb1_b2 - pace modes:
light,standard,intensive - YAML lesson content
- built-in daily delivery loop
- append-only product event logging in PostgreSQL
- local event summary CLI
- local content issue export CLI
- PostgreSQL persistence
- Docker and local
uvrun paths
The shortest setup path is in RUN.md.
Fast local run:
cp .env.example .env
uv sync
uv run python -m collocation_coach.mainThen open your bot in Telegram and send /start.
Required:
TELEGRAM_BOT_TOKENDATABASE_URL
Defaults live in .env.example.
Lessons are plain YAML files in content/lessons.
Authoring rules live in docs/CONTENT_GUIDE.md. Run the content validator before shipping lesson edits:
uv run python -m collocation_coach.validationEach level has its own track:
/start/help/today/review/progress/settings
- the main daily session is generated from the current level track
- review items come first
- new items are selected from unseen collocations in pack order
- pace controls how many new items appear in the main session
- after 3 or more missed local days, the bot uses a softer welcome-back session
- users can mark a card for review through a single
Report a problemaction - after the main session, the user can continue with extra practice
The repository is intentionally simple:
- one bot process
- one Postgres database
- editable YAML content
- no external admin panel required
- local event summary without external analytics
- local content issue export for triage
- local content linting for lesson quality checks