Skip to main content

My Hub module

The staff-facing home surface — what a cashier or mechanic sees on sign-in before they pick a tab. Home dashboard tiles + working boards for the day's small operational stuff: what needs doing, what's been announced, what the shop's talking about, what came in yesterday.

Tab labelMy Hub
Foldersrc/modules/myhub/
Schemasshop-announcements.schema.sql, staff-duties.schema.sql
Shippedv0.6.979 → v0.6.982 (home + tasks + board + messages)

What it does

Home dashboard (v0.6.979). Tiles on the sign-in landing:

  • Live weather chip — current conditions for the shop's timezone (from shop_config), refreshed via the core/live.ts heartbeat. Not a widget the shop configures — a small anchor tile so the operator knows the app has data flowing.
  • End-of-Day report — yesterday's shop summary: sales collected, transactions rung, service tickets opened/closed, notable events. Reads from the audit spine + Sales//summary.

Shop Tasks (v0.6.980, staff-duties.schema.sql). Ad-hoc + recurring task templates the shop assigns to whoever's on shift:

  • Ad-hoc — a one-off task ("call Ryan back about the Roubaix"), assigned or open.
  • Recurring templates — the standing shop chores (open till, count drawer, close bay, wash the demo bikes). Templates instantiate on their cadence; completions land in the audit chain.
  • Every add / assign / complete / delete lands on audit_events.

Shop Board (v0.6.981, shop-announcements.schema.sql). Rich-text shop announcements:

  • Rich text + inline images.
  • Pin to keep at the top; expiry to auto-hide after a date.
  • Every post / edit / delete audited.
  • Owner-writable by default; roles configurable through the Settings permissions grid.

Messages (v0.6.982). A staff-to-staff messages board on the home surface — quick text posts with emoji + accent-color polish for legibility. Same audit + permission shape as the Shop Board.

Composition

  • Live-refresh heartbeat (core/live.ts, BIKE.L1-0021) — Home / Tasks / Board / Messages each register their own tick on the shared kbLive timer, so every open browser stays current with what any other terminal just posted, without polling collisions. Each section registers separately so an open Messages composer doesn't pause the Tasks refresh.
  • Audit narrator — Shop Board + Shop Tasks + Messages mutations run through recordMutationnarrate(event), so activity surfaces on the audit-trail ticker footer like every other module.
  • Weather chip — reads timezone + coords from shop_config; not a mockable widget, real HTTP.

What it does NOT do

  • Not a chat app. The Messages board is post + read + delete, not conversational threads.
  • Not a scheduling / rota app. Shop Tasks assigns to the shift, not to a calendar.
  • Not customer-facing. Everything on My Hub is internal — the shop's own operations surface.
  • No inbox / notifications — a post appears when the next kbLive beat fires (a few seconds), which is enough for a shop-floor context.

See also