Crown City Menu Picker
A realtime, browser-based menu picker for shared ordering. The UI is a single index.html file served by a lightweight aiohttp websocket server.
Features
- Realtime shared session state with per-room people and carts
- Local allergen filters (per browser) with persistent selection
- Vegan-only and gluten-free-only filters stored in
localStorage - Multi-term search with AND/OR matching that expands matching sections
- Menu “Expand all” / “Close all” controls
- “Show ALL selected food.” modal with per-person collapse/expand controls
Project Layout
index.html— UI, styling, and client-side logicmenu.json— menu data and title used by the UIserver.py— aiohttp server and websocket room/state handling
Selections are Highlighted
Showing everyone's selections
Searching
Requirements
- Python 3.9+ recommended
aiohttp
Setup
sudo apt install python3.12-venv
python3 -m venv myenv
source myenv/bin/activate
python3 -m pip install aiohttpRun Locally
python3 server.pyThen open:
http://localhost:8080in a browser
Usage Notes
- Rooms are in-memory only; restarting the server clears all rooms.
- The UI connects to the default room; room handling is still supported server-side.
- Allergen and diet filters are per-browser and stored in
localStorage. - Duplicate person names are blocked per room.
- The server logs key user actions with timestamps in the console.
- Menu data is loaded from
menu.json, so serve the UI over HTTP.
Filtering
- Open “Allergen key” and toggle allergens to exclude matching items.
- Use “Vegan only” or “Gluten-free only” to keep just those items.
- “Clear filters” resets both allergen and diet filters.
- Use search terms separated by spaces, then toggle AND/OR to control matching.
Common Tasks
- Add a person: click “+ Add person”
- Filter menu: open “Allergen key” and toggle allergens, Vegan only, or Gluten-free only
License
MIT — see LICENSE.
On this page
Contributors
MIT License
Created December 19, 2025
Updated February 6, 2026