Skip to content

About

A platform to provide travelers with safety information about a city

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

 
 

Repository files navigation

TravelShield 🛡️

A travel safety platform that helps travelers make more informed decisions about where to stay, visit, and explore.

TravelShield provides travelers with safety information, community reviews, and location-based features to help them discover and evaluate cities and areas before and during a trip.

A full-stack application that combines a Ruby on Rails backend with an interactive map, geolocation services, search, authentication, user-generated content, and cloud-based image storage.

✨ Features

  • 🔐 User authentication and account management
  • 🗺️ Interactive maps with Mapbox GL
  • 📍 Location-based search and geocoding
  • 🔎 Search and filtering for cities and areas
  • ⭐ Community reviews and ratings
  • ❤️ Favorite locations
  • 📷 Cloud-based image management with Cloudinary
  • 📄 Paginated results
  • 👤 User profiles and community-generated content
  • 📱 Responsive interface for desktop and mobile devices

🛠️ Tech Stack

Backend

  • Ruby 3.1.2
  • Ruby on Rails 7.1.3
  • PostgreSQL
  • Devise — authentication
  • PgSearch — full-text search
  • Geocoder — geocoding and location-based features
  • Pagy — pagination

Frontend

  • HTML5
  • SCSS
  • Bootstrap 5
  • JavaScript
  • Stimulus
  • Turbo / Hotwire
  • Mapbox GL

Services & Tools

  • Cloudinary — image storage and delivery
  • Puma — application server
  • Selenium / Capybara — system testing
  • Docker — containerization support

🏗️ Architecture

TravelShield follows the conventional Model–View–Controller (MVC) architecture provided by Ruby on Rails.

                     ┌──────────────────────┐
                     │      User / Browser  │
                     └──────────┬───────────┘
                                │
                                ▼
                     ┌──────────────────────┐
                     │   Rails Controllers  │
                     └──────────┬───────────┘
                                │
                ┌───────────────┼────────────────┐
                ▼               ▼                ▼
          ┌──────────┐   ┌────────────┐   ┌─────────────┐
          │  Models  │   │   Views    │   │   Services  │
          └────┬─────┘   └────────────┘   └─────────────┘
               │
               ▼
        ┌──────────────┐
        │  PostgreSQL  │
        └──────────────┘

External integrations:
  Mapbox GL → Interactive maps
  Geocoder  → Location/geocoding
  Cloudinary → Image storage

The application uses Rails conventions to separate responsibilities between controllers, models, views, and supporting components.

🚀 Getting Started

Prerequisites

Make sure you have the following installed:

  • Ruby 3.1.2
  • Rails 7.1.3+
  • PostgreSQL
  • Node.js
  • Yarn

You can verify your Ruby and Rails versions with:

ruby -v
rails -v

1. Clone the repository

git clone https://github.com/digidweb/lewagon-travel-shield.git
cd lewagon-travel-shield

2. Install Ruby dependencies

bundle install

3. Install JavaScript dependencies

yarn install

4. Configure environment variables

Create a .env file in the project root.

Example:

CLOUDINARY_URL=your_cloudinary_url
MAPBOX_API_KEY=your_mapbox_api_key

Do not commit credentials or API keys to the repository.

5. Set up the database

rails db:create
rails db:migrate
rails db:seed

6. Start the application

bin/dev

Then open:

http://localhost:3000

🧪 Testing

The project includes system testing support through Capybara and Selenium.

Run the test suite with:

bundle exec rails test

For a specific test file:

bundle exec rails test test/path/to/test_file.rb

🔍 Search & Geolocation

TravelShield combines search and geolocation capabilities to help users discover information about specific locations.

PgSearch is used to support search functionality, while Geocoder handles geolocation-related features.

This combination allows the application to work with both textual location searches and geographic information.

🗺️ Interactive Maps

The application integrates Mapbox GL to provide an interactive map experience.

The map allows users to visually explore locations and interact with geographic information rather than relying exclusively on traditional lists.

This integration demonstrates how a Rails application can combine server-side application logic with third-party JavaScript APIs.

📷 Image Management

User-generated content can include images that are managed through Cloudinary.

The integration handles cloud-based image storage and delivery while keeping the Rails application responsible for the associated application data.

🔐 Authentication

User authentication is implemented with Devise, providing the foundation for:

  • User registration
  • Login/logout
  • Session management
  • Authentication-protected features

This allows user-generated content such as reviews and favorites to be associated with individual accounts.

📄 Pagination

The application uses Pagy to paginate collections of records.

Pagination helps prevent unnecessarily large result sets from being loaded and displayed at once, providing a better user experience as the amount of content grows.

📚 Project Context & Contributions

TravelShield was originally developed as the final project of the Le Wagon Web Development Bootcamp.

This repository contains the version developed and maintained in my GitHub account.

The project provided practical experience working on a collaborative full-stack Rails application, including:

  • Rails MVC architecture
  • Database modeling with PostgreSQL
  • Authentication
  • RESTful routes and controllers
  • CRUD operations
  • Search
  • Geolocation
  • Interactive maps
  • Third-party API integrations
  • Image management
  • Responsive UI development
  • Git and collaborative development workflows

Note: This repository is based on the original Le Wagon project structure. The project should therefore be evaluated in the context of the contributions and implementation work made within this repository rather than as an entirely independent application created from scratch.

💡 Technical Takeaways

Building TravelShield provided practical experience with the challenges involved in developing a full-stack application where multiple parts of the system need to work together:

User
 │
 ├── Authentication
 │
 ├── Search
 │
 ├── Reviews
 │
 ├── Favorites
 │
 └── Location
       │
       ├── Geocoder
       └── Mapbox

The project was particularly useful for understanding how Rails can serve as the foundation for an application while integrating specialized third-party services for maps, geolocation, authentication, search, and media storage.

🔮 Potential Improvements

If continuing the project, the following improvements would be natural next steps:

  • Add automated CI with GitHub Actions
  • Increase automated test coverage
  • Add API endpoints for mobile or third-party clients
  • Improve accessibility (WCAG)
  • Add more advanced search filters
  • Add user moderation and reporting features
  • Add security and performance monitoring
  • Introduce background jobs for asynchronous operations
  • Add a production deployment pipeline
  • Improve observability with structured logging and error tracking

📄 License

This project was developed as part of a technical learning project and is maintained in this repository for portfolio and educational purposes.

About

A platform to provide travelers with safety information about a city

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages