A platform for all the small-scale vendors, housewives and any other skilled people who are not getting enough time to showcase their skills due to many different reasons like less market knowledge, less awareness of how to target the customers, and because of large-scale companies who have acquired the market. Our platform will help such skilled people to expand their businesses under their brand name and customers can afford their services at a reasonable cost.
Tools: HTML 5, CSS 3, Bootstrap 4, JavaScript, Express.js, Node.js, MongoDB, Passport.js, Android, Java
1. Download the project. (Zip or Clone). Unzip it. 2. Make an account on CLOUDINARY (https://cloudinary.com/) Get the API Key and API Secret In .env file which is at the same level of app.js file, make updates as below for handyman-web and handyman-admin CLOUDINARY_API_KEY=YOUR_CLOUDINARY_API_KEY CLOUDINARY_API_SECRET=YOUR_CLOUDINARY_API_SECRET 3. Inorder to make Forgot Password module work, you need to create a new email id or use any existing. Then for handyman-admin and handyman-web, under routes > admin.js routes > customer.js routes > vendor.js Change all "YOUR_EMAIL_ID" to the email id you created/ had in advance [existing]. 4. You need to have Node, MongoDB installed to run the application 5. After that, install all the necessary dependencies which are listed below for handyman-web and handyman-admin. Check out NPM BASIC COMMANDS
http://dreamerslab.com/blog/en/npm-basic-commands/
https://codeburst.io/getting-started-with-node-js-a-beginners-guide-b03e25bca71b
{ "name": "handyman-admin", "version": "1.0.0", "description": "Handyman Admin Panel", "main": "app.js", "scripts": { "start": "node app.js", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "Dhrumil Amish Shah", "license": "ISC", "dependencies": { "async": "^2.6.1", "body-parser": "^1.18.3", "cloudinary": "^1.13.2", "connect-flash": "^0.1.1", "dotenv": "^6.2.0", "ejs": "^2.6.1", "express": "^4.16.4", "express-session": "^1.15.6", "express-validator": "^5.3.1", "method-override": "^3.0.0", "mongoose": "^5.4.7", "multer": "^1.4.1", "nodemailer": "^5.1.1", "passport": "^0.4.0", "passport-local": "^1.0.0", "passport-local-mongoose": "^5.0.1" } }
{ "name": "handyman-web", "version": "1.0.0", "description": "Handyman Web Application", "main": "app.js", "scripts": { "start": "node app.js", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "Dhrumil Amish Shah", "license": "ISC", "dependencies": { "async": "^2.6.1", "body-parser": "^1.18.3", "cloudinary": "^1.13.2", "connect-flash": "^0.1.1", "dotenv": "^6.2.0", "ejs": "^2.6.1", "express": "^4.16.4", "express-session": "^1.15.6", "express-validator": "^5.3.1", "method-override": "^3.0.0", "mongoose": "^5.4.7", "multer": "^1.4.1", "nodemailer": "^5.1.1", "passport": "^0.4.0", "passport-local": "^1.0.0", "passport-local-mongoose": "^5.0.1" } }
MVC is an acronym for Model-View-Controller.
Model: Model represents the structure of data, the format and the constraints with which it is stored. It maintains the data of the application. Essentially, it is the database part of the application.
View: View is what is presented to the user. Views utilize the Model and present data in a form in which the user wants. A user can also be allowed to make changes to the data presented to the user. They consist of static and dynamic pages which are rendered or sent to the user when the user requests them.
Controller: Controller controls the requests of the user and then generates appropriate response which is fed to the viewer. Typically, the user interacts with the View, which in turn generates the appropriate request, this request will be handled by a controller. The controller renders the appropriate view with the model data as a response.
So, to sum it up:
Model is data part.
View is User Interface part.
Controller is request-response handler.
As you can see, there is a routes folder, which will serve as controllers.
Then there is a models folder, in which we have a different models.
A views folder, which have our views with an extension of ejs. Be noted that ejs is a templating engine which means that it has the ability to generate the pages by filling in the templating that we create.
A middleware folder, which have our middlewares for authentication and to check comment ownership.
This website is for customers and vendors. They both can register through registration path I made this to run on port 3000. You can change the port number if you want to. It can be changed in ".env" file. Some operations which can be performed are...
- Login as customer
- Register as customer
- Forgot password for customer
- View all services
- View all subservices
- View all vendors
- View individual vendor for more details.
- Rate vendor [In Progress]
- Comment on vendor
- View all comments by different customers
- Edit customer profile
- Login as vendor
- Register as vendor
- Forgot password for vendor
- View all services
- View all subservices
- View all vendors
- View individual vendor for more details.
- View all comments by different customers
- Edit vendor profile
- View own profile
This website is for admins. I made this to run on port 3001.You can change the port number if you want to. It can be changed in ".env" file. Some operations which can be performed are...
- View all customers
- View all vendors
- Edit/Delete customer(s)
- Edit/Delete vendor(s)
- Approve vendor(s)
- Edit/Delete comment(s)
- Forgot Passoword
- Login
- Edit Admin Profile can be performed.
Since I have made the application fully responsive, it can work on any device size. Android application which uses WebView component and some tweaks. You can use tools like ngrok (https://ngrok.com/) Just type one command for, secure URL to your localhost server through any NAT or firewall. Just use command [ngrok http 3000] and then use the URL which is generated and replace the "YOUR_HANDYMAN_URL" in MainActivity.java
Images of handyman website. Check out this folder to see different images of website.
Working video of handyman android application.