Shared engine
Rounds, running bill, service charge, tip, split and payment live in shared/tab.js — no DOM in it. Fix the money once, every preset gets it.
Free design
Markup, CSS and screen flow belong to the preset. Two venues can disagree about everything visual and still bill identically.
Table from the QR
Each table's code points at /sumi/?t=7&seats=2. One deployment serves every table; nothing about the room is hardcoded.
Static
No framework, no build step, no server. Plain files behind any CDN — a real tab service can come later without touching the front ends.