Back to projects
VA Beauty

VA Beauty

Showcase Website & Booking System

Role: Full Stack Developer | UI/UX Designer
Period: May - August 2025
In Production
Visit project
Client: VA Beauty

Overview

Context

VA Beauty is a boutique beauty institute in Aubagne, France, specializing in high-quality facial treatments and micropigmentation. The owner needed a digital presence that reflected the premium quality of her services. The problem: no online presence, manual phone/WhatsApp appointments, no visual portfolio to showcase results, and manual management of services and prices.

Solution

Development of a complete professional showcase website with: (1) Premium landing page with service sections, before/after gallery and testimonials; (2) Booking system integrated with Cal.com with real-time calendar and Stripe payment; (3) Dynamic gallery supporting images, before/after and social media videos; (4) Blog managed via Sanity CMS for marketing content; (5) Admin panel for service and gallery management without technical knowledge.

My Role

I worked as Full Stack Developer and UI/UX Designer, creating the entire interface design from scratch and implementing the complete solution. I developed the architecture with Next.js 15 and React 19, integrated multiple external services (Supabase, Cal.com, Stripe, Cloudinary, Sanity), and built the admin panel for autonomous content management.

Tech Stack

Frontend

Next.js 15
React 19
TypeScript
Tailwind CSS 4
shadcn/ui
Radix UI
Lucide React
react-day-picker
class-variance-authority

Backend

Supabase (PostgreSQL + Auth + RLS)
Stripe
Cal.com
Cloudinary
Sanity CMS
Vercel

Projects

1

Showcase Site & Booking

Complete Online Booking Platform

~30,135
Lines of Code
188
Files
57
Components
32 API routes
Pages

Professional showcase website with integrated booking system. I created the entire UI/UX design and implemented premium landing page, service catalog, dynamic gallery, blog, and complete booking flow with payment.

Features

01
Premium Landing Page

Hero with gradient, trust indicators (500+ clients, 5★), service sections and testimonials

02
Service Catalog

Grid with 3 categories (Sourcils, Lèvres, Soins), combos/packages with prices

03
Before/After Gallery

Filter by category, media types (images, before/after, videos), full-screen modal

04
Multi-Step Booking Flow

4 steps: service selection → date/time → information → confirmation/payment

05
Cal.com Calendar

Embedded widget with real-time availability and automatic timezone

06
Embedded Videos

Support for Instagram, YouTube and TikTok with responsive embed

07
Integrated Blog

Articles managed via Sanity CMS with optimized SEO

08
Responsive Design

Mobile-first with Sora typography and gradient color system

09
Supabase Auth

Authentication with admin verification via admin_accounts table

10
Row Level Security

RLS policies for PostgreSQL data protection

11
Stripe Integration

Payments with Connected Accounts and bidirectional webhooks

12
Cal.com Integration

API for availability, booking creation and synchronization

13
Cloudinary Upload

Automatic image optimization, on-the-fly transformations, global CDN

14
Sanity CMS

Customizable studio for blog management with GROQ queries

15
Protected API Routes

Endpoints for booking, gallery, admin with validation and error handling

16
Protection Middleware

Next.js Middleware protecting /admin and /studio routes

Design Patterns

App Router Pattern
Server/Client Components
Multi-Step Form Pattern
Provider Pattern
Middleware Protection
API Route Pattern

Technical Decisions

Next.js 15 + React 19

Server Components for performance, App Router for organization, Turbopack for fast builds

Supabase vs Firebase

Real PostgreSQL with SQL, native Row Level Security, integrated auth, open source, affordable pricing

Cal.com vs Calendly

Open source, flexible API, native Stripe integration, full customization, no forced branding

Cloudinary vs S3

Automatic image optimization, on-the-fly transformations, global CDN included, generous free tier

Sanity vs Contentful

Customizable studio, powerful GROQ query language, real-time collaboration, generous free tier

shadcn/ui vs Material UI

Copy-paste not dependency, full customization, accessibility via Radix, smaller bundle, native Tailwind

Challenges & Solutions

Cal.com + Stripe Integration

Stripe Connected Account, bidirectional webhooks (Cal → App, Stripe → App), diagnostic endpoints for debug

Multi-Media Gallery

Flexible schema with type discriminator, MediaModal component detecting type, responsive video embed

Admin Access Control

admin_accounts table with JSONB permissions, is_active flag, super-admin fallback, RLS policies

SEO for Dynamic Services

generateMetadata in each page, JSON-LD structured data, dynamic sitemap, required alt text

Performance with Many Images

Next.js Image with lazy loading, Cloudinary for optimization, blur placeholder, responsive sizes

Gallery

1
Image 1
2
Image 2
3
Image 3
4
Image 4
5
Image 5
6
Image 6
Gregory Praxedes | Full Stack Developer & UI/UX Specialist