Online platform that connects people looking for cleaning services, with independent cleaners
The story behind the app
The idea for myHelper came from our Client the Founder who kept seeing Facebook posts among different groups of people looking for cleaning services. They did some research and found that there wasn’t an easy way to book cleaning services. So we worked together to develop an online cleaner service application for smartphones.
We strongly believe the demand for online home services is going to increase over the years. Millennials are not willing to spend their weekends cleaning, so outsourcing home chores is becoming increasingly popular. With increased spending capacity, it will no longer be a luxury but a necessity.
Technology coupled with convenience is going to be the key growth driver. People don’t want to call around and ask for prices any more, but rather have access to the services they need here and now using their smartphone.
Helpers can manage, and view past bookings and earnings in the My Orders section. The My Earnings section allows them to check their accumulated earnings since the last payout. They can also download invoices in pdf format for each booking and payment statement (excel) for any given month.
Helpers can indicate their availability using a calendar. Selected time slots are taken into account when generating search results for customers.
The particular helper’s working areas are displayed on the map. Users will find it helpful to be able to determine the distance helpers are willing to travel to work.
Helpers can instantly check their reviews from customers. Aggregated reviews are presented in the Summary on the right side bar.
My Orders is the home page for logged in users. This is considered to be the main page where users can respond to their upcoming orders and view past bookings. We’ve built a chat functionality that is linked to a unique order so that users can exchange messages within the platform.
The new bookings section allows customers to conduct a search based on their selected date, time, and address. They are also required to indicate the area of the property in square meters, while the algorithm suggests the number of hours for cleaning such a space. The summary column displays an estimate of the service.
Customers create their own address directory. To streamline the booking experience, the address directory stores these predefined addresses with their attributes whenever the user makes bookings, so there is no need to repeatedly enter the same address and related information.
In the payments section, a user can add credit/debit cards that they can use to pay for services. New cards can be added and removed at the final step of making an order.
The admin panel is one of the central elements of the app: it’s where helpers’ profiles and customers’ profiles are managed.
Admin is able to activate helpers’ profiles after their training, as well as re-assign orders, generate promo codes, add language translations - and much more. One of the key parts of the dashboard is ”Payouts” - this is where admin can manage helpers’ earnings:initiate payouts, track processed payments, and generate invoices.
Here are some of the most remarkable features of MyHelper.
This is considered to be the core functionality of the platform that acts as a matchmaker between cleaners and customers.
The search algorithm takes into account the helper’s schedule entries, and work areas indicated (i.e. helper’s area section).
The complication in search functionality was to additionally apply a 1.5 hour “buffer” to each booking’s start and end time to allow helpers enough time to travel from one place to the next.
Client was open to hearing our suggestions regarding payment provider options. We collected requirements and did our research to determine the provider that could be the best fit for our business needs.
One of our key requirements was to be able to reserve the funds instead of charging the customer immediately. We concluded that Cardinity
would be the best choice to fulfill such a requirement.
For our client, one of the key requirements was to allow customers to make bookings well in advance without imposing any time restrictions. However, Cardinity had a restriction that would not allow us to make money reservations for orders that are more than 14 days from the booking date.
To solve this problem, we created a mechanism that checks all created orders regularly to detect that the ones that have been created <48h ago are in the “Approved” status, and contain at least one unreserved payment.
Again, to enable client to handle cases where users need to extend their bookings, we introduced a booking extension function. If you book a helper and decide that you want to extend the booking time, you can easily do so through the application. Since, technically, this would be treated as a second order, we modified the system to enable double payments connecting them to the same order.
Helper can accept or decline an order. Unresponded orders automatically expire after 48 hours. We’ve also implemented a 3 level cancellation policy depending on the notice period.
-No charge if a customer decides to cancel the order more than 24 hours prior to the booking start time.
-Cancellation fee of 10 euros if cancellation is 24 hours to 2 hours prior to the booking start time.
-Full charge to customer when if cancellation is less than 2 hours prior to booking start time.
To fulfill client needs, we needed to think of a solution, when only approved orders would have their clients’ funds reserved. With the schema provided below - it is now possible to charge clients either on cancellation of an order or once the order is finalized. In addition, the mechanism of automatic funds reservation also provided the ability to reserve funds for multiple payments.
Our client had an initial version of a prototype and a predefined color palette as well as design guidelines which facilitated our design work
After several iterations, we got close enough to the client’s vision:
For frontend development, we picked React.js, a modern framework that allowed us to achieve a great user experience and optimize our development efforts. Our client preferred a clear user-friendly design because their target audience would be users of different age groups, for whom ease of navigation is crucial.
Typescript using type annotations, type definitions we were able to add multiple developers on separate parts of application. Also typescript allowed to do quick and bugless refactoring when backend API changed due to new requirements.
Testing: Jest, Enzyme
Language & framework: Python Django - The backend was created using Python 3 with the Django 2. The Django itself is one of the most popular frameworks of Python, which offers not only many prepared functions and models (such as User, Permissions), but a very powerful ORM as well as a prepared admin configuration dashboard. Python itself is a very flexible and widely used open source programming language with a large community and a huge open source library selection. It must be noted that Python was selected because it is currently one of the fastest growing programming languages, according to the Economist. Also, the MyHelper backend source code is PEP8 and PyLint compliant, which not only enhances the readability of the code, but will not create any issues for future development.
In-memory storage: Redis
Background processing: Celery
SMS Messaging Provider: Twillio
Authentication providers: Facebook, Google
Payment Service Provider: Cardinity
Deployment Tools: Jenkins
Integrating third-party solutions
Other third-party services we integrated with the app include Twilio (for text messages), and Sentry (for error tracking).
When it comes to the reliability of the MyHelper system, the first thing which must be noted is the number of system functions and code lines covered by the unit tests: Packages 97%, Files 91%, Classes 91%, Lines 92%, Conditionals 100%., This really gave us the flexibility to safely add new functionalities to the existing system as well as additional resources whenever they were required.
In addition to all the above-mentioned tests, penetration testing was performed with the help of NMAP and PentestTools. The results were very good, with no major issues encountered.