RegistrationScreen - Original App Design Project

Overview

Original App Design Project

Spots

Table of Contents

  1. Overview
  2. Product Spec
  3. Wireframes
  4. Schema

Overview

Description

Have you ever went to a different city and don't know what's currently popular? This app will provide current popular places to visit such as hanging out with friends, eat, etc. without having to Google search. In addition, users can input if the place is busy, the deals, and what's popular to eat/hang during the day or week. Furthermore, users can locate the area(s) in a tab where it shows the map of where and how busy the place is. In addition, as popular places to eat are being listed, users can go to the restaurant's Yelp page; if there's no Yelp Page, it will say it's unavailable. Since many users might not use the app if there aren't rewards, a higher chance for more users is if they leave updates/suggestions/comments, they will receive points to get discounts.

App Evaluation

  • Category: Travel, Navigation, Food & Drink
  • Mobile: Mobile Cellphone, Desktop, iPad/Tablet
  • Story: A way for people to discover new places to eat/travel easier
  • Market: For anyone over the age of 18
  • Habit: Often such when people want to eat/travel
  • Scope: The challenging part is for restaurants offering discounts due to points

Product Spec

1. User Stories (Required and Optional)

Required Must-have Stories

  • Login Screen
  • Registration Screen
  • Creation Screen
  • Navigation Screen
  • Stream
  • Search

Optional Nice-to-have Stories

  • Reward Screen

2. Screen Archetypes

  • Login Screen
    • User can login/logout
  • Registration Screen
    • User can create a new account
  • Creation Screen
    • User can add a review
  • Navigation Screen
    • User can locate preferred area
  • Stream
    • User can like a review
    • User can view feed of locations/food
  • Search
    • User can search for a location
    • User can search for specific type of food
  • Reward Screen
    • User can sign up for rewards
    • User can view their points

3. Navigation

Tab Navigation (Tab to Screen)

  • Stream
  • Search
  • Navigation Screen

Optional:

  • Rewards

Flow Navigation (Screen to Screen)

  • Login Screen
    • If login is available, go to Stream Screen.
    • If login is unavailable, go into Registration Screen.
  • Search Screen
    • Text field where user can create a review
  • Stream Screen
    • User can view list of restaurant/places
  • Navigation Screen
    • User can view where the place is at

Wireframes

[BONUS] Digital Wireframes & Mockups

[BONUS] Interactive Prototype

Schema

[This section will be completed in Unit 9]

Models

Property Type Description
objectId String unique id for the user post (default field)
author Pointer to User image author
image File image that user posts
caption String image caption by author
restaurantLocation String location where image was taken, author fills this out
commentsCount Number number of comments that has been posted to an image
likesCount Number number of likes for the post
createdAt DateTime date when post is created (default field)
updatedAt DateTime date when post is last updated (default field)

Networking

Network Request Outline

  • Home Feed Screen
    • (Read/Get) Posts from food section
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) Create a new like on a post
APICaller.client?post(url, parameter: 
["id":tweetId], progress: nil, success: { (task: URLSessionDataTask, 
response: Any?) in success()}, failure:{ (task: URLSessionDataTask?, error: 
Error) in failure(error)})}
  • (Delete) Delete existing like
