Team Escaped CharacterspresentExploreUK

ExploreUK Demo Video
Seamless Itineraries for Unforgettable UK Journeys.
Introduction
ExploreUK is a travel planning app designed to help users create seamless, personalised itineraries for exploring cities across the UK. Whether you're a tourist visiting for the first time or a local looking to discover hidden gems, ExploreUK simplifies the process by integrating powerful APIs, intuitive design, and user-friendly features.
The Idea Behind ExploreUK
The inspiration for ExploreUK came from the frustration of planning efficient and enjoyable trips. Many travel apps focus on generic recommendations without considering individual preferences, real-time logistics, or ease of access. Our goal was to create an app that goes beyond simple list-making and actively helps users build an optimised itinerary based on their interests, available time, and real-time travel data.
We wanted to make travel planning effortless, integrating APIs like Google Places and Google Route to offer tailored recommendations and efficient route mapping. The idea was also driven by the need for a convenient way to save and manage itineraries, ensuring travellers can access their plans anytime, anywhere.
User Experience Overview
Onboarding & User Profiles
New users sign up via email or Google OAuth and select whether they are a tourist or a tour guide (for future expanded features).
The profile saves user preferences, such as interests (historical sites, nature, food spots, cultural experiences, etc.), so recommendations are tailored from the start.
Planning an Itinerary
Users enter a city and date for their trip.
They select preferences such as sightseeing, dining, outdoor activities, or historical landmarks.
The app fetches recommendations using Google Places API, presenting top-rated attractions, restaurants, and experiences that match their interests.
Optimised Route Planning
After selecting places to visit, the Google Route API organises them in an efficient order to minimise travel time.
Users can reorder stops manually or allow the app to suggest the best route.
Saving & Exporting Itineraries
Users can save itineraries to their profile and access them later.
If logged out, users are prompted to sign in before exporting itineraries or saving to their calendar.
Itineraries can be exported as PDFs or synced with a calendar for easy access during travel.
Real-Time Interaction & Customisation
The app allows users to edit their itineraries on the go.
Real-time weather updates and travel alerts help users adjust their plans.
The app will eventually support reviews and recommendations from locals for a more authentic experience.
Seamless Navigation & User-Friendly Design
The interface is clean and intuitive, making itinerary planning fast and enjoyable.
A personalised dashboard shows saved itineraries, suggested destinations, and upcoming trips.
The Team
Imran Hussain
Alex Schubert
Shams Ali
Josh Faichney
Braima Djassi
Nicolas Traver
Technologies

We used: React, React Router, PSQL, Express.js, Supabase, Google Places API, Google Route API, Jest/Supertest,
React
We chose React because it allows us to build a fast, interactive, and reusable component-based UI. It also has a large ecosystem and excellent community support.
React Router
Used to handle navigation within the app, ensuring seamless transitions between pages without full-page reloads.
Express.js
A lightweight and flexible Node.js framework that makes it easy to set up API endpoints, handle requests, and interact with the database.
PostgreSQL (PSQL)
A powerful, relational database used to store user profiles, saved itineraries, and location-based data efficiently.
Supabase
Chosen for authentication (Google OAuth & email login) and database management. It provides a PostgreSQL-backed solution with built-in authentication, reducing the need for a custom auth setup.
Google Places API
Used to fetch location-based recommendations for attractions, restaurants, and experiences based on user preferences.
Google Route API
Helps optimise travel routes by calculating the most efficient way to visit selected locations.
Jest / Supertest
Used for unit and integration testing of the backend. Supertest ensures that our API endpoints function as expected before deployment.
Challenges Faced
- Managing Authentication & User Roles
Challenge: Implementing authentication with Supabase while ensuring users could log in via email/password and Google OAuth. Additionally, differentiating between tourists and tour guides in user profiles.
Solution: We used Supabase Auth for authentication and stored user roles in our PostgreSQL database. This allowed us to dynamically control access to certain features based on the user's role. - Fetching and Handling Google API Data
Challenge: The Google Places API provides a vast amount of data, but not all of it was structured in a way that fit our use case. Filtering relevant locations while avoiding unnecessary API calls was tricky.
Solution: We set up query parameters to filter out unnecessary data, reducing API usage costs and improving performance. We also cached API responses where possible to limit redundant calls. - Optimising Route Planning
Challenge: The Google Route API provides multiple route options, but ensuring we optimised the order of locations efficiently without overly complex logic was a hurdle.
Solution: We used the optimisation feature within the API, which calculates the most efficient order of stops, minimising travel time. Additionally, we allowed users to manually reorder stops if they preferred a different route. - State Management & Navigation
Challenge: Managing user-selected locations and preferences across multiple pages while ensuring a smooth user experience.
Solution: Initially, we considered Redux, but it felt like overkill for this project. Instead, we used React Context API. - Handling Backend & Database Queries
Challenge: Querying and storing user itineraries efficiently while ensuring the database structure allowed for easy retrieval.
Solution: We structured our PostgreSQL database with relational tables, ensuring indexed queries for faster lookup times. We also optimised our Supabase queries to return only necessary data, reducing backend load.