Chain of Thoughts

This is a longterm idea. I tried putting up a robust PRD - a lot of effort is going onto perfect the PRD and as a result actual product development takes a hit.

Apart from this I need to test the market if they need a solution for planning itineraries. There are many people who do not plan and impromptu travel - and also there is a market who likes to plan. Maybe I can release a very small feature that can help me clear my hypothesis.

What is my biggest hypothesis? That travellers want to plan their travel destinations and routes beforehand.

Do the above persona already has some tools they are using? The best tool from my personal experience is to ask an LLM to plan an itinerary for them. LLMs do a good job in planning - assuming that the prompt is good enough.

If itinerary generation is not the problem, what is? I believe exporting the plan in terms of mapped routes and destinations is something which has to be done manually.

What’s the ideal solution? An agent can help identifying the destination and routes from the input itinerary and covert it to map layout. If we tell users that they can generate LLM itineraries and convert them into maps — it might be helpful.

So the initial product to clear hypothesis can be - a text-to-map conversion of an itinerary.

Is the solution simple enough? We can take following steps,

  1. Collect the itinerary from the user
  2. Convert it into a geo-coordinate format (Can plot into CSV format and later convert CSV to KML)
  3. Plot the geo-coordinates onto a map (No point of opening dependency with Google Maps - best to use our own map interface, to start with can be just a screenshot)
    1. Try Ola Maps or Open Street Maps
  4. Export the map as an image or download for offline use, view itinerary details along with the map plotting

How to do it currently?

  1. Go to My Maps on Desktop
  2. Plot the destinations, routes, and shapes manually over the map
  3. Share as a link We need to automate the first two parts.

Idea

People who travel regularly or plan vacations once a while invest a considerable amount of time on creating a travel itinerary, they look for places to visit based on their personal taste - some like to visit the popular destinations, some like a fix of popular and less-touristy places, some intend to only experience adventurous and less taken paths. They look for days and timings when these places are open and add them accordingly in the itinerary - additional they look for the weather to be prepared on what clothings to carry or is it too hot/cold to visit certain times of the day. They plan the travel routes to cover maximum places or create the best experience, as per their finalised destinations Between destination they plan the travel medium - an auto, bike, buses, trains, flights, metros - they book the tickets on spot or before the travel. The look for best places to stay for the night or the best places to have lunch and dinner - the best places are influenced by public reviews and the offering.

We need to create an application that allows planning such frequent or once a while travel effortlessly, the application should allow,

  1. A traveller should be able to chat within the app discussing what they are expecting from their travel, dates - destinations - number of people travelling. What type of trip is it adventure, cultural exploration, any other. Based on the chat a rough itinerary can be designed which can later be plotted over a map.
    1. Should be able to easily search and pin destinations manually on a map
    2. Should be able to import destination lists in bulk onto the map interface and further work on it
  2. Based on the travel preference, scenic routes - shortest distance - custom taste, suggest journeys between these destinations.
  3. Consider weather, open and close times to suggest best journeys. Suggest clothing to carry and other local alerts based on health like pollution alerts.
  4. Allow booking of cabs, metros other travel mediums within the app - can use third party services like Uber. Display bus timings and metro routes within the map interface.
  5. Suggest hotels for stay and restaurants based on public reviews.
  6. The experience of the app should be such that even senior citizens should be able to navigate. Such user persona is not able to use multiple apps currently to plan their travel - a single app to manage their travel can help.

The monetisation mechanism for such app will be a SaaS subscription fee for more than 3 travel plans a year. For any kind of third party bookings via the app (cabs, hotels), charge a convenience fee.


User Research

