Open source · Voice-first · Multilingual · noxtandav/Dhaara

Your journal, as a conversation.

Dhaara is the open-source, voice-first journal that lives on Telegram. Talk to it in Hindi, Tamil, Marathi, English — or a mix — and it quietly turns your day into a searchable archive of plain markdown files on your own disk. No app to open. No form to fill. Just talk.

telegram.me / dhaara_bot
Today · Tuesday
Just talk. Dhaara files it.
Voice or text, English or any Indian language. Each line lands in the right section of today's markdown.
spent 30 on milk, 20 on cold drink, 150 on auto today
Recorded to FINANCE 3 bullets · groceries · transport
Recorded to PERSONAL mood: tired · hindi → english
worked on Dhaara for 2 hrs, phase 1 nearly done
Recorded to WORK subcategory: coding
what did I spend on food today?
L12: [1:30 PM] [FINANCE/food] Lunch ₹150
L18: [8:10 PM] [FINANCE/food] Swiggy ₹420 2 entries · ₹570 total

What it does

Voice-in, structured-out — journaling that just keeps up.

An agent on the one app you already check a hundred times a day. It classifies, tags, times, and files every thought into one markdown file per day — with edit and delete by line number, reflection over time, and analytics out of the box.

Voice-first, multilingual

Ramble in Hindi, Tamil, Marathi, English — or a mix. Sarvam AI handles speech-to-text and translation; Dhaara understands and replies in your language.

Agentic, not a form

Each entry is classified into one of four sections, tagged with a free-form subcategory the agent invents as needed, and stamped with mood when it picks one up. Edit or delete past entries by line — just ask.

One file per day

Every day is a single markdown file with four fixed sections — WORK, PERSONAL, HABITS, FINANCE — and timestamped bullet entries inside each. grep just works.

Automatic expense capture

"Spent 30 on milk, 150 on auto" lands as separate bullets under FINANCE/groceries and FINANCE/transport. Rupees, dollars, lakh, crore — all parsed.

Inline tags for free

Every bullet carries its own [time] [CATEGORY/subcategory] prefix and optional mood — each line stands alone, perfect for RAG, search, and replay later.

TELOS-aware reflection

Drop your goals into _telos/. Ask "how am I tracking against my work goals this month?" — Dhaara grounds the answer in your actual entries, with a data-quality flag when coverage is sparse.

Eleven analytics scripts, one shared parser

Streak nudge for your shell prompt, GitHub-style activity heatmap, mood timeline, weekly summary with week-over-week deltas, combined dashboard, structured search with date / category / mood filters, tag inventory, CSV / JSON export with pivots — every script reads the same plain markdown. No database, no migrations, no daemons.

# 2026-04-15 Journal

## [WORK]
- [10:32 AM] [WORK/meetings] Standup with the team
- [2:15 PM] [WORK/coding] Finished the API refactor  *(mood: satisfied)*

## [FINANCE]
- [1:30 PM] [FINANCE/food] Lunch ₹150
- [6:00 PM] [FINANCE/groceries] Vegetables ₹300

Built for

Anyone whose life happens in the gaps.

The auto ride. Between meetings. While making chai. Dhaara doesn't ask you to sit down and open an app — it lives in the one app you already check a hundred times a day.

01

People who want to journal but don't

You've tried Day One, Notion, Notes.app, a paper notebook. They're all friction. Dhaara is one tap and a voice note.

02

Builders who own their stack

Plain markdown on your disk. Python. Telegram bot. AWS Bedrock or OpenRouter. No vendor cloud, no schema, no lock-in. grep works.

03

Multi-domain trackers

Work, personal, habits, and finance — captured side-by-side in one file per day so you can finally see how a stressful sprint correlates with takeaway spending and missed gym days.

Data sovereignty

Plain markdown. Your disk. Your stream.

Your journal is the most personal data you produce. Dhaara never sends it to a vendor's server, never asks you to sign in to a SaaS, never holds it hostage behind a subscription. It's just files on your disk — written in plain markdown, locked to a single Telegram ID, and yours forever.

Typical journaling app

Their cloud, their format.

×Your most private writing lives on someone else's servers in a database you can't see.
×Proprietary export formats; "delete" means whatever the vendor decides this quarter.
×Subscription lapses, the company pivots, the app shuts down — your decade of entries go with it.
×No multilingual voice. No agent. No analytics over your own entries.
×Privacy policy can change overnight, and your past becomes their training data.
Your interior life. Their growth metric.
Dhaara, self-hosted

Plain files. Plain truth.

Every entry is a bullet in a markdown file on a directory you chose. Open in any editor.
No database, no proprietary format. Back it up with git. Sync it with Syncthing. Ignore it for ten years and it still opens.
Bring your own model. AWS Bedrock or OpenRouter — Claude, Nova, Gemini, Mistral, Llama. Pay providers directly.
Single-user by design. The bot answers to exactly one Telegram ID — yours.
MIT licensed. Audit it, fork it, run it on an air-gapped Pi if you want.
Your stream. Your file. Your house.

Built on

A stack you'll recognise.

Boring infrastructure, exciting capabilities. A Telegram bot, a tool-using agent, a speech pipeline tuned for Indian languages, and plain markdown at rest — all behind a Python service you can actually read.

Telegram bot interface

The fastest path from thought to file. 2-minute setup via @BotFather; locked to a single user ID so only you can write.

Sarvam AI for voice

Speech-to-text, language detection, and translation — tuned for Indian languages. Free tier is enough to journal every day.

Bedrock or OpenRouter

One agent loop, two providers. Run on AWS Bedrock with Nova or Claude, or point at OpenRouter for everything else. Swap by editing one config line.

Markdown filesystem

One file per day, four fixed sections, inline tags. filelock for concurrent-safe writes; every path resolved inside data_dir — traversal attempts rejected.

PM2 for the always-on bot + scheduled reviews

One ecosystem file, four PM2 apps — the always-on bot, plus weekly summary, daily dashboard, and streak-nudge cron jobs that wake up on local time and go back to sleep. Survives reboots after pm2 startup; no thundering-herd schedules; logs you can actually find.

Quickstart

Up and running in three commands.

You'll need Python 3.11+, a Telegram bot token from @BotFather, a Sarvam AI key, and either an OpenRouter key or AWS Bedrock access. Full instructions live in the README.

~/projects — bash
# 1. Clone and install
$ git clone https://github.com/noxtandav/Dhaara.git
$ cd Dhaara && python3 -m venv venv && source venv/bin/activate
$ pip install -r requirements.txt

# 2. Configure your secrets (Telegram, Sarvam, model keys)
$ cp config.example.yaml config.yaml
$ $EDITOR config.yaml
$ python scripts/check_config.py   # lint before running
$ python scripts/init.py           # create data_dir, _telos seeds

# 3. Talk to your bot on Telegram
$ python -m src.main

→ Message your bot — that's it. PM2 manifest available for production.

What you'll get

A private journaling bot wired to your Telegram, with voice transcription, a tool-using agent, and a markdown filesystem — all running on your machine.

1
InstallClone the repo, create a venv, install requirements.
2
ConfigureCopy config.example.yamlconfig.yaml, add your Telegram + Sarvam + model keys, run check_config.py and init.py.
3
Runpython -m src.main — message the bot. For long-running deployments, use the shipped ecosystem.config.js.example with PM2.
Read the full README

Stop opening apps.
Start talking to your day.

Dhaara is in active development and built in the open. Star it, run it, fork it, and shape Phase 4 — vector retrieval over your past entries — with us.