Skip to content
Back to projects

Case study

Photography Studio Booking

A booking platform where clients find photography studios, check availability, reserve a time and pay online, while studio owners manage their listing, schedule, bookings and payouts from one dashboard.

Role:
Solo full-stack developer
Type:
Personal product / skill demo
  • Next.js
  • TypeScript
  • Tailwind CSS
  • Supabase
  • PostgreSQL
  • Stripe Connect
  • Mapbox
  • Resend
Photography Studio Booking landing page with hero headline and studio preview cards

Overview

I designed and built Photography Studio Booking so photographers and creators can find a studio, see when it’s available, book a session and pay online, instead of arranging everything through calls or messages. Studio owners get one place to set up their listing, control when they’re open, handle bookings and receive payouts. Admins review applications from people who want to list a studio.

Problem

  • Studios often run bookings through DMs, phone calls and spreadsheets, which leads to double bookings and missed sessions.
  • Communication and notes stay scattered, so neither side has a clear record of what was reserved.
  • Payments often happen by bank transfer or in person. Many studios have little or no online listing, so new clients struggle to discover them.

Goals

  • Let a client find a studio, reserve an available slot without conflicts and pay securely without calling the studio.
  • Give owners everything needed to list, schedule, publish and get paid from one dashboard.
  • Support Coming soon and Bookable states so a studio can appear in search before online booking and payouts are fully ready.
  • Give admins a simple way to review studio-owner applications and approve or reject them.

Solution walkthrough

This walkthrough covers the client booking journey, studio owner setup and listing management and the admin path for approving new studio owners.

  1. 01

    Browse & discover

    Clients browse studios and filter by keyword, city, price and equipment. Bookable studios appear first, while Coming soon studios stay easy to preview. Each studio page covers the description, hourly rate, equipment, optional photographer add-on, additional equipment, studio rules, location and gallery. On Bookable studios, clients can add an optional photographer if they want one, then start a booking. On Coming soon studios, booking stays hidden until the owner finishes payment setup.

    Studios browse page with filters and Bookable and Coming soon badges
    Studio detail gallery grid with Coming soon badge for Lumen Loft Studio
    Bookable studio detail with photographer add-on options and Book this studio CTA
    Coming soon studio detail with pricing preview and booking gated until payment setup
  2. 02

    Book a session

    On bookable studios, clients pick a date in Europe/Belgrade time, then choose a start time in 30-minute steps and a duration. The summary shows the total for the selected duration, including an optional photographer add-on. Before checkout they can leave a note, must accept the cancellation policy and continue to payment, with a 15-minute hold on the slot while they pay.

    Booking calendar with available dates highlighted and booking summary sidebar
    Start time and duration selection with note, terms and Continue to payment
  3. 03

    Bookings & payment states

    If payment isn’t finished yet, the bookings page shows the session as awaiting payment, with an option to complete payment while the hold is still active. Once payment succeeds, the booking is confirmed, with session details, a pricing breakdown and cancel options based on the studio’s refund rules.

    My bookings list showing Awaiting payment with Complete payment and a Confirmed booking
    Confirmed booking details with payment breakdown and Cancel booking action
  4. 04

    Become a studio owner

    Any client can apply to list a studio from their account. The application captures business name, country, city, address and description. After submit, an admin reviews the request before the account is upgraded and a draft studio is created.

    Client account overview with Apply to list your studio CTA
    Studio owner application form with name, country, city, address and description
  5. 05

    Owner setup & publish gates

    After approval, owners work through an onboarding checklist until the listing is ready to publish. Publishing makes the studio visible as Coming soon so clients can discover it. It becomes Bookable only after payouts are connected, so going public and accepting paid bookings are two separate steps.

    Owner dashboard studio setup checklist with all steps complete
    Owner payments Connected status and Publish studio controls with Unpublish
  6. 06

    Studio listing tools

    From the studio dashboard, owners build out the full listing: profile and description, pricing and refund rules, location on the map, gallery, equipment and studio rules, plus an optional photographer add-on. The screens here focus on the gallery with cover-image ordering, confirming the map pin and setting up the photographer offer clients can add at booking.

    Owner gallery manager with cover badge, reorder handles and upload controls
    Owner location setup with address fields, confirmed map pin and Mapbox map
    Photographer add-on form with name, hourly rate, description and Offer to clients toggle
  7. 07

    Availability engine

    Owners control when the studio can be booked. They set weekly opening hours, date overrides, blocked times for private use and rules like how far ahead clients can book and how much gap to leave after a session. Confirmed bookings and unpaid holds on a slot both count, so clients only see times that are truly free.

    Weekly hours editor with open windows and next 14 days booking sidebar
    Date overrides, blocked times and booking rules for lead time and buffer
  8. 08

    Owner booking operations

    Owners can review upcoming, past and all bookings for their studio, with client contact details on each booking. Cancel and refund follow the same cutoff rules clients get.

    Owner bookings list with Upcoming filter and confirmed client sessions
    Owner booking detail with client email, line items and Cancel booking
  9. 09

    Admin applications

    Admins review pending studio-owner applications in a simple queue. Approving creates a draft studio, upgrades the applicant to studio owner and sends an email. Rejecting archives the application and emails the applicant. If needed, the admin can also include a rejection reason.

    Admin studio applications queue with pending application and Review action
    Admin application review with approve and reject panels and internal notes

Features

Discovery & booking

  • Public studio catalog with city, keyword, price and equipment filters
  • Studio detail pages with description, pricing, equipment, rules, location, gallery and Coming soon or Bookable status
  • Date and time selection that avoids double bookings, with a short hold while the client finishes payment

Accounts & applications

  • Email/password and Google OAuth with role-based access for client, owner and admin
  • Client account area for overview, bookings, profile and security settings
  • Studio-owner applications with admin approve or reject and transactional emails

Owner & admin tools

  • Owner dashboard for studio setup, publishing, payouts and booking management
  • Availability tools for weekly hours, date overrides, blocked times and booking rules
  • Admin queue to review and approve or reject studio-owner applications

How it's built

I built the app with Next.js App Router, React Server Components and Server Actions on Vercel, backed by Supabase Auth, Postgres, Storage, RLS and pg_cron. Payments use Stripe Checkout with Connect Express per studio, confirmation is webhook-driven and Resend handles transactional mail. Mapbox powers geocoding and the studio map.

  • Publish is not the same as bookable

    Owners can publish a finished listing before payouts are fully connected, so the studio can show up as Coming soon. Booking and checkout unlock only after payouts are ready, which means studios stay discoverable while onboarding without taking online payments before they can receive them.

  • Treating time as the inventory

    Unlike a product store, the inventory here is open time on the calendar. Availability is built from weekly hours, date overrides, blocked times, confirmed bookings and unpaid holds that still reserve a slot. Before a booking is created, the app runs an overlap check against confirmed sessions and active holds. A Postgres GiST index on confirmed time ranges adds a second safeguard, so two paid bookings cannot share the same studio at the same time.

  • Confirming payment before a booking is final

    A booking only becomes confirmed after Stripe reports that payment succeeded, so the calendar does not treat a session as sold too early. When an owner finishes payouts setup, Stripe also notifies the app. That is what moves a published studio from Coming soon to Bookable. If a booking is cancelled in time, the client gets a full refund under the studio’s rules.

  • Clear roles and data access

    The app has three roles: client, studio owner and admin. Clients only see their own bookings, owners only manage their studio and its bookings and admins only handle applications. Access is enforced in the app layer and with database row-level security, so one account cannot reach another role’s data.

Tech stack

Frontend

  • Next.js 16 (App Router, RSC, Server Actions)
  • React 19
  • TypeScript 5
  • Tailwind CSS 4
  • shadcn/ui
  • Zod 4

Backend

  • Supabase Auth
  • PostgreSQL + RLS
  • Supabase Storage
  • pg_cron hold expiry

Services

  • Stripe Checkout + Connect Express
  • Resend
  • Mapbox Geocoding + Mapbox GL

Hosting

  • Vercel

Challenges

  • Preventing double bookings under payment delay

    Approach: When a client starts checkout, the chosen time is held for 15 minutes. That hold counts as taken in overlap checks, a scheduled cron job clears expired holds and the client can finish payment before the hold runs out.

    Result: The slot stays reserved during payment, but it opens again if the client never completes it.

  • Publish versus bookable for marketplace payouts

    Approach: Publishing a listing and accepting paid bookings are separate steps. A studio can appear as Coming soon once the listing is ready. It becomes Bookable only after payouts are connected and synced.

    Result: Owners can start getting discovered, then turn on online booking as soon as they can receive payouts.

  • Safe owner onboarding through admin approval

    Approach: New studio owners apply first and wait for an admin decision. Approval creates a draft studio, upgrades the account and sends an email. Rejection archives the application and notifies the applicant.

    Result: Only approved applicants become owners. They land in a real draft studio instead of an empty account.

Need a booking system built around your business?

I build custom booking systems with live availability, secure payments, and management tools tailored to your workflow, from individual businesses to multi-business platforms.