← Back to portfolio

A payment ledger that refuses to guess.

Small traders in India run their business on WhatsApp but keep no ledger, so dues get forgotten and "I never promised that" disputes come down to memory. Sankhya+ reads the chat they already have and turns it into a record they can trust.

This walkthrough replays the project's test chat through the engine, one stage at a time. It contains all four trap cases the engine has to survive.

    Ramesh KumarChat exported by Kumar Traders

    Real screens from the app

    The walkthrough above shows the engine. These are the screens a shop owner uses, shown with the app's sample data.

    Sankhya+ dashboard
    Dashboard. Pending, received, overdue and customers at a glance, with unconfirmed items called out instead of counted.
    Review screen listing extracted orders and payments with source messages
    Review before saving. Every extracted order and payment shows its source message, and nothing is saved until the owner confirms.
    Customer ledger with orders, payments and promised dates
    Customer ledger. Orders, payments, the running balance and the next promised date, each backed by a message.
    Sankhya+ dashboard in Kannada
    The whole interface switches language, not just the reminders. Here in Kannada.
    Reminder builder with language, script and tone options
    Reminder builder. Pick the language, script and tone, then send from WhatsApp.
    Sankhya+ on a phone
    Mobile first. The real user is behind a shop counter with a mid-range phone.

    Tested against an answer key

    Because the engine follows rules, it can be checked against a hand-made answer key. Every tricky case from the research runs automatically.

    RuleWhat is checkedResult
    A: price hagglingUses the final 440 and ignores 450 and 430Pass
    B: unpriced orderFlagged, never given an invented pricePass
    C: double paymentA payment and its confirmation count oncePass
    D: future orderKept out of dues and noted separatelyPass
    EvidenceEvery entry carries its source messagePass
    HonestyThe balance is marked "not final" when an item has no pricePass
    LanguagesCorrect extraction in English, Hindi, Kannada, Malayalam and romanised typingPass
    FormattingIndian number grouping, such as ₹3,10,000Pass

    32 of 32 automated checks pass.

    The product decisions

    These were judgment calls about what the tool should and should not do, made before any code.

    Never guess a number

    If no price was agreed, the order is flagged and shown to the owner. A confidently wrong amount starts a fight with a real customer, so it's worse than no answer.

    Evidence with every entry

    Every order, payment and promise keeps the message it came from. When a customer disputes, the trader has the receipt.

    Offline, in one file

    No server, no cloud login, and no data leaving the phone. It runs from a single file on a cheap phone with poor internet.

    Speak the trader's language

    The interface and reminders work in English, Hindi, Kannada and Malayalam, including romanised typing the way people really chat.

    Why rules, not a chatbot

    A rules engine is predictable, runs fully offline, keeps the trader's data private, and can always show why it made a decision. For money, that transparency matters more than cleverness.

    My role

    I found the problem, hand-extracted real chats to learn the rules, made the product calls, defined the four traps and wrote the answer key. AI wrote the engine and interface code to my specification, and I checked its output against the key.