Inspiration

I'm Ecuadorian, raised in Valencia, Spain, and I've always felt the gap between the tools a business gets in a rich country and what a small business back home can reach. I've worked with data my whole career, and when I saw people turn apps into AI agents that could actually do things, it clicked: this tool can level the playing field — like the wheel, or the industrial revolution — but only if it reaches the people usually left out. So I set out to bring useful AI to Ecuador's small businesses — salons, barbershops, clinics — at a fair price, so a Quito salon can compete with anyone.

What it does

Kuti is an AI assistant that lives in the business's own WhatsApp. When a client writes, it replies in about 2-3 seconds and books the appointment in the same chat — she asks the price of a haircut, Kuti quotes it from the real catalog and schedules her in Google Calendar. For services that need a deposit (like a balayage), Kuti asks for it, reads the receipt image the client sends, and forwards it to the owner to approve — the AI relays the proof, but a human confirms the money; nothing is marked paid on its own. The owner stays in control with simple commands (/bot, /humano, /stop, /ok) and can take over any chat. It doesn't just reply — it decides and acts.

How we built it

Let's follow a real message. A client writes on WhatsApp: "How much is a balayage?" The Wasender API sends it by webhook to n8n. First, Supabase checks for owner commands — if the owner paused the bot or took over (/stop, /humano), Kuti stays quiet; if not, it reaches the Gemini 2.5 Flash agent (via the Gemini API on Google Cloud). Grounded on the salon's real catalog through Supabase/pgvector (RAG), Kuti quotes the real price instead of inventing one.

Here's the key decision. Because a balayage needs a deposit, a fixed rule — a Postgres function, not the AI's prompt — blocks the booking until it's paid. Kuti asks for the receipt, and the flow stops there until the owner confirms with /ok. A client can't talk their way past the deposit, because it's a rule in the database, not a suggestion in a prompt.

Only then does booking continue: Kuti reads live openings from Google Calendar, the client picks a slot, and Kuti books it, logs it to a Google Sheet, and sends two confirmations — a branded Gmail email plus Calendar's native invite. It stores every chat in Supabase, so it remembers days later. And since a new client is just "base template + modules," we set one up in hours.

Challenges we ran into

Connecting WhatsApp. The official Meta API means paperwork, approval and upfront fees — hard for a solo founder. I chose the Wasender API to move fast, with Evolution API and Baileys as backups. The catch: unofficial APIs can get a number banned, and proactive messages trigger it. So I made Kuti strictly reactive, with the official WhatsApp Cloud API as the path to safe reminders later.

Making the model obey the money rules. Prompts alone won't reliably stop an LLM from booking without a deposit. The rules that protect a business's money had to become deterministic SQL, with Gemini working strictly inside them — the core lesson of the project. (Deposits also meant decrypting the receipt image out of WhatsApp, not just the text.)

Meta shipped free WhatsApp AI mid-project. Instead of competing on the model, I leaned into what they skip: real bookings, deposits, owner control, and a done-for-you service in the client's language.

Accomplishments that we're proud of

Kuti runs end-to-end on real WhatsApp chats — not a mockup, a live pipeline. A real business already uses it: La Capritxería, a vegan store whose 349-product catalog I indexed for RAG, so it answers from the real menu instead of guessing. No paying revenue yet — but a business leaning on it every day is impact, and it proves the product works.

What I'm proudest of is that I built all of it myself — not just the AI: a landing page I learned from scratch (domain, publishing, analytics), my first ads, the demo video (equal parts excitement and fear), and the hardest part, reaching out to owners. Coming from data, I taught myself the whole path from idea to a working product with real users. That's the accomplishment I didn't expect.

What we learned

The hard part of an AI product isn't the conversation — Gemini handles warm, catalog-grounded Ecuadorian Spanish beautifully. The hard part is trust. I demoed Kuti to a salon owner who was keen, but she didn't quite believe an AI could handle her clients — and in Ecuador, that caution runs deep. The real barrier isn't the tech, it's trust, which is why my edge is the service: I set it up, I stand behind it, I take care of it.

That same demo taught me something I should have seen sooner: she had no fixed prices — she quoted each client on the fly. Kuti can't book what the business hasn't decided, so part of the job is helping it get structured enough to be automated. Real users — and rejections — teach fastest.

What's next for Kuti

A sales cycle runs from attracting a customer, to answering them, to closing and charging, to bringing them back. Today Kuti covers the middle on WhatsApp — it answers, quotes, books, and collects the deposit — turning a casual "how much is it?" into a paid booking. It doesn't yet attract or win back customers; that's where I want to grow.

Next, I want Kuti to cover the whole cycle, and to go multichannel (WhatsApp, Instagram and Messenger in one place) and multimodal — text, images, and voice. It should reach earlier and later: flows that build ads and campaigns to bring customers in, and follow-ups that bring them back — all from a single app. I'll also move to the official WhatsApp Cloud API for ban-free reminders. But the real milestone is simpler: turning these pilots into paying clients — and, through them, bringing first-world AI to Ecuador's small businesses at a fair price.

Built With

Share this project:

Updates