Product Overview
Welcome to Tours — a complete, production-ready tours & experiences booking marketplace you can deploy, brand, and sell as your own. This page introduces the product: what it is, who it's for, the user roles and portals, the add-on ecosystem, and the technology behind it.
Ready to get running? Jump to the Quick Start or the Installation Guide. For the big-picture business case, read on.
What Tours Is
Tours is a single, self-contained Next.js 16 application. There is no separate API server, no microservices, and no mobile codebase to wire up — the public storefront, all four portals, the REST API, the install wizard, and the admin panel live in one deployable project and run from one npm run build / npm run start.
Out of the box, Tours gives you everything needed to launch a tour-booking business:
- A public storefront at
/— marketing pages, a tour catalogue, search by destination, and booking checkout. - Tours — rich listing pages with a day-by-day itinerary, inclusions, photo galleries, and traveller reviews.
- Departures — dated, priced, capacity-limited options of a tour, with seasonal rates and availability.
- Extras — optional add-ons a traveller can attach to a booking (equipment, transfers, upgrades).
- Coupons — promotional discounts applied at checkout, validated and re-priced server-side.
- Booking checkout — a built-in PayPal gateway plus offline payment methods, always re-priced on the server.
- Blogs & content pages — content marketing built in.
- Operators — public operator profiles plus an operator workspace for listing and running tours.
- A customer dashboard — bookings, payments, reviews, wishlist, messages, and notifications.
- An influencer / affiliate program — referral links, commissions, and payouts.
- An admin panel — manage every part of the platform without touching code.
Everything is backed by PostgreSQL using plain, parameterized SQL — no ORM and no migration framework. The schema is created idempotently by the install wizard and ensure*() helpers, so a fresh download sets itself up on first run.
A note on vocabulary. The product speaks in tour terms — tour, operator, traveller, departure, inclusion, extra, booking. For stability, the underlying database keeps table and column names from an earlier build (a tour is a
listingsrow, an operator is ahostsrow, a departure is aunitsrow). You only ever see those names in SQL examples; the UI and docs use tour vocabulary throughout.
White-Label by Design
Tours is built to be resold and rebranded. Branding, content, currency, and locale all come from settings, never from hardcoded values:
- Branding — name, logo, colours, and theme are configured in the admin, not baked into the code.
- Currency & locale — money is stored in minor units (cents) and formatted for the viewer; the display currency comes from settings and records, not a fixed
EUR. - Content — marketing pages, blogs, FAQs, testimonials, and hero sliders are all editable data.
Because you receive the full source code, you own the deployment, the data, and every customisation — there is no per-seat SaaS fee and no vendor lock-in. Host it wherever you like.
Who It Is For
| You are… | Tours gives you… |
|---|---|
| A solo tour operator | A storefront, checkout, and booking area ready to brand and launch. |
| A tour marketplace | Multiple operators, commissions, payouts, and reporting. |
| A travel agency / DMC | A resaleable, white-label platform you can deploy per client. |
| A developer | A clean Next.js + TypeScript codebase with full source and no lock-in. |
The Roles & Portals
Tours ships with distinct experiences, each on its own URL space, all sharing one codebase and one database.
| Role | Portal | What they do |
|---|---|---|
| Admin | /admin |
Run the whole platform: tours, operators, customers, bookings, payments, marketing, settings, add-ons, and license. |
| Operator | /operator |
List and manage tours, set departures, pricing and availability; handle reservations, earnings, payouts, analytics. |
| Traveller | /customer |
Browse and book tours, manage bookings and payments, leave reviews, save a wishlist, and message operators. |
| Influencer | /influencer |
Promote tours with referral links, track commissions, request payouts, and grab marketing materials. |
The public storefront at / is open to everyone — visitors browse tours, destinations, operators, and blogs, then sign up and book.
What the Admin Panel Covers
The admin panel (/admin) is data-driven and organised into modules, including:
- Catalog — tours, destinations, inclusions, extras, operators, and calendars.
- Marketing — coupons and the influencer / affiliate program.
- Bookings & Revenue — bookings, payments, and operator payouts.
- Customers & Leads — customer records, enquiry leads, and reviews.
- Content — blogs, pages, FAQs, gallery, hero slider, testimonials, partners, and why-choose-us.
- Settings — payments, currencies, tax, booking rules, countries, locations, languages, roles & permissions, users, integrations, theme, backup, API tokens, webhooks, notifications, and monetization.
The API
Every user-facing surface a mobile or headless client needs is exposed as a REST endpoint under src/app/api/v1/**/route.ts — not just as a server-rendered page. Handlers use shared helpers (ok() / err() / serverErr()) and guard authentication first with getCustomerId / getOperatorId / getSession.
An admin-gated interactive reference lives at /api/docs/v1 (rendered with Scalar over an auto-generated OpenAPI spec). The spec is produced from the route handlers by npm run gen:openapi, so it stays accurate as the API evolves. See the API Documentation for details.
The Add-on Ecosystem
Tours keeps the core lean and delivers advanced capabilities as built-in add-ons. There are over 60 add-ons bundled in the source (src/product/addons/) — there is no separate file to upload or zip to install. Each add-on is unlocked by a combination of license entitlement and an admin toggle.
Add-ons fall into two groups:
- Channels — pluggable providers for payments, storage, email, live chat, analytics, video, AI, and more (for example: Stripe, PayU, Airwallex, MercadoPago, dLocal, eWAY, Mux video, Tidio live chat, GA / Meta Pixel / Clarity / PostHog / TikTok analytics, SMS, and WhatsApp).
- Features — functional modules such as maps, two-factor auth, audit logs, privacy / consent, and an AI chatbot.
You start with a focused core and switch on exactly the capabilities your business needs, when your license entitles them. On a development host the entitlement check is bypassed, so you can explore everything locally before launch.
See the Add-on Development Guide to learn how add-ons are structured and how to build your own.
Technology Stack
Tours is a modern, all-TypeScript stack — no PHP, no Java, and no separate backend to operate.
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router) + React 19 |
| Language | TypeScript 5 |
| Database | PostgreSQL via @neondatabase/serverless — raw sql\`` tagged-template queries, no ORM |
| Styling | Tailwind CSS 3 with design tokens (brand-* primary, ink-* neutrals) |
| Auth | Custom JWT (jose + jsonwebtoken); admin uses an admin_token cookie, members a signed one |
| Passwords | bcryptjs |
| nodemailer | |
| File storage | AWS S3 SDK → Cloudflare R2 (and other S3-compatible providers) |
| Images | sharp (resize / format conversion) |
| Maps | leaflet / react-leaflet |
| jsPDF + jspdf-autotable (invoices, vouchers) | |
| Icons | lucide-react + react-icons |
Because it is one Next.js app, the storefront, portals, and API all run from the same build. The schema is created on first run by the /install wizard or the ensure*() helpers — there are no manual migrations to maintain.
What You Get on First Run
A fresh download has no database configured, so the app redirects to the install wizard at /install. It checks requirements, collects your database connection, activates your license, creates your admin account, and saves your site settings — then your storefront is live. See the Installation Guide for the full walkthrough.
© CreativeCape Solutions · creative-cape.com · support@creative-cape.com