All projects
WebOct 2026 — ongoing· Sole Full-Stack Developer & Designer

A website for a Pondicherry travel agency that sells by feel, not by price grid: a hero of postcards you can drag and throw aside, destinations laid out as a departure board, a trip shaper that tells you how much effort a plan asks of you, a couples section, a journal, and a travel desk for bookings and quote requests.

0
technologies
0
shipped features
0
screens
0
decisions logged
Through Vacations - Travel Agency Website
Through Vacations - Travel Agency Website screenshot

5 sections below

01Overview

Through Vacations plans holidays across India and abroad from Pondicherry, and until now it lived on Instagram. The brief was to turn that feed into a site people can actually plan from, without inventing anything the agency had not said: no made-up testimonials, ratings or service promises. Every rule came from a written study of their Instagram before any page was designed.

There are seventeen trips, from Kashmir, Ladakh and the Andamans to Thailand, Bali, Dubai and the Maldives. Each has a day-by-day itinerary with a pace filter, the gateway airport, flight time and paperwork, a couples version of the plan, and a reserve form that asks for dates and travellers. Booking never takes payment: it sends a request, and a planner confirms availability and sends a quote, which is how the agency already works on WhatsApp.

The interactive parts carry the brand. The home hero is a fanned stack of postcards with pointer capture, so a card can be dragged, thrown past a threshold or tapped to open its trip. Destinations are a departure-board table with airport codes and best months. The trip shaper takes a place, a month and a number of days, and scores how hard the plan is (travel time, hotel changes, season) without quoting a single price. The couples page has a honeymoon quiz, and every trip can be saved to a wishlist.

How it works: Next.js 16 on the App Router with Cache Components, React 19, Tailwind CSS 4 and shadcn on Base UI, with React Hook Form and Zod on every form. All content goes through one data layer (lib/data), which today reads typed mock data and keeps bookings and enquiries in the browser, so the switch to Supabase replaces that layer and nothing else. Photos come from Unsplash and Wikimedia Commons through a script that resizes them to WebP and records each attribution for the credits page.

Status: the site is a working preview. The admin travel desk runs in demo mode, itineraries and stories are written as indicative until the agency confirms them, and Supabase with sign-in for the admin is the next step.

02How it works
  1. Research

    A written study of the agency's Instagram sets the voice, the trips and the rules: no invented reviews, ratings or promises.

    INSTAGRAM-RESEARCH.md

  2. Content

    Trips, itineraries, travel facts and journal stories are typed data behind one data layer that every page reads from.

    lib/data · lib/mock

  3. Photos

    A script fetches Unsplash and Wikimedia Commons photos, converts them to WebP and records each attribution for /credits.

    Python · WebP

  4. Plan

    Visitors browse the board, shape a trip and send a reserve request or a WhatsApp message. Nothing asks for payment.

    Next.js 16 · RHF + Zod

  5. Answer

    The travel desk lists bookings by stage and quote requests. Supabase and admin sign-in replace the demo store next.

    Admin · Supabase (next)

03What it does
  • Draggable postcard-stack hero: drag, throw past a threshold or tap to open a trip
  • 17 trips with day-by-day itineraries, pace filter, gateway, flight time and paperwork
  • Destinations as a departure board with airport codes, best months and trip counts
  • Trip shaper that scores effort, season and hotel changes, with no prices
  • Couples section with a honeymoon quiz; wishlist hearts on every trip
  • Reserve-request booking and WhatsApp hand-off: no payment, a planner sends the quote
  • Travel desk admin: overview, bookings by stage, quote requests, packages and settings
  • One data layer over typed mock data, ready to swap for Supabase; photo credits generated by script
04Calls I made

The section above says what this does. This one says why it is built the way it is — including the parts that did not come free.

  1. A reserve request with dates and travellers, then a custom quote from a planneroverCart and online paymentA price table per trip
    Because

    It matches how the agency already sells on WhatsApp, and the site never promises a price it cannot honour. The trip shaper answers “is this too much for five days?” instead of “how much?”.

    What it cost

    No instant booking, and every request needs a person to answer it.

  2. A written content study first, with rules: no invented reviews, ratings or promisesoverWrite marketing copy freelyWait for the agency to send everything
  3. One typed data layer (lib/data) over mock data, with bookings kept in the browseroverHard-code data inside componentsWait for the backend
05Screens
Through Vacations - Travel Agency Website — Home — a stack of postcards you can throw aside

01 / 08Home — a stack of postcards you can throw aside

open full size ↗

Seen enough?

There are more where this came from — or skip the browsing and just say hello.