comit
commit to the people who matter
A work-life-balance companion for WhatsApp — interaction scores, reply-debt tracking and gentle nudges, computed entirely on your device.
Akhil Tripathi · MIT licensed
The gap
Messaging apps track what's unread.
They say nothing about what's unreplied.
- The friend you used to text weekly, now silent for two months.
- The reply you've owed your mother for three days.
- Work chatter that quietly took over your evenings.
We drift, and we don't notice until it's a pattern.
What comit does
Interaction Score
A transparent 0–100 health score per contact — recency, frequency, reciprocity, responsiveness, who-starts.
Reply Debt
Who you owe a reply, and for how long. "Amma, 3 days."
Work-Life Balance
Work vs personal split, after-hours work, your late-night pingers.
Momentum
Who's heating up, who's going quiet — before it's too late.
Nudges
One ranked, plain-language to-do list that ties it all together.
It just runs
$ bun run demo comit · 6 conversations · 321 messages · 90-day window -- nudges ----------------------------------------- ! Vinay (work) reached you after hours 44x recently. ↩ You owe Amma a reply - waiting 3 days. ~ Amma is cooling off: ~10.9/wk -> ~2.0/wk. Reach out? ⏱ Your replies to Karan take ~15h on average. -- balance ---------------------------------------- work vs personal ######------------ 35% work after-hours work 66 messages (64% of work chatter)
…or open the offline dashboard with bun run web.
Transparent by design
No black boxes. The interaction score is a documented, tunable formula:
score = 100 × ( 0.30·recency + 0.25·frequency + 0.20·reciprocity + 0.15·responsiveness + 0.10·initiation )
Every constant is exported and overridable. Change one, re-run the tests, see exactly what moves.
The part that matters most
Your messages never leave your device.
comit makes no network requests at all — even the dashboard's fonts and charts are self-hosted. Auditable in an afternoon.
How it's built
WhatsApp .txt export
|
v
+--------------+ pure, deterministic +------------------------+
| DataSource | ----------------------> | analytics engine |
| export parser| (no I/O, no clock) | score.debt.balance |
+--------------+ | .trends.nudges |
^ +-----------+------------+
future: live +--------------+-----------+
Baileys adapter, v v
same interface CLI report Dashboard
One pure core. One I/O seam. A live data source could plug in without touching a line of analytics.
The engineering
- TypeScript, strict mode, runs on Bun with no build step.
- Pure core → fast, deterministic, exhaustively testable.
- Clean adapter interface for new sources (Telegram, Signal, iMessage).
- CI, docs, and a deterministic synthetic-data generator.
Where it goes
- More importers — Telegram, Signal, iMessage, each just a new
DataSource. - Opt-in live source via Baileys — clearly flagged, never a default, because privacy-first means the user makes that call.
- Weekly digest and a per-contact deep-dive in the dashboard.
- Configurable weights and nudge rules.
Built to be forked. Good first issues are tagged.
comit
commit to the people who matter
github.com/akhil29897/comit · MIT
A small daily commit — to your relationships, and your off-hours.