
Caterizi — Multi-Country Catering Marketplace
caterizi.comCaterizi is a full-stack catering marketplace that connects corporate clients with professional caterers across multiple countries. The platform operates simultaneously in the United States and Spain, serving businesses that need reliable catering for corporate events, meetings, and large-scale gatherings. Each market runs on its own backend infrastructure while sharing a unified authentication layer, enabling seamless cross-border operations under a single brand. The system handles the entire lifecycle of a catering order — from initial request creation through caterer proposals, client selection, payment processing via Stripe Connect, real-time messaging between parties, and automated invoice generation. With 59 database models, 256+ API endpoints, and 67 frontend pages, Caterizi represents a mature, production-grade marketplace built to scale across geographies and handle complex B2B catering workflows end-to-end.
!The Challenge
The catering industry — particularly the B2B segment — operates almost entirely offline. Corporate clients looking for catering services typically rely on word-of-mouth recommendations, outdated directories, or cold-calling individual caterers. There is no standardized way to compare offerings, request competitive bids, or manage the ordering process digitally. This creates friction on both sides: clients spend hours searching for and vetting caterers, while caterers miss opportunities because they lack visibility. The client needed a platform that could operate across international markets with different languages, currencies, tax rules, and business customs. The US and Spanish markets have fundamentally different regulatory requirements — from payment processing compliance to invoice formatting standards. Building a single monolithic application would have been fragile and difficult to maintain across these diverging requirements. Additionally, the proposal-based ordering model introduced unique technical challenges. Unlike a typical e-commerce checkout, catering orders involve back-and-forth negotiation: clients describe their event requirements, multiple caterers submit customized proposals with different menus and pricing, and the client selects the best fit. This workflow required real-time communication, a robust state machine for order lifecycle management, and a payment system that could hold funds and distribute them between platform and caterer via split payments.
Our Approach
We began with deep discovery sessions to map the entire catering order lifecycle — from how corporate clients typically source caterers to how caterers price and fulfill orders. This informed the database schema design around 59 models covering users, orders, proposals, menus, payments, invoices, and communications.
We designed a multi-country architecture with separate NestJS backend instances per country, a shared PostgreSQL authentication service at auth.caterizi.com, and country-specific frontend deployments. This allowed each market to evolve independently while maintaining a unified user experience and single sign-on.
The proposal and ordering system was built as a state machine with clearly defined transitions — from draft to submitted, reviewed, accepted, paid, fulfilled, and completed. Each state change triggers appropriate notifications, updates dashboards, and logs audit trails.
Stripe Connect was integrated in platform mode, enabling the marketplace to collect payments from clients, take a platform commission, and automatically pay out caterers. This required handling connected account onboarding, identity verification, and compliance across US and EU Stripe regions.
We implemented real-time features using WebSocket connections for instant messaging between clients and caterers, deployed an AI-powered support bot using Claude API with 12 custom tool functions, and built a comprehensive email notification system with 29 templates and 13 automated nudge sequences.
The Solution
Multi-Country Backend Architecture
Each country runs its own NestJS backend instance connected to a dedicated PostgreSQL database, allowing independent schema evolution, data residency compliance, and market-specific business logic. A centralized authentication service at auth.caterizi.com handles JWT-based authentication across all markets, enabling users — particularly clients who may order in multiple countries — to maintain a single identity. The admin panel, built with Laravel, connects to all country databases and uses session-based country switching to manage operations across markets from a single interface.
Proposal-Based Ordering Engine
The core ordering flow allows clients to create detailed catering requests specifying event type, guest count, dietary requirements, budget, and preferred cuisine. These requests are broadcast to eligible caterers in the area, who can submit customized proposals with itemized menus and pricing. Clients review proposals in a card-based interface with swipe-to-shortlist functionality, compare options side by side, and select their preferred caterer. The entire flow is managed by a state machine that ensures data consistency and triggers appropriate actions at each transition.
Payments & Invoicing
Stripe Connect handles all payment processing in platform mode. When a client accepts a proposal, payment is captured and held until the order is fulfilled. Upon completion, the platform automatically calculates its commission, generates invoices compliant with local regulations (including proper tax handling for both US and Spanish markets), and initiates payouts to the caterer's connected Stripe account. The invoicing system generates PDF documents with correct formatting, sequential numbering, and all legally required fields for each jurisdiction.
AI Support & Communication Layer
Real-time messaging between clients and caterers is powered by WebSocket connections, with message persistence in PostgreSQL and read-receipt tracking. An AI support chatbot built on Claude API serves as the first line of customer support, equipped with 12 custom tool functions that can look up orders, check statuses, explain platform features, and escalate to human agents when needed. The email notification system sends 29 different template types across the order lifecycle, with 13 automated nudge sequences that re-engage users at critical drop-off points.
Results & Impact
Technology Stack
NestJS
Backend API framework with modular architecture
Nuxt.js
Server-side rendered frontend with SEO optimization
Laravel
Admin panel with RBAC and multi-country management
PostgreSQL
Primary database for all services
Stripe Connect
Payment processing with platform commission splits
WebSocket
Real-time messaging between clients and caterers
Claude API
AI-powered support chatbot with 12 tool functions
JWT
Cross-country authentication via shared auth service
PM2 / Nginx
Production deployment and process management