Ronak Dangar

Product

Product · case study

KOSHI's poster engine

Reads the pack, plans the words, draws the poster, then checks its own work.

Agro-input retailers want a poster for a product the moment it lands on the shelf, in Gujarati, with their shop's name and number on it, to drop into their farmer WhatsApp groups. Image models can draw beautifully and still garble a Gujarati word or invent a digit, and a wrong digit is a wrong price or a wrong phone number.

This is the engine behind KOSHI's posters. It does not trust the model with anything a farmer could act on. It reads the pack with exact methods before it reads it with a model, writes the text in code before anything is drawn, and reads every finished poster back before a person ever sees it.

How it works

  1. Photograph the pack

    The retailer shoots the front and back of the pack and records a voice note about the offer.

  2. Read the pack

    Exact methods run first: the strength line pattern, the registered active-ingredient list, the printed registration number. A model is called only when they find nothing, and its answer must quote a line from the photo. Anything unsure stays blank for the retailer to type.

  3. Look the product up

    Name, brand, strength and what it is for, checked against the registered list.

  4. A clean product photoCheck

    A generated packshot ships only if its label adds no number and no more than two stray words; otherwise the retailer's own photo is turned, cropped and colour-corrected.

  5. Plan the words

    Code writes one Gujarati line per field before any drawing: the hook line, the benefit lines from the voice note, the price in Western digits, the shop's name and number.

  6. Draw

    Gemini 3 Pro Image draws the poster from that plan.

  7. Read it backCheck

    Google Cloud Vision reads the poster. Every planned line is compared character by character; numbers must match exactly, never nearly.

  8. Repair

    A failed line goes back to the model in the same chat, with the field named and the wrong glyph quoted. Three tries in ninety seconds, then a second model reads the poster without seeing the plan.

    If it still fails, back to the draw
  9. Verified, flagged or refused

    Every poster leaves with a verdict. Flagged means it ships with the faulty lines named; refused happens only when every try put a wrong number on it.

  10. A person approves

    The retailer sees the poster and the verdict, and sends it on WhatsApp or asks for another.

What it changed

~1 minper poster
3repair tries
0posters refused in the first month

On screen

KOSHI: a finished Gujarati poster for Confidor
A finished poster, as the retailer sees it

Built with A stateless Python package the Django backend calls: Gemini image models with a lazy fallback chain, Cloud Vision OCR, an exact-match verifier, idempotency keys, typed errors in Gujarati for the app.