All work
CLIENT ENGAGEMENT2026

Dream Adventure

Dream Adventure — outdoor tour operator, Minakami, Gunma, Japan

A bilingual booking and operations platform for a Japanese rafting and canyoning operator — public reservation flow, live availability, and a full admin back office.

RoleSolo — product design, front-end, back-end, deployment
Year2026
StatusLive · thedreamadventure.com
Dream Adventure homepage — English hero showcasing Tone River rafting in Minakami, Japan

The Problem

The business took every reservation by phone and email, tracked daily capacity on paper, and operated a static HTML site that could not display real-time availability.

Double-bookings were a recurring operational risk during peak season. The owner — who is not a developer — needed the autonomy to adjust seasonal pricing, block out dates, launch promotional discounts, and generate daily guide manifests without relying on outside technical help.

What I Built

Public Booking Flow

A linear six-step wizard — activity, date, time, party size, details, confirmation — that never asks for more than one decision at a time. Availability is read live from the database at the date and time steps, so a departure that is already full cannot be selected. The combo package is surfaced first because it is the highest-value booking.

Dream Adventure booking wizard — step one of six, choosing between the rafting and canyoning combo package or a single activity
Step one of the reservation wizard — combo package surfaced above the single-activity options, with per-adult and per-child pricing shown inline.

Activity & Experience Pages

Each activity gets a dedicated page carrying the detail a guest needs before committing: difficulty rating, minimum age, what to bring, departure times, and what is included in the price.

Dream Adventure rafting activity page with tour specifications and booking CTA
Rafting activity page — overview, difficulty rating, and departure schedules.

Canyoning & Multi-Activity Combos

Dedicated tour pages for technical canyoning routes and package deals, allowing guests to combine morning rafting with afternoon canyoning under a single consolidated reservation.

Dream Adventure canyoning activity page highlighting courses and gear
Canyoning experience page with course breakdowns and equipment checklists.

Revenue & Operations Dashboard

A centralized admin overview showing real-time revenue trends, booking volume by departure time, and customer acquisition metrics across seasons.

Admin revenue dashboard displaying booking analytics and financial charts
Back-office revenue overview with periodic breakdowns and channel analytics.

Live Capacity & Departure Control

A real-time availability engine enforcing hard capacity limits (21 guests for rafting, 35 for canyoning) across three daily departures (09:00, 11:30, 13:30). The owner can lock individual slots or whole dates in one click.

Admin availability calendar with per-slot capacity controls and departure management
Availability management calendar — per-slot capacity thresholds and blackout controls.

Daily Guide Manifest & PDF Generation

Server-side PDF generation compiles daily departure manifests grouped by guide, tour time, and guest equipment sizes for river guides standing on the riverbank at 8:00 AM.

Daily guide manifest screen showing customer roster grouped by departure
Daily operational manifest with equipment sizing and one-click PDF export.

Promotion & Discount Engine

Full coupon and promotional campaign builder supporting percentage discounts, fixed reductions, date-range validity, and per-activity restrictions.

Promotion management interface for discount codes and seasonal campaigns
Promotions manager — custom promo codes, expiration windows, and usage tracking.

Full Public Experience

The complete public-facing homepage layout, featuring river imagery, tour highlights, customer reviews, and bilingual navigation.

Full page layout scroll of the Dream Adventure homepage
Complete public homepage scroll capture.

Technical Decisions

Japanese at the root, English at /en

Configured next-intl with localePrefix: "as-needed" and disabled browser language detection. The client's primary market is domestic Japanese tourism; serving Japanese at the root domain preserved search rankings and eliminated unwanted redirects for local customers.

No online checkout, on purpose

The operator collects payment upon arrival via cash, card terminal, or domestic bank transfer. Stripe was eliminated entirely to avoid unnecessary transaction fees and API failure modes. The paymentStatus field stores composite states like "PAID - Card Terminal", unifying the admin UI, CSV exports, and accounting reports.

Strict Japan Standard Time (JST) calculations

Because Vercel serverless functions run across global UTC regions, "today" is explicitly calculated with a +9 hour offset rather than relying on the host system clock. This prevents guides on the river from seeing previous-day manifests.

Soft deletes and persistent audit logging

Cancellations and guide deactivations utilize soft deletes exclusively. The operational audit log retains complete transaction history to resolve customer inquiries and financial discrepancies.

Outcome

Delivered State

Reservations now flow through an automated digital system rather than phone and paper. The owner manages availability, seasonal pricing, and promotions independently, prints daily PDF manifests for field staff, and tracks revenue trends in real time.