Archetype 01

  • Majority of the time, do you travel solo, with family or with friends?

  • How do you classify majority of your travels? Luxury, Relaxed, Adventurous, anything else?

  • Do you generally travel on a pre-defined budget or don’t budget? How often do you exceed your budget?

  • How many trips do you plan annually - domestic + international combined?

  • Enjoy the planning part

  • Plans when solo and may not when with a group, the degree of planning depends on group

  • Transport + Accommodation - If in groups, takes over 7 days to completely book travel and accommodation. When in groups, accommodation options are shared on whatsapp before finalising. Will be much faster for solo travel.

  • Places to visit - Start planning 5 days before the trip, depends on how big the trip is. Identify places based on Google, Instagram, and Youtube searches. Add them in a google sheet and later plot them on a map to create a route. Shares the link for easy access during travel - 30 mins daily - around 3-4hrs invested.

  • Route Planning - Too much work to calculate distance between multiple points, uses ChatGPT to get an ideal route. Has to do extra work to translate the LLM output to sheets and then maps.

  • Intracity travel - Mostly booked on the spot. Sometimes bike rentals are pre-booked.

  • Why do they use Google Maps? Easy to add places and look at reviews and ratings before planning.

  • Parents travelling - generally book via agencies, have no issues with accessing apps to book caps or hotels if required

Version 01: Add Places, Routes and Create Shareable Itineraries

Finalised PDF:

A user who wants to plan their travel on an interactive map interface - opens this application, adds places by their names or address. Further the user confirms routes between each pair of places to create an itinerary. The user can add personal and optional notes to places and routes as required. Post the places and routes are confirmed, the user can generate a shareable link to make the itinerary viewable to all that can access it through the link.

This feature as a standalone product allows user an option other than Google Maps to plan their travel itinerary. User can add notes to places and plan and confirm each route individually, unlike Google Maps. This feature as a standalone would be targeting a niche user persona of travel planners - unlike goggle maps which is a generic app.

Flow

  1. a user visiting the website, on loading, can see a vector map loaded - the user can play around by zooming and panning
  2. the user is able to click on a bar to add places onto this map interface. On clicking Add, the places are added as markers onto the map.
  3. the user should be able to click on these places to remove them or add personal notes to them.
  4. the user should be able to access a ‘Plan Route’ option from the UI and select any two place markers to plan a route between them. The user is displayed multiple routes from which they can confirm one.
  5. the user can click on any added route to add personal notes or remove those routes
  6. the user should be able to save a map post completely adding all places and routes or midway. A saved map can be accessed later for completion.
  7. the user can access the saved maps through a CTA on UI over the vector map interface. At any point of time a user loads the website they can add new places and routes to create a new map or open a saved map.
  8. on clicking saved map icon, the user can select any of their saved maps to view the already added places and routes
  9. the user should be able to generate a shareable link for the saved maps, this link can be shared to anyone who can open this map with all places and routes visible in view-only mode
  10. post a map is saved, the user should receive a popup to share their feedback. Once a user has already given a feedback, then the same popup should not be visible to them again

Requirements

Feature Description and Tech Stack

FeatureFeature Description and Technical DocumentsTech Stack
1. Home Page - Render Vector Map: Zooming & panning functionalitiesAs soon as the website is loaded, render a map with Pune as the default location. User should be able to zoom and pan this map

Define map style https://cloud.olakrutrim.com/console/maps?section=map-docs%2Fmap-tiles%2Fvector-map-tiles

Setup and Initialise Ola Maps SDK to Render vector styles https://maps.olakrutrim.com/krutrim/docs/sdks/web-sdk/setup
Use Ola Maps WebSDK to render Vector Maps
2. Add PlacesDisplay a bar on top right for user to Add Places - user enters the name or address of the place and click add place - use geocoding based on place name https://cloud.olakrutrim.com/console/maps?section=map-docs%2Fgeocoding%2Fgeocoding-api (address = name of place)

On click Add Place, the place should be added as a marker in the map, the map should route to the location of this place - Add a Default Marker for places on the map https://maps.olakrutrim.com/krutrim/docs/sdks/web-sdk/markers

If multiple places are available with same name or address, allow user to confirm either one of them. To confirm click on the place marker to see a confirm CTA. If a single place is available for the input, then confirm by default.

Save places in SQLite only when confirmed.
Ola Geocoding API + SQLite to save places post confirmation
3. Click on markers to add user notesClick Event on a Place Marker within the map https://cloud.olakrutrim.com/console/maps?section=map-docs%2Fsdks%2Fweb-sdk%2Fmap-controls

