Hard thing to say out loud: v1 of the API had accrued enough debt that it was slowing us down. There are commits from around now literally renaming "lying wire fields" to match the units they actually returned - when your own API is misinforming you, it is time.
So we started v2: a clean identity / commerce / documents / credits core, and began strangling the old one - moving the web app onto v2 read by read, each with a v1 fallback so nothing broke while we swapped the engine mid-flight.
Separately, a giant catalog rebuild. We rebuilt 16 dive brands into the live catalog straight from the manufacturers' own dealer portals and price guides - the dealer access we already have - instead of the stale spreadsheets we had been limping along on. And I spent real time this week just understanding how each certification agency structures its instructor directory - every agency organizes it differently - so we could build one clean, consistent reference of dive pros instead of six inconsistent ones.
Shipped
- v2 API scaffold: identity/auth/commerce/documents/credits core, dependent domains, a public API reference
- Strangler migration: certs, rentals, courses/pricing, schedule, trips, journeys moved to v2 with v1 fallback
- Catalog rebuild: 16 brands rebuilt from dealer portals, plus a reference catalog for enrichment
- A clean, consistent dive-professional reference built from studying how each agency organizes its directory
- POS v2 first real build + a tvOS dashboard for live shop stats on the wall
- Commerce plugin repo launched (Shopify embedded app + Square connector); a live instructor-verification storefront with real agency verification