Case Study · Point of Sale

Studs Cycles POS

A shop-floor POS built around how a motorcycle shop actually runs. One screen to see every repair order in flight, a fast ticket builder, per-technician time tracking, and live profitability math — designed from the owner's daily workflow up.

PocketBase · Go backend · SvelteKit · Svelte 5 · SQLite, single-binary deploy

Client

Independent motorcycle shop

Engagement

Port & rebuild from Go prototype

Outcome

Live, single-binary deploy

Daily triage

The Workbench

One screen, one glance. Every repair order in flight, grouped by lifecycle status, with the numbers that matter visible without a click.

  • Five status lanes — Needs Approval, Ready to Work, In the Shop, Collect Payment, Ready for Pickup
  • One-click advance on every card — approve, start, complete, release — each with a 5-second undo toast
  • Stacked avatars show which technicians are on each RO's labor lines
  • Opened date vs. last activity shown separately, so closed tickets don't look like they just updated
Workbench view showing repair orders grouped by status

The workhorse

Repair-order builder

Parts, labor, and fees as line items. Per-labor-line technician assignments and timer controls. Live totals plus gross profit % visible the whole time. Payment panel inline — no navigation needed.

RO builder with labor lines, totals, and payment panel
  • Quick-job bar — common services are one tap to add as a template of labor + parts
  • Per-line technician pickers plus start/stop timers that clock real work to labor_time_logs
  • Live gross profit + margin — the owner sees profitability while quoting, not after
  • Pay-balance shortcut prefills the full outstanding amount with one click
Parts Orders pane

Owner-facing dashboard

Parts Orders

Sees what techs have queued, records the real PO + ETA when placed, and surfaces a "call these customers" list when shipments arrive.

  • Needs Ordering — unordered parts grouped by vendor; multi-select across ROs and record a single PO
  • In Flight — overdue orders highlighted; one-click mark-arrived
  • Ready to Contact — when every part on an RO arrives, the customer surfaces with a tap-to-dial phone number

Is the shop making money?

Profitability dashboard

Five headline numbers and a per-RO table. Filter by date and technician. Every column header explains itself on hover — Parts Differential, Labor Cost, Gross Profit, Margin.

Profitability dashboard

Tune your quotes

Labor calibration

Clocked time diverges from quoted over time. The calibration page surfaces that drift with a suggested new default per labor item — one-click to apply, every change audit-logged.

Labor calibration page

Who's hitting targets?

Technician performance

Weekly, monthly, and 90-day clocked hours alongside quoted, efficiency ratio, and per-tech template drift. If Slow Sam is +23% on diagnostics over 5 jobs, you see it here.

Technicians page with efficiency ratios

The small stuff that matters

Built out, end to end

Wage rates visible at a glance. Fee catalog with auto-apply. A unified customer+bike+RO intake that turns a phone call into a booked ticket without leaving one screen.

Users with cost rates
Users & cost rates. Hourly cost rate visible per user — snapshot-stamped on every time log so history stays stable.
Shop fees catalog
Shop fees. Disposal fees, shop supplies, compliance line items — auto-apply flag attaches them to every new RO.
New RO intake
Unified intake. New customer + new bike + new RO, one form, required fields kept minimal so walk-ins never block the desk.

Everyone sees what they need

Three roles, three tailored views

Every user sees exactly the tools their job needs — no more, no less. Same database, same app, different surface.

Admin workbench

Admin

The owner

Full access. Workbench, profitability, calibration, tech performance, shop fees, user management, parts catalog, imports.

Staff workbench

Staff

Front-desk / manager

Same workbench and customer tools, no admin sidebar. Approve estimates, record payments, pick up parts, answer phones.

Technician bench

Technician

The wrench

Auto-routed to their own bench — just their assigned ROs. Clock in/out on labor lines. Minimal UI, touch-friendly.

Under the hood

Small, boring, reliable

One Go binary. One SQLite file. One static SvelteKit bundle. No Redis, no Postgres, no message queues. Deploys to any machine that runs Go.

Backend

PocketBase · Go

Frontend

SvelteKit · Svelte 5

UI

shadcn-svelte · Tailwind

Database

SQLite (embedded)

Auth

Role-based

Testing

Go · Vitest · Playwright

Hosting

Single binary · macOS

Public access

Cloudflare Tunnel

Need something like this for your shop?

Craft Design Group builds purpose-fit software for operators — from back-of-napkin concept to live, maintainable, one-person-can-own-it systems.