Skip to content

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.

Screens
Midtown OXXO · Ops
Ops board
Ops board
On the floor
8
modules the floor already used

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.

1
WhatsApp agent on the floor

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.

What it is

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.

Modules

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.

Architecture

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.

Built with
Next.js 16HonoMongoDBClaude