This tool helps volunteer coordinators for Re-Engage. Re-Engage is a charity that organises tea parties for elderly members in the community to address isolation and loneliness.
Background: Each month, a driver from a group of volunteers is matched with an elderly guest, with drivers and guests who live close to one another being paired preferentially. Drivers then pick up and drop off their assigned guest at a central location where the charity runs a tea party.
Problem: Driver/Guest pairings are often different each month based on the participants' changing schedules. Coordinating everyone involved was done manually using spreadsheets and required a substantial number of hours to complete, with the shortest guest/driver pairs being created by looking up participants' addresses in Google Maps and eyeballing the best pairings.
Solution: The Re-Engage Coordinator Portal helps coordinators by automating the administrative tasks involved.
- Coordinators can login/logout
- View, add, and delete members (drivers & guests), their addresses, and telephone numbers
- View and update members' availabilities
- Generate paired routes for drivers and guests using three algorithms:
shortest
(produces non-optimal pairings but runs very quickly - good for large samples)average
(always produces optimal pairings but runs slowly - good for small samples)smart
(a genetic algorithms that often produces optimal pairings and runs substantially faster than theaverage
algorithm)
- Displays the generated paired routes on a map with contact information
- Mongo as as our non-relational database.
- Express web framework for Node.js.
- React as a front end controller.
- Node for the development environment.
- Javascript as our development language.
- Google Maps Directions API to generate routes for guest/driver pairs.
- Mongoose to model objects for MongoDB.
- Nodemon to reload the server automatically.
- Prettier for linting.
- Jest for testing.
- Cypress for end-to-end testing.
- Travis for continuous integration and build testing.
- Heroku for deployment.
- Clone or Fork this repo to your local machine
- Install Node Version Manager (NVM) and
nvm install 14.3.0
- Navigate into the project repo
- Install Node.js dependencies
npm install
- Install
[email protected]
- Start Mongodb with
start [email protected]
npm run start:dev
to start the server in the development environment.- Visit http://localhost:3000 to see the website in action!
The test server must be running for integration tests to pass. The test server runs on port 3030 at http://localhost:3030.
- In one terminal (start the test server):
npm run start:test
- In another terminal, run these commands
- To run all the tests (Jest and Cypress):
npm test
- To run Jest unit tests:
npm run test:unit
ornpx jest
- To run Cypress feature tests:
npm run test:integration
(runs in the command line) ornpx cypress open
(much quicker, runs in a separate window)
- To run all the tests (Jest and Cypress):
We ran daily retros to review each other's code and clarified our learning with a wiki post detailing the new knowledge we had acquired. You can a link to an overview of daily learning here.
Our team used an agile development process with periodic sprints to deliver to our client with regular check ins and feature updates. The client's specification was broken down by our team into a product spec which were then turned into user stories and finally assigned to team member pairs. This process allowed us to integrate changes in specification late into development and keep the team running by dividing up dividing up tasks during the sprints. We used a process of branches, pull-request code reviews and continuous integration testing pipelines to keep our code clean and dependendable.
For an insight into our agile process you can view our team's card wall here.
We employed extensive domain and database modelling for our application before beginning development as well as diagramming the flow of the application.
Coordinator Access
:
As a coordinator
So that I can use portal
I would like to log in with an account created by an admin
As a coordinator
So that I can maintain the security of the system
I would like to log out
Drivers / Guests
:
As a coordinator
So that I can organise the drivers
I would like to see a list drivers with their name and address
As a coordinator
So that I can recruit new drivers
I would like to input new driver’s with their name and address
As a coordinator
So that I can organise the drivers effectively
I would like to view the drivers availability
As a coordinator
So that I can respond to the changing demands of the drivers schedules
I would like to update or add to the drivers availability
As a coordinator
So that I can organise the guests
I would like to see a list guests with their name and address
As a coordinator
So that I can introduce more guests to the group
I would like to input a guests name and address
As a coordinator
So that I can organise the guests effectively
I would like to view the guests availability
As a coordinator
So that I can respond to the changing demands of the guests schedules
I would like to update or add to the guests availability
Route Generation
:
As a coordinator
So that I can see the months pairings
I would like to select a month from drop down menu
As a coordinator
So that I can generate the pairings
I would like to see a table of randomly paired drivers and guests
As a coordinator
So that I can visualise the pairing logistics
I would like to see a map of the pairs in the table