Hour

A social media platform to connect with family and friends

Social networking

Our clients’ request

Client's location: USA

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.

Relevance

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 DjangoPython 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 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 Amazon S3, 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.

Implemented features

Scheduling appointments

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.

SMS authentication

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.

Discover section

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

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.

Collecting statistics for admins

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.

Chatting and exchanging photo and video content

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.

Gallery

Technology Stack

Backend

Twilio

Python

Django

Celery

Redis

PostgreSQL

aiohttp

iOS

Jot

APNs

F

Firebase

S

Swift 3

Crashlytics

SDWebImage

Alamofire

O

ObjectMapper

S

Starscream

A

Amazon S3

PhoneNumberKit

S

SwiftyGif

T

TOCropViewController

See more case studies

A social media app where travelers discover new places posted by their friends

A Facebook-based platform for sharing pictures and locations of travel destinations

Mobile

Travel

Lifestyle

Social media

A tool that sniffs out popular Instagram hashtags that are likely to be searched for

A mobile application that helps Instagram users find perfect hashtags for their posts