Skip to content
Case study · Travel & tourism · Web platform + CRM

Just Travel 360: from enquiry to booking, on one platform

How we designed and built a search-friendly holiday package website, a self-service content dashboard and a sales CRM for a growing Indian travel agency.

2024Holiday travel agency
4Django applications working as one platform
29data models covering catalogue, content, CRM and users
80+custom routes across website, dashboard and CRM · 35 templates
01 Overview

The project at a glance


Just Travel 360 sells domestic and international holiday packages to Indian travellers. JMDA built the full digital backbone of the business: the website customers browse, the dashboard the team uses to publish packages, and the CRM sales staff use to turn enquiries into confirmed, profitable bookings.

Client
Just Travel 360
Industry
Holiday travel agency
Platform
Python · Django · PostgreSQL
Delivered
2024
Delivered by
JMDA Analytic Pvt Ltd, Mumbai

What we delivered

  • Public website. Package discovery by tour type, destination and theme, with full itineraries, inclusions and policies.
  • Lead capture. Enquiry and contact forms that save every request straight into the database.
  • Content dashboard. The team edits packages, destinations, blogs, sliders and SEO without a developer.
  • Sales CRM. Customers, leads, numbered follow-up rounds, quotation and booking status.
  • Booking profitability. Each booking records offered price against real cost, and profit is calculated automatically.
02 Client & the challenge

Selling considered, high-value holidays online


Just Travel 360 curates holiday packages across India and abroad, from hill-station getaways and honeymoon trips to international tours. Each package is a bundle of nights, destinations, inclusions and policies, priced with a headline MRP and a discounted offer.

The business model

The agency earns its margin on the gap between the price it offers the traveller and the real cost of delivering the trip (hotels, transport, sightseeing). Holiday purchases are considered, high-value decisions, so a sale rarely closes on the first contact: it usually takes a quotation, several follow-up calls and some negotiation. Two things decide how well the business does: how many quality enquiries arrive, and how well the sales team follows them up.

The challenges the platform addresses

1

Packages hard to discover

Travellers search by place (“Kashmir”), by type (“international”) or by mood (“honeymoon”). The catalogue had to be browsable every one of those ways, and each listing page had to rank on Google on its own.

2

Content locked behind developers

Prices, itineraries, offers and banners change every season. The team needed to update them without waiting for a developer.

3

Enquiries scattered

Leads arrived by phone, social media and web forms with no single record. Enquiries were easy to lose and impossible to measure.

4

No follow-up discipline

Nobody could see how many times a prospect had been contacted, what was discussed, or whether a quotation had gone out.

5

Profit invisible per booking

Margins lived in people's heads. Management needed offered price, real cost and profit recorded for every booking.

6

Trust & credibility

First-time buyers want proof. The site had to show customer reviews, happy-customer photos, travel blogs and clear policies.

03 Our approach & solution overview

One platform, three audiences


We built a single Django application serving travellers, the content team and the sales team. All three share one database, so a package the content team publishes is the same record a sales executive quotes against.

Travellers

Public website

Browse · read · enquire · review. The pages app serves SEO listing and detail pages.

Content team

Content dashboard

Packages · blogs · SEO · media. The offline app has 50+ CRUD screens.

Sales team

Sales CRM

Leads · follow-ups · bookings. The Leads app holds customers and bookings.

Single source of truth

PostgreSQL

Catalogue (20 models) · CRM (6 models) · users & roles (3 models) + media storage.

How we delivered

DiscoverMapped how the agency sells: package structure, pricing, policies and the sales follow-up cycle.
ModelDesigned a catalogue hierarchy and a CRM data model that reflect how the business really works.
BuildDeveloped the website, dashboard and CRM in iterations. The catalogue schema alone went through 75 refinements.
LaunchConfigured per-page SEO metadata, the sitemap and robots rules, and handed over the dashboard and admin console.
04 Business logic · catalogue & pricing

A catalogue that mirrors how people choose a holiday


Every package sits in a clear hierarchy. Any level of it can be a landing page, so a traveller arriving from a Google search for a place, a region or a theme lands on a relevant list of packages.

