Skip to content

Shair

Hair consultation platform where a guided quiz builds a profile customers share with their salon

Public site of the product1 / 11

Shair replaces the first ten minutes of every salon appointment. Customers answer a guided quiz about their hair, get a profile they can keep up to date, and share it with a professional who already knows what they are working with before the customer sits down.

The problem

Customers struggle to describe their hair type, history and routine, and salons repeat the same intake questions at every visit. Professionals also had no way to keep track of which clients were connected to them and which invitations were still waiting.

What I built

A mobile-first React app backed by a NestJS API. The quiz engine sends invitations and records responses into a hair profile. Customers and professionals connect through an explicit relationship state, and a customer can share their profile with a salon so the professional sees it before the appointment.

Results

  • Built and maintained alone across 219 commits in the frontend and backend repositories.
  • Went through three rounds of client QA, each with a written test plan covering quiz flow, alerts, asset seeding and questionnaire sync.
  • Frontend deployed on Vercel. The API runs in Docker on Dokploy with migrations and a seed command for demo data.

Features

  • Guided hair consultation quiz with invitations and saved responses
  • Hair profiles with photos and notes
  • Connection states between clients and professionals: connected, awaiting you, awaiting client, ignored
  • Share a hair profile with a salon or professional
  • Salon and professional dashboards with client notes and alert rules
  • Email verification and password reset
  • Mobile-first layouts tuned for 375 to 428 pixel screens

How it's put together

React and Vite frontend with TanStack Router route groups per role, over a NestJS API with MikroORM migrations on PostgreSQL.

  • Separate authenticated route trees for customers, salons and professionals
  • File uploads with multer and a seeded asset library
  • Transactional email through SendGrid
  • Playwright end-to-end tests for the main quiz and sharing flows
  • Church analytics dashboard with member, group, attendance-rate and new-member totals, messaging counts and a weekly attendance chart
    Web apps2026

    Church management platform

    Multi-tenant church management: members, households, attendance, forms, analytics and WhatsApp messaging

    Solo buildNext.jsReactTanStack Query+11
  • Hotel admin dashboard with booking, check-in, revenue and active-stay totals above a recent bookings table with status badges
    Web apps2026

    Hotel direct-booking system

    Independent hotels

    A booking engine a hotel runs on its own domain, with room availability, promo codes and Stripe payments

    Solo buildNestJSMikroORMPostgreSQL+9
  • Dube home screen showing ETB 3,125.50 total outstanding and a list of customers with their balances and call buttons
    Mobile apps2026

    Dube

    Offline-first debt book for shopkeepers: an Android app, a sync API and an admin panel

    Solo buildExpoReact Nativeexpo-sqlite+15