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.
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].
- Splash → Home Page (category cards)
#567:326 → #1:11 - Search / Filters / Sorting, or category (Hair)
#380:731 / #385:837 / #232:134 - Studio detail
#413:12→ Studio Services#693:8/ Masters#810:211 - Studio Booking page
#789:473(pick service, master, slot) — booking confirmed, no checkout - Appointments [Upcoming]
#514:40; Booking Action (cancel/STOP)#816:347; Notifications#232:62 - 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].
- Enter phone number → receive SMS OTP → verify → in. No password at any point.
- 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].
- Master signs up with his OWN solo account (phone + OTP)
- Studio owner adds him to the shop (Team → Add/invite a master
#904:918) - 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
- Studio Account home
#728:304→ Bookings#732:392(navbar: Bookings first, then stats [MM-15May]) - Schedule / Next 7 days
#883:343 / #765:56(scrollable calendar + calendar view [MM-15May]) - Booking Action on a booking
#816:347
Flow: Owner builds the team
Source: [JZ-3Jul + MM-15May + Figma].
- Team
#838:170→ Add/invite a master#904:918(adds an EXISTING master account) - Set per-master permissions (manage own bookings / view own stats / partial stats)
- Master Profile
#1087:800(a prominent "change" button on the master page [MM-15May])
Flow: Owner manages services
- Services
#861:608→ Add Service#872:38(admin-managed catalog only [JZ-3Jul]) → Service added#877:312 - Home-visit tick box during add
#881:338(pending §12 client decision) - Employee master path = suggest-only [MM-15May]
Flow: Money (automatic)
Source: [MM-15May].
- Owner sets fixed salary on a master → auto-appears in Expenses
- Advance paid mid-month (amount or %) → remaining salary computed + shown
- 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)