Book a workshop
Account
Photography expeditions · 2025

Catalogue, bookings and three roles for a travel community

WeShoot takes photographers around the world with a network of coaches. It needed a product that could hold departures, seats and payments without a spreadsheet behind it, and give each role only what it needs.

Next.js, Supabase, Stripe, Resend

The WeShoot Photo Tours home page with the expedition catalogue

Home and trip search

WeShoot Photo Tours is a platform for group photography expeditions: a catalogue of destinations, collections and trip pages, departures with seats that hold up under concurrent bookings, Stripe checkout with vouchers and gift cards, a customer area for bookings and profile, a coach portal for their own departures, and an admin covering content, sales, marketing and statistics. Stack: Next.js, TypeScript, Supabase, Stripe, Resend.

The problem

A growing community sells seats on trips that leave on fixed dates. The risk is not traffic: it is selling the same seat twice, or losing a request among the emails.

  • Limited seats on fixed departure dates, to be kept accurate at every moment
  • Several coaches, each with their own trips, who must not see each other's data
  • Applications to qualify before the sale, not a plain shopping cart
  • Vouchers and gift cards to redeem at checkout without getting the maths wrong
  • Content that changes often: destinations, itineraries, photographers, reviews
  • Travellers who should find their own bookings without writing to anyone

The product

The public surfaces, from discovery to booking.

The WeShoot photography expedition catalogue

The trip catalogue

Catalogue

Trips and destinations

The catalogue is browsed by destination or by themed collection. Every trip has its page with the itinerary, what you learn, what is included and the photographers leading it.

A trip page showing departure dates and available seats

Trip page with departures

Departures

Dates, seats and booking

Each trip has several departures, each with its own dates, price and seats. Seats are drawn down when payment is confirmed and hold up against two bookings arriving in the same instant.

The tool that suggests a trip based on your answers

The trip finder

Guidance

Find the right trip

Anyone who does not know where to start answers a few questions and gets the trips that suit them, instead of scrolling a whole catalogue.

The gift card purchase page

Buying a gift card

Gifting

Gift cards and vouchers

Gift cards are bought online and generate a code with a drawable balance. Promotional vouchers are issued by the admin. Both apply at checkout.

The private area with the customer's bookings

Customer area

Customer area

Your own bookings

People who have booked log in and find past and upcoming trips, their profile and the vouchers they hold. No email to dig out of the inbox.

The editorial section with travel stories

The journal

Editorial

Journal and photographers

Travel stories and photographer profiles feed the editorial side, which brings organic search to the catalogue instead of leaving it isolated.

One product, three roles

Access is checked at three levels: middleware, role inside every Server Action, and Row Level Security on Postgres. Whoever logs in sees only their part.

Whoever runs the business

Admin

Content, bookings, customers, leads, vouchers, gift cards, reminders and statistics. This is the panel the day to day runs from.

Whoever leads the trip

Coach

Sees their own departures and the participants attached to them. No access to the general admin and no sight of other photographers' trips.

Whoever travels

Customer

Past and upcoming bookings, profile and vouchers. One place holding everything about their own trip.

What the admin covers

The panel is organised by activity, not by table: the people using it look for the action, not the data model.

Content

  • Trips

    A nine-step wizard: information, style profile, day-by-day itinerary, services, departures, FAQs, images, SEO, draft and publish.

  • Destinations and collections

    The taxonomies the catalogue is browsed by, with their own images and copy.

  • Photographers

    Coach profiles with biography, awards and portfolio, linked to the trips they lead.

  • Journal and reviews

    Editorial stories and participant reviews, each with its own publishing flow.

  • Shared FAQs

    A library of reusable questions, so the same answer is not rewritten on every trip.

Sales

  • Bookings

    A filterable list, manual entry for people who book by phone, and a page per order.

  • Customers

    Customer records with booking history and the option to open a new booking from the page.

  • Leads

    Applications land here and are worked by status, instead of sitting in an inbox.

  • Trip finder

    The answers people give the guidance tool become a readable commercial signal.

Marketing and measurement

  • Vouchers

    Fixed-amount or percentage codes, with validity and redemption status.

  • Gift cards

    Issuing, remaining balance and redemption history.

  • Exit popups

    Exit messages configurable per page, without touching the code.

  • Reminders

    Scheduled emails to customers, with templates managed from the panel.

  • Statistics

    Revenue, bookings and trends over time, to decide what to push.

Stack

One Next.js app, one Postgres database, payments and email native. No third-party CMS to keep alive.

Next.jsApp RouterTypeScriptTailwind CSSshadcn/uiSupabasePostgreSQLRow Level SecurityStripeResendZodVercel

Payments on Stripe Checkout with signed webhooks: no card data passes through the server.

Selling seats on fixed dates?

If your product has departures, limited seats and several people working on it, this is the problem you have.

weshootphototours.com