# uDonate - Roadmap
## Overview
uDonate is a dApp for crowdfunding causes. As a basic user, you can donate directly to a cause or donate through your favorite Influencer. Once verified, this user can also create their own cause, and apply to become an Influencer. As an Influencer, you can endorse your favorite causes and organize a donation pool for users to donate through.
Due to the complexity and scale of the project, development will be split into multiple phases. The first phase (the MVP phase) will focus on core functionality, while later phases will focus on adding more complexity, such as Influencer scores and expanded communication features for admins and cause creators.
The goal of this project is to complete a MVP of uDonate, fulfilling all Phase 1 user stories and deliverables as mentioned below.
## Recommended Phase 1 scope of work → list as features
The recommended MVP implementation of the uDonate product is focused on developing a fully-featured web application on a solid technical platform that can be expanded in future phases. The following feature set will allow early adopters to participate in the uDonate system as donators, cause creators, and influencers, plus provide the uDonate team tools to manage the product and gain insight into product direction.
Feature and technical detail will be outlined in the the User Stories and Spec sections. This is an overview of the feature set.
1. User Management
* Web3 authentication
* Email verification
2. Cause Management
* Cause creation/editing
* Cause dashboard
* Cause discovery/basic search
* Basic social share functionality
5. Donations
* Single cause donation
* Influencer pool donation
3. Influencer Management
* Influencer application/creation/editing
* Influencer profile page
* Cause endorsement
* Cause pool creation/editing
* Influencer discovery/basic search
* Basic influencer score (based purely on donations)
* Basic social share functionality
6. Site Admin Controls
* Airtable used for admin tool
* Cause/influencer controls
* Activity monitoring/reporting in Airtable
7. Static Help & FAQ Pages
## Roadmap for future phases → list as features
Future phases will focus on adding more complexity to Influencer scores, plus expanding the types of communication for admins and cause creators. More Phase 2 features will be explored and scoped after the MVP launch.
1. More complex data capture and reporting
* Tracking social media interaction for influencer scores
* Top donors through influencers
* Influencer score iteration to include more data points
* calculated from donation data for MVP
2. In-app communication features
* Admin communication to influencers/cause creators
* Cause creator communication to donors (cause updates)
3. Admin tooling outside of Airtable
* If needed we will explore a more custom admin experience
5. ENS link creation
## UI Design
Figma Document: https://www.figma.com/proto/jlLAxVChcVisJY1DlRTqxP/uDonate-v2?node-id=1%3A24&scaling=min-zoom&page-id=0%3A1
#### Instructions (for best viewing experiences):
- Set to width to 'Width - Scale down to fit width'
- Blue-ish squares indicate hotspots and guide you through the flows (the current flow is: connect with metamask -> verify -> apply for influencer -> start a cause)
## Phase 1 User stories
```gherkin=
Feature: Unauthenticated User Scenarios
Scenario: User looks into other influencer's public page
Given all circumstances
Then the user can view an influencer's page with the following information
* Influencer display name
* short status
* narrative or description
* images
* social media accounts
* favorite cause, categories, & Endorsed causes
* total amount / number of donations his/her favorite cause received
* causes created by the Influencer himself/herself
* causes the Influencer has donated to
* his/her influence score
Scenario: User looks into other cause pages
Given all circumstances
Then the user can view all cause pages (with only read-only functionality)
```
```gherkin=
Feature: Authenticated User Scenarios
Scenario: User does a web3 login
When the user wants to interact with the app as a maiden step
Then the user can unlock more features by email/social media verification
And the user can apply to become an influencer
And the user can look into different causes made
And the user can look into an influencer's page
Scenario: User verifies his/her account
Given the user is already web3 logged in
Then the user provides his/her email, twitter, etc for verification.
* User has the option to edit basic profile page from this point on
Scenario: User applies to become an influencer
Given the user is already web3 logged in
And the user has a verified full account
Then the user fills out a form with required fields such as
* 1 profile picture
* 1 cover photo
* email
* short status
* display name
* narrative
Then the user waits for an admin to update his/her influencer status
```
```gherkin=
Feature: Cause Creator Scenarios
Background:
Given the cause creator is web3 logged in
And has his/her account verified
Given the cause creator is not web3 logged in
Then cause creator is redirected to email verification page
Scenario: Cause creator creates a cause
Then the cause creator goes through a wizard to create his/her cause requiring
* a name for the cause
* a narrative
* a set of images out of one to be the cover image
* a category to be chosen
* a cause type (plus refundable option if applicable)
* a date
* him/her to accept terms & conditions
Then the cause creator waits for his/her cause to be approved.
Scenario: Editing a cause after it's created
Given the cause is approved by an admin
Then the cause creator can
* visit his/her cause page
* put in a request to admin to pause or end his/her cause
```
```gherkin=
Feature: Donor Scenarios
Scenario: Donor looks around causes
Given the donor is web3 logged in
Then the donor can
* find all the available causes listed
* filter causes by category, location and date
* search causes by keywords
* sort results by recently created/most donations
* find a cause endorsed by an influencer
* find a cause that's shared through a direct link
* find details about a particular cause such as
* the cause creator
* cause goal
* cause narrative
* cause enddate
* raised funds, etc
* influencer for this cause if any
* cause status (paused/ended)
* his contribution to the cause if not anonymous
Scenario: Donor donates to a cause
Given the donor is web3 logged in
Then the donor selects an amount to donate
Then the donor provides his/her info such as
* display name
* email
* note to the cause creator
Then the donor accepts terms & conditions
Then the donor goes through making the web3 deposit transaction
Then the donor receives his/her tx hash/status
Scenario: Donor donates to an influencer
Given the donor is web3 logged in
Then the donor can set an amount to donate
Then the donor can view influencer's recommended donation pool ratio
Then the donor can set their own donation pool allocation
Then the donor can donate
```
```gherkin=
Feature: Influencer Scenarios
Background:
Given the influencer is web3 connected
And has his influencer form submitted and accepted
Scenario: Influencer visits his/her profile page
Given the background is all true
Then the influencer can
* view his public page
* his/her profile info
* view his influence stats
* choose to edit his/her profile page
Scenario: Influencer edits his/her profile page
Given the background is all true
Then the influencer can edit his profile data including
* his/her profile pic
* choose / unchoose categories of interest
* updating social profiles
* 6 endorsed causes
* Favorite cause out of those 6 causes
Scenario: Influencer edits donation pool
Given the background is all true
Then the influencer can edit his/her cause pool
* provides a default ratio of how donations will get disbursed when a user donates to them
```
```gherkin=
Feature: Site Admin Scenario
Scenario: Administrator contract functionalities (no UI, done through etherscan)
Given the person is an approved site admin
Then the admin can
* Hide / pause / end / highlight a cause
* put a cause in refund state
Scenario: Administrator Airtable functionalities
Given the person is an approved site admin
Then the admin can
* update hide / pause / end / highlight cause status
* update cause refund status
* can accept / reject influencer applications
* download data of all causes
* view donation data of causes
* view logs if any (only transaction logs)
* edit terms and conditions
```
## Spec
### Frontend
* Email Verification: **Magic.Link**
* Email Relay Service: **Sendgrid**
* Frontend Hosting: **Vercel**
* File (image) Hosting: **Infura IPFS**
* Frontend Framework: `React` & `Typescript`
* Frontend `styled-components` / `SASS` / `CSS`
* Web3 Lib: `Ethers.js` -> this should be built to work on any EVM compatible chains
### Backend
* Server: Express
* Server Hosting: **Heroku**
* DB: **MongoDB** & **Airtable**
* Auth: JWT
| Server | Database | Auth |
| -------- | -------- | -------- |
| Express | MongoDB, Airtable | JWT, Magic.Link / SendGrid |
### Data Fields

### Database Flowchart

### UX Flow

## Recommended Team
1. Frontend Dev
2. Backend Dev
3. Design Lead
4. Project Manager
5. Account Manager
## Phase 1 Cost Estimate
| Sub-Phases | Cost | Time estimate |
| -------- | -------- | -------- |
| Development | 77,000 DAI | 55 days |
| Testing & QA | 4,200 DAI | 2-3 days |
| **Total Estimate** | 81,200 DAI | |