Wocart
Wocart runs the whole cash-on-delivery business for Algerian stores: an Arabic-first checkout, phone verification, Yalidine, ZR Express, NOEST, Guepex and 82 EcoTrack couriers, your own drivers, and M
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Tableside: an AI waiter for restaurants. LangGraph agent with tool calling, Next.js, Supabase/PostgreSQL, Stripe Connect payments, live kitchen display. In production.
翻訳待ち
Loading the full README.
Read the full README ↗An AI waiter for restaurants — a multi-tenant SaaS platform where an AI talks to customers, answers menu questions, recommends food, takes customized orders, confirms them, and sends them to the kitchen, alongside dashboards for restaurant owners and kitchen staff.
Live, taking real money. On 2026-09-11 a real diner card payment went through a real restaurant's own Stripe account, with the platform fee collected correctly — so the whole path (QR scan → menu → AI waiter → order → kitchen board → card payment → payout) has now run end-to-end in production, not just in tests.
Deployed at https://tableside.menu. The old address, order.beacondigitalconsulting.org,
redirects its pages there (its /api/ addresses still answer in place; see
src/lib/domains/core.ts).
Built since: payments — Stripe Connect onboarding per restaurant, card checkout for a single
order or a whole table's tab, tips, cash recorded by staff, refunds, receipts, and three platform
plans (Starter free at 1%, Standard $49/mo at 0.5%, Pro $149/mo at 0.25%) billed by Stripe
subscription; a customer-facing order tracker; kitchen alerts that keep sounding until an
order is accepted; per-line spice preferences and kitchen notes; preparation-time estimates;
and the seam a POS connector plugs into (see docs/pos-integration.md)
— no Toast/Square connector is built, deliberately; and pickup ordering, where a pickup counter
is a kind of table whose diners choose a pickup time and a name, and the kitchen sees when to start
(see docs/pickup-ordering.md).
What exists: the Next.js foundation; the full multi-tenant database schema (restaurants, staff
roles, menu, modifiers, ingredients, allergens, customer sessions, carts, orders, the order state
machine, and AI conversation transcripts) with Row Level Security; email/password auth, restaurant
onboarding, and a protected dashboard with full CRUD for categories, menu items, modifiers,
ingredients, allergens, and tables (including per-table QR code generation); a public,
mobile-first customer flow (Batch 4): scan a table's QR code, browse a real menu with search and
category filters, configure modifiers, and build a server-priced cart, with no signup required
(Supabase Anonymous Auth); real order submission (Batch 5): the cart becomes an immutable,
server-priced order via a single transactional, idempotent database function, with a confirmation
page and session-scoped order history; a live kitchen display (Batch 6, /dashboard/kitchen)
where staff walk each order through confirmed → preparing → ready → served (or cancel it) with
server-enforced, role-scoped transitions, live over Supabase Realtime, with the customer's own
order page updating in real time too; a conversational AI waiter (Batch 7) — a floating chat panel
where customers can browse the menu, build a cart, and place an order in natural language, backed
entirely by the same validated tools (submit_order(), cart mutation, RLS) the deterministic UI
already uses, never a parallel AI-specific path; and, as of Batch 8, production hardening — abuse
throttling on customer session creation and order submission, a health check endpoint, and a full
audit (see docs/production-audit.md); and Batch 9, a provider
abstraction so the AI waiter can run on either Anthropic (production default) or OpenRouter (a
cost-free development alternative), selected via AI_PROVIDER — see
docs/ai.md. Since then: staff management
(/dashboard/staff — add members by email, change roles, with a trigger that will not let a
restaurant lose its last owner); kitchen ticket splitting and merging, where one order's items can
fire as several independent tickets or several orders can share one, and the customer's status is
derived as the least-advanced ticket so they are never told "served" early; and reservations
(/dashboard/reservations — staff-entered bookings against a specific table, with 90-minute
double-booking prevention and a confirmed → seated → completed lifecycle). 1,301 automated tests,
run by CI on every push. See
docs/architecture.md for the target architecture and what's actually
implemented today versus planned, and for the AI waiter's design.
A real Supabase project has since been provisioned and extensively validated (dashboard,
customer QR-to-order flow, kitchen display, real order submission with audit trail, and
cross-tenant security checks all confirmed against live data — see
docs/production-audit.md
for the full breakdown), and a live AI conversation has since completed successfully against a real
model provider. One thing remains genuinely open there, and it is not an application bug: Supabase
Realtime postgres_changes INSERT delivery to anonymous-auth connections is a platform-side
issue under Supabase support investigation (ticket SU-452145). It has no impact on any
customer-facing code path — the kitchen display carries a polling fallback for exactly this. The
AI waiter has still never been exercised against the Anthropic provider, only OpenRouter.
This is the beginning of the README. Read the rest at the original. Read the full README ↗