Book a workshop
Account
Tour operator · 2026

Group trips, tailor-made travel and the back office holding them

A tour operator selling group departures, individual packages and itineraries built on request. Three different ways of selling that still have to end up in the same place.

Next.js, Supabase, Stripe, Resend

The Time Travel Bag home page with the two travel modes, solo and group

Home · solo or group trips, same care

Time Travel Bag is a platform for an Italian tour operator: a public site with search and catalogue, trip pages with day-by-day itineraries, Stripe checkout with deposit or full payment, gift cards and vouchers with drawable balances, waiting lists on sold-out departures, quote requests for tailor-made travel, and a back office with dashboard, statistics and a trip wizard. Stack: Next.js, TypeScript, Supabase, Stripe, Resend.

The problem

A small agency sells in three different ways and each has its own rules. A brochure site is not enough: what is needed is the piece behind it, where the work actually happens.

  • Group trips with limited seats and fixed departure dates
  • Tailor-made trips that are not bought online but quoted
  • Deposit or full payment, with the percentage decided departure by departure
  • Gift cards and vouchers to draw down, even up to covering the whole amount
  • People who book must be able to pay the balance later, without registering
  • Full departures must not lose the contact of someone who wanted to be there

The product

From search to confirmation, and the back office behind it.

The search by destination, dates and budget

Search on the home page

Entry

Search and routing

Destination, dates and budget route towards a trip in the catalogue or towards a tailor-made request. People who do not find what they want are not left at a dead end.

The filterable destination catalogue

The catalogue

Catalogue

Destinations and collections

The catalogue filters by trip type, and themed collections gather food, nature, art, history and cultures for people who start from an interest rather than a place.

A trip page with the day-by-day itinerary

A trip page

Trip page

The trip day by day

Daily itinerary, services included and excluded, gallery, guides and FAQs. All in the database, so the agency updates it without asking.

The checkout with the choice between deposit and full payment

The checkout

Purchase

Deposit or full payment

You pick the departure and the participants, then pay a deposit or the whole amount. On confirmation seats are drawn down, gift cards and vouchers are redeemed, and the emails go out.

A booking detail showing the outstanding balance and the payment button

Booking detail

After the purchase

Managing the booking

A payment summary with the deposit paid and the balance still due, and a button to settle it online whenever you want. You get there from the customer area or from the signed link the agency emails out. Below, passenger details for tickets and insurance.

The gift card purchase page with the card preview

Buying a gift card

Gifting

Gift cards

Any amount from €25 up, with four suggested tiers. The buyer writes a name and a message, pays with Stripe, and the code reaches both of them by email. It lasts twelve months and is drawn down until spent.

The bookings list in the admin panel

Bookings in the back office

Back office

The agency's bookings

Every booking with customer, trip, session, amount and payment state. Filters by date, destination and trip type, plus manual entry for people who book by phone or in the shop.

Voucher management in the admin panel

Vouchers in the back office

Back office

Vouchers and gift cards

Codes are created from the panel and tracked by state: to use, partially used, spent, expired. Each one carries its remaining balance and expiry date.

The back office

This is the most substantial part of the work, protected at three levels: middleware, role checks in every server action, and Row Level Security on Postgres.

Content

  • Trips

    A multi-step wizard: information, photos, departures, itinerary, services, FAQs from a shared library, and SEO. Drafts survive closing the browser.

  • Destinations and collections

    The taxonomies the catalogue is browsed by.

  • Collaborators

    Records for guides and tour leaders, linked to the trips.

  • Travel stories

    The editorial side, with its own writing and publishing flow.

Sales

  • Bookings

    Advanced filters, manual entry, an editable customer page and travel documents for each participant.

  • Waiting lists

    Everyone signed up on a full departure, ready to be told when a seat frees up.

  • Messages

    Enquiries from the site land here and are answered by email from the panel.

  • Vouchers and gift cards

    Creating and deactivating vouchers, checking gift card balances.

Measurement

  • Dashboard

    Thirty-day indicators and alerts: bank transfers pending, seats running low, waiting lists to notify.

  • Statistics

    A selectable period compared with the previous one on revenue, bookings, payment states and best-selling trips.

Stack

One Next.js app, one Postgres database, payments and email native. Content sits on translation tables, so multilingual is already provisioned for.

Next.jsReactTypeScriptTailwind CSSshadcn/uiSupabasePostgreSQLRow Level SecurityStripeResendRechartsVercel

Granular cookie consent with Consent Mode: analytics scripts only start after consent.

Selling travel in more than one way?

Groups, packages and tailor-made trips have different rules but the same agency behind them. The work is making them end up in the same place.

timetravelbag.com