Booking App Starter · Industry version
Session types, date-holding deposits, and mini-session days that sell themselves — booking shaped for photographers, in code you own.
A photographer's calendar isn't office hours — it's golden-hour slots, a wedding that blocks a whole Saturday, and a mini-session day where forty families book fifteen-minute windows. This starter models sessions the way photographers sell them, and the codebase is yours.
01 · The problem
Generic schedulers think in appointments; photographers sell sessions. A newborn session runs three hours in-studio with a fragile date window, a branding shoot is a half-day on location, and a wedding consumes the whole day plus travel. Each has its own duration, prep, deliverables, and price — flattening them into 'one-hour appointment' slots misrepresents the actual product on the very page that sells it.
The date isn't held by a calendar entry; it's held by a deposit and a contract. Photographers block prime Saturdays months out, and an inquiry without a paid retainer isn't a booking — it's a risk. A tool that confirms slots for free hands your best dates to people who ghost, while a paying client finds the date gone.
And outdoor work answers to weather and light. Sessions cluster around golden hour, which moves daily; a rained-out shoot needs a reschedule that carries the same deposit, gallery timeline, and client thread. Generic reschedule flows treat it as cancel-plus-rebook, shredding the paper trail mid-season.
02 · Data model
Everything in the base Booking starter —
servicesprovidersavailability_slotsbookingscustomersreminders— plus the entities this industry actually runs on:
| table | what it holds |
|---|---|
session_types | The packages you sell — duration, location type, deposit required, what's delivered, and the price that varies by all three. |
session_deposits | Retainers tied to bookings — amount, paid date, and the rule that no date is confirmed until one clears. |
mini_session_events | A date, a location, and a block of short back-to-back slots sold as one campaign — filled from a single shareable page. |
03 · Screens
Clients choose a session type and see only dates that fit it — evening slots for golden-hour sessions, full free Saturdays for weddings. Each type asks its own intake questions, so the shoot brief starts at booking instead of in a follow-up thread.
A new booking holds its date as pending; the deposit confirms it. Unpaid holds expire on a timer you set and the date goes back on sale. The calendar distinguishes pencilled from paid at a glance — which is the distinction that pays your rent.
A reschedule moves the session with its deposit, brief, and history intact, and offers the client dates from the same session type's availability. One rainy Saturday becomes three taps, not five apologetic emails.
04 · In practice
You create a fall mini-session event — one park, one afternoon, twelve fifteen-minute slots. The event page goes out in one link; families pick a slot and pay to confirm. The day fills back-to-back with buffers you set, and the roster prints itself.
An inquiry for next June arrives. The date holds as pending while the consultation happens; the retainer invoice goes out, and payment flips the Saturday to confirmed — blocking travel time either side automatically. No spreadsheet of 'promised' dates.
Sunset moves twenty minutes earlier by October. You shift your evening availability template once, and every unsold slot follows; booked sessions stay put, flagged if they now sit outside the window so you can nudge the clients who'd want to move.
Yes — that's the default posture. Bookings hold as pending, deposits confirm them, and unpaid holds expire back to open availability on your timer. The deposit amount lives on the session type, so a wedding can demand more than a mini.
A mini-session event bundles a date, a location, and a run of short slots sold from one page — share the link and watch it fill. Slot length, buffers, and capacity are yours to set per event, and the day's schedule generates from the bookings.
Within rules you set, yes — the confirmation link offers new dates from the same session type, and the deposit, intake answers, and history travel with the booking. You can also hold reschedules for approval if you'd rather confirm conditions first.
Contracts and gallery delivery are natural extensions to a codebase you own — link a signing service at booking, or add a delivery-link field to completed sessions. The invoicing starter's creative variant pairs well for usage licensing and final payments.
Dual7 App Starters
Session types, date-holding deposits, and mini-session days that sell themselves — booking shaped for photographers, in code you own. Describe your version to start — the output is a project you own.