DiegoBarrionuevo
← Selected workOwn productIn development

A business builds its menu, the customer orders over WhatsApp.

Catalog, orders, cash and customer service in one panel; the order travels as a message.

Founder and developer2026
Next.js 15React 19TypeScriptDrizzle · PostgreSQLSupabaseWhatsApp
The storefront

Four themes, one platform.

The business loads its menu from the panel and Hermes publishes a branded web store, ready to share as a link or a QR code, with no app to install. Customers browse the catalog, build the order and send it as a WhatsApp message: no sign-up, no password and no commission per order.

The theme engine does not swap two hues: it changes the composition. Studio, Brutal, Street and Market each apply their own type family, weight and case, a different radius, 10, 0, 4 and 16 pixels, and another background and button over the same menu. Four demo businesses, Casa Umi, Fierro Burger, La Esquina and Lo de Tere, show the difference in under 30 seconds.

4
themes, one platform
0 %
commission per order
< 30 s
to see the difference
Orders

The order travels as a message.

The customer picks from the catalog, adjusts size, doneness and extras, confirms total and delivery, and the order goes out as a WhatsApp message with the full detail. The same order is recorded in the order centre: the panel is the source of truth and WhatsApp is the channel that carries it.

From the panel the business accepts with one hand, marks each status, new, confirmed, preparing, ready, sent or cancelled, and pauses reception for 15, 30 or 60 minutes or until the next shift, without closing the store. Offline, changes queue and retry on their own. What Hermes cannot see is whether the message arrived: that is why there is no delivery tick.

6
order statuses
15 · 30 · 60
minutes of pause, or until the next shift
The panel

Rush hour from a phone.

The order centre is built for rush hour and for one hand: the order that has waited longest on top, accept with one tap, pause reception without closing. If the connection drops it shows the last orders loaded and changes stay pending until it is back.

The home has one main task according to the real state of the business: load the menu, confirm the details, set up reception, test and publish. No charts until there are orders to chart. These screens are design canvases: the panel is partially implemented.

Design canvas of the order centre: new orders on top with the Accept button, the offline view and the sheet to pause reception for 15, 30 or 60 minutes
C02 – C03 · Orders · Design canvas
Design canvas of the panel home: the four-step setup, load the menu, confirm the business, set up reception and publish
C01 · Home · Design canvas
The menu

Menu photos in, candidates with evidence out.

Loading the menu is every business's first task and the one that takes longest. Hermes accepts photos of the printed menu, a PDF or the list already sent over WhatsApp, and the AI prepares a draft: every candidate carries its name, the text fragment it came from and its price.

A price whose digits do not appear in its fragment is not invented: it stays empty and is flagged as a conflict to review, never set to zero. In the spike over eight real menu pages, 163 items came out and 202 prices were kept for USD 0.024; a ten-photo load costs around USD 0.025. Free plan: 30 products and one AI load; Pro: 300 products and five loads.

8
real menu pages
163
items
202
prices kept
USD 0.024
cost of the spike
WhatsApp

A session that knows what state it is in.

Messages go out through a gateway of our own: Fastify with multi-device Baileys and the auth state kept in Postgres. The session is an explicit state machine, disconnected, QR pending, connecting and connected, with two terminal states that never retry on their own: logged out, which asks for a new scan, and banned.

The limits are explicit too. The QR refreshes up to six times and then stops; reconnection waits 2 to 60 seconds between attempts, eight at most; outbound messages are spaced 1 to 1.5 seconds apart. Hermes does not observe message delivery, so it promises no ticks.

6
session states, two terminal
6
QR refreshes, then it stops
2 → 60 s
backoff, 8 attempts at most
1 – 1.5 s
between outbound messages
Night to day

The landing dawns as you scroll.

Hermes holds two worlds in one product. The brand is night: a near-black backdrop, one warm ember and a glass nav. The product is day, Cristal Preciso: cold near-white, dark ink, one indigo accent, glass materials, hairlines and pill chips, with a blurred colour blob drifting slowly.

The landing tells it literally: it opens at night with the Casa Umi storefront on a phone and, as you scroll, it crossfades into day, where the four demo businesses appear. The whole fade is one variable, --day-mix, moving background, text and surfaces at once.

The Hermes landing still at night, with the Market storefront of Lo de Tere on a phone and the start of the Pedido en vivo section
Landing at 1,900 px of scroll: night
The Hermes landing in daylight: the section Cuatro negocios, cuatro identidades, with the storefronts of Casa Umi, Fierro Burger, La Esquina and Lo de Tere
Landing at 3,800 px of scroll: day
Foundations

More decisions on record than screens.

A pnpm monorepo: the panel, the database package and the design system. Next.js 15 with React 19 and TypeScript 5.9; Tailwind 4 and Radix in the panel; CSS Modules over the Cristal Preciso tokens in the landing. Drizzle on PostgreSQL with row-level security across 35 tables and two database roles; Supabase for e-mail code sign-in and storage; Vercel for hosting.

Before there are users there are 396 test cases in 41 files, four end-to-end specs with Playwright, 56 architecture decisions on record, 22 open questions, 20 design canvases and 103 commits. The order is deliberate: decisions first, screens after.

35
tables with RLS
396
test cases in 41 files
56
decisions on record
22
open questions
In development
4themes
35tables with RLS
396tests
56decisions on record

No users and no revenue yet: an own product in development.

The panel screens are design canvases; the landing runs.
Next projectPersonal finance with AITell the app what you spent by text, voice or a photo of the receipt; the AI proposes the entry and you confirm it.