Open-source Next.js salon booking template, built on Opencals booking API - Indie Hackers
Join
Like
Bookmarks
Comments
I build Opencals, a booking platform for service businesses (think Shopify, but for selling services instead of products). We just made the storefront half of our API public, and instead of shipping it with only docs, we open-sourced a real app built on it.<br>Haar is a production Next.js 15 booking site for a salon: service catalog, real-time availability filtered by staff and location, single time slots and date ranges (for rentals), group bookings, multi-step Stripe checkout, and customer accounts with self-serve reschedule/cancel. MIT-licensed, deploys to Vercel in a click.<br>A few design decisions that might be interesting:<br>Storefront-first API, not admin-first. We exposed the customer-facing surface (catalog, availability, cart, checkout, accounts) before the admin one, because the recurring ask was "let me build my own front end on your booking brain," which is a storefront problem.
Availability is server-authoritative. The client never computes free slots or prevents double-booking — it asks the API and gets only currently-bookable slots. Killed a whole class of bugs.
Typed SDK generated from OpenAPI. @opencals/storefront-sdk is auto-generated, so the SDK can't drift from the API.
Config-as-rebrand. All salon-specific copy/branding is in one site-config.ts plus CSS variables, so the template is a starting point for any service vertical, not just salons.
Not open-sourcing the API itself (it's our hosted product), but the SDK and templates are open, and test keys are free with no card.
Demo: https://template-haar.vercel.app<br>Repo: https://github.com/letsopencals/template-haar<br>Docs: https://api.opencals.com/docs/storefront<br>SDK: https://www.npmjs.com/package/@opencals/storefront-sdk<br>Happy to go deep on the availability model, the checkout flow, or the GTM thinking behind giving templates away. Feedback very welcome, including the harsh kind.
Stan
posted to
Opencals
Share
Say something nice to stangineer…
Post Comment