
The trip 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.
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

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.
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.
The public surfaces, from discovery to booking.

The trip catalogue
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.

Trip page with departures
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 trip finder
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.

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

Customer area
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 journal
Travel stories and photographer profiles feed the editorial side, which brings organic search to the catalogue instead of leaving it isolated.
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
Content, bookings, customers, leads, vouchers, gift cards, reminders and statistics. This is the panel the day to day runs from.
Whoever leads the trip
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
Past and upcoming bookings, profile and vouchers. One place holding everything about their own trip.
The panel is organised by activity, not by table: the people using it look for the action, not the data model.
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.
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.
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.
One Next.js app, one Postgres database, payments and email native. No third-party CMS to keep alive.
Payments on Stripe Checkout with signed webhooks: no card data passes through the server.
If your product has departures, limited seats and several people working on it, this is the problem you have.
weshootphototours.com