APICaller.client?post(url, parameter: 
["id":tweetId], progress: nil, success: { (task: URLSessionDataTask, 
response: Any?) in success()}, failure:{ (task: URLSessionDataTask?, error: 
Error) in failure(error)})}
  • Setting Screen
    • (Read/GET) Query logged in user object
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...
   }
}
  • Creation Screen

    • (Create/POST) Create a new post object
          query.includeKeys(["author", "comments", "comments.author"])
          query.limit = 20
          
          query.findObjectsInBackground { (posts, error) in
              if posts != nil {
                  self.posts = posts!
                  self.tableView.reloadData()
              }
              
          }
    
    • (Create/POST) Create a new comment on a post
          
          let comments = (post["comments"]as? [PFObject]) ?? []
          
          if indexPath.row == comments.count + 1 {
              showsCommentBar = true
              becomeFirstResponder()
              commentBar.inputTextView.becomeFirstResponder()
              
              selectedPost = post
    
    • (Delete) Delete existing comment
          comment["text"] = text
               comment["post"] = selectedPost
               comment["author"] = PFUser.current()!
       
               selectedPost.add(comment, forKey:  "comments")
       
               selectedPost.saveInBackground {(success, error) in
                   if success {
                       print("Comment saved")
       
                   } else {
                       print("Error saving comment")
                   }
               }
                   tableView.reloadData()
    
You might also like...
Codepath prework project (Hello World app)

Hello World App Description TODO:// A Hello World App App Walk-though TODO:// Add the URL to your animated app walk-though gif in the image tag below.

CodePath-iOS-Prework - Prework project for Intro to Mobile App Development course on CodePath
CodePath-iOS-Prework - Prework project for Intro to Mobile App Development course on CodePath

CodePath iOS Prework App Description This app has an input field, text, and seve

A Swift command line tool for generating your Xcode project
A Swift command line tool for generating your Xcode project

XcodeGen XcodeGen is a command line tool written in Swift that generates your Xcode project using your folder structure and a project spec. The projec

PlayCover is a project that allows you to sideload iOS apps on macOS( currently arm, Intel support will be tested.

PlayCover is a project that allows you to sideload iOS apps on macOS( currently arm, Intel support will be tested.

This project is a minimalistic Pomodoro timer for OS X written in Swift
This project is a minimalistic Pomodoro timer for OS X written in Swift

Minimalistic Pomodoro for OSX This project is a minimalistic Pomodoro timer for OS X written in Swift started by @bengsfort, and substantially enhance

XCode Preview template for UIkit based project.
XCode Preview template for UIkit based project.

SwiftPreview XCode Preview template for UIkit based project. Support custom file template class inherit from UIView and UIViewController. How to use?

A simple project which shows how to pull off custom view controller transitions.

Custom View Controller Transitions This project explains and shows how to make custom view controller transitions in the most simple way possible. Eac

A simple project that shows a list of local coffee shop reviews

Project This is a simple project that shows a list of local coffee shop reviews Details Please use git and commit often with meaningful commit message

swumap swift storyboard project

swumap swift storyboard project

Owner
null
Quizzler - iOS App Design Pattern(MVC) and Code Structuring

Quizzler iOS App Design Pattern(MVC) and Code Structuring What you will learn Ho

null 0 Jan 10, 2022
Compare your implementation and design, see how much they match!

DesignDetective Preview Usage You may trigger anywhere, but I personally prefer using it via Shake Gesture import DesignDetective extension UIWindow

Enes Karaosman 43 Dec 13, 2022
A repository to experiment around the use and generation of tokens for the JLL/T Design System

Basic Style Dictionary This example code is bare-bones to show you what this framework can do. If you have the style-dictionary module installed globa

null 0 Dec 7, 2021
An alternative to using the native UIAlertController, with a thoughtful design and simple implementation.

HPAlertController An alternative to using the native UIAlertController, with a thoughtful design and simple implementation. Requirements iOS 15.0 and

Hugo Pivaral 8 Nov 13, 2022
Gett's Design System code generator. Use Zeplin Styleguides as your R&D's Single Source of Truth.

Prism is a Design System code generator developed by the team at Gett ?? . Synchronizing design teams with engineering teams is a huge challenge. As t

Gett 346 Dec 31, 2022
A starter project for Sample Project in Objective C.

A starter project for Sample Project in Objective C.

Zeeshan Haider 31 Jul 31, 2021
Codepath-intro-prework - Hello World iOS App | Prework Project for CodePath Intro to Mobile App Development

Hello World iOS App App Description Prework Project for CodePath Intro to Mobile

null 0 Jan 25, 2022
Turbo-iOS base project that's entirely driven from your backend Rails app.

Turbo-iOS base project that's entirely driven from your backend Rails app.

Dale Zak 109 Dec 11, 2022
UIKit-based app project template for Swift Playgrounds 4

playgrounds-uikit-app This is a simplistic sample template for Swift Playgrounds 4 to begin with a UIKit-based app delegate & window scene instead of

Steven Troughton-Smith 39 Sep 19, 2022
Project 03 I created for "iOS & Swift - The Complete iOS App Development Bootcamp"

Dicee This is the third project I created for "iOS & Swift - The Complete iOS App Development Bootcamp" Our Goal The objective of this tutorial is to

Lukas Goodfellow 0 Dec 23, 2021