App for sharing travel experiences and getting travel tips from friends and locals
The founder of 2B LOCAL contacted Globaldev with an idea to make a social travel app for iOS that would let users find tips on where to stay, eat, and go when traveling and share their own travel experiences.
The 2B LOCAL app stands out from other travel apps like TripAdvisor because users only see recommendations from their friends, friends of friends, and locals they’ve connected with. The application doesn’t include sponsored content, meaning people who share their feedback aren’t interested in promoting a particular brand. This makes the recommendations on 2B LOCAL honest and unbiased.
We built a social travel and lifestyle app for iOS where users can find travel tips and share their own travel stories and experiences. We also created a website to tell users about the 2B LOCAL network and drive more traffic to the app.
Expertise provided to 2B LOCAL
We developed the iOS app using the Swift programming language and the Alamofire framework. We integrated Crashlytics to gain insights into the app’s performance and crashes.
We allowed users to register via Google and Facebook using Google Sign-In and Facebook Account Kit. We also used the Google Maps and Google Places SDKs to allow users to find posts based on their location. The CentrifugeiOS SDK supports in-app messaging, and the Firebase/Messaging SDK is used to notify users about new messages, tips, and followers. We used SDWebImage to load images asynchronously, meaning images are loaded only when they appear in the viewport. This minimizes data use and speeds up image loading.
To improve the usability of 2B LOCAL, we integrated universal links: standard links to a website page or content inside an application. This means that a user taps a link and goes directly to the corresponding content in the 2B LOCAL app.
We used Python 3.6 and Django 2.1 to develop the backend. We also used PostgreSQL 9.6 to store user data, ImageKit and Pillow to manage uploaded images, and AWS S3 to store media data quickly and securely. PyTest, a testing framework, helped us write tests to make sure every facet of the 2B LOCAL project works as required.
We used Redis for caching the most frequently used data, which makes loading pages much faster than if the app had to send a request to the database every time a page loads. Redis also transports messages to Celery, a queue for asynchronous tasks.
To let users find posts based on their location and autocomplete addresses, we used the Google Maps SDK. To enable tagging, we implemented Django Taggit. This tool lets users search for posts by clicking a hashtag, just like on Instagram and Pinterest. Users can also categorize content using tags. Additionally, we used Elasticsearch Server so users can search for content by keywords, tags, locations, and people near them.
We implemented Centrifugo Server for instant messaging among users and Django Push Notifications with Firebase integration for push notifications. In 2B LOCAL, users can create different types of posts using videos, images, text, and more. To support this, we used Django Polymorphic, a Django package.
Since 2B LOCAL is a social network, we needed to enable different types of connections between users: friends, friends of friends, followers, and following. In addition, we had to personalize the content users see in their feeds. To do this, we created a system that handles users’ connections and creates a unique feed for each user based on their privacy settings (public, visible to friends only, visible to friends of friends), location, and relationship status.
Another feature we implemented, with the help of Elasticsearch, is the ability to search by post title, description, tags, location, distance, keywords, and categories. However, Elasticsearch is a different service, so we had to synchronize it with the main database. We did this by building a lightweight interface with the help of Django tools.
For content creators, we added an admin panel with a user-friendly interface. This lets users create posts about local life using a WYSIWYG editor with block constructors for main text blocks, video blocks, gallery blocks, plain text blocks, rich text blocks, and question & answer blocks.
We also implemented a hidden notification system to allow each screen to instantly react to triggers without reloading data. For example, if a user likes a post in one tab, all the other open tabs that contain this post will automatically throw a like on it.
Additionally, we created dynamic Local Life pages to allow users to create Local Life story pages with different types of content and custom UI configurations.