Docs

5. Feature Specification

Below is the full feature set, broken down into sub-features and acceptance criteria where useful.


5.1 User Registration & Authentication

IDFeatureDescriptionPriority
F1.1Email + password sign-upRegister with email and password; validation and duplicate check.P0
F1.2Email verification (optional for MVP)Optional: send verification link; block full access until verified.P1
F1.3LoginLogin with email and password; return JWT (access + optional refresh).P0
F1.4LogoutInvalidate session / token on client; optional token blacklist on server.P0
F1.5Password reset“Forgot password” flow: email link or token to set new password.P0
F1.6Role selection at sign-upOn registration, user chooses “Customer” or “Service provider”; stored and used for permissions.P0
F1.7Protected routesFrontend and API enforce auth; redirect unauthenticated users or return 401.P0

5.2 Service Provider Profile & Onboarding

IDFeatureDescriptionPriority
F2.1Business profile creationAfter sign-up, provider completes: business name, type (barber/salon/other), short description, address (optional).P0
F2.2Profile imageUpload one profile/logo image; crop/resize to a standard size; store via chosen storage (see §9).P0
F2.3Edit profileUpdate name, description, address, profile image anytime.P0
F2.4Public profile pageSEO-friendly page showing name, image, description, services, and reviews (when implemented).P0
F2.5Service listAdd/edit/delete services: name, duration (minutes), price (optional for “price on request”).P0
F2.6Business hours (weekly template)Set default weekly hours (e.g. Mon–Fri 9–6, Sat 9–2); used to generate available slots.P0
F2.7Special dates (time off)Mark specific dates as unavailable (holidays, leave); exclude from availability.P1

5.3 Bank Account Connection (Payouts)

IDFeatureDescriptionPriority
F3.1Connect account (Stripe Connect)Provider goes through Stripe Connect onboarding (Express or Standard); link business bank account.P0
F3.2Connection statusShow “Connected” / “Not connected” / “Pending” in dashboard; block card payments until connected.P0
F3.3Reconnect / refreshIf link expires or fails, allow provider to reconnect from dashboard.P0
F3.4Payout dashboard (basic)Show balance and recent payouts (from Stripe); detailed history can link to Stripe Dashboard.P1

5.4 Availability & Slots

IDFeatureDescriptionPriority
F4.1Slot generation rulesSlots derived from: business hours, service duration, existing bookings, and special-date exclusions.P0
F4.2Configurable slot lengthProvider can set default slot length (e.g. 15 or 30 min); slots align to that grid.P0
F4.3Buffer between appointments (optional)Optional gap (e.g. 5 min) between back-to-back appointments.P1
F4.4Availability APIAPI that, given provider + date (+ optional service), returns available time slots.P0
F4.5Override availabilityProvider can ad-hoc block or open specific times (e.g. “open 2–4pm this Saturday”).P1

5.5 Booking Flow (Customer)

IDFeatureDescriptionPriority
F5.1Discover providersList/browse providers (search by name/location later); click through to provider profile.P0
F5.2Select serviceOn provider page, choose one service (name, duration, price).P0
F5.3Select dateDate picker; only allow dates that have at least one slot (based on F4).P0
F5.4Select time slotShow available slots for chosen date; user picks one.P0
F5.5Booking summaryShow provider, service, date, time, price; option to add short note (e.g. “skin fade”).P0
F5.6Payment choiceCustomer chooses Pay by cash (at appointment) or Pay by card (now).P0
F5.7Pay by cashConfirm booking; no charge; booking marked “cash”; optional reminder close to appointment.P0
F5.8Pay by cardRedirect (or embed) Stripe Checkout/Payment Element; charge to platform or connected account; on success, confirm booking and send confirmation.P0
F5.9Booking confirmationAfter booking: confirmation page and (optional) email with details; show in “My appointments”.P0
F5.10Require sign-in to bookOnly logged-in customers can complete a booking (encourage sign-up or quick guest check-out later).P0

5.6 Appointments Management

IDFeatureDescriptionPriority
F6.1Provider: list appointmentsDashboard list of upcoming and past appointments; filter by date/status.P0
F6.2Provider: mark as completedMark appointment as done (for cash bookings, no payment flow).P0
F6.3Provider: cancel appointmentCancel with optional reason; free the slot; optional notification to customer.P0
F6.4Customer: list my appointments“My appointments” with upcoming and past; show provider, service, date, time, status.P0
F6.5Customer: cancel appointmentCancel within policy (e.g. up to 24h before); slot freed; refund policy if paid by card.P0
F6.6Customer: rescheduleCancel current and create new booking for same provider/service (or “change date/time” flow).P1
F6.7Status lifecycleStates: pending, confirmed, completed, cancelled, no-show (no-show can be P1).P0

5.7 Payments & Payouts (Technical)

IDFeatureDescriptionPriority
F7.1Stripe Connect integrationUse Connect so card payments can go to provider’s connected account (or platform then transfer).P0
F7.2Payment intent for bookingOn “pay by card”, create PaymentIntent (or Checkout Session) linked to booking and connected account.P0
F7.3WebhooksHandle payment_intent.succeeded, charge.refunded, etc.; update booking and send confirmation.P0
F7.4RefundsSupport full refund from dashboard or API when customer cancels within policy.P0
F7.5Payout scheduleRely on Stripe’s default payouts to connected bank (e.g. rolling daily); document for providers.P0
F7.6Platform fee (optional)Optional: retain a small percentage or fixed fee per transaction; configurable.P1

5.8 Reviews & Ratings

IDFeatureDescriptionPriority
F8.1Leave a reviewAfter appointment is completed, customer can submit a rating (e.g. 1–5) and optional text.P0
F8.2One review per completed appointmentEach completed appointment allows at most one review from the customer.P0
F8.3Display reviews on provider pageShow average rating and list of reviews (paginated) on public provider profile.P0
F8.4Provider sees reviewsProvider dashboard shows recent reviews and average rating.P0
F8.5Moderation (basic)Optional: flag/hide inappropriate content; simple admin action (can be manual at first).P1

5.9 Notifications (Minimal for March)

IDFeatureDescriptionPriority
F9.1Email: booking confirmationSend email to customer after booking (and to provider if desired).P1
F9.2Email: cancellationNotify when an appointment is cancelled.P1
F9.3In-app notificationsOptional: “You have a new booking” in provider dashboard.P1

5.10 Platform & UX

IDFeatureDescriptionPriority
F10.1Responsive designUsable on mobile and desktop (Next.js responsive layout).P0
F10.2BrandingLight blue and white colour scheme; consistent header/footer; logo/name SlotBook.P0
F10.3Error handlingFriendly error messages; API errors mapped to user-facing copy.P0
F10.4Loading statesSkeletons or spinners for lists and booking flow.P0
F10.5SEO (basic)Public provider pages have meta title/description.P1