A heatmap that shows live attendance at bars, nightclubs, restaurants, and karaoke
Our French client Yannig le Bars, CEO and founder of NightApp, asked us to build an app that would function as a map and show nightlife in Kyiv and Paris. Yanning spent four years living in Kyiv, where the idea for a heatmap was born. The heatmap would show the attendance at local bars, nightclubs, karaoke venues, and restaurants. But this one idea grew into something bigger than Yannig had expected when we started. NightApp would also add more cities in France plus registration and user profiles, becoming an ongoing collaboration between Yannig and our development team.
People love travelling and entertainment, especially in historical cities like Kyiv and Paris. These cities really come to life after 7 pm. It’s worth living or visiting them as they excellently blend history and modern life. Many visitors and locals enjoy eating out in atmospheric hot spots while their stay at a place like Kyiv or Paris.
European consumer spending on eating out amounted to $881 billion in 2016. In the coming years (2017-26), it’s expected to grow by 4.9% . First-time visitors to a city and even locals want to visit a variety of places. But what’s the point of going to a place when it’s empty? When visitors come and there’s no one there, they have to look for a different place to hang out. If only there were a live heatmap that showed the most attended events at bars and restaurants!
To save people’s time searching for hot spots to go, an app can be handy. With one tap, NightApp lets users view a live heatmap that shows the crowd at a spot they want to visit. Users can then quickly change their plans if they see the place is nearly empty and choose a different bar, for instance.
Our client presented basic wireframes that helped us understand the core mission of the project, which was to help people find the coolest spots to hang out. Our main goal was to create a convenient, simple, and modern app that would serve as a heatmap.
We started off building the MVP and decided on basic features and other features that could be added later in the following phases.
Then we also created the design for the post-MVP version to understand how the app could grow without significant changes. Our designer built the main screens for the MVP and designed the GUI kit for our developers.
The design of the heatmap was the core concern during the development. We did research and together with our client chose the color and size of the elements that show the attendance at places on the map. The first thing that users see when they press the pin is the preview details. If they are interested to explore further, users can read the description of the spot and see the average crowd size every hour and day of the week.
Filters also play a key role in the app, helping users scan types of spots quickly and find a place they like twice as fast. The map screen also features a time loop that allows users to track business depending on the time of day.
We built the project with the Django Python web framework. The Django REST framework powers the REST API for the mobile application.
Our team used Python Client for Google Maps Services to work with the Google Place API and populate information about places.
Celery with Redis guarantees the completion of pending tasks like updating information about places.
We settled on Amazon S3 for storing media files. AWS Lambda functions were used for making image thumbnails during upload. We used Boto3 to work with Amazon Web Services.
We chose PostgreSQL for data storage and stored the database in Amazon RDS, which ensures a secure environment and flexibility as far as the service load is concerned.
We used Django REST Swagger to provide documentation for the REST API.
Our iOS developer used Swift for the NightApp as it’s fast, safe, modern, and simple. With Swift, we built a native app with a frictionless user experience.
We made use of the MVC (Model-View-Controller) architecture to make code flexible and extendable. New features and improvements are planned for the future.
For image caching, we used SDWebImage library due to its high performance and ease of implementation. To show locations, we used Google Maps for its simplicity. This easily customizable tool allowed us to implement the map and custom pins.
We built the Android app using the MVP design pattern, which allowed us to split the business logic from the UI perfectly. To write the app, we chose Kotlin. Kotlin helped us reduce the amount of code compared to Java, and we were able to get the same result in less time.
We used the RxKotlin framework built on the basis of the Paternal Observer pattern. RxKotlin gave us the possibility to subscribe to events and work more conveniently with the background streams that are most actively used when requesting a server with the help of the Retrofit framework. To implement all of our client’s ideas, we chose Google Maps because they allowed us to customize the marker that helps users see how busy a certain place is.
As the app features photos of different places, we used the Glide library to cache photos.
The Dexter libraries were excellent for permission queries and added more convenience. With Dexter, it's easy to ask users for permission to record data to the phone's memory or access the camera or geolocation features.
For the first release, we built an MVP that featured a heatmap of nightlife in Kyiv. In the second release, we added some French cities and dynamic filters. At present, we’re working on the third phase, namely making the app multilingual (translating it into Russian, French, and Ukrainian), creating user profiles, and adding registration. We’re also building NightApp for the Android platform.
When users tap the app, a live heatmap pops up of the city they’re in. It displays icons with all local bars, nightclubs, restaurants, and karaoke venues.
Users can go to the menu bar and choose any city that’s supported by the app. When a user taps the filters button, they see only those types of places that exist in the given location.
Users can tap a spot and view its busy times, ratings, pictures, and directions with a link to the official website. Users can also call directly to find out more details.
The administrator can add new locations and content through a customized admin panel. The information and photos about places are taken from Google Places API. The admin can upload custom pictures too.
User accounts make it possible to tailor the app to each user without linking the configuration to a specific device. All user account settings are stored on NightApp's server. This means that users can log into their account on any device and find their favorite places instantly. Users can create profiles via Facebook or manually create profiles directly in the app.
The app allows users to search for available places in a certain location. Search happens as soon as a user inserts text. When a user chooses a place from the search results, it appears on the map. The user can then see details or go back to the search results.
There are several ways to share the content or the app itself. All links can be shared through other messengers. If a recipient doesn’t have the app, they’ll be redirected to the Google Play Store or the App store. If they do, the app will simply open. Also, users can open a map and click a place to share it with someone. The menu will suggest sharing this link with the information about a place through messengers with or without the map screenshot.
Users can provide personal information along with a photo and can skip certain fields since they are not required. They can also select their preferences for music and food so they receive more relevant notifications.
Users can switch between languages (Russian, Ukrainian, and French). They can indicate the city they live in and choose a city the app supports to see all places on the map.
If users see that the information in the app isn’t truthful to their experience of the place, they can report to the admin the new information about the place they are visiting, sending new data through the app. The admin can edit the information according to what users have sent.
The website has been completed and is being circulated to solicit feedback and potential partners. Steelkiwi worked quickly, making significant progress driven by their personnel decisions. Although their work sometimes required multiple iterations, their final deliverables were high-quality.