Skip to content

TwoGeeks/TwoGeeks

Repository files navigation

Orbital 2020 Artemis

twoGeeks is a mobile application to allow students to find study partners to make more friends, knowledge and experiences as well as to provide an avenue for them to ask for help in subjects they are weak at.

Download apk file here

Build using Flutter Firebase
Build status: Build Status Coverage Status

Motivation

In Singapore, many students do not have a partner to study with especially if they are freshmen. There are a lot of proven benefits of studying with someone especially if you need help clarifying concepts and doing homework. Students may also want to expand their social circle and to make more friends who study the same subjects or modules as them. Furthermore, we are also committed to help students with their schoolwork without having to spend an absurd amount of money on tuition. We want to help students seek the help they need from other students who are better in concepts. As such, we are motivated to create a mobile app that connects students, forge new relationships and make studying much easier.

User Stories

As a student,

  1. I want to create a profile about myself so that others can find me easily and match with me.
  2. I want to look at profiles of other students, swipe left to view a new student and swipe right to send a friend request to the student so that I can connect with them.
  3. I want to be able to filter students by age, gender, education level so that I can view selections that best match my preferences.
  4. I want to accept or reject friend requests sent by other students.
  5. I want to be able to chat with my fellow students so that I can plan when to study together after accepting a friend request.
  6. I want to be able to see all my chats with other students so that I can resume chatting with them.

As a tutor (another student),

  1. I want to inform other students in the area of studies that I am proficient in.
  2. I want to be able to accept friend requests from other students.
  3. I want to show a list of chats with students I have been helping.

Design of system

Using Adobe XD, we have come up we a mockup of our mobile application.

Authentication pages

Sign up pages

In-app screens pages

Chat page and FriendRequest notification

Tutor UI pages


For our database, we have come up with a initial schema. backend schema


Overall app design

app design

Development Plan

Date Objective
11 May - 24 May 2019
  1. Set up firebase
  2. Do up user interface for all screen
  3. Set up firebase authentication, enable sign up and login
  4. Do up poster and video
25 May - 7 June 2019
  1. Set up firestore and schema
  2. Connect frontend screens with backend database
  3. Prepare for milestone 1
8 June - 21 June 2019
  1. Write tests for flutter widgets
22 June - 5 July 2019
  1. Do up user interface for tutors screens
  2. Set up backend schema for tutors
  3. Prepare for milestone 2
6 July - 19 July 2019
  1. Write test for tutor screen widgets
  2. Refine search algorthim
  3. Explore using collaborative filtering
19 July - 27 July 2019
  1. Prepare for milestone 3
  2. Prepare application for production build

Features development

Milestone Features
1
  1. Authentication
  2. Setting up front end pages with no backendlogic
  3. Accepting and rejecting friend requests
2
  1. Chat functionality
  2. Sending friend requests
  3. Adding profile picture
  4. Editing own profile
  5. List current chats
  6. Profile Matching
3
  1. Tutor Search Function
  2. Edit tutor profile page
  3. Send, receive and accept tutor requests
  4. Take profile picture using camera with cropping
  5. Edit user preference
  6. Delete user chat messages

