GithubHelp home page GithubHelp logo

cs490-mentormate / mentormate Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 2.0 17.35 MB

an ios app that allows students to match with mentors/tutors around their area to help gain the best assistance in classes

Objective-C 86.02% Swift 13.98%

mentormate's Introduction

MentorMate

Table of Contents

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

Overview

Description

MentorMate is an iOS app that allows students to find and match with mentors/tutors around their area to help gain the best assistance in classes

App Evaluation

  • Category: Educational

  • Mobile: This app will be made for a mobile platform particularly for iOS. Extension into a Web App could be a potential future plan.

  • Story: Matches students with relevant tutors of the courses they want to be tutored in. The app also provides a chat interface for students to chat with their matched tutors regarding classes.

  • Market: Only for tutors and students.

  • Habit: This app could be used to find tutors for classes. The chatting interface on the app proves to be a better alternative than sharing personal contact information. This would enable both students and tutors to use the app often for communication purposes.

  • Scope: Students will be able to view tutor cards on their dashboard. A potential match or a right swipe would mean that the tutor is skilled at a course that the student needs help in. Per say, the app segregates users into two groups namely students and tutors.

Product Spec

1.User Stories (Required and Optional)

Required Must-have Stories

  • User can Sign Up
  • User can login
  • User can choose to be a tutor or student.
  • User can upload pictures.
  • User can logout
  • User can like (swipe right) or dislike (swipe left) a description of the mentor/student
  • User can view a feed of different students/mentors
  • User can chat with the mentor/student if matched

Optional Nice-to-have Stories

  • User can edit, view their profile/description
  • User can view other users' profiles
  • User can Video chat with a matched user

2. Screen Archetypes

  • Login Screen
    • User can login
  • Registration Screen
    • User can create a new account
    • Must make an account using a college email
  • Stream Screen
    • User can view a feed of students if a mentor
    • User can view a feed of mentors if a student
    • User can swipe left to "dislike" another user
    • User can swipe right to "like" another user
    • User can chat with another user if matched
  • Creation/Edit Profile
    • User who is a student can add a description of what they would like to learn, what they are willing to pay, and any preferences that they would like of their mentor like availability, gender, etc.
    • User who is a student can add courses they want tutoring in
    • User who is a student can edit their profile
    • User who is a mentor can add a desired wage, availability, a personal description of their skills and knowledgeable subject areas, and any preferences that they would like of their student like availability, gender, etc.
    • User who is a mentor can add courses they are willing to be a tutor for
  • Settings
    • User can edit their profile information.
  • Profile
    • User can view their profile
    • User can view another user's profile if matched

3. Navigation

Tab Navigation (Tab to Screen)

  • Profile
  • Home Feed
  • Matches
  • Chat Messenger

Flow Navigation (Screen to Screen)

  • Login Screen
    • => Stream Screen
    • => Registration
  • Registration Screen
    • => Login Screen
  • Stream Screen
    • => Creation/Edit Profile
    • => Settings
    • => Profile
    • => Login
  • Creation/Edit Profile
    • => Stream Screen
    • => Profile
  • Settings
    • => Stream Screen
    • => Profile
  • Profile
    • => Settings
    • => Stream Screen
    • => Login

Wireframe

An image containing our wireframe

Schema

Models

User

Property Type Description
objectId String unique username for the user
image URL image that user posts
description String information about the user (courses, wage, etc.)
matches List list of unique users the user matched with
messages List <List< Message >> chat messages user has with others
isStudent Boolean true if user is a student, false if user is a tutor
settings String settings/preferences for each user

Message

Property Type Description
text String Text in the message
Sender String userId

Networking

