Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.laportenard.com/llms.txt

Use this file to discover all available pages before exploring further.

The sync system enables multiple POS terminals in a restaurant to share orders, table state, and payments in real time through an in-store hub server. It operates in two modes:
  • Direct mode (default) — Each terminal talks directly to Odoo via HTTP polling and an outbox queue. No additional infrastructure needed.
  • Hub mode (opt-in) — Terminals connect via WebSocket to a local Node.js hub that coordinates all activity and acts as the sole gateway to Odoo.
Hub mode is designed for high-volume restaurants with 5-15+ terminals where real-time coordination, conflict prevention, and reliable offline operation are critical.

Package structure

rost_pos_restaurant/
├── nu_pos_sync_protocol/     # Shared TypeScript types & Zod validators
├── nu_pos_hub/               # Node.js hub server (runs on Raspberry Pi)
└── nu_pos_react/             # Frontend (Next.js POS app)
    └── src/realtime/         # Transport layer, hub connection, outbox

Enable hub mode

1

Deploy the hub server

See deployment for Raspberry Pi, Docker, and systemd setup.
2

Configure Odoo

Set these fields on the shared POS config:
  • nu_hub_enabled = True
  • nu_hub_url = ws://<hub-ip>:8766 (or leave blank for mDNS discovery)
3

Verify

Terminals pick up the config on next bootstrap and connect via WebSocket. Open the hub dashboard at http://<hub-ip>:8766/ to confirm.