Safe Flight is a travel risk planning website that helps users review destination safety before booking or departing. The app presents country risk levels in a polished travel-service interface, supports searchable destination data, and lets users save countries to a personal watchlist with a regular email and password account.
The current UI uses a modern corporate travel style with a dark navigation bar, strong editorial hero sections, clean data tables, country flag imagery, and responsive layouts for desktop and mobile.
- Search and filter countries by destination name and risk level.
- View destination risk categories with scannable badges.
- Display country flags in the Risk Search table.
- Save destinations to a personal watchlist.
- Create and use a regular local account without OAuth.
- Use fallback sample data when live advisory APIs are unavailable.
- Responsive navigation, account, contact, and informational pages.
- React 18
- React Router
- Axios
- CSS3
- Inter web font
- Web Crypto API
- Local Storage
- Python 3.11
- Flask
- PyMongo
- MongoDB
- Requests
- python-decouple
- AirLabs API
- Travel Advisory API
- Create React App
- Pipenv
The screenshots below show each primary page of the website.
| Home | Risk Search |
|---|---|
![]() |
![]() |
| Watchlist | Account |
|---|---|
![]() |
![]() |
| About | Contact |
|---|---|
![]() |
![]() |
safe-flight-website/
client/ React frontend
server/ Flask API and MongoDB helpers
docs/screenshots/ Portfolio screenshots used by this README
Safe Flight is deployed with GitHub Pages:
https://kevkim12.github.io/SafeFlight/
The production build uses the homepage value in client/package.json so static assets resolve from /SafeFlight/. Production routing uses hash-based routes, which keeps React Router navigation reliable on GitHub Pages.
To update the deployed site:
cd client
npm run buildAfter building, copy the contents of client/build to the repository root, keep .nojekyll and 404.html in place, then commit and push the updated static files to main. The gh-pages branch can also be refreshed with the same client/build output when needed.
- Node.js and npm
- Python 3.11
- Pipenv
- MongoDB running locally on
mongodb://localhost:27017/
cd server
pipenv install
pipenv run python server.pyOptional API environment variables can be added in server/.env:
AIRLABS=your_airlabs_api_key
AIRLABS_BASE=https://airlabs.co/api/v9/
TA_BASE=https://www.travel-advisory.info/apiIf live API data is unavailable, the frontend still provides a working sample destination set for the Risk Search page.
cd client
npm install
npm startOpen the app at:
http://localhost:3000
cd client
npm run buildThe optimized build is generated in client/build.





