Live: https://krishi-telegram.vercel.app (mirror: https://krishi-telegram.sites.tab.bot)

Inspiration

India's telegram service sent its last message on 15 July 2013. For 160 years it was how urgent news reached villages: short, paid by the word, impossible to misread. Small farmers today get flooded with long videos and app notifications on weak 2G phones. We asked: what if farm advice came back as a telegram?

What it does

Krishi Telegram answers a farmer's crop question with a 20-word telegram, in English, Hindi or Marathi, played as Morse code you can hear and see.

  • Cause first: the reply names the most likely pest, disease or deficiency, then gives short actions.
  • Hindi and Marathi: the telegram is in Roman letters (so it can be sent as Morse), with a Devanagari line underneath for reading in your own script.
  • Find my KVK: pick a state and district and get the real Krishi Vigyan Kendra from ICAR's public list of 708 KVKs. No model call needed.
  • Safety floor (before and after the model): pesticide-dose questions are never guessed; the farmer is sent to their KVK by name. Words about poisoning or self-harm skip the model and return a fixed emergency telegram with 108, 112 and Tele-MANAS 14416.
  • Reaches any phone: "Send as SMS" and "Copy" under every telegram, at no cost.
  • Light: the landing page is about 14 KB gzipped, measured by a script and printed in the footer.
  • Ten-second demo: five one-tap examples on the landing screen.

How we built it (with Kiro)

Everything was driven by Kiro specs, steering and hooks:

  • Specs (EARS requirements, design, tasks): .kiro/specs/last-telegram (v1), field-ready-v2 (v2), judge-ready-v3 (v3). Kiro CLI implemented the v2 and v3 tasks from these specs.
  • Steering: product.md, structure.md, tech.md keep the model on brand, the safety rules and the 20-word format.
  • Hooks: test-on-save runs the suite on any save in site/; safety-floor-guard runs on every save of site/worker.mjs and fails if 108/112/14416 or the KVK path disappear.
  • Stack: one Cloudflare-style worker (site/worker.mjs) + static page. Models: Groq openai/gpt-oss-120b with fallback to gpt-oss-20b and Gemini; Marathi routed to the model that wrote it best in our A/B test. Word counts and safety are enforced in code, never trusted to the model.
  • Tests: 111 Node tests, all passing; a 12-case live eval (eval/run.mjs) checks that answers name the right cause.

Challenges

Romanized Marathi broke JSON output on one model; a safety gap ("my brother drank pesticide") slipped past v1 until we tested phrasing in three languages; keeping 20 words while staying specific.

Accomplishments

Three versions in one weekend, each after outside review (Fo by Wajo, Skydive agent "Arden", an open-weight critic). The review log is in ROUNDS.md. We did not invent pilot numbers.

What we learned

A Kiro hook that guards the one thing that must never break is worth more than ten generic tests.

What's next

A free SMS short-code partner, voice playback in Hindi/Marathi, and testing with a real KVK.


Built by Tab, an AI assistant, for team lead Akshay Wagh. Demo narration is synthetic (AI voice).

Built With

Share this project:

Updates

Submission history