Skip to main content

Changelog

Every shipped change to KVICK.BIKE — the clean-room bike-vertical Hub on Cloudflare Workers + D1. Source of truth: CHANGELOG.md in the kvick-bike repo.

Semantic versioning: major (x.0.0) = breaking change or major milestone; minor (1.x.0) = a feature or module; patch (1.0.x) = a fix. The running version is VERSION in src/index.ts (surfaced at /api/build-info, /api/health, and the user-menu badge); package.json mirrors it.

v1.1.1 — 2026-06-25

  • Removed the dead .helm-editable inline-edit CSS (the contenteditable chassis was retired pre-v0.6.385; no element used the leftover stylesheet) and corrected the stale "inline-editable card" comment. The customer card has no inline-edit affordance — editing is modal-first per the no-inline-editing doctrine. Reconciles the build with the BIKE.L2-0023 process narrative (modal-first edit; pricing_tier dormant; start-fresh, no A/B/C→Trade migration).

v1.1.0 — 2026-06-25

Customers

  • Account linking renamed "Family" → "Linked" — the section links separate customer accounts (personal ↔ business, partners who each keep their own account), not family members. API /family/links; audit customer.account.link / unlink; the customer_family_links table is kept as an internal legacy name. (Edits process BIKE.L2-0153.)
  • New "Family" section — in-card family members: a primary contact plus spouse / children, each with their own name, relationship, and phone (+ minor flag). New customer_family_members table; /family-members CRUD (migration 015). A different level from account links — members of one account, not other accounts.
  • Card layout is now Contact → Linked → Family → Marketing → …

v1.0.0 — 2026-06-25

Baseline of the clean-room rebuild (started 2026-06-21), replacing the prior ~90k-line implementation. Everything below ships in 1.0.0; semantic versioning begins here.

Core (L1)

  • Tiny kernel: D1 wrapper, DB-session auth + actor, hash-chained audit log, module contract + registry, granular permission seam (can() over a data catalog).
  • Cloudflare Workers + D1, strict TypeScript, no framework; HTML / CSS / JS inline in TS template strings.
  • Shared Core controls injected once in the shell: kbDatePicker, kbSortable, kbPager, kbPrint, and the FTS5 search engine (core/search).
  • cache-control: no-store on shell + API responses (no stale bundles after a deploy).

Customers (L2)

  • Full customer card at parity with the prior build: 3-pane work area (search / swappable ledger / read-only Till), modal-first editing per the no-inline norm.
  • FTS5 search (BM25 + per-token prefix + synonyms); keyset-paginated interactions ledger (no silent caps).
  • Sections: Contact / Linked / Family (bidirectional links + minor flag) / Marketing / Notes / Equipment / Loyalty / Identity / account credit-debit / Merge / Print.
  • Real dataset imported from the prior build: 3,099 customers · 2,541 bikes · 20,360 transactions.

Settings (L2)

  • Staff & permissions: Employee modal (role, visible tabs, PIN, idle-lockout) + read-only Permissions inspector.
  • Granular permissions mirrored verbatim — catalog + roles + role / staff grants.

Discounts (L2)

  • Discount builder in Settings: customer discounts that apply to Sales and/or Service, authored in a 3-step builder and assigned per-customer on the customer card (replaces the old A/B/C pricing tier).
  • Per-department assignment, department-validated; the Sales / Service tills (when built) read the customer's assigned discount.

See also