Tour TypeDomestic · International
DestinationKashmir · Dubai · Bali
ThemeHoneymoon · Adventure
Tour Packagedays / nights · MRP · offer · EMI · best-seller
Package contentPhoto slider · card images · tour details (incl. / excl.) · day-wise itinerary · T&C · payment and cancellation policy

Pricing rule

Every package stores a headline price and the saving offered. The system works out the selling price itself whenever a package is saved, so the website, dashboard and CRM always show consistent numbers. Packages also carry an EMI message, a best-seller flag for homepage promotion, and day/night counts for quick comparison.

# on every save
offer_mrp = actual_mrp − save_on_mrp
# example (illustrative)
₹ 54,999 − ₹ 7,000 = ₹ 47,999

One smart listing route

A single URL pattern, /tour-travel-packages/<slug>, serves every listing. The platform works out whether the slug names a tour type, a destination, a theme or a package, and returns the matching packages with that entity's own SEO title, description and keywords.

SEO built into the data

Tour types, destinations, themes, packages, blogs and the About page each store their own meta title, description and keywords, plus an auto-generated, readable URL slug. Marketing controls search snippets from the dashboard. A sitemap and robots.txt are served by the application.

05 Business logic · lead-to-booking

Turning interest into confirmed, profitable trips


The CRM follows the agency's real sales cycle: capture the enquiry, qualify the customer, quote a package, follow up in numbered rounds, then confirm the booking and record its margin.

1 · Enquiryweb form / contact · city · date · pax · destination · note
2 · Customerprofile created · mobile · WhatsApp · address · city
3 · Leadpackage · theme · adults · kids · quotation status
4 · Follow-upsRound 1, 2, 3 … auto-numbered · notes per round
5 · Bookingtravel date · offered vs real cost · profit ₹ and %

Status tracking

Each lead carries two independent statuses, chosen from admin-managed lists: a quotation status (whether a quote has been sent) and a booking status (where the deal stands). Sales staff change either one straight from the lead list with a single click, through lightweight JSON APIs, without reloading the page.

Numbered follow-up rounds

Logging a follow-up gives it the next round number for that lead (Round 1, 2, 3 …) and stores the conversation notes. The lead row always shows its current round, so managers can see straight away which prospects have been chased and how hard.

Fast lead search

An instant-search API matches customer name, destination, theme, package and both statuses together, returning results as the user types.

Profit on every booking

When a deal closes, the booking records the price offered to the customer and the real cost of delivering the trip. Profit is calculated automatically every time the booking is saved.

profit_gain = offered_cost − real_cost
profit_%    = profit_gain ÷ offered_cost × 100

# example (illustrative)
offered ₹ 85,000 · real ₹ 72,000
profit  ₹ 13,000 · margin ≈ 15 %

Searchable registers

Enquiries, customers, leads and bookings each have a searchable list of 10 records per page. Bookings can be searched by customer, mobile, dates, destination, theme, package or cost.

06 Modules in detail · 1 of 3

Public website


A content-rich, search-friendly storefront built to build trust with first-time buyers and steer every visitor towards an enquiry.

Page / featureRouteWhat it does for the business
Homepage/Hero slider, domestic and international destination menus, best-selling Indian and international tours, themed packages, blogs, customer reviews and happy-customer gallery on one page.
Package listing/tour-travel-packages/<slug>One route lists packages by tour type, destination or theme, with SEO metadata specific to that slug.
Package detail/individual-tour-packages/<slug>Photo slider, description, inclusions and exclusions, ordered day-wise itinerary, plus terms, payment and cancellation policies.
Tour enquiry/Tour-enquiry-api/Captures name, mobile, email, departure city and date, number of travellers, preferred destination and notes, straight into the CRM enquiry register.
Contact us/contact-us/Company address, phone, WhatsApp, map and socials, plus a quick message form saved as an enquiry.
Blogs/multiple-blog-page/ · /individual-blog-page/<slug>Travel stories and guides with per-post SEO, driving organic traffic and building authority.
Customer reviews/customer-review/ · /user-rating-api/Travellers can post a review with a photo, and the happy-customer gallery provides social proof.
About us/about-us/Company story with its own meta title, description and keywords.
Sitemap & robots/sitemap.xmlHelps search engines discover and index every listing and package page.

