To-do List optimizer is comprised of three main modules: client, server and database.

The outer structure of the app from the root directory looks like this:

Code
├── Client
├── Server

The To-do_List-client folder contains the client side of the application
using react-native and the To-do-List_server contains the server of the application
where the restful API is located using Express module from NodeJS.

/*******************************************************************************
* CLIENT SIDE
*******************************************************************************/

The client side of the application holds the code for mobile platforms iOS and Android.
The main programming language used is JavaScript using the module react-native from NodeJS.
The main structure of the client is as follows:

Code/Client
├── __tests__
├── android
├── index.js
├── ios
├── node_modules
├── package.json
└──src


android directory: Holds the project for android version Lollipop generated by react-native.
ios directory: Holds the project for XCode in swift for version 11.2.0 of iOS generated by react-native.
index.js: It is the entry point of the application.
node_modules directory: Holds the installed npm packages for the app.
package.json: Necessary file for installing all the dependencies and dev tools.
src directory: Holds all the source code for the application.

The directory src is where the files created by the team are contained. The rest of the directories where auto-generated
by react-native. The main structure of the src directory is as follows:

Code/Client/src
├── App.js
├── actions
├── api
├── assets
├── components
├── containers
├── reducers
├── scenes
├── store
└── tools

App.js: Contains the skeleton of the application. It provides the scene transitions and The
        initial setup of the Store of the app using redux.
actions directory: Contains the actions that are needed to change the state of the application using
                  redux.
api directory: Contains the file to connect to the restful API and the google API from the client.
assets directory: Contains all the icons, fonts and Images used by the app.
store directory: It is where the initial setup of the store is and the reducers are connected.
tools directory: Holds some common tools to parse time, parse distance, work with icons, and colors.

============================= Layout of the scenes =============================
Each screen in the app is a scene. Each scene is made out of containers objects that are also made
out of component objects. Each of these objects are in their correspondent directories: scenes, containers, and components.

============================= Store Structure =============================
The Store is made out of three important parts: map, user, errands.

map: stores the optimized route, the current region being displayed on the map,
      the order of the places, and some data about time and distance.
user: stores the current user information including location, speed, and other statistics.
errands: each combination of place and the tasks within it is called an errand. This
        part of the store holds all the places and tasks and the relation between them.

/*******************************************************************************
* SERVER SIDE
*******************************************************************************/

The server side of the application is intended to hold the restful api to connect to the database.
It is mainly code in JavaScript using Express module from NodeJS.
The main structure of the server looks as follows:

Code/Server
├── api
├── app.js
├── bin
└── node_modules


api directory: This directory holds the Models, Controllers and the Routes.
app.js: Source code for the server
node_modules directory: Holds the installed npm packages for the app.
bin directory: It is the entry point if the application.

============================= Bin directory Structure ==========================
As it was mentioned before, bin directory is the entry point of the application.
It holds a single file that starts the server. The structure of the bin directory is
as follows:

Code/Server/bin
└── www

www: File that starts the server.

============================= Bin directory Structure ==========================
The api directory structure is as follows.

Code/Server/api
├── controllers
├── models
└── routes

controllers directory: Contains the user, place and task controllers.
models directory: It holds the different schemas of the database.
routes directory: It holds all the routes to use the restful API.

/*******************************************************************************
* OTHER TOOLS
*******************************************************************************/

The app uses yarn as the package manager.
