OXXO
The internal operating system for the Midtown Miami dry-cleaner — tasks, a B2B pipeline, customers, the weekly schedule, and a WhatsApp agent the floor talks to by name.
Eight modules and the shop-floor agent — shipped.

Tasks, B2B pipeline, store dashboard, reports, customers, hiring, rolodex, and the weekly schedule — rebuilt as they were, so nobody had to learn a new shape.
Mention the bot in the shop group and it adds the rush, moves the card, or posts the morning board. The API the agent calls is the same one the web app uses.
The shop already had a way of working: a kanban, a commercial pipeline, a weekly grid, a POS export they opened for numbers. The job was to put that on an owned stack so it wasn't trapped in someone else's tool — without making anyone learn a new shape.
The interesting piece is the WhatsApp agent. The floor already lives in a group chat. Mention the bot, it adds the rush, moves the card, or posts the morning board. Same API the web app uses; nobody opens a laptop to update a task.
Tasks & sprint
Project kanban, a sprint board, and a per-person queue. Priority is a deadline horizon — 10 / 30 / 60 / 90 days — not a red/yellow/green sticker.
B2B pipeline
Commercial accounts from prospect through active (and dormant). The same board the owner already had, on an owned stack.
Customers & reports
Cohort analytics and year-over-year figures from the shop's POS export — the view they used to open a spreadsheet for.
Schedule, HR, rolodex
Weekly grid, hiring kanban, and the contact directory. The operating system around the work, not just the work itself.
Agent and app share a contract
The WhatsApp bot is a client of the same API the web app uses — add_task, move, done, sprint, board summary. Re-pointing it didn't mean a second data model.
The floor doesn't log in
The original tool was open inside the shop. Writes can be gated by a token for the agent; the humans just use it. Auth is a product decision, not a default.
Snapshots for the numbers
Reports and customer analytics are stored datasets, not live queries against a POS that wasn't built for them. The dashboard is honest about what it is.