Braids Studio

Turning a small-business website into a custom, two-sided booking product.

Product designUX/UI designWordPress developmentBooking system

Building a complete experience for a small business

Braids Studio began as a website project for a Philadelphia braider. As I worked through the business requirements, I realized the experience could not stop at presenting services and collecting inquiries. Clients needed to find a style, understand what to expect, request a real appointment time, and manage changes. The owner needed to review those requests, protect her calendar, contact clients, and run the process without depending on me or learning the WordPress backend.

I designed and built both sides: a responsive marketing website for clients and a custom booking system with a private operations portal for the owner.

My role: Product design, UX/UI design, content design, front-end and WordPress development, testing, launch and handoff Stack: WordPress, Elementor, HTML, CSS, JavaScript, PHP and MySQL Primary users: Braiding clients and the studio owner

Deeper process The product pivot, client journey, booking logic, owner portal, and communication lifecycle.

The turning point

I initially expected to use an existing booking plugin. I compared several options across deposits, schedules, staff access, confirmations and free-versus-paid limitations. The client decided not to collect online deposits, but a more important question remained: who would manage bookings after launch?

The owner needed to approve, decline and reschedule requests herself. Giving her a broad administrator account was not appropriate, and asking her to work through a crowded WordPress dashboard would create training and security problems.

I reframed the project as a two-sided product:

  1. A client experience that builds trust and makes requesting an appointment easy.
  2. An owner experience for reviewing requests and managing the schedule.
  3. A shared booking system that keeps both sides accurate and informed.

Designing the client experience

I used an editorial beauty direction with near-black and warm ivory surfaces, selective gold accents, dramatic photography and direct language. The site leads from inspiration to practical information and then into booking, answering questions about services, price guidance, location and policies near the moment they matter.

The mobile composition was designed intentionally rather than simply stacking the desktop layout. Photography appears early because seeing the work is part of how clients decide whether to trust the studio.

The booking system

The appointment request is divided into three decisions: choose a service, select an available date and time, then add details and review. The final action says Request appointment because submission is not automatic confirmation.

Availability accounts for the duration of each service, business hours, confirmed appointments and active pending holds. The system checks conflicts again at submission and serializes the final check-and-create operation so two clients cannot reserve the same period at once. Unattended holds expire and release the calendar.

I also treated rescheduling as a proposal rather than immediately replacing the original appointment:

  1. The confirmed appointment remains protected.
  2. The requested time receives a temporary hold.
  3. The owner accepts the change or keeps the original.
  4. If the proposal expires, the original appointment remains confirmed.

Clients receive private management links so they can view status, cancel within policy, or request another available time without creating an account.

Building the private owner portal

The first WordPress bookings table proved the system worked, but it was not a suitable daily tool for a stylist moving between clients. I built a separate mobile-friendly portal with its own login, so the owner lands directly on the schedule instead of navigating website settings.

Each appointment brings together the time, service, client details, status and valid next actions. Pending requests offer Accept and Decline; change requests offer Accept change and Keep original; confirmed appointments can be rescheduled, cancelled or completed.

The portal evolved from large appointment cards into compact responsive rows after I saw how much scrolling the first version required. I also separated cancellation from permanent deletion: cancellation preserves history and communicates with the client, while deletion removes test or duplicate records after an irreversible-action warning.

The private experience includes hashed passwords, signed sessions, rate limiting, CSRF protection, server-side authorization and no-cache responses.

Communication and reminders

The experience continues after submission. The business receives the request with review actions, while the client receives acknowledgement and later confirmation, decline, cancellation or reschedule messages.

Reminder state is tied to the specific appointment time so cancelled appointments do not send, changed appointments do not trigger outdated messages, and duplicate reminders are prevented.

Outcome

Braids Studio now has one connected service spanning discovery, appointment requests, client communication and daily schedule management.

For clients, the difference between a request and confirmation is explicit, availability respects service duration, and private links support cancellation or time-change requests. For the owner, booking management happens outside WordPress through a focused mobile portal, while conflicts, holds and reschedules are handled by the system.

I am not presenting invented conversion or revenue numbers. The outcome I can substantiate is the delivered product: a live public website, protected booking logic and an operational tool the owner can use without ongoing developer involvement.