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.

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.

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.

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.

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

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.

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.

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

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

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