All projects

Svitanok

In production · personal daily tool

Personal Telegram assistant — a daily morning briefing, LLM-driven task handling, and a Mini App dashboard, in production since day one.

Svitanok

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