Visit board
A React block (a whole screen) in Beamline's Shop app.
The staff board for a walk-in queue: visits move from waiting through called and serving to done today. Arrival (here or on the way), the place in the queue and the service stage are separate facts with their own buttons, and every move stamps its own time without rewriting when someone joined; Call next skips people not yet here. Who can serve says why someone can't (on a break, serving another ticket); a refused move says why and changes nothing; a long wait and someone called but not come carry the warning tone. The admission strip shows how many are in, the cap and whether new visitors can join, with the reason in words: lowering the cap never removes anyone, an unknown count turns closing-itself off, closing by hand is said with its time, and each open and close is announced. On a phone, one stage at a time with the others counted.
Use it for
- A front desk running a walk-in queue: calling people, starting and finishing service, and closing the queue when it's full.
- Anywhere arrival, queue order and service progress must stay separate facts with their own times.
Not for
- Matching waitlisted requests to openings in a booked day (waitlist-desk).
- The screen the waiting room sees (queue-display).
Anatomy
- header: the product's mark, the title, the branch and date, Call next with its ticket
- admission: in the queue and the cap beside it as figures (the cap edits in place), the state with its reason, Close now or Reopen
- said: a refusal or an announcement
- lanes: Waiting, Called, Serving, Done today, each with its count
- visit: position, code, name, here or on the way; service and party; joined, waiting, arrived, called, started with whom, done or no-show times; the stage's buttons (Mark arrived, Call, Move up, Move down; who serves, Start service, Back to the queue, Not here; Done)
States
- visit: waiting here, waiting on the way (can't be called), waiting long (warning), called, called and not come (warning), serving, done, no-show
- staff: free, serving another ticket, away with why
- move: busy; done (stamped); refused (said, nothing changed)
- admission: open (success), full at the cap (warning), closed by hand (warning), count unknown (info); cap lowered below the count (said, nobody removed)
- empty lane: said
- phone: one stage at a time, the others counted
- right to left: the layout mirrors
- reduced motion: nothing animates
Keyboard
- Tab to Call next, the cap, Close now; then each visit's buttons in queue order; arrows within the phone's stage switch
Motion
Nothing moves beyond the parts' own feedback. Nothing runs at rest.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
branch (required) | string | — | |
defaultVisits (required) | Visit[] | — | |
staff (required) | QueueStaff[] | — | |
defaultCap | number | null | — | The queue's cap; null when there is none. |
countKnown | boolean | — | false: the live count isn't coming through. |
defaultClosed | boolean | — | |
now | string | — | Now, as an ISO time (for demos); the clock by default. |
onAction | ((visitId: string, action: VisitAction, staffId?: string | undefined) => Promise<unknown>) | — | Do the move in your system; reject with the reason to refuse it. |
onAdmission | ((change: { cap: number | null; closed: boolean; }) => Promise<unknown>) | — | |
product | string | — | Your product's name, shown as its mark. |
className | string | — | Classes on the documented visual root; no override by default. |
ref | Ref<HTMLDivElement> | — | Receives the documented native target or imperative handle; omitted by default. |
onTaskDone | ((visitId: string, taskId: string) => Promise<unknown>) | — | Tick off one of a visit's pending tasks in your system; reject with the reason to refuse it. Without it the tasks are read only. |
providerFilter | boolean | — | Show a provider filter above the lanes: one staff member's visits (by `providerId`, else who serves them), or visits with no provider yet. Off by default. |
defaultProvider | string | — | The provider the board opens on; "all" by default, "none" for visits with no provider. |
Built from
Dependencies
lucide-react
Import
import { VisitBoard } from "@beamline/visit-board";
Get it
Visit board is part of Beamline UI. Install the parts you need in your React app as compiled packages or editable source. Get Beamline · Connect your agent
More in Shop
- Product editor: A product being made in a shop's back office, every value read as text at rest. The variant grid, grouped by the first option, lists each combination…
- Category manager: A shop's product categories, nested and ranked. Each category moves up, down or into another from its menu, and every move gets its own receipt (saving…
- Inventory item: One stock item in a shop's back office, apart from the variants that sell it (how many each uses per unit). Stock per location as stocked, reserved and…
- Plan comparison: Plans side by side against every feature: prices that roll between monthly and yearly, the current and recommended plan marked, a header that stays in…
- Step form: The finished frame for any multi-step form you compose — onboarding, intake brief, questionnaire, booking, application: a wide card with progress, the…
- Orders admin: A shop's order desk: today's orders and revenue, quick filters for what needs doing (to fulfil, unpaid, returns), a virtualised orders grid, and the…
- Order detail: One shop order with payment and fulfilment as two separate lanes. The header says where each stands (paid, partly paid, awaiting, refunded; not…
- Order board: A shop's orders as cards in its columns, on the shared kanban with drag and keyboard moves. Each card: number, estimate or work order, customer, vehicle…
- Order composer: An order made inside a support ticket: products found by name, each variant with its stock drawn and said (in stock, none, oversold, not known) and the…
- Draft orders: A draft order made for a customer in a shop's back office that reads like the order it will become. The lines lead: each with its variant and SKU or…
- Order changes: What happens to a shop order after it's placed. Edit: the order as it stands beside the requested version, each line marked new, changed (old → new…
- Special orders: Customers' special orders as demand to buy for, per outlet: To order apart from Ordered; each product's demand, what is reserved, incoming and on order…
- Order history and fills: Every order the account placed and every fill it got, for a period: totals for volume, fees, fill rate and maker share; orders with their status and how…
- Order ledger: Purchase orders as money. Each order's spend is drawn against its approved total (paid, billed, pending, what is left, and any overrun past the end…
- Ticket orders: A customer's orders inside a support ticket, each action's effect said before it's done: orders and drafts kept apart, a paid draft shown once as its…
- Record search: One search across connected records (customers, vehicles, orders) by name, phone, plate, VIN or order number. What the words look like is said (info)…
- Return queue: A queue of return cases. Search by return, order or customer, exactly (the default) or loosely; status tabs with counts, Requires attention first; a date…
- Return case: One return as one place where every act is its own. The return, its order (linked out) and the customer on three cards; the stage said on its tone. Items…
- Return request: Staff start a return from an order, and edit the reasons customers pick. New return: the order's lines as a checklist, each with its variant, price and…
- Purchase orders: A salon's purchase orders, received: the orders down the side, the chosen one beside them. Each line still due reads as a strip of received, this…
- Print quote: A print shop's quoting in three places. Quote: a group of garments that share one imprint and one quantity break, the group's pieces counted together and…
- Service estimate: An estimate for one vehicle. Services added from the catalogue (one not listed for this vehicle said on warning, fit unknown said); each with its lines…
- Job card: A technician's repair order, phone-first. The vehicle, the customer and when it's due in words (due at, due in, overdue by how long); an offline copy…
- Parts tracker: Parts across a shop's work orders: each with its number, the order and vehicle, supplier, quantity and cost (not known said), and where it is: ordered…