§ Ember — habit & ritual tracker
Overview — what Ember is
Ember (rituals.oaoisme.top) is a habit & ritual tracker built around one metaphor: a habit is a fire you tend. Keep it lit daily and it glows; miss days and it cools to ash.
The pieces
Ember is two cooperating systems:
- The app — Express + EJS + Postgres in Docker, a PWA. It owns habits, rituals, completions, and all the streak/heatmap maths, and serves both the website and a small JSON API. See the-app.
- The Telegram side — Ember never talks to Telegram directly (that would clash with the bot's single long-poll). Instead the existing telegram-bot framework grew a plugin that nudges you when something's due and lets you check in with tappable buttons. Making those buttons work required a general upgrade to the bot framework. See telegram-integration.
What it does
- Track habits with flexible cadences: every day, specific weekdays, N× per week, or N× per day.
- Group steps into rituals — an ordered stack (e.g. a morning routine) you run one step at a time.
- Streaks with grace/freeze days so one slip doesn't reset months of work.
- A year-long kiln heatmap that warms from ash to ember as you complete more.
- Telegram nudges with ✅ Done / ⏭ Skip / 😴 +1h buttons.
Why a separate app, not a bot plugin alone
Telegram allows only one process to long-poll a bot token. The telegram-bot router already does that. So Ember keeps all state and logic in its own app and exposes a loopback API; the bot plugin is a thin client that reads "what's due" and posts check-ins. This is the telegram-integration story.