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

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.


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
