The system administrator checks every service provider’s license, profile, and portfolio as well as all common and custom services.
A marketplace where customers can find and book barbers and hairdressers for on-demand haircuts
Jeril Akasala contacted us with an idea to help hairdressers, barbers, and stylists connect with people who want their services. The main idea was to let people get on-demand haircuts or trims wherever they want: at home or in a salon. Booking would be easy and fast.
Jeril thought that the best way to get all users in one place was to build a mobile application with different roles and workflows for service providers and clients.
The application would be available for Android and iOS. There would also be a web-based admin page where the platform administrator could moderate custom services and portfolio photos and make sure that service providers have their professional licences in place.
On demand software development for home services is a large market and is predicted to grow at a compound annual growth rate (CAGR) of 49% during the period from 2017 to 2021 given that consumer behavior is largely driven through smartphones.
Convenience is valued above all in the modern world. Why not make hair styling as convenient as possible? When someone can’t come to the hair salon or simply wants to save time, a service provider can come to them. With one tap, a client can book an appointment and get a service provider from the comfort of their own home. An app like our client’s also serves as a marketing platform. Service providers have their own accounts where they can add detailed business descriptions and pictures and can create a list of services as well as promote discounts.
Barbers can create profiles, upload portfolios, and showcase common and custom services. They can also create special offers or discounts for any service and cancel or reschedule bookings.
Customers can create profiles, choose service providers, and book appointments with them at a chosen place and time. They can add ratings, leave feedback, pay for on-demand services, and cancel or reschedule bookings.
We began with a detailed discussion with our client to figure out all the details and collect data. Before starting the development, we did some analysis to pick a style and color scheme that suited the tastes and interests of the target audience.
There are two user roles in the app: service providers (stylists and barbers) and clients. Our main goal was to simplify the interactions between them within the application.
Once we had determined the set of features for the MVP, we started designing wireframes. Our goal was to make a quick and easy flow for booking appointments. We also created a flexible system of filters for selecting service providers and provided the possibility to reschedule appointments for added convenience.
Essentially, we built a mobile application with two user roles and also designed a landing page for this application.
To create a REST API, we used Python + Django + the Django REST framework. This allowed us to develop a robust API quickly.
All data is stored in PostgreSQL. To search providers by location, we used the Postgis extension.
For sending push notification to users that inform them about upcoming appointments, payments, and more, we used Celery and Redis as the broker for storing the queue of tasks.
The iOS app uses a service-oriented architecture (SOA) in combination with model-view-controller (MVC). To create a native app, we used Swift 4. To enable frictionless interactions with the backend, we applied a REST API implemented with Router abstraction, which uses Alamofire to make requests and ObjectMapper to parse JSON responses into Swift objects.
Image caching is done with the SDWebImage library. The app also offers social authentication; we used the Facebook and Google SDKs for this.
To book an on-demand appointment, a user needs to choose their location. To make it convenient for them, we also included GooglePlacePicker, which is reused in other parts of the app as well.
Thanks to the AKMaskField library, the app can automatically format data – such as phone numbers and credit card numbers – typed into text fields.
Clients can rate service providers. Ratings are presented in the form of stars with the help of HCSStarRatingView.
We used our own calendar UI with a customized FSCalendar so that service providers can see a list of appointments by date.
Service providers are offered a free trial and then need to pay to use the app. Subscriptions are handled by Apple’s auto-renewable subscriptions. Clients pay for services by credit card, which is handled using the Stripe API. This API is also used to register a service provider’s bank account to which they receive money. Push notifications are implemented usingAPNs.
The main language for the Android app is Kotlin, since it’s more capable and has features that allow us to write clearer and more structured code.
The core of the project is written according to the MVP pattern. For some modules, we used the MVVM pattern with the Google Data Binding library to simplify code logic and increase the speed of development.
To manage API calls, our team used the popular Retrofit library as it saves time.
To support subscriptions for service providers and automatic monthly charges, we used Google’s In-App Billing library. It allows us to handle subscriptions smoothly and securely.
So that clients can pay by credit card for services provided, we integrated the Stripe API.
To guarantee delivery of notifications, our team integrated Firebase Cloud Messaging for sending and receiving push notifications about the status of booked appointments. Service providers will also receive notifications to confirm approvals of offers, portfolio photos, licences, custom services, and subscription expiration dates.
We integrated Google and Facebook authentication. We used Stripe as the main payment system. For subscriptions, we chose the native Google and Apple payment solutions so that recurring charges are handled on the side of the app stores.
To send push notifications, we used Firebase for Android and APNs for iOS. To connect to these services, we used the Django push notifications library.
Users can book a service provider and have their hair done in the comfort of their own home or at a salon. Appointments scheduled in advance can be rescheduled if needed for no fee. Each service provider can add their own custom services with custom pricing. Clients can book appointments with service providers at any location.
For on-demand services, users can pay by credit card. The Stripe payment system is used for payment processing. Cancellation fees are applied only for on-demand services (as opposed to those booked in advance) and only when a service provider has already accepted a request. In this case, the cancellation fee is $3. Users also pay additional service fees for on-demand services. As for services delivered in a salon, clients don’t have to pay using the application.
Service providers can create professional profiles to showcase what they offer, posting pictures and providing detailed descriptions to interest new clients.
Service providers can create special offers at any time. Special offers can be a combination of several services, for example a deal on a wash and haircut.
Reward Points is a reward system for customers that frequently use on-demand services. Reward Points can only be earned for on-demand services, and 100 RP is equal to $1. Clients can use their RPs to save money on their next on-demand service.
To prevent fraudulent activity and inappropriate content, every custom service and portfolio photo has to be approved by an admin. For service providers who want to work on-demand, the administrator will check for the appropriate licence.
I had a great experience with the team. I started my conversation with the project manager, made the feature list, and started the development and now we are close to the end of development. The team that was assigned to my project was great, they did a great job developing the app. Communication was excellent. I got a daily update on what was going on. Most of my communication was through the project manager, and he did an excellent job managing the team and making sure we were on track and all features were built as discussed. Overall, I am very satisfied with the quality of work that I am seeing.