• Residence: Bosnia & Herzegovina
  • City: Bijeljina
  • Age: 25
DOWNLOAD CV
Back to Projects

BookMyBarber - Full-Stack Appointment Booking Platform

Nov 2024 – May 2025

BookMyBarber

Full-Stack · NestJS · React Native · Expo

Overview

BookMyBarber is a full-stack online appointment booking platform built for barbershops, hair salons, nail salons, and any service business that operates on a reservation model. I designed and built the entire system end to end - from the database schema and API, to the mobile app running on iOS and Android.

The platform handles real-world booking complexity: role-based access for clients, workers, and admins; automated reminders via push and email; a loyalty points system with tier progression; and recurring appointment scheduling - all running on a background-job architecture that requires zero manual intervention.

Key Features

Smart Booking

Online booking 24/7 up to 30 days ahead. Only available slots shown per worker, per day. Cancellation enforced by configurable cutoff hours.

Recurring Appointments

Clients request repeating schedules (weekly, bi-weekly, monthly). After admin approval, a nightly cron job auto-generates bookings - no manual work.

Loyalty Program

Points earned per completed appointment. Redeemable for discounts (1 pt = 10%). Four tiers: Bronze, Silver, Gold, Platinum - with push notifications on level-up.

Automated Reminders

Hourly cron checks upcoming appointments and sends push + email reminders at 12h, 1h, and 30min before. Deduplication prevents double notifications.

Admin Panel

Full dashboard with revenue stats, worker management, service configuration, time-off approvals, and complete booking control across all workers.

Custom Branding

Admin sets business name, primary color, and logo. All email templates and in-app UI adapt automatically. Bilingual support: English and Serbian.

Backend

Built with NestJS 11 and TypeScript following a strict module-per-domain architecture. Each domain (auth, booking, loyalty, review, worker-schedule, etc.) is a self-contained NestJS module with its own controller, service, and repository layer over MySQL via TypeORM.

Email delivery is fully async - jobs are enqueued via Bull Queue (Redis) and processed by a background MailProcessor using Handlebars templates. In development, all mail is caught locally. Push notifications are sent via Expo Push API. The API is documented with Swagger and protected by JWT + Passport with role-based guards.

Two background cron jobs run automatically: an hourly reminder job that scans upcoming bookings and fires push + email notifications at the right intervals, and a nightly recurring-booking generator at 02:00 that creates next-occurrence appointments for all approved recurring schedules.

Mobile App

The mobile app is built with React Native and Expo SDK 54, using Expo Router v4 for file-based routing. State management is split between Zustand (auth, theme, locale) and TanStack Query v5 for all server state, caching, and pagination.

All forms are validated with React Hook Form + Zod. JWT tokens are persisted in expo-secure-store with an Axios interceptor handling automatic refresh on 401. The app routes users to role-specific tab navigators on login - client, worker, and admin each have a distinct interface with the exact capabilities their role requires.

The app supports English and Serbian via react-i18next, and all visual theming (colors, business name) is loaded from the company settings API on boot - making it effectively white-label ready.

Role-Based Access

Client

Browses workers and services, books appointments, tracks loyalty points, manages recurring schedules, and leaves post-service reviews.

Worker

Manages own schedule, breaks, and time-off requests. Views and actions bookings (confirm, complete, no-show). Maintains a portfolio of work images with categories.

Admin

Full platform access - manages all workers, services, and bookings. Approves time-off and recurring requests. Configures business branding, booking rules, and financial settings.

Technologies

Backend

NestJS 11 TypeScript Node.js MySQL TypeORM Redis Bull Queue JWT Passport Handlebars Swagger Expo Push API

Mobile

React Native Expo SDK 54 Expo Router v4 TypeScript Zustand TanStack Query v5 React Hook Form Zod Axios react-i18next NativeWind