Shop floor board for Neighborhood Golf Carts in Covington, LA. Board row number, Housecall Pro scheduled start, customer, job number, primary tech, Jobs pipeline status, next step, and Timeframe date.
BusinessTypeScript · CSSGitHub @NGC4160OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Neighborhood Golf Carts shop floor board — track carts through the shop. Separate from CartScope.
Loading the full README. The saved excerpt is shown below.
Shop floor / job board for Neighborhood Golf Carts in Covington, LA. Track carts as they move through the shop.
This is not CartScope. CartScope (cart-scope.vercel.app) is diagnostics. This app is a separate shop board on https://ngc-shop-board.vercel.app.
Merging to main updates that live URL. Do not attach this repo to the CartScope Vercel project.
This is a shop-floor spreadsheet, not a kanban and not CartScope.
One dense table on one page. Rows are jobs. Columns are these fields, in this order, always sorted by job number ascending:Read the full README ↗Shop floor / job board for Neighborhood Golf Carts in Covington, LA. Track carts as they move through the shop.
This is not CartScope. CartScope (cart-scope.vercel.app) is diagnostics. This app is a separate shop board on https://ngc-shop-board.vercel.app.
Merging to main updates that live URL. Do not attach this repo to the CartScope Vercel project.
This is a shop-floor spreadsheet, not a kanban and not CartScope.
One dense table on one page. Rows are jobs. Columns are these fields, in this order, always sorted by job number ascending:
schedule.scheduled_start, America/Chicago; dash when missing or Unscheduled — never invented)nextAction field; empty is allowed)YYYY-MM-DD date, empty/clearable)Every floor field edits inline. There is no fat top chrome (no Add cart button, toolbar, stats cards, search, or chip filters), no cart / bay / notes / phone columns, and no details drawer. The thin top bar has Timeframe (board-level date filter) and Sync. New carts normally arrive from Housecall Pro morning sync. Press N to add one locally — it asks for customer + job # first; the row appears on the sheet only after both are valid.
/parts — incoming parts and where they are going (separate shared store from jobs)/inventory — on-hand stock stored in that same parts document/wall for the shop TV (read-only grouping by stage — not an editing board)N add cart locally, Esc abandon a blank add—, Unscheduled, or missing schedule.scheduled_start) are hidden while the filter is on. Clear the date to see the full board again. The per-row Timeframe column is still a local promised date and does not filter the list./api/jobs/hcp merge as morning sync, forced even after the 7am run. Status shows Syncing…, then job count / last sync time, or the API error. Phones can still pull down to sync.Tablet and phone keep the same table (horizontal scroll if needed) so rows stay readable. Only the sequential row # column stays sticky on the left.
Customer name and job number are required. Empty or whitespace-only values show an inline error and are not saved. Job numbers must be digits or 17312-1 — not 000 or leading zeros. Duplicates are blocked. N opens a compact identity composer — not a board row. The cart only appears on the spreadsheet after both fields are valid. Tap away, Escape, or reload while it is still blank and it disappears. It is not stored. Status Other… cannot be an exact Housecall Pro pipeline name — pick that stage from the list.
Primary tech and Current Status are native <select> controls (OS picker on iOS/Android — they do not open the soft keyboard). Each list still ends with Other…, which is the only path that shows a text field. Status options are the full Housecall Pro pipeline; Primary tech is Field Techs + Unassigned.
Rows are always sorted by Housecall Pro job number, lowest first (numeric-aware: 1842 before 18510). There is no sort-by-customer / tech / status.
customerNameFromHcp prefers first_name + last_name when either is present. It never uses the shop name Neighborhood Golf Carts (or close variants) as customerName — those values fall through to other person / display / company fields. Company is only used when there is no person name. It never invents a name.
Residential customers often have the shop filled as company, which previously made every row show Neighborhood Golf Carts. Morning sync overwrites the board customer name by job number when HCP sends a real name, and clears a leftover shop name even if HCP sends an empty one.
The board job # is Housecall Pro’s invoice_number — the number HCP shows on the job/invoice in the shop. The public Jobs API has no separate customer-visible job number. job_number is only a fallback if a payload includes it. We do not use the HCP UUID id.
Live NGC invoices are currently 6-digit (for example 173128). The 4-digit examples on the local seed board (1839, 1842) are demo data, not a different HCP field.
Date started is Housecall Pro’s job schedule.scheduled_start (ISO 8601 date-time on the Jobs API). That is the appointment/schedule start on the official Job object — not created_at. Sync maps that field through /api/jobs/hcp and stores it as hcpScheduledStartAt. The board shows it as a shop-floor date only in America/Chicago (for example Mar 18, 2026).
If a job has no schedule start (or schedule.scheduled_start missing), the cell is —. Unscheduled (and HCP needs scheduling) always displays —, even if a leftover scheduled_start is still on the job. Sync time, board createdAt, HCP created_at, updated_at, and work_timestamps.started_at are never used as a stand-in. A later sync that omits the schedule object keeps a date that was already stored only when the job is not Unscheduled. Sync clears the stored start when the board pipeline or HCP work status is Unscheduled, or when schedule is present with an empty scheduled_start.
This is the beginning of the README. Read the rest at the original. Read the full README ↗