TX Dynamics · Product Requirements

Blyss — Product Requirements (PRD)

Dev-facing product spec for the Blyss salon platform: discovery, booking, studio management. Phase 1 build scope.

Part 1 · §2 to §9Phase 1 build scopev2 · 8 Jul 2026Audience: dev team

About this document. This is the dev-facing PRD export for Blyss (Part 1, sections 2 to 9 of the full requirements doc). Section references beyond §9 (e.g. §11, §13, §20) point to Part 2 of the full requirements document. Provenance tags: [Figma] = the design file, [MM-15May] and [JZ-3Jul] = client/coordination call notes, [Board] = project board updates.

§2 One-Liner / TL;DR

Clients discover nearby salons/barber studios, browse their service menus and masters, and book appointments they pay for at the venue; studio owners run the shop side (bookings calendar, team & permissions, services from a platform catalog, automatic finances) from the same app, and can pay to promote their services. [Figma two-canvas structure + MM-15May + JZ-3Jul]

§3 Purpose / Problem

Salon/barber studios in the client's market (Azerbaijan; RU-language service menus, AZN prices [Figma]) take bookings ad hoc and track team, salaries, expenses and performance manually. Blyss gives them one app with two faces: a client side to find a studio (search/filter/map), view its services (hair & barbering, nails, lashes & brows [Figma "Hair"/"Studio Services" frames]) and masters, and book a slot; and a studio side where the owner manages bookings and the 7-day schedule, adds and permissions masters, maintains the service menu from an admin-managed platform catalog [JZ-3Jul], and gets automatic expense/salary/revenue accounting [MM-15May + Figma Studio canvas].

Bookings carry no in-app payment — clients pay at the venue [JZ-3Jul]. The platform's paid surface is promotion payments: a studio pays to promote a service (provider/flow/phase = client-confirm, §8/§9). The full analytics suite is specified by the client's analytics requirements doc (arrived ~20 May) and is agreed Phase 2 (Zaid + client) [JZ-3Jul] — Phase 1 ships the operating core: discovery, booking, team, services, finances.

§4 Who Uses It — Roles (description)

Grounded in [MM-15May] + [JZ-3Jul] (4-role model + per-master permissions confirmed) + [Figma] canvases. Exact enum strings must come from the frontend code (§11) — Saqlain (folded into the §9 FE question).