User can remove the place marker or add a personal note to the place
Ola Maps Events + React State Capture + SQLite for notes, remove operations
4. Add route between two pointsUse Directions Basic API with waypoints https://cloud.olakrutrim.com/console/maps?section=map-docs%2Frouting-apis%2Fdirections-api

User should be able to select a Route tool on the map overlay and then select any two place markers to create a route
Ola Maps Routing API + Next JS and Tailwind for overlay CTAs like Route tool
5. Identify and confirm routesReact State + SQLite (use IndexedDB) https://github.com/localForage/localForage

Use event to identify route click https://cloud.olakrutrim.com/console/maps?section=map-docs%2Fsdks%2Fweb-sdk%2Fmap-controls

If there is a single route, confirm it by default, otherwise the user can select any one route and confirm through a CTA.

Once a route is confirmed user can click on any route to get a remove option. On clicking remove, the route should not be visible on the map.

Record a route in SQLite only post confirmation.
Use SQLite IndexedDB and library like localForage + React State, modals for confirm functionality + Ola WebSDK Events
6. Add Notes or Remove routesReact State + SQLite (use IndexedDB) https://github.com/localForage/localForage

Allow user to enter personal notes.

Click on a route, a remove CTA will be available in the description panel, on clicking the route will be removed.

User can recreate a new route between those two place markers.
Use SQLite IndexedDB and library like localForage + React State
7. Save the map with all routes addedSQLite (use IndexedDB) https://github.com/localForage/localForage;

A saved map includes all the added place markers and the confirmed routes along with any user side notes added. If the user closes the application they should be able to;

Save maps against the user session - avoid authentication flow in the application
Use SQLite IndexedDB and library like localForage + React State
8. Prompt user for feedback after savingIdentify the user based on browser session.

Only ask for feedback when a map is successfully saved. Allow user to close the modal without sharing.

If a user has already shared the feedback, do not ask again during next saves.
React Modal + Simple Form. Store feedback via SQLite
9. Share map via link and View shared mapsUser should be able to one-click copy the link to share it

On link clicks anyone can view the maps but not edit them
Next.js API Route + URL shortener (use TinyURL)
10. Option to View Saved MapsView Saved Maps CTA available on the map interface, user can click on this to be routed to a page with list of saved maps

Only maps of the same user should be accessible in a browser - Identify the user based on sessionStorage or persistent browser ID

On clicking any Saved Maps, the user would be able to see the places and routes for that map and make further modifications to resave
Next.js + Tailwind - to add overlay CTAs
  • Use Next JS + Tailwind for frontend
  • This version of application is serverless - as in IndexedDB to be used for storage and retreival
  • Develop a PWA so that it can run on web and can be installed in mobile devices
  • Ensure that the UI/UX experience is good on desktop as well as mobile screens
  • Use Ola Maps for mapping use cases - use Ola Maps Website SDK for rendering vector maps, managing markers, and events. Separate Ola Maps APIs are available for Directions, Routes as specified in detail in the above table.
  • Storage Method:
    • Use IndexedDB via LocalForage to store maps, routes, and places without a backend.
    • IndexedDB allows structured storage, making it faster than LocalStorage for large datasets.
  • User Session Management (No Authentication):
    • Use sessionStorage or a persistent browser ID (e.g., a hashed cookie value).
    • Store session ID in maps and feedback tables to differentiate users.
  • Map Saving & Loading:
    • Save maps as JSON in IndexedDB.
    • Retrieve and display them using React state.
  • Shareable Links:
    • Store map_id in the URL, e.g., yourdomain.com/map/abc123
    • Fetch map details using map_id when the link is opened.
  • Routing Optimization:
    • Use Ola Maps Routing API to fetch route data and store it in JSON format inside route_data column.

SQLite Schema

-- Table to store maps created by the user 

CREATE TABLE maps ( 
id TEXT PRIMARY KEY, -- Unique identifier (UUID or NanoID) 
name TEXT NOT NULL, -- User-defined map name created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Timestamp of creation 
session_id TEXT NOT NULL -- Session-based identifier (no login required) );

