Web App vs Mobile App - pinocchio61/Architecture GitHub Wiki

Title: Web App vs Mobile App

Context

Originally, we decided to build a mobile app for both attendees and organizers, and a web app for visitors to browse verified content. However, after we investigated possible solutions of identity management tools, we found a single web app might also be a solution to support attendees and organizers.

Investigation of different choices

Mobile app + Web app Web app
Pros
  1. Access to lower-level APIs (client-side information e.g. mobile device ID)
  1. Shared codebase
  2. The user can have more options of wallets
Cons
  1. We have to maintain different codebases
  2. Users have to download 2 mobile apps (Pinocchio and identity management tool)
  3. Less development supports can be found (because most DApps are developed as web app)
  4. Difficult to edit or vote for transcripts in a small screen
  1. Worse user experience when attendees sign in an event
  2. Cannot get unique device ID, which breaks the rule of 1 device 1 vote

Decision

We decided we would build a single web app. Due to limited development resource, after our estimation of developing each component, we found that we might fail to finish the project if we chose to develop two apps. Furthermore, as most DApps nowadays were built as web apps, more development supports for building a decentralized web app could be found. If we chose to build a decentralized mobile app, we might encounter some problems unable to be solved since we had little experience in developing a Dapp. Thus, for the purpose of completing the project, we chose to build a single web app.

Status

Accepted

Consequences

Because a web app could not access a device's ID, we could not verify whether an attendee had signed in to an event with his/her mobile device. In this case, we had to come up with solutions to prove an attendee's authentication to prevent Sybil attack from happening. Please check "One account one vote vs One device one vote" for more details.

⚠️ **GitHub.com Fallback** ⚠️