After building Fill Station to handle the gear side of a dive shop, I kept noticing how much other software a shop has to cobble together to actually run. Course scheduling lives in one tool, the online store in another, trip bookings in a spreadsheet, rentals on paper, and the staff schedule somewhere else entirely. Dive-Tec is my attempt to put all of that under one roof.

It is a multi-tenant platform, which is the part I find the most fun to build. A single deployment runs any number of dive shops, and each one gets their own branding, their own domain, and their own data, completely isolated from the others. A customer visiting one shop’s site has no idea the same code is quietly serving a dozen other shops too.

Each tenant gets a full toolkit to run their business:

  • Course scheduling for certifications and continuing education
  • E-commerce for selling gear and merchandise
  • Trip and event booking for dives, charters, and shop events
  • Equipment rentals
  • Staff management

Everything is themeable per shop – site name, logo, favicon, accent colour, which sections are turned on, even the address emails are sent from. Shop admins manage their own branding, while a platform admin panel sits above all of them to create tenants, point custom domains, and wire up payments.

A couple of the trickier pieces I am proud of: tenant resolution happens by hostname, so the right shop is loaded just from the domain the request came in on, and the platform can automatically provision DNS and SSL for a shop’s custom domain through Cloudflare for SaaS rather than making someone copy records around by hand. Payments run through Square with a separate, per-tenant client so each shop’s money stays its own.

It is built on Next.js 16 with the App Router, Prisma talking to MariaDB, better-auth for authentication, next-intl for translations, and Square for payments – all packaged up to run in Docker.

You can find out more at dive-tec.ca.