-- Table to store places within a map 

CREATE TABLE places ( 
id INTEGER PRIMARY KEY AUTOINCREMENT, 
map_id TEXT NOT NULL, -- Foreign key to maps table 
name TEXT NOT NULL, -- Name of the place 
latitude REAL NOT NULL, -- Latitude coordinate 
longitude REAL NOT NULL, -- Longitude coordinate 
user_notes TEXT, -- Optional user-added notes 
FOREIGN KEY (map_id) REFERENCES maps(id) ON DELETE CASCADE ); 

-- Table to store routes created within a map 

CREATE TABLE routes ( 
id INTEGER PRIMARY KEY AUTOINCREMENT, 
map_id TEXT NOT NULL, -- Foreign key to maps table 
start_place_id INTEGER NOT NULL,-- Foreign key to places table (starting point) end_place_id INTEGER NOT NULL, -- Foreign key to places table (ending point) route_data TEXT NOT NULL, -- Serialized JSON data for route details (path, distance, time) 
user_notes TEXT, -- Optional user-added notes 
FOREIGN KEY (map_id) REFERENCES maps(id) ON DELETE CASCADE, 
FOREIGN KEY (start_place_id) REFERENCES places(id) ON DELETE CASCADE, 
FOREIGN KEY (end_place_id) REFERENCES places(id) ON DELETE CASCADE ); 

-- Table to store user feedback 

CREATE TABLE feedback ( 
id INTEGER PRIMARY KEY AUTOINCREMENT, 
session_id TEXT NOT NULL, -- Identify user without login 
map_id TEXT NOT NULL, -- Map associated with feedback 
feedback_text TEXT, -- User feedback 
submitted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
FOREIGN KEY (map_id) REFERENCES maps(id) ON DELETE CASCADE );


PRD

Overview

Travel Companion is an AI-powered travel planning application that streamlines the end-to-end journey planning process through an intuitive interface. The app caters to diverse traveler preferences, from adventure seekers to cultural enthusiasts, while being accessible to users of all technical abilities.

Product Vision

To revolutionize travel planning by providing a unified, intelligent platform that transforms complex, multi-step journey planning into an effortless experience for all users, regardless of their technical proficiency.

Target Audience

Primary users include:

  • Regular travelers seeking efficient planning tools
  • Occasional vacationers requiring comprehensive travel assistance
  • Senior citizens who need a simplified, all-in-one travel planning solution
  • Cultural enthusiasts and adventure seekers looking for customized experiences

Core Features and Requirements

What is an Itinerary?

An itinerary of a travel plan should include following elements,

  1. It should have at-least one destination. There can be multiple destinations - in such case we need to define where to start from and where to end.
    1. If a single destination, the system would suggest additional destination based on the goal of travel.
    2. If multiple destinations, the system will include the existing destination as well suggest additional based on the goal of travel.
  2. It should include a period of travel. It can be in number of days, weeks, or months (excluding years). Specific start or end dates can be defined optionally.
  3. It should include the goal of travel. A goal has a predefined definition to it - for instance adventure travel has a specific characteristics compared to spiritual travel. A custom goal is available where the user has to manually describe.
  4. User should be able to optionally define the mode of travel like car, bike, bicycle, walking - a mode of travel is to be defined in case of personal vehicles to get the best routes related to the mode. No need to define if public transport is to be used.
  5. User should be able to optionally add food, stay, and travel preferences to get restaurant, hotel and travel suggestions. Otherwise user can opt out of these suggestions.
  6. User should be able to optionally add past experiences based on which they can specify to remove or include selective places or routes.

Based on the above declared elements, an output itinerary should group destinations within day, week, or month frequencies based on total period of travel and the goal surrounding it.

Each ‘Request’ outputs a single ‘Itinerary’ wherein the ‘Itinerary’ includes single or multiple ‘Segments’ stitched together - a user finalises an ‘Itinerary’ by confirming each ‘Segment’. The initial and final itinerary may differ based on the order of destinations, routes, different stay-food-transport preferences.

A sample itinerary should look like,

