A web application allowing users to search, filter, and favorite ski resorts around the world. Using data from openskimap.org.
Visit the live deployment at slope-search.gvonb.dev
Before proceeding, you will need to have the following installed:
- Python (Any Version Not EOL)
- Node.js 18+
- Either:
- Docker (Recommended)
- OR a local MySQL setup such as MySQL Workbench
Local installation is best with Docker or you can also run the frontend and backend servers separately using Node.
To save size on the repository and support data updates, no data is stored in the repo.
- Download these two datasets from the about page on https://www.openskimap.org
ski_areas.csvruns.csv
- Create a new folder at:
notebook/data/ - Move both
.csvfiles intonotebook/data/
- (Optional) Create a Python virtual environment:
cd notebook python3 -m venv venv source venv/bin/activate
- Install Python requirements:
pip install -r requirements.txt
- Open
notebook/clean_data.ipynband run all cells to generate cleaned CSVs. - Cleaned data will be saved automatically into
notebook/data/.
Create .env files:
- In the root directory (.env):
MYSQL_ROOT_PASSWORD=password MYSQL_DATABASE=slope_search
- In the /server directory (server/.env):
DB_HOST=mysql DB_USER=root DB_PASS=password DB_NAME=slope_search PORT=3000
- Make the initialization script executable and run it:
chmod +x scripts/init-db.sh
This loads the schema and cleaned data into the MySQL container.
Option 1: Using Docker (Recommended)
docker compose up --build- Access the app at http://localhost:4173
Option 2: Run Manually
In separate terminal tabs:
# Terminal 1 - Start Backend
cd server
npm install
npm run dev# Terminal 2 - Start Frontend
cd client
npm install
npm run devMake sure your local MySQL instance is running and matches the .env configuration.
If you're using a local MySQL setup (e.g. MySQL Workbench), ensure the following:
- Your MySQL server is running and accessible.
- The
server/.envfile must be configured with your local MySQL details. For example:
DB_HOST=localhost
DB_USER=your_user
DB_PASS=your_password
DB_NAME=slope_search
PORT=3000- Make sure to manually run the schema and data load scripts in order:
First, create the tables:
mysql -u your_user -p slope_search < sql/createTables.sqlYou will be prompted to enter your MySQL password.
Then, load the cleaned data:
mysql -u your_user -p slope_search < sql/loadData.sqlYou will be prompted again for the password.