
SIPSAQ Salon — Salon Booking Platform & the Dermastil Website
( Role )
Full-stack Developer
( Scope )
- Data model and architecture; the Express 5 and Prisma API with authentication
- Salon roles and rate limits; the Stripe and PayPal integration; transactional e-mails and gift-voucher PDFs; the embeddable pop-up script; the Next.js dashboard and platform admin; the public website API
- A demo salon site and the Dermastil integration; tests and release runbooks
( Stack )
- Next.js 16
- TanStack Query
- Zustand
- i18next
- TipTap
- Konva
- Express 5
- Prisma
- PostgreSQL
- Stripe
- PayPal
- Nodemailer
- PDFKit
- Vitest




( Brief )
SIPSAQ Salon is the salon side of SIPSAQ, Susko GmbH's booking platform. One installation serves many salons. Each gets its own team, catalogue, prices, opening hours, payment accounts and website key, and staff only see the salons they belong to. I built it from the database up: the Express and Prisma API, the Next.js dashboard, and the public API that salon websites book through. The first salon on it is Dermastil, a cosmetics studio in Hamburg-Ottensen.
( Approach )
The day starts in the calendar: one column per stylist, a line for the current time, and each booking coloured by person and status, with day, week and month views and keyboard shortcuts. A booking opens into its details (customer, items, amounts, coupon, payment), where staff can confirm, move or cancel it. The customer gets an e-mail each time, with a link to cancel on their own and choose a refund. Around the calendar sit services and packages with their own website content, staff hours and time off, customers, payments and refunds, coupons, gift vouchers delivered as PDFs, opening hours and special days, a newsletter, campaigns and website pop-ups. The till sells products, services and vouchers, and the website shop's orders land in the same list. The dashboard runs in German and English, in light or dark.
Payments go through each salon's own Stripe and PayPal accounts. The keys are stored encrypted, and each salon switches between test and live mode. A booking that waits for payment holds its slot and releases it if the customer walks away. The webhook, the return page and a background sweeper all settle on one payment record, so nothing is charged twice. A platform admin area covers salons, users, memberships and the audit log, plus an operations view of errors, jobs, request metrics and webhooks.



( Challenge )
Money and time slots are where a booking system breaks. Two customers can reach for the same slot. A payment can arrive by webhook, by the return page, or not at all. A customer can cancel while a refund is still in flight. Each of those paths is guarded. A slot is locked while its booking is written, unpaid holds expire on their own, and payments are keyed to the provider's session, so every path lands on the same row. A salon's data is reachable only through an active membership, and tests enforce that rule. The backend has about 2,800 automated tests and the dashboard about 1,500.
( Responsibilities )
Data model and architecture; the Express 5 and Prisma API with authentication, salon roles and rate limits; the Stripe and PayPal integration; transactional e-mails and gift-voucher PDFs; the embeddable pop-up script; the Next.js dashboard and platform admin; the public website API, a demo salon site and the Dermastil integration; tests and release runbooks.

( The Dermastil website )
Dermastil is a cosmetics studio in Hamburg-Ottensen. It offers facials, Japanese head spa, laser and IPL hair removal, waxing, lashes and brows, nails and spray tan, and runs trainings for other professionals. I have built and maintained its German website, dermastil.de, since October 2025. The site is calm olive and beige, with Blacker Sans capitals, line-drawn leaves and smooth GSAP and Lenis motion. Every treatment and training has its own pages, and there are local landing pages for Hamburg.
( What’s in it )
The new version runs on SIPSAQ Salon. Treatments, prices, free times, vouchers and shop products come from the salon's SIPSAQ account through a server-side layer, so the browser never holds a key. It has a four-step booking widget with coupons and payment by card or PayPal, cancellation from the e-mail link, a voucher shop with an instant PDF download, a product shop with one cart and one payment, and a newsletter. It is ready, and goes live when the salon switches over from its current booking provider.
Role: Frontend Developer. Stack: Next.js 15, GSAP, Lenis, Framer Motion, Redux Toolkit, SIPSAQ Salon API, Stripe, PayPal.