Title: Summer Vacation Itinerary Duration of Travel: 7 days Goal of Travel: Adventure

Segment A, Segment Summary { Frequency: Day 1 Route: Destination A - Destination B - Destination C Distance/Duration: 100 kms / 5 hours

Highlights

Tips }

Segment B, Segment Summary { Frequency: Day 2 Route: Destination D - Destination E - Destination F Distance/Duration: 100 kms / 5 hours

Highlights

Tips }

What are Segments?

An itinerary can have a single or multiple segments within it. Each segment is defined by a title and a summary. Each segment within an itinerary is of equal frequency (day, week, or month).

Summary of a Segment: The summary differentiates a segment A from segment A’ or a segment B.

Highlights of a Segment: These are bullet points describing the main attractions within a segment, the time-slots to visit these attractions, short description about the destinations. Stay, Travel, and Food suggestions are included as highlights.

Tips within a Segment: Shares information about what to carry, dressing suggestions, any cautionary points or look out for, or weather related updates.

Rearrange Segments (drag and drop): Segments can be dragged and dropped to rearrange them.

Rearrange Destinations (drag and drop): Destination can be dragged and dropped into other segments.

Conversational Planning

Travel Planning is a big process that has various set of chunks within it, some chunks require research while other chunks require thinking or taking actions - below is an attempt to distribute the chunks into steps. A single step or multiple steps can be combined into an operation.

Data Collection and Processing Operation

Step 1: Collect the basic and necessary information by prompting the user with questions. The questions should be asked the moment the user clicks ‘Create an Itinerary’ - it should be like an onboarding flow but focus on having less friction to avoid user churn.

Step 2: Allow user to have a more specific conversation and share past experiences travelling through the similar route - something they want to avoid or experience again. Any latest information regarding roads may be provided by user along with other cautionary points.

Step 3: The system should summarise what it has understood from the inputs and discussions and take a confirmation from user to proceed with research. The system should ensure that the context behind its understandings is also shared to avoid misunderstandings.

Research and Reasoning Operation

Step 4: With the existing data set collected in above two steps the agent should be able to start its research - the research involves looking into the web and thinking for the best options that align with the input data.

Step 5: While thinking there might be an extra clarifying questions to be asked back to the user.

Step 6: A draft itinerary is generated, its segmented based on hours, days, weeks, or months. The user is required to confirm each segment or make manual drag drop changes.

Visualisation Operation

Step 7: The itinerary is exported onto a map - mention destinations along with routes.

Prioritisation

P0
  • Implement natural language processing to understand user preferences through chat. Capture key details including dates, destinations, group size, and trip type.
    • Ask questions to the user to get the core data like, the dates of their travel, the destination or set of destinations they want to visit, what type of travel is this - family vacation, adventure with friends, relaxed and de-stress, cultural exploration, etc.
      • Period of travel, exact dates if available
      • Destination or group of destination that you wish to be covered
      • Mode of travel
      • Goal of the trip, specific requests or experience you are looking for
      • Stay, food, and travel preferences
      • Any past experiences user would like to share
    • Once the core questions are collected, further the user should be able to chat about special requests
    • Store all the data received as primary context for further processing of this journey
  • Generate customisable itinerary suggestions based on user’s conversations with the app. The suggestions should be as per the context received through the initial chat.
    • Use Web Search data and Reasoning capability of the model. Use the user provided data/experiences as additional to
  • Allow user to discard the current itinerary and start a new one
P1

Support modification and refinement of generated itineraries

  • User should be able to update the dates, destination or any data input that was previously added during the chat phase, the existing itinerary does a reprocessing based on the latest data modifications. Old context is modified here - consider latest context to suggest itineraries
  • User should be able to save the modifications once made, or post a recent chat click on ‘Generate Itinerary’ to sink the latest context.
Tech Stack

LLM for conversational feature and generating itineraries - Deepseak R1

Interactive Map Integration