Design principles

Bootstrap responsive layoutEvery page leads to an enquiryNavigation from live dataWhite-label company profileTrust signals on every page
The company name, logo, address, phone, WhatsApp and social links all come from a company-profile record. Rebranding or changing contact details takes one dashboard edit, not a code change.
07 Modules in detail · 2 of 3

Content management dashboard


A sign-in staff area at /offline-dashboard-* with more than 50 screens, so the agency runs its own catalogue and website content day to day.

Catalogue screensActions
Tour typesAdd · edit · delete · SEO
DestinationsAdd · edit · delete · SEO · image
ThemesAdd · edit · delete · SEO
Tour packagesEdit price, days/nights, best-seller, image
Tour detailsDescription, inclusions, exclusions
ItinerariesDay-wise plan with ordering
Package sliders & cardsGallery and listing images
T&C · payment · cancellationPolicy text per package
Website content screensActions
Homepage sliderUpload banners, set order
About usContent, image and SEO
BlogsPosts, author, SEO
Blog sectionsRich sections per blog
Happy customersPhoto gallery with ordering
Company detailsAddress, contacts, socials
Login / logoutStaff sign-in by email

Designed for non-technical staff

Report-style screens

Each content type has a report view listing every record, with inline edit and delete beside it.

SEO without code

A dedicated SEO action on each type, destination, theme, blog and the About page edits meta title, description and keywords.

Automatic tidy-up

Names are title-cased and URL slugs are generated on save, so URLs stay clean and consistent.

Django admin console. Behind the dashboard, a branded Django admin (Django JET theme) at /admin/ gives administrators full control over every model, including status lists, user roles and company profiles, with configured list columns for each catalogue and content model.
08 Modules in detail · 3 of 3

Sales CRM


A focused CRM built around how a travel sales desk actually works, with nothing generic it doesn't need.

ScreenRouteCapabilities
Enquiries/enquiry/Every web enquiry and contact message, newest first. Search by name, email or message, 10 per page.
Customers/Customers/Create, edit and delete customer profiles: name, email, mobile, alternate mobile, WhatsApp, address, city, state, country, pincode. Search across all fields. Create a booking straight from a customer row.
Lead management/lead-management/Create a lead against a customer for a chosen destination, theme and package, with adult and kid counts. One-click quotation and booking status changes. Instant search. Shows the current follow-up round.
Follow-ups/see-follow-ups/<id>Full follow-up history of a lead with round numbers and notes. Add, edit and delete rounds.
Bookings/all-bookings/Confirmed trips with booking date, travel date, destination, theme, package, offered cost, real cost and automatically calculated profit and margin %. Search on all fields.
Interactive APIPurpose
quotation-change-api/Updates a lead's quotation status in place (JSON)
booking-change-api/Updates a lead's booking status in place (JSON)
lead-management-search-api/Live search across customer, destination, theme, package and statuses
create-follow-up-api/<lead>Logs the next follow-up round and updates the lead's round counter
create-booking-api/<customer>Creates a booking for a customer, with profit calculated on save

Users & roles

A custom user model signs people in by email and requires a unique mobile number, which suits a business that runs largely on phone and WhatsApp. Staff roles (Admin, Manager, Sales Relationship) come from an admin-managed role list, and customers are users with the Customer role. The same model holds staff accounts and customer profiles, so one record follows a customer from first enquiry to repeat booking.

09 Data model

29 models, three domains, one schema


The schema is split into catalogue and content, CRM, and identity. Relational integrity is protected: catalogue records can't be deleted while packages or leads still reference them.

Catalogue & content · pages app

What travellers browse

  • TourType → Destination → Tour_pakages ← Theme
  • Tour_details · Tour_Itinerary · Package Slider · Card Images
  • TermsCondition · PaymentPolicy · CancellationPolicy
  • Company · CompanyDetails · Blogs · Blog sections · SliderImage · About_us · Happy customer · Rating_review · GetInTouch
CRM · Leads app

What sales works on

  • Lead_generation (web enquiry)
  • Lead_management (pax · round no.)
  • Follow_up_management
  • Booking (profit)
  • Is_quotation · Is_Booking status lists
Identity · user app

Who uses it

  • User (staff & customers)
  • UserRole
  • State

Key relationships

RelationshipCardinalityBusiness meaning
TourType → Destination1 : manyEach destination belongs to Domestic or International, which drives the site menus
Destination / Theme → Tour_pakages1 : manyA package sits in one destination and one theme, so it can be listed both ways
Tour_pakages → Itinerary, Sliders, Card images1 : manyOrdered day plans and galleries per package
User (customer) → Lead_management → Follow-ups1 : many : manyA customer can have several trip leads, each with numbered follow-up rounds
User (customer) → Booking1 : manyRepeat travellers build a booking and profit history

Data dictionary

EntityDomainKey fields & built-in logic
TourTypeCataloguename, image, sequence, SEO title / description / keywords, slug (auto from name)
DestinationCatalogueFK TourType, name, image, SEO fields, slug. Drives the domestic and international menus
theme_modelCataloguename, image, sequence, meta fields, slug. “Others” is hidden from menus
Tour_pakagesCatalogueFK Destination, FK Theme, days, nights, actual_mrp, save_on_mrp, offer_mrp (computed), EMI text, best_selling, image, SEO fields, slug
Tour_detailsCatalogueFK package, description, include, exclude, image
Tour_ItineraryCatalogueFK package, day label, description, sequence (ordered on page)
Terms / Payment / CancellationCatalogueFK package, policy description shown on the package page
Company · CompanyDetailsContentBrand name and logo, active profile flag, address, city, state, pincode, email, unique mobile, WhatsApp, five social links
Blogs · Blog sectionsContentauthor, heading, image, date, SEO fields, slug; sections hold body content and images
Lead_generationCRMname, mobile, email, message, departure city and date, no. of people, destination, note
Lead_managementCRMFK customer, destination, theme, package, quotation status, booking status; adults, kids, current follow-up round
Follow_up_managementCRMFK lead, round number (auto-incremented per lead), description
BookingCRMFK customer, booking and travel dates, destination / theme / package, offered_cost, real_cost, profit_gain & profit_% (computed)
UserIdentityemail (login), unique mobile, alternate and WhatsApp numbers, full name (auto), address, role, staff and admin flags
Shared conventions: created and updated timestamps on every table, title-casing of names on save, protected deletes on catalogue links, and human-readable table names for admin and reporting.
10 Technical architecture

A proven, maintainable Python stack


We chose Django for its strong data modelling, built-in admin and mature security defaults. That gave the client a platform its team can run and that any Python developer can extend.

BrowserServer-rendered HTML · Bootstrap · jQuery · Axios to JSON endpoints
URL routerCSRF, session & auth middleware · staff sign-in
Appspages (website · CRM views · APIs) · offline (dashboard) · Leads · user · JET admin
DataDjango ORM → PostgreSQL · media storage
LayerTechnology
LanguagePython 3
FrameworkDjango 4.2 (LTS), MVT pattern
DatabasePostgreSQL
AdminDjango admin with JET theme
Front endDjango templates, Bootstrap 5, jQuery, Axios
ImagingPillow for uploaded media
LocaleAsia/Kolkata timezone, INR pricing

Engineering decisions

  • Business rules in the model layer. Offer price, profit and margin, slugs and title-casing are applied in save(), so every entry point gives the same result.
  • Protected relations. on_delete=PROTECT stops a destination or package in use from being deleted by accident.
  • Custom user model from day one. Login by email plus a mandatory mobile number avoids a painful migration later.
  • Server-rendered pages. Fast first paint and fully crawlable HTML for SEO.
  • Modular apps. Website, dashboard, CRM and identity are separate and can be extended on their own.
11 User journeys

How each person uses the platform


Short scenarios showing the platform at work for travellers, the content team, the sales desk and the owner.

Priya, a traveller planning her honeymoon

Priya searches for honeymoon packages and lands on the Honeymoon theme listing, with its own SEO title. She compares packages by nights and offer price, opens a Kashmir package, reads the itinerary, inclusions and cancellation policy, then enquires with her departure city, date and party size. Her request appears in the enquiry register straight away.

Rahul, the content manager, launching a winter offer

Rahul adds a new Destination under International, edits a package's MRP and saving (the offer price recalculates itself), marks it best-seller, uploads slider images, writes the itinerary and policies, and sets the meta description. No developer is involved, and the offer is live the same day.

Sneha, a sales relationship executive

Sneha picks up Priya's enquiry, creates her customer profile and opens a lead for the Kashmir package for 2 adults. She sends a quotation and flips its status in one click, logs Round 1, 2 and 3 follow-ups, and when Priya confirms, creates the booking with offered price and real cost. Profit and margin are recorded automatically.

The owner, reviewing the business

The owner opens the bookings register, searches by destination or package, and sees offered price, real cost, profit and margin for every confirmed trip. The lead list shows which prospects are in active follow-up and how many rounds each has had.

12 Value delivered

What the platform gives Just Travel 360


One system now covers how the agency markets, sells and measures its holidays, closing gaps that are common across travel agencies.

AreaTypical agency challengeWith the Just Travel 360 platform
Package discoveryStatic pages and PDFs shared over chatLive catalogue browsable by type, destination and theme, with a full detail page for every package
Search visibilityFew pages for search engines to indexEvery type, destination, theme, package and blog has its own crawlable URL and meta tags, plus a sitemap
Content updatesWaiting on a developer for each change50+ dashboard screens; prices, offers, itineraries and banners updated by the team the same day
Lead captureEnquiries spread across calls and messagesEvery web enquiry stored with travel date, party size and destination in one register
Sales follow-upMemory and personal notesNumbered follow-up rounds with notes, quotation and booking status, and instant lead search
ProfitabilityMargins worked out by hand, if at allOffered price, real cost, profit and margin % recorded on every booking
CredibilityLittle visible social proofReviews with photos, happy-customer gallery, travel blogs and clear policies on every package
Brand controlContact details hard-coded in pagesCompany profile, contacts and socials managed in one place
The principle the platform was designed around

Every traveller who shows interest is captured, followed up and, when they book, measured.

13 Roadmap & AI opportunities

What comes next


With the catalogue, enquiries and bookings already structured in one database, Just Travel 360 is well placed for automation and AI. This is the roadmap JMDA has proposed.

Phase 2: platform strengthening

Enquiry → lead in one click

Convert a web enquiry straight into a customer and lead, with the source preserved, so nothing is re-keyed.

Closed-loop pipeline

Link each booking to its lead and package to measure enquiry-to-booking conversion by destination, theme and executive.

Role-based access & hardening

Permission checks by role (Admin, Manager, Sales), an audit trail and production security configuration.

Payments & messaging

Online advance payments through an Indian payment gateway, plus WhatsApp and SMS for quotes, reminders and confirmations.

Phase 3: AI built on the platform's data

AI trip assistant

A website chat assistant that answers questions from the package catalogue, itineraries and policies, and hands qualified leads to sales.

Lead scoring

Predict which enquiries are likely to book from travel date, party size, destination and follow-up history, so sales calls the hottest leads first.

Follow-up copilot

Summarise each lead's follow-up history and draft the next WhatsApp message or quotation for the executive.

Margin analytics

A dashboard of profit by destination, theme, season and executive to guide pricing and promotions.

Itinerary & content generation

Draft day-wise itineraries, SEO meta tags and blog posts for review, cutting the time to launch a new package.

Package recommendations

Suggest similar or upsell packages on every detail page and in quotations, based on theme, budget and season.

Free consultation

Planning a platform like this for your business?

Talk to JMDA Analytic about a website, dashboard and CRM built around how you actually sell.

Personas and figures in examples are illustrative and do not describe real customers, staff or client data.

Call WhatsApp Get Quote