List of network requests by screen

  • Home Screen (Swiping screen)
    • (Read/GET) Query tutors to swipe left or right on
         let query = PFQuery(className:"Users")
         query.whereKey("isStudent", equalTo: false)
         query.order(byDescending: "createdAt")
         query.findObjectsInBackground { (users: [PFObject]?, error: Error?) in
            if let error = error { 
               print(error.localizedDescription)
            } else if let users = users {
               print("Successfully retrieved \(users.count) users.")
           // TODO: Do something with users...
            }
         }
         ```
  • Matches/Chat Screen
    • (Read/GET) Query all users that the current user has matched with (their matches property)
         let query = PFQuery(className:"Users")
         query.whereKey("matches.objectId", equalTo: users.objectId)
         query.order(byDescending: "createdAt")
         query.findObjectsInBackground { (users: [PFObject]?, error: Error?) in
            if let error = error { 
               print(error.localizedDescription)
            } else if let users = users {
               print("Successfully retrieved \(users.count) users.")
           // TODO: Do something with retrieved users (they are users that matched with current user)...
            }
         }
         ```
  • Profile Screen
    • (Read/GET) Query logged in user information
         let query = PFQuery(className:"Users")
         query.whereKey("objectId", equalTo: userEnteredName)
         query.findObjectsInBackground { (username: [PFObject]?, error: Error?) in
            if let error = error { 
               print(error.localizedDescription)
            } else if let username = username {
           // TODO: Display all user information on profile screen...
            }
         }
    • (Update/PUT) Update/change info in Profile
    let query = PFQuery(className:"User")
    query.getObjectInBackground(withId: "user") { (description: PFObject?, error: Error?) in
        if let error = error {
            print(error.localizedDescription)
        } else if let description = description {
            user["description"] = "stuff" //user enters new description
            user.saveInBackground()
        }
    }
  • Settings Screen
    • (Read/GET) View current settings which includes location, distance, age and gender preferences
         let query = PFQuery(className:"Users")
         query.whereKey("objectId", equalTo: userEnteredName)
         query.findObjectsInBackground { (username: [PFObject]?, error: Error?) in
            if let error = error { 
               print(error.localizedDescription)
            } else if let username = username {
           // TODO: Display all user settings on settings screen...
            }
         }
    • (Update/PUT) Update settings with new preferences
    let query = PFQuery(className:"User")
    query.getObjectInBackground(withId: "user") { (settings: PFObject?, error: Error?) in
       if let error = error {
           print(error.localizedDescription)
       } else if let description = description {
           user["settings"] = "new settings" //new user settings
           user.saveInBackground()
       }
    }
  • Login Screen
    • (Read/GET) Get user's credentials from database and match passwords
         let query = PFQuery(className:"Users")
         query.whereKey("objectId", equalTo: userEnteredName)
         query.findObjectsInBackground { (password: [PFObject]?, error: Error?) in
            if let error = error { 
               print(error.localizedDescription)
            } else if let userEnteredPassword = password {
               print("Successful login")
           // TODO: Redirect user home screen for succcessful login
            }
         }
         ```
  • Registration Screen
    • (Create/POST) Create a new user
      let newUser = PFObject(className:"User")
      newUser["objectId"] = "username" //valid username that user chooses
      newUser["image"] = "url" //some image url user chooses
      newUser["description"] = "bio"
      newUser["matches"] = null
      newUser["messages"] = null
      newUser["isStudent"] = true //if user is a student, false otherwise
      newUser.saveInBackground { (succeeded, error)  in
         if (succeeded) {
             // The object has been saved.
         } else {
             // There was a problem, check error.description
         }
      }
    • (Read/GET) Get data of other users to check if the username already exists
        let query = PFQuery(className:"Users")
        query.whereKey("objectId", equalTo: userEnteredName)
        query.findObjectsInBackground { (username: [PFObject]?, error: Error?) in
           if let error = error { 
              print(error.localizedDescription)
           } else if let username = username {
              print("Username already exists! Please choose another name.")
          // TODO: Redirect user to type in a valid username...
           }
        }

Video Walkthroughs

Login

Video Walkthrough

Signup

Video Walkthrough

Sprint 2

Video Walkthrough

Sprint 3 - Swiping, Obtaining and Seeing Matches, Messaging (you may need to click gif to play the gif)

MentorMate3.gif

mentormate's People

Contributors

santos50 avatar meghnakr avatar yaminiponugoti avatar dharsiddharth7 avatar

Watchers

James Cloos avatar

Forkers

meghnakr santos50

mentormate's Issues

Setup Swiping Gesture

  • Allow user to be able to swipe left or right on profile icons.
  • If user swipes left, disregard profile.
  • If user swipes right, then figure out if there is a match.
  • Test functionality.

Set Up Chat Platform

  • Layout
  • Table view of chat boxes
  • Boxes are different colors depending on whether the user is the sender or the receiver of the message
  • Most recent message at the bottom
  • Typing area at the bottom
  • Send button at the bottom right
  • Message is sent when user presses the send button
  • Store whatever text a user sends into Parse
  • Get all the messages from Parse every time there is an update
  • Update screen with new messages

Configure Parse Server

Reference Configure Parse Server Guide - iOS

  • Configure to AWS

  • Test deployment

  • Setup local Parse Dashboard

  • Add Parse Client to Project

Create an edit/view profile page with UI

  • Create new storyboard page with proper UI to view user profile image and description
  • Create buttons to edit user profile image and description
  • Test functionality

Update Database Based on Swipe Right Functionality

  • If both users have swiped right on each other, update database that this is a match.
  • If user A has swiped left right, but user A has not yet, update database for this condition.
  • If user A has swiped left on user B, then update database accordingly to avoid a match and having user A see user B's profile repeatedly.

User can view other users' profiles

  • Create View other Profile Screen

  • Layout screen

  • Input field for description of mentor/student

  • Image view to hold post image preview of mentor/student

  • Buttons to move back to the Chat Messenger Screen

  • If the user is a student, the user can view other mentor's profile for their details even after matching with them

  • If the user is a mentor, the user can view other student's profile for their details even after matching with them

  • Return to any of the screens based on the user clicking a tab bar button

Set up a Video Chat Platform

  • User can press a button on the other user's chat page to video call them
  • Uses WiFi and phone numbers
  • Rings ten times before declaring call not answered
  • Shows live video (with live audio) of other user, with a small box in the corner showing the user themselves
  • Buttons on calling screen:
  • Red button to cut the call
  • Buttons on ringing screen:
  • Green button to answer
  • Red button to decline
  • Buttons on video call screen
  • Red button to cut call
  • Camera flip button
  • Mute button (optional)
  • Turn off video button (optional)
  • If the call was answered, it puts a message about that in the chat window. The user who made the call has the icon indicating he/she made the call, while the user who received the call has the icon indicating that he/she received the call
  • If the call was not answered, both users get a missed call message in their chat window

User can view a feed of different students/mentors

  • Create Stream Screen

  • Layout screen

  • Input field for adding description of mentor/student

  • image view to hold mentor/student image preview

  • If student, user views a feed of different mentors

  • If mentor, user views a feed of different students

  • Return to other screens based on button clicked in tab bar

Sign Up and Login

  • User can create a new account or sign up.
  • User can login once he/she signs up.

Deleting Matches

  • Option to delete a match can be found on the match list or on that particular user's profile page
  • Once the match is deleted, the match is removed from the match list in Parse
  • A message is sent on the chat platform telling the user who was just unmatched that they have just been unmatched.

Set up UI for Swiping Page

  • Have user profile (image and description) appear, one at a time from Parse
  • When user swipes left or right, next profile appears until no more profiles left
  • Test UI is appearing correctly

Logout

  • User can logout
  • If user does not log out then the next time they open the app, it will still be logged in

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.