P0
  • Post an Itinerary is generated using above method, plot the destination and routes on a map interface.
    • Destinations can be plotted based on the name of the place
    • Route can be suggested and plotted on map based on the preferences shared in the context - if the context mention to take a scenic route instead of shortest. Then the LLM should be able to read through reviews and other data available to identify such route and then suggest.
    • If options are available, display multiple routes with the best route selected by default
P2
  • Enable bulk import of destination lists with geocoding support
P3
  • Allow user to manually input data on the map interface

2. Intelligent Route Planning

Route Optimization

  • Generate route suggestions based on user preferences (scenic, shortest, custom)
  • Factor in operating hours of attractions
  • Calculate optimal visit duration for each destination
  • Provide alternative route suggestions with pros and cons

Real-time Adaptability

  • Monitor weather conditions and suggest schedule adjustments
  • Track attraction closing times and special events
  • Optimize routes based on real-time traffic conditions
  • Suggest indoor alternatives during adverse weather

3. Environmental Intelligence

Weather Integration

  • Provide detailed weather forecasts for planned dates
  • Generate packing suggestions based on weather predictions
  • Send weather alerts and itinerary adjustment recommendations
  • Display hourly weather patterns for outdoor activities

Local Insights

  • Monitor and alert users about air quality indices
  • Provide health and safety advisories for each location
  • Include local customs and etiquette information
  • Display region-specific travel advisories

4. Transportation Integration

Booking Integration

  • Seamless integration with ride-hailing services (Uber, local services)
  • Real-time public transportation information
  • Direct booking capability for available services
  • Fare estimation and comparison tools

Transit Planning

  • Interactive metro maps with route optimization
  • Real-time bus tracking and scheduling
  • Walking route suggestions with difficulty levels
  • Bicycle rental integration where available

5. Accommodation and Dining

Stay Planning

  • Curated hotel recommendations based on user preferences
  • Integration with hotel booking platforms
  • Price comparison tools with historical data
  • User review aggregation and analysis

Dining Experience

  • Restaurant recommendations based on dietary preferences
  • Peak hours information and booking capability
  • Menu translation services
  • Price range indicators and budget planning tools

6. Accessibility Features

User Interface

  • Large, clear typography with adjustable text size
  • High contrast color schemes
  • Voice-guided navigation
  • Simplified view options for essential features

Support System

  • 24/7 chat support
  • Interactive tutorials
  • Offline functionality for essential features
  • Emergency contact integration

Technical Requirements

Platform Support

  • iOS and Android mobile applications
  • Progressive web application
  • Tablet-optimized interface
  • Offline capability for core features

Integration Requirements

  • Maps API (Google Maps/OpenStreetMap)
  • Weather API integration
  • Transportation service APIs
  • Payment gateway integration
  • Hotel booking platform APIs

Performance Metrics

  • App launch time < 3 seconds
  • Route calculation time < 5 seconds
  • Real-time updates < 30 second delay
  • Offline data sync < 2 minutes

Monetization Strategy

Subscription Model

  • Free tier: Up to 3 travel plans per year
  • Premium tier: Unlimited travel plans
  • Family plans with shared itineraries
  • Enterprise solutions for travel agencies

Transaction Revenue

  • Convenience fee on third-party bookings (2-5%)
  • Premium feature access
  • Priority support
  • Advanced analytics and reporting

Success Metrics

  • User retention rate
  • Subscription conversion rate
  • Booking completion rate
  • User satisfaction scores
  • App store ratings
  • Customer support resolution time
  • Feature adoption rates

Timeline and Phases

Phase 1 (MVP - 3 months)

  • Core planning interface
  • Basic map integration
  • Weather integration
  • Essential accessibility features

Phase 2 (3 months)

  • Transportation booking integration
  • Advanced route optimization
  • Hotel and restaurant recommendations
  • Premium features implementation

Phase 3 (3 months)

  • AI improvements
  • Additional language support
  • Advanced accessibility features
  • Analytics and reporting dashboard

Risk Assessment

Technical Risks

  • API dependency and reliability
  • Data accuracy and synchronization
  • Platform compatibility issues
  • Performance optimization challenges

Business Risks

  • Market competition
  • Integration partner reliability
  • Regulatory compliance
  • Pricing strategy effectiveness