CoiffeurUrbain
Bilingual barbershop booking platform with email flows, secure cancellation tokens, and a multi-role admin panel.

Context
Personal project built solo in ~2 weeks. A fullstack bilingual platform built as a demonstrator for a barbershop — designed to attract potential clients (barbershops, small businesses).
Set up as a monorepo with pnpm 10 workspaces — Next.js frontend and AdonisJS backend sharing the same repository.
My role
Fullstack Developer
Designed and built everything from scratch in ~2 weeks. Shows ability to deliver a production-grade product with real UX concerns — bilingual, email flows, and token-based cancellation.
What I built
Design
conception- Monorepo setup with pnpm 10 workspaces (Next.js + AdonisJS)
- Bilingual architecture (fr/en) with next-intl
- Multi-role access control design — admin / moderator
Frontend
- Next.js 16 + shadcn/ui + Tailwind CSS 4
- Bilingual implementation (fr/en) with next-intl
- Booking UI with real-time availability slots
Backend
- Session-based auth — AdonisJS session driver, HTTP-only cookies
- 3 middleware layers for role-based access control
- Online booking with availability check and email confirmation
- Appointment cancellation via unique token — no account required
- Full admin panel — services, barbers, schedules, gallery, reviews, contact messages, stats
- Customer review submission and moderation
- Swagger UI API docs
DevOps
- Multi-stage Dockerfiles (Alpine, non-root user)
- Deployed on VPS via Dokploy
- Japa (backend) + Vitest 4 (frontend) tests
Deployment
Deployed on VPS via Dokploy. Multi-stage Dockerfiles (Alpine, non-root user). Git push triggers auto-deploy on both services simultaneously. Monorepo managed with pnpm 10 workspaces — shared tooling, independent build pipelines.
Personal demonstrator project — built to showcase fullstack capabilities and attract potential clients. Shows ability to deliver a production-grade product with real UX concerns in a tight timeline.