A booking site built around the owner's time.
The client is a solo travel photographer in Berlin who is away almost half the year and only shoots in golden light. Inquiries used to arrive as Instagram messages and die halfway. The north star of this build was simple: every feature has to remove a task from the photographer's day.
What happens, in order
- 1
Visitor
Lands on the board. Sees the calendar, the work, the person. Taps a day or the blue tile.
- 2
Booking street
Session, date and light, details, review. Every step is saved twice: in the browser and as a draft on the server.
- 3
Left halfway?
Two hours later an email brings them back to the exact step. One more after a day. Never a third.
- 4
Confirmed
Reference, embedded card payment for the deposit, confirmation email, calendar event, owner notified. Zero clicks for the photographer.
- 5
Project page
Magic link, no password. Reschedule against live availability, cancel inside the policy, chat, pay, invoice, gallery.
- 6
Two days before
Reminder with sunrise or sunset time, meeting point and what to wear.
- 7
After the shoot
One tap in Studio: shoot done. Invoice is numbered, issued and emailed. Later: drop the pictures, tap send.
Admin that disappeared
- Instagram DMs that die after 'are you free on the 12th?'
- The board answers before they ask; the calendar is the conversation.
- Half-finished inquiries
- Drafts are tracked and reminded automatically, and listed as leads in Studio.
- No-shows
- Deposit paid by card at booking, 48 hour clock with a pay-link reminder when it slips, 48 hour shoot reminder.
- Money admin
- Deposit and balance settle themselves, receipts go out, refunds inside the free window are automatic. Nothing to mark by hand.
- Reschedule ping-pong
- Clients move the date themselves, only onto slots that are truly open, before the cutoff.
- Writing invoices
- Numbered, VAT-split, printable, issued in the same tap that marks the shoot done.
- Sending galleries
- Private bucket, signed links, one email with a button.
- Keeping the website's availability in sync
- Google Calendar in, bookings out, travel days labelled on the board.
Under the hood, briefly
- Availability is computed live from the photographer's Google Calendar, manual travel and off blocks, confirmed bookings and 15 minute holds from people mid-booking.
- Slot times follow the actual sun for the home base: sunrise slot starts 30 minutes before sunrise, golden hour ends 20 minutes after sunset.
- Every email is rendered once, stored in an outbox and sent through the connected provider. Without a provider, the outbox still shows exactly what would have gone out.
- An assistant endpoint runs on a schedule: pick-up reminders, deposit nudges, 48 hour reminders, payment reconciliation, calendar sync. All idempotent.
- Payments are embedded Stripe checkouts per deposit and balance; a webhook, the return page and the hourly reconciliation all settle the same idempotent record.
- Sign-in is a magic link. The project page is scoped to the email that booked. Studio is locked to the owner role.
- Design: paper white, ink, one cobalt blue, soft earth tones as surfaces. Outfit for everything, a handwritten note only where a person would scribble one.