Svitanok
In production · personal daily toolPersonal Telegram assistant — a daily morning briefing, LLM-driven task handling, and a Mini App dashboard, in production since day one.

Stack
- TypeScript
- React 19
- Cloudflare Workers
- Cloudflare KV
- Telegram Bot API
- Vitest
- GitHub Actions
The problem
I wanted one thing that actually runs every morning without me touching it: weather, calendar, news, exchange rate, and a daily interview-prep question, delivered as a single Telegram message — plus a conversational assistant that can act on my calendar, mail, and reminders instead of just answering questions about them.
Approach
Solo-designed, solo-built, solo-run in production: architecture, implementation, deployment, and monitoring. The briefing runs on a GitHub Actions cron job that talks to a Cloudflare Worker; the Worker is the only thing that touches Cloudflare KV (a single namespace, ~10 keys — deliberately no D1/R2/Durable Objects, since the scale is one user, not a multi-tenant product). A small VPS keeps a long-lived Claude CLI session alive for the assistant, because Workers silently kill background execution around 25-30 seconds — too short for multi-step tool use.
Key decisions
- –Fixed-schema LLM actions: the assistant picks from a closed set of JSON-defined actions rather than calling arbitrary tools — cheap actions run immediately, risky ones show a before/after diff and wait for explicit confirmation.
- –Atomic KV writes: the "confirm" button submits unsaved edits and the confirmation flag in a single request, because Cloudflare KV has no compare-and-swap and a two-step write would race.
- –Found and fixed a real authorization bug myself: Mini App requests are authenticated via HMAC-signed Telegram initData, and an earlier version silently degraded that secret to a public constant when the bot token was missing — closed before it shipped anywhere public-facing.
- –1,300+ Vitest tests covering all business logic, kept side-effect-free by design; typecheck + lint + test gate every merge via GitHub Actions.
- –A Mini App dashboard (React 19, Vite, TanStack Query, D3) with a job-tracking tab that scores open listings against my own profile, alongside a habit check-in flow and delivery-reliability stats.
Result
In daily production use since late June 2026 — roughly a month of intensive development, 548 commits, ~27.7k lines of code outside tests. It's the project I'd point to first for architecture and judgment under real constraints, not just feature count.
Private repository — code available on request.
Want something like this? Get in touch