Back to work

Chi Sublime · Booking, POS and certified invoicing · 2026

Turning a service business into a digital operation.

Management platform for a hair and beauty salon in Cascais: website, online booking, client area, point of sale, cash register and certified invoicing.

  • Product
  • Booking
  • Invoicing
Client
Chi Sublime, Cascais
Status
In production, with certified invoicing live.
3
steps to book online
35
services synced with Moloni
Chi Sublime booking flow

Three-step online booking — service, professional and time, confirmation.

Context

A salon in Cascais handled bookings by phone and WhatsApp, took payments without integrated invoicing and had no visibility of revenue per professional. The owner wanted a single application for everything.

The problem

Online bookings have to respect team hours, service duration and prevent double booking — even with two clients booking the same slot at the same time.

In Portugal, charging means issuing a certified invoice and reporting it to the tax authority. That cannot be "a button that sometimes fails".

My role

Sole developer, including setting up the Moloni account and coordinating with the client's accountant on VAT regime and document series.

Constraints

  • Double booking impossible, even with two clients booking the same slot at the same time.
  • Certified invoicing in Portugal: issuing and reporting to the tax authority cannot fail silently.
  • A single owner operating everything — no technical team, no per-professional accounts.
  • VAT regime and document series defined with the client's accountant.

Solution

Next.js 16 application with three areas: public site with a three-step booking flow, client area (profile, bookings, security) and admin panel (clients, services, team, schedule, POS, cash register, income and expenses, reports).

Availability engine with a unique anti-double-booking index. Invoicing through an abstraction with two providers — Mock for development and Moloni in production — with 35 services synced as articles and invoice-receipts issued and reported to the tax authority.

Admin schedule
Admin schedule per professional.
Point of sale
Front-desk checkout with invoice-receipt issuance.

What was built

  • Online booking with Tue–Sat hours, lead-time policies and cancellation via email link.
  • POS/checkout with multiple payment methods, optional client tax number and invoice-receipt issued on the spot.
  • Cash closing, recurring expenses via cron, financial, VAT, per-professional and per-client reports, with PDF.
  • Emails with React Email + Resend (confirmation, reminders, password recovery).
  • Soft-delete on everything with history; uniform ActionResult contract on server actions; amounts in cents.
  • Cookie-based PT/EN i18n, GDPR legal pages, Search Console.

Key decisions

Invoicing behind an interface

Business code talks to an InvoiceProvider. Mock allows development and testing without touching the tax authority; Moloni is switched on by configuration. Dev and production share the same Moloni company, so the sync always runs against the right database.

Professionals without accounts

Only two roles exist, client and admin. Team members are records managed by the owner. Less security surface, less onboarding, and it is how the salon actually works.

Outcome

Online booking, schedule and certified invoicing working in production, with real invoice-receipts reported to the tax authority.

What I would change

Having a Mock invoicing provider from the start allowed weeks of development without touching the tax authority. I would repeat it in any fiscal integration.

In a second iteration I would add SMS reminders on top of email: it is the channel the salon's clients actually read.

Stack

Next.js 16 · TypeScript · MongoDB · NextAuth v5 · Moloni API · React Email · Resend · React Hook Form · Zod · @react-pdf/renderer · Vercel

Next project

GrowKind World

Publishing an educational method as a paid digital product, in two languages.

Educational and publishing platform for neurodivergent childhood: digital book with paywall, module-based courses, shop and full i18n.

View case study
GrowKind book reader