This guide walks you through running the full UK Travel Recommendation stack on your local machine — from a fresh clone all the way to swiping through attraction cards on a real device or emulator. The backend runs inside Docker Compose (Django + PostgreSQL with pgvector), while the Expo frontend runs through the standard Expo CLI toolchain. Plan for roughly 10 minutes on a decent internet connection, plus however long it takes Docker to pull theDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/viet2811/uk-travel-recommendation/llms.txt
Use this file to discover all available pages before exploring further.
pgvector/pgvector:pg15-bookworm image the first time.
Prerequisites
Before you begin, make sure the following tools are installed and available on yourPATH:
| Tool | Minimum version | Notes |
|---|---|---|
| Docker + Docker Compose | Docker 24+ | Docker Desktop works on macOS and Windows |
| Node.js | 18 LTS | Required for the Expo CLI and frontend dependencies |
| Expo CLI | Latest | Install globally: npm install -g expo-cli |
| Git | Any recent version | For cloning the repository |
Setup Steps
Clone the repository
Pull the project from GitHub. This gives you both the
backend/ and frontend/ directories as well as the root docker-compose.yaml.Create the backend environment file
The Django application and the PostgreSQL service both read their configuration from a shared Then open
.env file located inside the backend/ directory. Create it now and fill in values appropriate for your local setup.backend/.env in your editor and add the following variables:Start the backend and database
From the repository root, bring up both Docker Compose services. The Docker will:
--build flag ensures the Django image is (re)built from the backend/Dockerfile rather than using a stale cached layer.- Pull
pgvector/pgvector:pg15-bookwormfor thedbservice (PostgreSQL 15 with the pgvector extension pre-installed). - Build the
backendimage and install Python dependencies. - Start both containers. The Django dev server will be reachable at
http://localhost:8000.
Starting development server at http://0.0.0.0:8000/ in the logs before proceeding.Run database migrations
With the containers running, apply Django’s database migrations to create all required tables — including the You should see a series of
pgvector-backed columns used to store attraction and user-profile vectors.Applying <app>.<migration>… OK lines. If the command reports a connection error, wait a few seconds for PostgreSQL to finish its initialisation and try again.Load attraction data
Populate the database with UK attraction records by running the custom management command. This command reads from a CSV file and a pre-computed vector pickle file, then bulk-inserts each attraction along with its 777-dimensional
finalVector.load_attractions expects two data files to be present inside the backend/ directory before the image is built:uk_attractions_main_valid_locations.csv— the attraction metadata (name, county, region, summary, etc.)uk_attractions_vectors.pkl— pre-computed label and summary embeddings for every attraction
Install frontend dependencies
Open a new terminal window (leave Docker Compose running in the first one), then navigate to the
frontend/ directory and install Node packages.Configure the frontend environment
The Expo app needs to know where your Django backend is listening. Create a Add the following line, replacing the IP address with your machine’s local network address if you plan to use a physical device (Expo Go resolves
.env file inside the frontend/ directory:localhost to the phone itself, not your computer):Start the Expo development server
Launch the Metro bundler and Expo development server from the A QR code will appear in your terminal. Scan it with the Expo Go app (available on the App Store and Google Play) to load the app on your phone, or press
frontend/ directory:i for the iOS Simulator or a for an Android Emulator.Verify Everything Is Working
Once the app loads, you should land on the registration screen. Create an account, complete the initial preference setup, and you will be taken to the swipe feed where personalised UK attraction cards are served from your local backend. You can also confirm the API is healthy by hitting the root endpoint directly:401 Unauthorized response (rather than a connection error) confirms Django is running and routing correctly.
Stopping the Stack
To stop all running containers cleanly:-v if you also want to remove the PostgreSQL data volume (this will erase all loaded attraction data and user accounts):