A Hamlet building
Restaurant software that runs the whole place.
The till, the kitchen, the online store, the couriers, the TVs on the wall and the music in the dining room. Pavilion is one app you host yourself, so it replaces the stack of subscriptions a small restaurant usually pays for, and your orders and customers stay yours.



The screenshots on this page show the demo restaurant that ships with Pavilion, Corner Kitchen.
A real point of sale for the counter, built for fingers and busy hands.
Register 1 · what it does
Sections follow your stations. Tap a dish to add it, swipe a line to discount, customize or remove it.
Combos walk the cashier through each choice. Dishes take options, add-ons, substitutions and things to leave off.
Staff pick their name and type a 4-digit PIN. Five wrong tries locks that person out for a minute.
Each register pairs its own Terminal. No Terminal? The register shows a QR code and the customer pays on their own phone.
Take part of a bill one way and the rest another. Gift cards scan by camera or reader.
Open with a float, record paid in and out, and close by counting. The expected amount stays hidden until you have counted.
Find any order, reprint or send its receipt, and refund the whole order or picked items.
Typed-in discounts need a manager's PIN. Cashiers can ask for one without leaving the order.






The kitchen display. Tickets hang here until the food goes out.
Every dish goes to the station that makes it: grill, bar, pastry, whatever you set up. Each screen shows only its own part of an order.
Tickets change colour as they run past the station's target time, so the late ones stand out from across the kitchen.
Tap a ticket, click it, or run the whole screen from a keyboard alone. Every action shows its shortcut, and it works on a TV mounted in portrait.
Each station confirms and marks its part ready. When every station is done the order is ready for pickup.
Rejecting an online order voids or refunds the payment and tells the customer why.
Allergy notes show as red flags with a banner on the ticket. Modifiers are coloured by kind: left out, extra, option.


Real inventory and costing, from the delivery door to the plate.
Buy ingredients, cook them into components, and build dishes from components. Everything downstream follows from that chain.
Food cost, allergens and diet flags come from the ingredients you buy. Nobody types them in by hand.
Cooks follow a recipe step by step with timers, scale the batch, and record what it made. Batches in progress show for the whole shift.
Transforms move a component from one state to another, like fresh patties to frozen and back.
When a part runs out the dish shows as sold out on the register, the online store and the menu boards. Set any item to Off, Auto or Always.
Draft purchase orders when stock drops under par, log deliveries with their receipts, and see which prices went up.






Your own online store. No marketplace, and no cut of every sale.
Customers order from your menus, pick a time, and pay by card. Hours, cutoffs and a pause button are enforced on the server.
The store is a PWA. Customers add it to their home screen and get push notifications as their order moves along.
Order history, one-tap reorder, receipts, saved cards and addresses.
A live tracking page shows received, cooking, on the way and delivered, with an arrival time.
Every page is drawn by a theme. Edit colours, fonts, images and sections in the admin and preview before you publish.
Gift cards, catering quotes, events, and services like rooms and staff sit alongside the food.
Today there is one built-in theme, Neighbourhood. The plan is for designers to publish themes that any store can install. Sharing and installing themes is still being built.







A courier app for your own drivers.
Couriers sign in on their phone and say how they are travelling: on foot, by bike or by car.
New deliveries go to couriers first. The kitchen only sees a delivery order once someone has taken it.
Pick up, head out, arrive. Each step updates the customer's tracking page.
A photo at the door closes the delivery.
Travel times come from your own OpenStreetMap routing, using Valhalla and Nominatim, so there is no maps bill. The courier app installs on a phone and uses web push for new deliveries.



Every TV in the building, laid out by you.
Lay widgets out on a grid: order lists, weather, clocks, QR codes, promo slides, the song that is playing, and an order-ready pop-up.
Five for landscape TVs and five for portrait. Pick a menu, pick a template, and choose what to feature. Sold-out dishes update on the board by themselves.
A small computer behind the TV pairs with a six-digit code and shows whichever screen you pick from the admin.
Every screen is built for one or the other, and staff screens work both ways.




The same lunch menu in every template. Five are made for a TV on its side and five for a TV hung upright. Change the menu once and every board follows.










Music for the room, and a way to talk across it.
Upload songs, sort them into playlists, and see what is missing tags.
Every screen on a channel plays the same song at the same moment, so the dining room and the patio stay in step or play different things.
Voice channels work like walkie-talkies between screens. Hold the button and speak.
Spoken announcements call out names when orders are ready, and the music ducks quietly underneath.



Catering, from the first quote to the last chafing dish.
They pick dishes and services, a date, and pickup or delivery. Notice periods and minimums are checked as they go.
Accept it, or propose changes. The customer accepts or declines, and it can go back and forth.
Nobody loses track of what was agreed. Both sides see the same history.
The card on file is only charged once both sides agree.
Holds for rented equipment are placed close to the event and released after.
Set a minimum order and price breaks by quantity on any dish, and see the food cost at each break.
Sell staffing by the hour, equipment rental by the day, a room, or a class. Customers add them to a catering request.



Gift cards, staff cards and discounts.
Sell them on the register or online, with designs that come and go by season. Card numbers are never stored, only a hash and the last four digits.
Give staff a card that refills itself on a schedule, like a shift meal, or one that takes a staff discount. They scan it at the register.
Automatic offers, coupon codes, happy-hour windows and first-order deals, each with its own days, times and limits.
Choose where a discount works: in store, pickup or delivery. Decide what stacks, and see how each one performed.
Customer profiles show lifetime spend, average order and what they usually get, with notes only staff see.




Scheduling and a time clock for the whole team.






The back office: menus, money and everything you set once.
Net sales, orders, average order and ticket time, live. Reports by day, as a table, a calendar or a CSV.
Every order with its timeline, payments and customer. Add a note, send a receipt, or refund.
Several menus with schedules and priorities: breakfast, lunch, happy hour, specials. Choose how each one looks on a menu board.
Prep time, the station it goes to, allergens, food cost against price, and what a combo saves the customer.
Weekly hours with breaks, one-off events that open or close the store, and announcements to go with them.
Connect your own Square account from the admin. Each register pairs its own Terminal.
Receipts, order updates and gift cards go out through listmonk. Push notifications switch on or off by kind.
Only registered devices can open the register and kitchen screens. Kiosk links make a tablet remember what it is for.









What it is built on, and how to move in.
A new order, a dish selling out, a song skipping: every open screen hears about it at once over Server-Sent Events. Nothing polls.
English and Ukrainian are complete, and Cantonese is under way. Each person's language follows them across the store, their emails and their notifications.
Permissions go down to view, edit and delete on each admin page. Prices and totals are always worked out on the server, and only the server marks a payment paid.
Pavilion is Django 6.1 on Python 3.12 or newer, with plain templates and vanilla JavaScript. There is no npm and no build step. It runs on PostgreSQL and Redis in production and on SQLite while you try it out.
Then open /apps/ on your machine. seed_demo fills in the Corner Kitchen demo with menus, orders and staff. Skip it and Pavilion opens a first-time setup screen that asks for your store's name, address, tax rate and time zone.
The compose file brings the web app, Postgres, Redis, a scheduler for the daily jobs, routing and address lookup. Put a TLS proxy in front. Most settings live in the admin, not in environment variables.
Terminals, online payments, saved cards and refunds, on your own account
Transactional email, newsletters and event announcements
Order updates and courier alerts. The keys are generated for you
OpenStreetMap routing and address lookup for deliveries
The weather widget on screens
Screenshots for the store app's install sheet
Error reporting
Photos and music in production