Project Screenshot

Hour

A social media network to stay connected with family and friends at all times

  • Idea

    Alwin Firmansyah, Adryan Firmansyah, and Michael Lazris, the co-founders of HOUR, asked us to develop a social platform to help family and friends connect remotely. They saw how busyness steals those precious moments that people want to share with those they care about. Our clients already had a design. What they needed was an iOS app that could seamlessly share photo and video content and supported real-time chat. The co-founders chose the name HOUR for the app as it was symbolic. HOUR would let users schedule weekly one-hour chats with family members and friends.

  • Analysis

    In today’s increasingly busy and mobile world, we need to find time for social interactions. People want to connect with family and friends on a regular basis, yet it’s hard for them to organize their time. Some people live far away from each other while others get busy with their daily routines and forget to call or send a simple text: “Hi! How are you doing today?”

     

    HOUR, a dedicated social networking platform, allows users to schedule calls (creating commitments) and exchange different things through videos and pictures as well as chats. The app helps users connect with their loved ones.

Results

Duration:
November 2017 – January 2018
Team:
Backend - 1 iOS - 1 QA - 1 PM - 1
Developed the backend

We used the Django Python web framework for the Hour social networking development and the Django REST framework to create a REST API for the mobile application. The WebSocket protocol supports real-time chat and is based on an asynchronous AIOHTTP server that allows many users to access the service simultaneously. 

Celery with Redis guarantees the completion of tasks such as updating chat statuses and delivering notifications.We chose Twilio for SMS used for authenticating, confirming profile deletion, and notifications. For authentication, users receive an SMS with a code.

We settled on Amazon S3 for storing media files. AWS Lambda functions are used for making image thumbnails during upload.We used 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.

The Django push notifications library implements push notifications. 

We chose Aiohttp and aioredis to build real-time chat based on WebSockets. Swagger generates API documentation for the Django REST Framework.

Developed the iOS app

The iOS app is written in Swift 4 with an MVC service-oriented architecture (SOA), which offers fast development time and reusable code. To be able to work with the REST API, we used our own wrapper for the Alamofire library that describes all requests as enum cases to ensure structured code. We applied ObjectMapper to parse the backend response into Swift objects and implemented image caching with SDWebImage.

One of the main features of HOURS is displaying animated profile loops of users. To enable this feature, we record a video with the camera, crop frames, and convert them to an animated GIF file using a Regift library that we modified. The animated GIFs are displayed in our custom extended UIImageView using the SwiftyGif library. To record profile loops and videos and to take photos, we created a custom camera inspired by Instagram using the AVFoundation framework. Users can edit photos thanks to the TOCropViewController, jot, and Sharaku libraries.

Realtime chat works through WebSockets, which are implemented through the Starscream library that supports plain messages, photos, and videos. Push notifications are provided by APNs.

Integrations

Images and videos are stored in AmazonS3, so we included the Amazon iOS SDK in the project to optimize data uploading. The app has AdMob interstitials and Google analytics provided by the Firebase iOS SDK.

Firebase Cloud Messaging is used to deliver push notifications.

The AWS SDK for Python, boto3, is used to communicate with Amazon S3.

Our developer used the Twilio Python Helper Library to enable interactions with the Twilio API from our web application.

Implemented features

Users can reserve an hour for each friend every week, and they will be reminded about upcoming appointments by a push notification. If scheduled hours overlap, users can cancel or reschedule for a different time. Once a request is sent, users need to confirm it.

To authenticate, users are sent a code by SMS since they can reserve an hour with close people whose phone numbers they have in their phonebook. Therefore, a phone number is the only way to authenticate users.

Users can view images, links to images, and video in the Discover section.

Push notifications notify users about new messages, incoming chats, and presents they’ve received.

The admin has full access to all objects like users, chats, events, messages, and so on. The admin can ban or unban users, read messages written in the contact form in the app, and add information that will be displayed in the Discover section. The admin can communicate with multiple users.

The admin can see statics about users such as a number of users with at least 1 scheduled hour as well as average numbers of scheduled hours per users, items sent per user, messages sent per user, and accounts created during the last 7 days. The admin can also see a total number of scheduled new hours during the last seven days.

In anticipation of a scheduled hour, users can capture shots and collect videos (so-called presents) throughout the week for their friends to see while talking. Users can open their presents sent from friends and talk in real-time for 60 minutes. When the hour comes to an end, all messages disappear but the presents remain.

Technology Stack

Python icon
Python
Swift icon
Swift
Django icon
Django
Twilio icon
Twilio