NavHealth is a full-stack application that aggregates and displays information about healthcare resources, serving as a custom search engine focused on making it easy to find relevant health services near the end-user's location. It offers more information than a Google search or yelp listing, allowing users to search by healthcare services offered and filter locations by the insurances they accept. It also supports rating and reviewing healthcare businesses. Overall, NavHealth is designed to be a reliable endpoint for users seeking healthcare services to find the best facility to receive care at. NavHealth was built with HTML5, CSS3, ES6, Node.js, Express, Bootstrap 5, and MongoDB.
For our live demo, our database hosts health facility locations in Massachusetts with mock data for certain fields. The reviews collection is entirely composed of mock data.
Landing page of NavHealth.
Search page of NavHealth.
Reviews page of NavHealth.
List Business page of NavHealth.
Post Review page of NavHealth.
Admin Search page of NavHealth.
Admin Reviews page of NavHealth.
- Aryan Yadav: Search full-stack.
- Vasilios Nicholas: Reviews full-stack.
The goal of NavHealth is to make finding healthcare services simpler and more informative than a typical Google or Yelp search. Users can search for health facilities by name, location, or services offered, filter results by accepted insurance providers, and read or post reviews — all in one place.
This project was created as the second project for CS5610 Web Development at Northeastern University, during the Summer 2026 semester.
From a technical standpoint, the project was built to practice full-stack web development using Node.js, Express, MongoDB, and vanilla JavaScript with client-side rendering. Specific objectives include:
- Building a multi-page application where each page is served as its own HTML file with its own CSS and JS modules.
- Implementing a REST API with Express that supports full CRUD operations across two MongoDB collections:
locationsandreviews. - Using client-side JavaScript to fetch data from the API and dynamically render UI elements.
- Integrating a third-party geocoding API to support location-aware search.
- Deploying the application to a public server so it is accessible to real users.
Navigating to NavHealth brings you to the landing page, where you can perform an initial search for health services, locations, or health facility names. Submitting the initial search brings you to the landing page, where you can refine the search based on your zip code, or use your current location based on your browser's built-in geocoding api. You can further refine the search radius, filter by accepted health insurances, and filter by location type (hospital, urgent care, or retail clinic). Each listing displays the name of the business, its address, its business hours, the healthcare services it offers, and its average rating. On the search page, the Manage Listings button lets you edit or delete a location from our database, this is intended for admin users.
You can click on the Visit Reviews button for a business to see the reviews for said business. You can sort the reviews by recency of posting, rating, and popularity. You can choose to like or dislike each review, which updates the relative fields in our reviews collection database. The Manage Reviews buttons allows admin users to delete reviews from the reviews collection.
The top left button of the reviews page, Post Review lets you post your own review. Successfully submitting redirects you back to the reviews page for the business after 5 seconds, displaying your review at the very top, if it was the most recent one posted.
NavHealth
├── eslint.config.js #eslint config file.
├── .env.example #example of the properties/attributes needed to run our app in a local/hosted environment.
├── LICENSE #Our project uses an MIT license.
├── package.json #lists project dependencies.
├── package-lock.json
├── README.md #project README
├── backend
│ ├── app.js #Creates an instance of the express server, adds all routes, and starts the server.
│ ├── dev.js #Runs our app using livereload, which hard refreshes our pages in a browser upon static file changes.
│ ├── index.js #Invokes imports app from app.js and invokes app.run() to run our app.
│ ├── database
│ │ ├── db.js #Singleton pattern for connecting to our MongoDB database using MongoClient.
│ │ └── reviewsCollectionOperations.js #Service Module for interacting with our MongoDB singleton in db.js.
│ ├── routes
│ │ ├── categories.js
│ │ ├── insurances.js
│ │ ├── locations.js
│ │ └── ReviewsRouter.js #Router that contains CRUD operations for the reviews collection.
│ └── utils
│ └── geocodeMaps.js
├── data #Final data in json format that was added to our MongoDB database.
│ └── processed
│ ├── locations.json
│ └── reviews.json
├── public #Directory for static content.
│ ├── index.html #Landing page with initial search by health business name, location, or services offered.
│ ├── search.html #Search page displays results for initial and subsequent searches and adds more search features.
│ ├── reviews.html #Displays reviews for a particular location.
│ ├── add-location.html #Allows a business user to add a location to the NavHealth database.
│ ├── post-review.html #Allows a user to add a review for a location to the NavHealth database.
│ ├── images
│ │ ├── favicon.png #favicon for site.
│ │ ├── NavHealth.png #NavHealth logo.
│ │ └── splash.webp #Background image for most pages.
│ ├── scripts
│ │ ├── add-location.js
│ │ ├── DropDownGenerator.js #Common code for generating and maintaining event listeners for a dropdown element.
│ │ ├── getInitials.js #Returns two chars from a String.
│ │ ├── landing.js #Frontend code for index.html.
│ │ ├── post-review.js #Frontend code for post-review.html.
│ │ ├── reviews.js
│ │ ├── SearchAndDropDownGenerator.js #Links a datalist to a dropdown element, displaying new data on dropdown selection change.
│ │ ├── search.js
│ │ └── updateReviewsMetaData.js
│ └── styles
│ ├── main.css #main stylesheet.
│ ├── reviews.css #adds reviews-module specific styling.
│ └── search.css #adds search-module specific styling.
└── raw_data #Directory for storing the raw data we used to build our MongoDB collections.
├── example-location.txt
├── FY24-Massachusetts-Hospital-Profiles-Databook.xlsx
├── mockaroo_generated_reviews.json
├── provider-list.txt
└── Retail-and-Urgent-Care-Clinics-data-7-2024.xlsx
-
Clone the repository using git
git clone https://github.com/vasiliosnicholas/NavHealth.git cd NavHealth -
Ensure Node.js v24 is installed on your system
node --version
-
Install project dependencies for local deployment and development
npm install
-
Install MongoDB on your system using a container or natively and start the MongoDB instance.
-
Add our collections from
./data/processed/to a locally deployed MongoDB database. -
Go to
https://geocode.maps.co/and create an API key. -
Using
.env.examplefor the required environmental variables, fill out:MONGODB_URI=<mongodb://localhost:27017 or your MongoDB cluster URI> MONGODB_DB_NAME=<your database name here> MONGODB_LOCATIONS_COLLECTION=<your collection name with the data from ./data/processed/locations.json> MONGODB_REVIEWS_COLLECTION=<your collection name with the data from ./data/processed/reviews.json> GEOCODE_MAPS_API_KEY=<your API key from step 6>
-
Choose a script for running the app:
- If you plan to develop, we recommend using our dev script, which runs our express server in a livereload server (which hard refreshes your browser for static file changes) and nodemon for restarting the server for dynamic file changes:
npm run dev
- Otherwise, run:
node start
- If you plan to develop, we recommend using our dev script, which runs our express server in a livereload server (which hard refreshes your browser for static file changes) and nodemon for restarting the server for dynamic file changes:
- geocode.maps.co — Geocoding API used for making entering business coordinates optional on the
List a Business Page. - MongoDB Node.js Driver — Official driver used to connect to and query MongoDB collections.
- Express — Web framework for Node.js used to build the REST API and serve static files.
- Bootstrap 5 — CSS/JS framework used for responsive layout and UI components.
- Mockaroo — Used to generate mock review data for the
reviewscollection. - Render — Deployment environment for Express backend.
- MongoDB Atlas — Deployment environment for MongoDB database
- Vasilios Nicholas:
- App logo and favicon generation:
- Model used: GPT Image 2 via Adobe Firefly
- Prompt used: Website faveicon/logo blue-green compass with a single black stethoscope. Ensure stethoscope is anatomically accurate.
- Mockaroo used for generating reviews mock data. See any of the objects in ./data/processed/reviews.json to see the fields I used for generating the mock data.
- App logo and favicon generation:
This project is licensed under the MIT License.






