Skip to content

ECS189E/Memelify

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pic

Proposal:

The Memelify app is designed to bring the hottest memes to users by providing an easy to use interface that allows users to connect to a subreddit. No signup required. By analyzing images with a powerful machine learning model, Memelify selects only the coolest memes from posts. That is why that with a quick tap, as soon as Memelify is opened, the meme magic begins!

App Features:

  • Share memes and Memelify with friends.
  • Get notified about the hottest memes and the "Meme of the day"
  • Don't like white and bright apps? Switch to our amazing Dark Mode!
  • Save your favorite memes to your phone.
  • Choose between a list of trending or the latest memes.

Individual Contributions

  • Kauana:

    • Created launch screen, logo, and all memes displayed on the app. Added the 'awesome face' app icon, but did not create it. Created UI for Settings Controller. Implemented Settings Controller features: Dark Mode, Rate our App, About Us.
    • Created the UI for Tab View Controllers: Home, Trending and Favorite controllers. Also, created the UI for Memetile (stack view with a row for image plus another for buttons).
    • Created the Navigation Bar for all screens.
    • Implemented empty tableView set feature. When the user has no favorite memes, we show an image to let the user know.
    • Implemented the Reddit API calls on Home and Trending view controllers and how the API response should be displayed.
  • Will:

    • Created the MemeTile and MemeObject class and implemented the functionality of saving the favorite to the user's device
    • Added functionality to the Home/Trending/Favorites views so that they displayed the memes with the correct favorites icon and popularity score synced up across the different views instantaneously
    • Added the pull-down to refresh feature in home/trending views
    • Added the infinite scrolling to home/trending views
    • Added the invite friends to Settings View
  • Dat:

    • Handled all the backend and API service.
    • Succesfully deployed to heroku.
    • Applied Machine Learning for meme classification task.
    • Implemented Meme Sharing Feature.
    • Implemented 'Meme of The Day' Notification Service.

Things that are worth mentioning:

  • We are using Heroku's free plan to store our API. The issue with this plan is that the VMs sleep after 30 minutes of inactivity. Therefore, if the app hasn't been used in 30 minutes, the first time you open the app, it may take a bit longer to get the memes because the VMs need to resume their work. However, subsequent calls should be pretty quick.
  • Implementing the dark mode was an involved feature that used the observer pattern to know when to change colors across views
  • saving information to the device can only be done in certain ways and takes time if you want to save custom objects so that part had to be retrofitted in order to give the user the best experience without lag and buffering

App Design:

Frontend Diagram:

Backend Diagram:

3rd party libraries:

  • Reddit API
  • Alamofire
  • Survey Monkey SDK
  • DZNEmptyDataSet

Server Support:

The app uses Heroku to host the Reddit API calls and Alamofire for the networking library to make HTTP requests, wait for response and parse JSON.

App Models:

Memetile (UI components in the stack view):
  • UIImageView meme: the actual image of the meme
  • Int karma: this just keeps track of the karma number for posts
  • bool favorite: whether or not the user has marked the meme as a favorite meme
  • UIButtons: favorite (heart icon) and share (square with arrow icon)
  • UILabel: up arrow to indicate karma count.
MemeObject (Meme information parsed from Reddit API call)
  • id: post id
  • date: "created_at" date
  • title: post title
  • likes: post likes
  • image: post image
Dark Mode (controls how the app's appearance if DarkMode is enabled or not):
  • navigationController: UINavigationController allows navigation modifications for DarkMode
  • tabBarController: UITabBarController allows tabBar modifications for DarkMode
MLabel:
  • Used to implement the Dark Model feature. It allows app to know what to do with labels when Dark Mode is enabled or not.

Listing of all View Controllers:

  1. Home (Latest): Shows a list of memes that have the most karma on Reddit during the week.
  2. Trending: Shows the latest memes that were posted.
  3. Favorites: Shows the user's favorite memes (user default).
  4. Settings: Allows the user to change Display, Notifications, and General settings.
  5. About Us: Contains some information about Memelify. Accessed through the Settings controller.

User Feedback:

Users have the option of rating Memelify by going to Settings and clicking on "Rate our App". Another view controller will show up containing a Survey Monkey survey that asks users general questions about their experience and feedback. Once the user clicks on "done" the information is sent to our API where we can examine the results gathered.

Our Team:

pic

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages