{"id":24876258,"url":"https://github.com/emilyskuo/route-trout","last_synced_at":"2026-04-12T04:34:13.009Z","repository":{"id":50176801,"uuid":"239878452","full_name":"emilyskuo/Route-Trout","owner":"emilyskuo","description":"Route Trout is a resource for hikers to search for trails and plan hiking trips","archived":false,"fork":false,"pushed_at":"2022-12-08T03:36:38.000Z","size":128671,"stargazers_count":1,"open_issues_count":3,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-27T03:16:04.116Z","etag":null,"topics":["bcrypt","flask","google-maps-api","hiking","javascript","jquery","postgresql","python3","sqlalchemy"],"latest_commit_sha":null,"homepage":"https://routetrout.emilyskuo.com","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emilyskuo.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-02-11T22:33:06.000Z","updated_at":"2023-01-16T09:53:18.000Z","dependencies_parsed_at":"2023-01-25T07:31:19.517Z","dependency_job_id":null,"html_url":"https://github.com/emilyskuo/Route-Trout","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/emilyskuo/Route-Trout","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emilyskuo%2FRoute-Trout","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emilyskuo%2FRoute-Trout/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emilyskuo%2FRoute-Trout/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emilyskuo%2FRoute-Trout/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emilyskuo","download_url":"https://codeload.github.com/emilyskuo/Route-Trout/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emilyskuo%2FRoute-Trout/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31704492,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T21:17:31.016Z","status":"online","status_checked_at":"2026-04-12T02:00:06.763Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bcrypt","flask","google-maps-api","hiking","javascript","jquery","postgresql","python3","sqlalchemy"],"created_at":"2025-02-01T08:29:04.120Z","updated_at":"2026-04-12T04:34:12.958Z","avatar_url":"https://github.com/emilyskuo.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## ![Route Trout logo](https://user-images.githubusercontent.com/58803587/76805145-4e54e600-679b-11ea-9c78-8c5677de99d3.png \"Route Trout\")\n# Route Trout\n\nRoute Trout is a resource for hikers to search for trails and plan hiking trips. Users can search for trails by location, and see the search results displayed in a list and a map. Registered users' passwords are kept secure with bcrypt, a tool that adds unique salts to each password prior to hashing.  Logged in users can add trails to their saved or completed lists, and also plan hiking trips. The Trips feature is designed to help people plan hiking trips by mapping out where they're staying, what trails are nearby, and which trails they plan to hike during that trip.\n\n**Contents**\n- [Tech Stack](#tech-stack)\n- [Features](#features)\n- [Future Features](#future-features)\n- [Installation](#installation)\n- [About the Developer](#about-the-developer)\n\n## Tech Stack\n\n**Backend:** Python 3, PostgreSQL, Flask, SQLAlchemy, Jinja, bcrypt\n\n**Frontend:** JavaScript, jQuery, HTML 5, CSS 3, Bootstrap, Select 2\n\n**APIs:** Google Maps Geocoding, Google Maps JavaScript, Hiking Project\n\n**Deployment:** Google Cloud Platform, Cloudflare, Apache2\n\n## Features\n\n**Seach for hiking trails**\n\nTo search for trails, users input a location, which is converted into coordinates using the Google Maps Geocoding API which are then sent to the Hiking Project API. The resulting JSON response is parsed \u0026 seeding into the database, and displayed as cards \u0026 mapped out. The cards are populated using JavaScript and jQuery, and formatted using Bootstrap. Each card has mouseenter and mouseleave event listeners that manipulate the animation attribute on each map marker to associate a trail with its location. The map markers all have an info window and zoom action when clicked. Closing the info window reverses the zoom.\n\n![Search for trails](https://user-images.githubusercontent.com/58803587/76893349-70a53d00-6849-11ea-9c20-3c328d695a2a.gif \"Search for hiking trails\")\n\n**Add trails to saved or completed lists**\n\nOn each trail page, there are buttons so that logged in users can easily save trails for future outings or mark already-hiked trails as completed. Each button click submits an AJAX request to the server to update the database accordingly.\n\n![Save Trails](https://user-images.githubusercontent.com/58803587/76901133-e1535600-6857-11ea-921a-90676eec85f3.gif \"Mark trails saved or completed\")\n\n**Plan hiking trips**\n\nOne of they key features on Route Trout is trip planning. Users can create trips to keep track of where they're staying, where they plan to hike, and other users involved. Once a trip is created, a separate layer of map markers appears on the search results page to visualize the trip. These trip markers are easily toggled off or on using the \"hide\" or \"show\" buttons at the bottom of the map.\n\n![Trips](https://user-images.githubusercontent.com/58803587/76902715-d4cffd00-6859-11ea-88f5-0125ed62e983.gif \"Plan hiking trips\")\n\n**Password security**\n\nAll passwords are uniquely salted prior to hashing using the Python bcrypt library. This ensures that every hashed password stored in the database is unique.\n\n## Future Features\n\n- Display a user's recently viewed trails\n- Implement discussions within trips\n- Friendships between users\n\n## Installation\n\n**Prerequisites**\n\nTo run Route Trout, you will need API keys for [Google Maps Geocoding](https://developers.google.com/maps/documentation/geocoding/start), [Google Maps JavaScript](https://developers.google.com/maps/documentation/javascript/tutorial), and the [Hiking Project](https://www.hikingproject.com/data). Python 3 and PostgreSQL also need to be installed on your machine.\n\n**Running Route Trout on your machine**\n\nClone this repository\n```shell\ngit clone https://github.com/emilyskuo/Route-Trout.git\n```\nOptional: Create and activate a virtual environment using virtualenv\n```shell\npip3 install virtualenv\nvirtualenv env\nsource env/bin/activate\n```\nInstall dependencies from requirements.txt\n```shell\npip3 install -r requirements.txt\n```\nCreate environmental variables to hold your API keys\n```shell\nexport MAPS_GEOCODING_KEY='{YOUR GEOCODING API KEY HERE}'\nexport MAPS_JS_KEY='{YOUR MAPS JS API KEY HERE}'\nexport HIKING_PROJECT_KEY='{YOUR HIKING PROJECT API KEY HERE}'\n```\nCreate your database \u0026 seed sample data\n```shell\ncreatedb hikingapp\npython3 seed.py\n```\nRun the app on localhost\n```shell\npython3 server.py\n```\n\n## About the Developer\n\nEmily Kuo is a software engineer in the San Francisco Bay Area, and previously worked as an Account Director in the pharmaceutical advertising industry. Her love of hiking \u0026 planning trips led her to build Route Trout as her capstone project at Hackbright Academy.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femilyskuo%2Froute-trout","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femilyskuo%2Froute-trout","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femilyskuo%2Froute-trout/lists"}