Software engineering design practices

  • Using Github for version control and merging of conflicts

    • Creating separate branches for both of us to work on before doing a pull request to merge it to master branch using the feature branch flow method
    • branch
  • Scrum meetings

    • We have a scrum meeting every Sunday night to discuss what we have done for the week and what features we will be doing for the next week
    • We also ensure that the merge conflicts are resolved before moving on to the next sprint
  • Ensure all test are passed before merging to master branch / (Continuous Integration/ Continuous Development)

    • We used travis CI such that every time there is a pull request, the unit testing will be auto ran on the new branch's code
    • If all tests are passed then we will merge branch to master branch
    • travisCI
    • travisCI2
  • Adopt DRY Principle

    • We have a folder for common widgets that are used by several pages or components to ensure that we do not duplicate codes
    • DRY
  • Abstraction

    • We abstracted out the logic for routing so that configuring routing will only be in one file
    • Easier for us to make changes to routing if needed
    • routing
  • Defensive programming

    • Check inputs are well validated before submission
    • validate
  • Ensure harder to understand codes are well commented

  • Solid Principles

    • Single Responsibility Principle
      • We ensured that most of our classes only have one responsibility so that it will be easier to make changes to them
      • s1
      • s2
    • Open-Closed Principle
      • We implemented from our auth_base to ensure that current methods cannot be modified but additional methods can be added to them if needed
      • openclose
  • Separation of Concerns Principle

    • We separated the codes between the different pages
    • The code does not overlap and cause problems when someone changes a code in a page
    • pages
  • Write test to ensure code is working

Testing Methods

Unit Testing

  • Testing individual widgets with Flutter in-built tester
  • Loaded widgets to tester to check if the required elements are present (E.g texts, pictures, buttons)
  • Check if logic in functions are working

Stubs

  • Used Mockito package to mock authentication
  • Preconfigure mock class to return a particular user
  • Used cloud_firestore_mocks package to mock firestore
  • Preconfigued data for the mock firestore

Integration Testing

  • Using combination of unit test to test each main pages
  • Mock presses on buttons to test navigation to other pages

Testing Automation and Coverage

  • Set up automatic testing using TravisCI on pull request
  • Calculate test coverage score using TravisCI

System Testing

  • Ensure the features created is working as per expected
  • Ensure there is input validation and error handling in places such as
    • login
    • signup
    • edit profile
    • chat messaging input
  • Ensure inputs cannot exceed a certain length
  • Ensure buttons are not obscured
  • Ensure app is easy to use and understand

User Testing

We have asked some of our friends to try our app and followed up with a simple survey

Here are the results:

Name How good is the UI design? Are the buttons for functions obvious? Was there any bugs that you discovered while using this app?
Shaun 4 Yes Details page which have missing info have empty boxes
Jonathan 5 Yes When I upload my own image, the image covers the entire page awkwardly. The profile picture in the chatroom are not my pictures.
Wei Zhi 4 Yes Sometimes the page shows blank when loading. Maybe it need to have a loader?
Timothy 5 Yes

In general, the feedback for the UI design and button functions are well received. Some of them mentioned serveral bugs that makes the app feels clunky, such as the aspect ratio of the images and the lack of a progress indicator when loading a page. We have taken that into consideration and made those bug fixes/improvements.

Bugs squashed

  • Aspect ratio of images when user uploads different sized images
  • Lack of progress indicators when page is still loading
  • Some of the images are still showing default placeholder images
  • Unable to add user as friend

Problems Encountered

  • Since Android phones comes in difference sizes, we are expecting some phones to have bad UI issues.
  • Since firebase and firestore are deeply intertwined in our app, it was hard to set up testing as most of the time it would break. One way we resolved this issue was to mock both dependencies
  • The code was rather cluttered and not very reusable so to solve this issue, we had to spend time refactoring our code and making our code more resuable.
  • When we tested the app with several people, many people find it hard to know what to do in the matching page, as such we decided to replace it with buttoned text to let users know what each button does

Other Similar Applications

Reddit r/FindStudyBuddies

r/FindStudyBuddies

  • Limitations
    • Hard to filter and search based on preferences as reddit can only sort via latest or most popular or search via description

MoocLab

mooclab

  • Limitations
    • This platform is designed for students to meet up online and share their progress on MOOC courses. It doest really support looking at finding physical interactions and studying

Design of Final product

Here is a view of our latest design for the application. We decided to have a more consistant color palette, have images and animations to make it more appealing for users.

Authentication pages

In-app screens pages

Chat page and FriendRequest notification


By Dev++
Andre Wong Zhi Hua
Peh Jun Siang

About

mobile application for finding study partners

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages