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.
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.
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
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.
Content locked behind developers
Prices, itineraries, offers and banners change every season. The team needed to update them without waiting for a developer.
Enquiries scattered
Leads arrived by phone, social media and web forms with no single record. Enquiries were easy to lose and impossible to measure.
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.
Profit invisible per booking
Margins lived in people's heads. Management needed offered price, real cost and profit recorded for every booking.
Trust & credibility
First-time buyers want proof. The site had to show customer reviews, happy-customer photos, travel blogs and clear policies.
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.
Public website
Browse · read · enquire · review. The pages app serves SEO listing and detail pages.
Content dashboard
Packages · blogs · SEO · media. The offline app has 50+ CRUD screens.
Sales CRM
Leads · follow-ups · bookings. The Leads app holds customers and bookings.
PostgreSQL
Catalogue (20 models) · CRM (6 models) · users & roles (3 models) + media storage.
How we delivered
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.
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.
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.
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.
Public website
A content-rich, search-friendly storefront built to build trust with first-time buyers and steer every visitor towards an enquiry.
| Page / feature | Route | What 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.xml | Helps search engines discover and index every listing and package page. |
Design principles
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 screens | Actions |
|---|---|
| Tour types | Add · edit · delete · SEO |
| Destinations | Add · edit · delete · SEO · image |
| Themes | Add · edit · delete · SEO |
| Tour packages | Edit price, days/nights, best-seller, image |
| Tour details | Description, inclusions, exclusions |
| Itineraries | Day-wise plan with ordering |
| Package sliders & cards | Gallery and listing images |
| T&C · payment · cancellation | Policy text per package |
| Website content screens | Actions |
|---|---|
| Homepage slider | Upload banners, set order |
| About us | Content, image and SEO |
| Blogs | Posts, author, SEO |
| Blog sections | Rich sections per blog |
| Happy customers | Photo gallery with ordering |
| Company details | Address, contacts, socials |
| Login / logout | Staff 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.
/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.Sales CRM
A focused CRM built around how a travel sales desk actually works, with nothing generic it doesn't need.
| Screen | Route | Capabilities |
|---|---|---|
| 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 API | Purpose |
|---|---|
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.
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.
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
What sales works on
- Lead_generation (web enquiry)
- Lead_management (pax · round no.)
- Follow_up_management
- Booking (profit)
- Is_quotation · Is_Booking status lists
Who uses it
- User (staff & customers)
- UserRole
- State
Key relationships
| Relationship | Cardinality | Business meaning |
|---|---|---|
| TourType → Destination | 1 : many | Each destination belongs to Domestic or International, which drives the site menus |
| Destination / Theme → Tour_pakages | 1 : many | A package sits in one destination and one theme, so it can be listed both ways |
| Tour_pakages → Itinerary, Sliders, Card images | 1 : many | Ordered day plans and galleries per package |
| User (customer) → Lead_management → Follow-ups | 1 : many : many | A customer can have several trip leads, each with numbered follow-up rounds |
| User (customer) → Booking | 1 : many | Repeat travellers build a booking and profit history |
Data dictionary
| Entity | Domain | Key fields & built-in logic |
|---|---|---|
| TourType | Catalogue | name, image, sequence, SEO title / description / keywords, slug (auto from name) |
| Destination | Catalogue | FK TourType, name, image, SEO fields, slug. Drives the domestic and international menus |
| theme_model | Catalogue | name, image, sequence, meta fields, slug. “Others” is hidden from menus |
| Tour_pakages | Catalogue | FK Destination, FK Theme, days, nights, actual_mrp, save_on_mrp, offer_mrp (computed), EMI text, best_selling, image, SEO fields, slug |
| Tour_details | Catalogue | FK package, description, include, exclude, image |
| Tour_Itinerary | Catalogue | FK package, day label, description, sequence (ordered on page) |
| Terms / Payment / Cancellation | Catalogue | FK package, policy description shown on the package page |
| Company · CompanyDetails | Content | Brand name and logo, active profile flag, address, city, state, pincode, email, unique mobile, WhatsApp, five social links |
| Blogs · Blog sections | Content | author, heading, image, date, SEO fields, slug; sections hold body content and images |
| Lead_generation | CRM | name, mobile, email, message, departure city and date, no. of people, destination, note |
| Lead_management | CRM | FK customer, destination, theme, package, quotation status, booking status; adults, kids, current follow-up round |
| Follow_up_management | CRM | FK lead, round number (auto-incremented per lead), description |
| Booking | CRM | FK customer, booking and travel dates, destination / theme / package, offered_cost, real_cost, profit_gain & profit_% (computed) |
| User | Identity | email (login), unique mobile, alternate and WhatsApp numbers, full name (auto), address, role, staff and admin flags |
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.
| Layer | Technology |
|---|---|
| Language | Python 3 |
| Framework | Django 4.2 (LTS), MVT pattern |
| Database | PostgreSQL |
| Admin | Django admin with JET theme |
| Front end | Django templates, Bootstrap 5, jQuery, Axios |
| Imaging | Pillow for uploaded media |
| Locale | Asia/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=PROTECTstops 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.
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.
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.
| Area | Typical agency challenge | With the Just Travel 360 platform |
|---|---|---|
| Package discovery | Static pages and PDFs shared over chat | Live catalogue browsable by type, destination and theme, with a full detail page for every package |
| Search visibility | Few pages for search engines to index | Every type, destination, theme, package and blog has its own crawlable URL and meta tags, plus a sitemap |
| Content updates | Waiting on a developer for each change | 50+ dashboard screens; prices, offers, itineraries and banners updated by the team the same day |
| Lead capture | Enquiries spread across calls and messages | Every web enquiry stored with travel date, party size and destination in one register |
| Sales follow-up | Memory and personal notes | Numbered follow-up rounds with notes, quotation and booking status, and instant lead search |
| Profitability | Margins worked out by hand, if at all | Offered price, real cost, profit and margin % recorded on every booking |
| Credibility | Little visible social proof | Reviews with photos, happy-customer gallery, travel blogs and clear policies on every package |
| Brand control | Contact details hard-coded in pages | Company profile, contacts and socials managed in one place |
Every traveller who shows interest is captured, followed up and, when they book, measured.
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.
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.