%%{init: {"flowchart": {"rankSpacing": 44, "nodeSpacing": 30, "padding": 10}}}%%
flowchart TD
  APP["Blyss app"] --> CLI["Client
search · book · rate · favorites"] APP --> STU["Studio Account surface"] STU --> OWN["Studio owner
full studio side"] STU --> SOLO["Solo master
same as owner, team of 1"] STU --> EMP["Employee master
permission-gated: own bookings + own stats"] ADM["Platform admin
catalog CRUD, back-office"] -.->|"manages predefined service catalog"| APP
Role What they can do UI surface
Client (customer) Search/filter studios, view studio + services + masters, book appointments (no in-app payment — pay at venue [JZ-3Jul]), view upcoming appointments, rate/review, favorites (a studio appears in the client's favorites when a barber adds them as a client [MM-15May]), notifications, account settings, FAQ/support, delete account This app — "Client Account" canvas [Figma]
Studio owner (barber shop owner) Full studio side: bookings + calendar, next-7-days schedule, team (add masters, set per-master permissions), services (add from the admin-managed catalog), financial management (auto expenses, salaries, advances, revenue reports), master profiles, pay to promote a service [JZ-3Jul]; analytics suite + reputation (Phase 2 / pending §12) This app — "Studio Account" canvas [Figma]
Solo master (independent barber, own business) Same as studio owner — "solo barber should be same as barber shop owner … working on his own can have all options"; can view his own calendar [MM-15May]. Same account type, team of 1 (confirmed by the employee-account flow [JZ-3Jul]) This app — Studio Account surface
Employee master (barber under a studio) Creates his OWN solo account first, then gets ADDED to the barber shop by the owner (owner grants permissions) [JZ-3Jul]. Restricted: manage own bookings + view own stats ONLY IF the owner grants permission; sees own stats, never shop-level analytics; can suggest a service be added but only from the predefined list; cannot see all services [MM-15May] This app — Studio Account surface, permission-gated; own real login (confirmed [JZ-3Jul])
Platform admin (TX/platform back-office) Manages the predefined services/category catalog — a minimal platform-admin surface IS in scope for catalog management [JZ-3Jul]. City-wide analytics data (Competitive Insights) rides Phase 2 with the analytics suite. Minimal admin surface (catalog CRUD) — NOT screens in the client app (API-first/back-office; form to be settled at build)

The Apr-12 board update mentions "three buttons on the login screen … for testing purposes … navigate to their actual path" [Board] — consistent with 3 login paths (client / studio-owner / master) in ONE app (confirm with Saqlain, folded into §9 FE question).

§5 What It Does → How It Does It

Capability (what) Mechanism (how) Provenance
Sign up / log in Phone number + SMS OTP, no password [JZ-3Jul]; single-screen studio registration [MM-15May] [JZ-3Jul]; auth screens not in this Figma file (§13)
Find a studio Search + Filters + Sorting overlays; browse by category (e.g. Hair); map + directions [Figma] Search #380:731, Filters #385:837, Map #626:969, Directions #543:667
View a studio Studio detail page with services menu (RU names + AZN prices), masters list, rating [Figma] Studio #413:12, Studio Services #693:8, Masters #810:211, Rating #939:59
Book an appointment Studio Booking page → pick service/master/slot; Booking Action overlay (incl. a STOP/cancel action). No payment step — pay at venue [JZ-3Jul] [Figma] Studio Booking page #789:473, Booking Action #816:347
Track appointments Appointments [Upcoming] list; Notifications [Figma] #514:40, #232:62
Register a studio ONE-screen registration; shop profile picture optional (labelled optional, uploadable later); all other fields mandatory; social links NOT in registration (added later in Account); straight to home after registration [MM-15May] — screens NOT in this Figma file (§13)
Manage bookings + calendar Bookings first in navbar, then stats; scrollable calendar + calendar view; Next-7-days schedule [MM-15May] + [Figma] Bookings #732:392, Schedule #883:343, Next 7 days #765:56
Manage team Owner ADDS an existing master account to the studio (master signs up solo first [JZ-3Jul]); per-master permissions (manage own bookings, view own stats, access to some stats not all); master profile [JZ-3Jul] + [MM-15May] + [Figma] Team #838:170, Add/invite a master #904:918, Master Profile #1087:800
Manage services Add Service from the admin-managed predefined catalog [JZ-3Jul]; "Service added" confirmation; employee masters suggest-only; home-visit option (tick box, pending §12) [Figma] Services #861:608, Add Service #872:38, Service added #877:312, Home visit tick box #881:338 + [MM-15May]
Manage money Expense menu is automatic; fixed employee salary auto-added to expenses; revenue reports auto-generated; advance payments to a master tracked (amount or %) with remaining shown [MM-15May] + [Figma] Financial Management #1069:5550 (expense cats: Rent, Utilities, Supplies, Salaries, Marketing, Other), Financial Overview #1025:4495
Manage clients Barber adds a client: picture then phone number; duplicate phone cannot be added twice; adding a client puts the studio in that client's favorites [MM-15May] — dedicated screens not identified in [Figma] (surface to confirm at wiring)
Promote a service (paid) Studio pays to promote a service — the platform's paid surface [JZ-3Jul]. Provider/flow/phase = client-confirm (§8/§9). Promotion FE built per Apr-12 status [Board]; designs absent from this Figma file [JZ-3Jul] + [Board]
See analytics Analytics hub → Studio Performance, Client Insights, Master Performance, Service Analytics, Growth Insights, Competitive Insights — Phase 2 (Zaid + client agreement; spec = the client analytics doc, arrived ~20 May) [JZ-3Jul] [Figma] #940:272, #964:790, #1015:3138, #1075:3, #1089:936, #1108:288, #1136:1272
Reputation & rewards Reputation Score with RP tiers: Rising Star (0-99), Trusted (100-199), Top Rated (200-349), Elite (>=350) [Figma] #907:1040 — client-confirm (§9/§12)
Rate a studio Rating screen post-visit (inferred) [Figma] Rating #939:59
Get help Contact Support + FAQ (6 screens) [Figma] #543:609, #605:704ff
Delete account Delete Account confirmation overlay [Figma] #567:295

§6 Core Flows / User Journeys

Flow: Client books a service

Assembled from [Figma] frames; no payment step — pay at venue [JZ-3Jul].

  1. Splash → Home Page (category cards) #567:326 → #1:11
  2. Search / Filters / Sorting, or category (Hair) #380:731 / #385:837 / #232:134
  3. Studio detail #413:12 → Studio Services #693:8 / Masters #810:211
  4. Studio Booking page #789:473 (pick service, master, slot) — booking confirmed, no checkout
  5. Appointments [Upcoming] #514:40; Booking Action (cancel/STOP) #816:347; Notifications #232:62
  6. Post-visit: Rating #939:59
%%{init: {"flowchart": {"rankSpacing": 34, "nodeSpacing": 40, "padding": 8}}}%%
flowchart TD
  A["Splash"] --> B["Home Page
category cards"] B --> C["Search / Filters / Sorting"] B --> D["Category browse
(e.g. Hair)"] C --> E["Studio detail"] D --> E E --> F["Studio Services / Masters"] F --> G["Studio Booking page
pick service · master · slot"] G --> H["Booking confirmed
NO checkout, pay at venue"] H --> I["Appointments (Upcoming)
+ Notifications"] I --> J["Booking Action
cancel / STOP"] I --> K["Post-visit Rating"]

Flow: Sign up / log in (all roles)

Source: [JZ-3Jul].

  1. Enter phone number → receive SMS OTP → verify → in. No password at any point.
  2. Studio registration continues on ONE screen (picture optional, all else mandatory, NO social links) → straight to Home; complete profile later in Account (social links live there) [MM-15May]
%%{init: {"flowchart": {"rankSpacing": 42, "nodeSpacing": 28, "padding": 8}}}%%
flowchart LR
  P["Enter phone number"] --> O["Receive SMS OTP"] --> V["Verify"] --> IN["Logged in
no password, ever"] IN --> REG["Studio registration
ONE screen: picture optional,
all else mandatory, no social links"] REG --> HOME["Straight to Home
complete profile later in Account"]

Flow: Employee master joins a studio

Source: [JZ-3Jul].

  1. Master signs up with his OWN solo account (phone + OTP)
  2. Studio owner adds him to the shop (Team → Add/invite a master #904:918)
  3. Owner grants per-master permissions (manage own bookings / view own stats / partial stats)
%%{init: {"flowchart": {"rankSpacing": 40, "nodeSpacing": 28, "padding": 8}}}%%
flowchart TD
  M1["Master signs up SOLO
own account, phone + OTP"] --> M2["Owner adds him to the shop
Team → Add/invite a master"] M2 --> M3["Owner grants per-master permissions"] M3 --> PA["Manage own bookings"] M3 --> PB["View own stats"] M3 --> PC["Partial stats access
never shop-level analytics"]

Flow: Owner manages the day

  1. Studio Account home #728:304 → Bookings #732:392 (navbar: Bookings first, then stats [MM-15May])
  2. Schedule / Next 7 days #883:343 / #765:56 (scrollable calendar + calendar view [MM-15May])
  3. Booking Action on a booking #816:347

Flow: Owner builds the team

Source: [JZ-3Jul + MM-15May + Figma].

  1. Team #838:170 → Add/invite a master #904:918 (adds an EXISTING master account)
  2. Set per-master permissions (manage own bookings / view own stats / partial stats)
  3. Master Profile #1087:800 (a prominent "change" button on the master page [MM-15May])

Flow: Owner manages services

  1. Services #861:608 → Add Service #872:38 (admin-managed catalog only [JZ-3Jul]) → Service added #877:312
  2. Home-visit tick box during add #881:338 (pending §12 client decision)
  3. Employee master path = suggest-only [MM-15May]

Flow: Money (automatic)

Source: [MM-15May].

  1. Owner sets fixed salary on a master → auto-appears in Expenses
  2. Advance paid mid-month (amount or %) → remaining salary computed + shown
  3. Revenue reports generate automatically → Financial Management #1069:5550 / Financial Overview #1025:4495
%%{init: {"flowchart": {"rankSpacing": 46, "nodeSpacing": 26, "padding": 8}}}%%
flowchart LR
  S1["Owner sets fixed salary
on a master"] --> S2["Auto-appears in Expenses"] S3["Advance paid mid-month
amount or %"] --> S4["Remaining salary
computed + shown"] S2 --> R["Revenue reports
auto-generated"] S4 --> R

(Optional quality enhancer, not a gate: if the Figma prototype has linked flows, run figma-flow-extract for pipeline/flow.json to strengthen nav analysis.)

§7 Scope: In / Out — Goals & Non-Goals

In scope (Phase 1)

  • Phone + OTP auth (no password) [JZ-3Jul].
  • Client discovery + booking side (all frames on "Client Account" canvas) — booking WITHOUT payment.
  • Studio management side (bookings, schedule, team + permissions, services from the admin-managed catalog, financial management, master profiles).
  • Minimal platform-admin surface for catalog management [JZ-3Jul].
  • Single-screen studio registration + later profile completion [MM-15May].
  • Promotion payments (studio pays to promote a service) — in-principle; provider/flow/phase = client-confirm (§8/§9) [JZ-3Jul].

Out of scope (explicit)

  • In-app booking payments / checkout — OUT. Clients pay at the venue; no checkout, wallet, or card screens exist and none are to be built for bookings [JZ-3Jul].
  • Analytics suite — DEFERRED to Phase 2 (hub, Studio/Client/Master/Service analytics, Growth Insights, Competitive Insights, unnamed analytics sub-frames) — agreed Zaid + client; spec = client analytics doc (arrived ~20 May) [JZ-3Jul]. Honest "coming soon"/empty states in Phase 1, never dummy data.
  • Chat/messaging between client and studio — no screens anywhere, never discussed → not built.
  • Social login — auth is phone+OTP only [JZ-3Jul]; social links on profiles are content, not login.
  • Platform commission/fees on bookings — nothing in any source; bookings are free of platform charges.
  • Client-confirm trio (Zaur, §9): Reputation & Rewards · home-visit services · real push notifications — BUILD/CUT/DEFER pending; out of Phase-1 build until confirmed.
  • Multi-language — design content is RU (AZN prices); AZ/EN localization = client-confirm (§9); not built until answered.

§8 Monetization / Subscription

  • Does it charge money? Yes — one declared paid surface.
  • Bookings carry NO payment (explicit OUT): no in-app checkout for appointments; clients pay at the venue [JZ-3Jul]. No platform fee on bookings.
  • Paid surface: promotion payments — a barber/studio pays to promote a service (visibility/placement) [JZ-3Jul]. Promotion FE exists per the Apr-12 build status [Board]; screens absent from this Figma file.
  • Provider / flow / launch phase: TBD with the client (Zaur) — flagged in §9; technical spec in §20 blocked on that answer.
  • What's free: everything else — client booking side and studio management side carry no charges.

This section satisfies the pipeline's "paid surface must be declared" gate: booking-payments explicitly OUT, promotion-payments explicitly IN-principle with provider + phase flagged for client confirmation. No silent paywall exists.

§9 Open Questions for Sign-Off

The ONLY remaining flagged questions:

  • Module fate (client — Zaur, via Hassan): Reputation & Rewards · home-visit services · real push notifications — BUILD / CUT / DEFER each (§12)
  • Platforms + language (client — Zaur, via Hassan): iOS + Android (or one first)? RU-only launch vs AZ/EN localization? (§1/§27)
  • Promotion payments (client — Zaur, via Hassan): provider + flow + phase (launch or later)? (§8/§20)
  • SMS/OTP provider (Hassan/Asif): select + provision (Twilio/Firebase-class — same family as Elity's missing provider). Do NOT let the pipeline silently simulate OTP. (§17/§25)
  • Missing auth-screen Figma designs (Jahanzaib/Amna): auth/registration/onboarding frames are NOT in file EKR8yNHReCm8iAyKgqz3sO — locate the second file / supply the designs (§13)
  • FE stack + routing + wired-status (Saqlain): stack, ONE routing system, exact role enum strings, per-screen wired/static status, promotion-module screens reconciliation (§11/§13/§28)