Case studies / Kura Matcha SAS
Simplifying logistics andsales management for a tea wholesaler.
Kura Matcha imports specialty matcha and sells it to cafés and shops in Buenos Aires. Purchases are in dollars, most sales are collected in pesos, some in dollars, often in parts, and the exchange rate moves between the sale and the payment. A shared spreadsheet had stopped being able to say how the business was doing.
The situation
The founders wanted something very simple to operate: what each account receives and spends, stock by variety, exchange differences, and the fact that not every sale is invoiced and not every collection is in one currency. The spreadsheet mixed FX gains with margin, lost track of partial payments, and could not produce a delivery note without copying rows into a document.
What we built
- A plain relational database, designed from how they operate. No platform, no dashboard tool: tables for operations, accounts, movements, customers, stock and documents, with the rules in the schema. Small enough for two founders to understand, strict enough to keep the numbers honest.
- Operations apart from money movements. Sales, purchases, expenses and samples are valued in USD. Collections, payments, exchanges and transfers live in accounts, and each of the twelve accounts (cash and banks, per founder) carries its own currency.
- Mixed and partial collections. A sale can be collected in pesos at a stated rate, in dollars, in several lines over time, or later. Customer running accounts apply payments first-in, first-out.
- Exchange differences kept apart from profit. Peso balances are revalued at today's rate and the difference is shown next to cash, never mixed into margin. A "real balance" entry reconciles cash counts.
- Documents. Numbered delivery notes with or without prices, printable from any sale, and VAT invoices booked in the month of the invoice date.
- Login, backups and an automatic, idempotent migration from the previous model. On migration day the cash position reconciled to the cent.
- AI-assisted data entry. A Telegram assistant takes a sale, a purchase or a payment written in plain language, turns it into the right rows, shows a preview, and writes only after confirmation. It also answers "who owes what" and "how many days of stock".
How it runs today
The founders open one screen for cash, one for customers, one for stock. Pending items (an unpaid delivery, a purchase still owed) are listed in plain sentences. Profit is profit; the exchange rate is a separate line.
| Before | After |
|---|---|
| One spreadsheet for everything | Ledger with operations, twelve accounts, stock and documents |
| FX gains blended into margin | Exchange differences shown apart from profit |
| Partial payments tracked by memory | FIFO customer running accounts with debt alerts |
| Delivery notes assembled by hand | Numbered, printable, generated from the sale |
| Rows typed into the sheet | AI-assisted entry from plain language, previewed and confirmed |
| Questions answered by opening the file | Telegram assistant with live answers |
Stack: Python, SQLite as the book (right-sized for a two-founder company), Telegram Bot API, Claude, Caddy and pm2 on Hetzner.