CASE

    Case Study / 02

    Mimosa

    A multi-vendor salon & spa marketplace covering the full business cycle — booking, POS, inventory, CRM, and platform administration — from one shared API.

    Role

    Senior Software Engineer — architected and built the full platform

    Stack

    NestJS 10 / Prisma / PostgreSQL / Socket.IO / Next.js 15 / React Native / Expo / Turborepo / Radix UI / Cloudinary / TypeScript / Tailwind CSS

    Live

    Visit
    00 / Live

    Preview

    Demo Credentials

    Sign in with phone + OTP. Enter the phone number, then use the code below when prompted.

    Mimosa
    New Tab

    The interactive preview has been closed to save resources.

    Or Open In New Tab
    01

    Context & Challenge

    Salon owners juggle disconnected tools — one for bookings, another for payments, a spreadsheet for stock, paper for staff shifts — while customers have no single place to discover and book across salons.

    02

    Approach

    Unified the entire cycle into one multi-tenant platform where each vendor gets a full back-office and customers browse every salon through a shared marketplace front-end. Vendors self-register, are approved by platform admins, then manage branches, employees, services, and subscription billing independently with all data strictly scoped per tenant.

    03

    Key Features

    • 01Salon discovery, real-time availability, booking and rescheduling
    • 02In-app chat, QR check-in, waitlist, reviews and favorites
    • 03Vendor POS with split payments and refunds
    • 04Inventory with stock movements and purchase orders
    • 05Multi-branch management and employee scheduling with commission rules
    • 06Admin vendor approval workflow, CMS, and support ticketing
    • 07Bilingual EN/AR with full RTL layout support
    • 08Expo mobile client sharing the same API
    04

    Technical Decisions

    Enforced multi-tenancy with row-level scoping at the guard and query layer rather than trusting client-supplied IDs, and layered five-role RBAC over a global API-key guard. Stored all money as integer piasters to eliminate rounding drift across POS, refunds, payouts, and commission splits, and decoupled notifications, realtime broadcasts, and audit trails from core logic via domain events.

    05

    Key Learnings

    Deepened experience designing multi-tenant data isolation that holds under real access patterns, modeling money and bilingual content at the database level, and shaping a monorepo so three distinct client surfaces stay coherent against one evolving API.

    Built with vision & code by Ahmed Walid

    © 2026 — All rights reserved

    Loading portfolio