Back to the filing cabinet

Led the team and built the booking system. Client project.

Wild East Journeys

Booking site and admin panel for a Jharkhand adventure travel company

LiveAug 2025–May 2026adventuresfrontiers.com

Video in the works

Wild East Journeys

Picking a trek date on the calendar and booking it, then the admin side.

About the project

Adventure Frontiers runs treks, wildlife trips and volunteering in Jharkhand. Customers book online; the team manages dates, seats and payments in an admin panel.

Adventure Frontiers runs treks, wildlife trips, student programmes and volunteering in Jharkhand. Its site lets customers pick a trip and a date, see how many seats are left, and book and pay online.

Behind it is an admin panel where the team manages trip dates and seats, bookings and payment status, student programmes, and custom requests from groups and companies.

I led a small team on it. I built the booking system, the calendar and the pricing, and reviewed and merged the team's work. Anurag built the payments, GST and invoices, and Rohit Raj moved it to Next.js and built the admin and login.

How it works

  1. Pick a trip

    Browse the adventures, or open the calendar, where each date is coloured by how many seats are left.

  2. Book

    Choose a date and the travellers; saved travellers are remembered. Seats update in one database transaction, so two people can't take the last seat.

  3. See one price

    A single pricing module adds basic insurance and GST and rounds it the same way everywhere.

  4. Pay

    PhonePe checkout. The payment callback confirms the booking, and an invoice and email go out.

  5. Run it

    Admins see every booking, change its booking and payment status, and handle student programmes and custom requests in their own tabs.

Under the hood

Site
Next.js 15 App Router, with optimised images and sections that load later.
Bookings
Trip dates with seat counts, database transactions, and three types of booking.
Pricing
One shared module used by the listings, checkout, payment callback, invoices and emails.
Admin
Events, bookings, student programmes and custom requests, with image uploads to Cloudinary.

What I did

  • Redesigned the first version of the site: about, adventure activities, blog pages, gallery, header and hero
  • Trip dates with seats: each date has total and booked seats, and a booking updates them in one database transaction. Plus admin event management, image uploads, saved travellers and a profile page
  • Three ways to book, each with its own admin tab: a normal trip, a student programme, or a custom request from a group or company
  • An adventure calendar: a month view coloured by seats left, details on hover, cached and loaded early
  • A booking details screen where admins change booking and payment status
  • One pricing module: trip, basic insurance and GST, rounded the same way in the listings, checkout, payment callback, invoices and emails
  • Made the home page faster: optimised images, lazy loading, lower sections loaded later, and loading skeletons
  • Finished the move to Next.js's App Router and fixed the database client on Vercel, then matched the database schema to production without losing data
  • Reviewed and merged 40 pull requests from Rohit Raj and Anurag

What was new

  • Seat counts that stay correct when two people book at once
  • One price everywhere, including the payment callback and invoices
  • Leading a small team through reviews instead of writing everything myself

Problems I hit, and how I fixed them

  1. Changing a booking status in admin gave a 500 error: the page sent "cancelled" and the database expected CANCELLED.

    Fix The API converts status values before saving.

  2. Saved travellers failed with "JWT malformed", because the page sent a placeholder token.

    Fix Read the login cookie first and ignore the placeholder.

  3. Vercel builds failed because the database client wasn't generated.

    Fix Generate it in the build and install steps.

  4. Price maths was copied into the booking route, the payment callback and the invoices, and they treated GST differently.

    Fix One shared pricing module.

  5. Booking confirmations showed "Invalid Date".

    Fix Fallback date fields, and "Date to be confirmed" when there is none.

Screenshots

  • Adventure Frontiers home page: treks and adventure tourism in Jharkhand
    adventuresfrontiers.com, live

To be clear

The PhonePe payments, GST and invoices were built by Anurag, and the Hindi version and first site by Rohit Singh. It started from a Lovable template.