Eatstagram is an Instagram version for food.
It is an iOS app that allows users to build a profile, users can post a picture of foods, they can like pictures and make comments. Users can put the description of that food, and put the location where they take the pictures.
https://www.youtube.com/channel/UCAxD0kRuJMBpbx8AHOrKRuQ
Walkthrough Video: https://www.youtube.com/watch?v=0I5kMJMdK4U&t
Marketing Video: https://www.youtube.com/watch?v=rsKocTXWshU
https://docs.google.com/presentation/d/1aJl6LVSOzA7fEYftJ_8V1-vg9-CFrJwdK_LFsW2BtmY/edit?usp=sharing
- Category: Food Photos Social Media
- Mobile: Website is for viewing online, mobile first experience. Utilize maps, camera and location features.
- Story: People eat foods everyday, they love it so much. This app allow users to appreciate variety of great foods and drinks and share it in pictures. This app will allows family, friends or their connections to either go to the restaurants, or make it themselves at home according to the video or the recipe.
- Market: Anyone that loves foods and want to share with families and friends will enjoy this app. Market is focusing towards millienials but not limited to restaurants, home-made chefs, and users within other ages segments too.
- Habit: Users can post througout the days for every foods that they eat and drinks. Most users nowadays are already doing this but are not posting it online. Our user interface will designed so that users will post all their photos.
- Scope: Instagram is an amazing apps to share pictures, yet there are users that took photos of the foods and not posting it. Because of that, we want to build this App, so users can share what their eat or drink. At the same time, there are lots of others apps that locate restaurants based on your geo-locations but none suggest it based on user's social circle. Our App focusing on this niche needs.
Required Must-have Stories
- [x]User can create a new account
- [x]User can login
- [x]User can post a new photo of food
- [x]User can add details and location about the food
- [x]User can view a feed of food photos (sorted by time of post)
- [x]User can like a food photo
- [x]User can add a comment to a photo. After adding, the list of comments is displayed sorted by time of comment.
- [x]User can view location and details of a food photo they select
- [x]User can view all the pictures they uploaded on their profile
Optional Nice-to-have Stories
- [X]User can search for food based on information in Details field
- [ ]User can search based on location of the post
- [ ]User can see which food is available for purchase by the $ sign next to it
- [ ]User's location is auto populated as default but can be edited by the user
- [X]User can search for directions based on location (Maps API integration)
- [X]User can upload their own profile picture
- [X]User can edit food details of food they had posted
- [ ]User can delete food picture and details posted by the user
- [ ]User can subscribe to food subscription monthly service
- [ ]User can see notifications when their photo is liked
- [ ]User can see a list of those who liked their photos
- [X]User can view other user’s profiles and see their photo feed
- [ ]User can change Settings of the app
- [ ]User can only post food pictures and their profile picture. Non-food pictures are not allowed when uploading new post. (Use machine learning for this feature)
- [X]User can collect and use Eatstagram coins
- [ ]User can purchase food subscription based on Eatstagram coins
- Login Screen
- User can login
- When user download/reopening the App, the users is prompted to log in to gain acces to their profile, if they forget their password, the users can put their email and we will send a new password. If they don't have an account, the users can go to the Signup Screen.
- Signup Screen
- User can create a new account
- Feed Screen (Home)
- User can view a feed of food photos
- User can tap a photo to view details
- User can like a photo
- User can make a comment
- Detail Screen
- User can view the detils of the food and the location
- Upload Screen
- User can post a new food photo along with location and detail
- Profile Screen
- User can view all the food pictures they have uploaded
Tab Navigation (Tab to Screen)
- Cancel => Exit the app
- Settings => For Future version
- Home => Feed Screen
- Search => Search Screen (Future version)
- Upload => Upload Screen
- Like => Adds to the number of likes for the current food photo
- Profile => Profile Screen
Flow Navigation (Screen to Screen)
- Login Screen => Feed Screen
- Signup Screen => Feed Screen
- Feed Screen => Settings Screen (Future version)
- Profile Screen => Detail Screen
- Upload Screen => Feed Screen
- Users are able to create a new account.
- Users are able to log in based on the account that has been created.
- Database Design. Designed and tested the database dataflow on Firebase and it worked.
- User is able to post a new photo and is able to upload photo to firebase database backend
- User can add details and location about the food
- User can view a feed of food photos
- User can like a food photo
- User can add a comment to a photo
- User can view details of a food photo they select
- User can view all the pictures they uploaded on their profile
- Tweeked previous features to add: sort post, sort comments, display time of post, display time of comment
- Discussed plan for presentation
- Discussed plan for video
- Fixed performance issues such as displaying messages such as loading, etc. while the app is fulfilling user request
- Discussed what optional features can be completed in time left
- Search capability added - Optional
- Location integrated with Maps API - Optional
- User can view profile of another user - Optional
- End to End testing
- Fixed performance issues
- Final updates to git repo and project board
- Marketing Video
- Walkthrough Video
- Presentation Slides
- Team Dinner
Property | Type | Description |
---|---|---|
Id | String | unique id for each post |
user | Point to User | name and image of user |
image | Url string from Storage | Image that store in Storage of Google Cloud |
numberOflikes | Integer | Number of likes of the post |
details | String | Information of the post that user wrote |
createdAt | Timestamp | Date that the post created |
comments | Array | Contains comment (string )and the author of comment |
Property | Type | Description |
---|---|---|
String | Email of the user | |
username | String | Name of the user |
image | Url string from Storage | Image that store in Storage of Google Cloud |
posts | point to posts | All posts that user posted |
- Home Feed Screen
- (Read/GET) Query all posts where user is author
- (Create/POST) Create a new like on a post
- (Delete) Delete existing like
- (Create/POST) Create a new comment on a post
- (Delete) Delete existing comment
//Home Feed Screen //Fetch the post func fetchPost() { guard let uid = Auth.auth().currentUser?.uid else {return} Firestore.firestore().collection("posts").document(uid).getDocument { (snapshot, err) in if let err = err { print("Faild to fetch swipes info for currently logged in user:", err) return } guard let data = snapshot?.data() else {return} self.posts = data as! [String: Any] } } let query = PFQuery(className:"Post") query.whereKey("author", equalTo: currentUser) query.order(byDescending: "createdAt") query.findObjectsInBackground { (posts: [PFObject]?, error: Error?) in if let error = error { print(error.localizedDescription) } else if let posts = posts { print("Successfully retrieved \(posts.count) posts.") // TODO: Do something with posts... } }
- Create Post Screen
- (Create/POST) Create a new post object
- (Read/Get) Get current location
- (Update/PUT) Post object (image) onto Firestore database
- (Update/PUT) Post object (location) onto Firestore database
- (Update/PUT) Post object (Details) onto Firestore database
//Create Post Screen func savePostToFirestore(completion: @escaping (Error?) -> ()) { let uid = Auth.auth().currentUser?.uid ?? "" let docData: [String : Any] = [ "id": id, "user": user, "imageUrl1": imageUrl, "numberOflikes": numberOflikes, "detail": detail, "createdAt": createdAt, "comments": comments Firestore.firestore().collection("users").document(uid).setData(docData) { (err) in if let err = err { completion(err) return } completion(nil) } }
- Profile Screen
- (Read/GET) Query logged in user object
- (Update/PUT) Update user profile image
- (Update/PUT) Update user profile
- (Delete) Delete existing post
- (Create/POST) Create a new post
//Profile Screen //(Read/GET) Query logged in user object func fetchCurrentUser(completion: @escaping (User?, Error?) -> ()) { guard let uid = Auth.auth().currentUser?.uid else { return } Firestore.firestore().collection("users").document(uid).getDocument { (snapshot, err) in if let err = err { completion(nil, err) return } // fetched our user here guard let dictionary = snapshot?.data() else { return } let user = User(dictionary: dictionary) completion(user, nil) } }