# MVP Project Features
### General features
- Implementations
- Chat - **7** :star: (front/back)
- Bidirectional communication protocols implementations (eg. websocket, redis streams, amqp) ?
- Between freelancer and client
- Chat is associated to project (meaning it's the project's chat)
- Media files support
- Quote message
- Edit message
- Delete message
- Track message status
- User status (online/offline)
- Notifications - **7** :star:
- Email **6** :star: (mostly back)
- Sendgrid (or alike) integration
- App templates for different notification events
- In app **8** :star: (front/back)
- Bidirectional communication protocol implementation (eg. websockets, redis streams, amqp) ?
- Event based ?
- Authentication & Authorization **6-7** :star:
- Auth0 / Supabase Auth / Own integration (back)
- Conditional rendering / routing based on role (freelancer, client) authorization ? (frontend)
- Conditional controller behaviour / protected routes (backend)
- Payment **5-6** :star: (mostly back)
- Payments processing services integration (PayPal / Stripe / TransferWise / Wave)
- Service webhooks integration for automated payment status management and notifications ?
- Cloud Storage? **4** :star: (back)
- Services such as Amazon S3 for images / files storing ?
- Store in own server ?
- Data visualization through graphs **4?** :star: (front)
- Unknown tools ?
- Filter by date
- Location service ? (DB / External API / SaaS?) **4?** :star: (mostly back)
- Country / Province / City / Zipcode
- Currencies
### Entities related features
- Freelancer
<details open>
<summary>Settings</summary>
- Public Info
<details>
<summary>Update</summary>
- name
- experience
- samples
- location
- categories
- experience
- availability
- main form
</details>
<details>
<summary>List current public info</summary>
</details>
- Private Info
<details>
<summary>Update</summary>
- first name
- surname
- email
- address
- city
- country
- region
- zipcode
</details>
<details>
<summary>List current private info</summary>
</details>
- Payments Info
<details>
<summary>Update</summary>
- payment methods list
- each individual payment method options
</details>
<details>
<summary>List</summary>
- all possible payment methods integrations
- currently selected payment methods
- each individual payment method options
</details>
- Invoices Settings
<details>
<summary>Update</summary>
- business name
- business logo (url)
- default invoice
- default currency
- late payment fees
- tax options
- automatic reminder options
- main contract
</details>
<details>
<summary>List current invoices settings</summary>
</details>
</details>
<details open>
<summary>Orders</summary>
- Projects
<details>
<summary>Create</summary>
- select **client**
- select **package** (normal and hourly based)
- select due date
- add note to client
- notify client of newly created project via email
</details>
<details>
<summary>Update</summary>
- project status
</details>
<details>
<summary>List all orders, each composed by</summary>
- client name and profile image
- order id (or form title)
- package title
- due date
- remaining time for due date
- project status
</details>
<details>
<summary>Pagination</summary>
- should be able to paginate projects list
</details>
<details>
<summary>Filter</summary>
- should be able to filter projects list by status
</details>
<details>
<summary>Search</summary>
- should be able to search through projects list
</details>
</details>
<details open>
<summary>Packages</summary>
- Forms
<details>
<summary>Create</summary>
- add title
- add info
- add photo or video (file)
- add video link (url)
- add packages, each composed by:
- title
- currency
- price
- marked_as_required: boolean
- show_quantity: boolean
- add add-ons, each composed by:
- title
- currency
- price
- marked_as_required: boolean
- show_quantity: boolean
- add single line of text (each one of these records will be an input for the client to complete):
- title
- placehoder
- help
- marked_as_required: boolean
- show_quantity: boolean
</details>
<details>
<summary>Update</summary>
- same attributes as create
</details>
<details>
<summary>List all forms, each composed by</summary>
- title
- images of people currently editing the form (only if form has clients)
</details>
<details>
<summary>Search</summary>
- should be able to search through forms list
</details>
<details>
<summary>Share</summary>
- create a link that forwards to form page (front?)
- send link via email
</details>
<details>
<summary>Delete</summary>
- freelance user should be able to soft delete a form
</details>
</details>
<details open>
<summary>Clients</summary>
- Clients
<details>
<summary>Create</summary>
- add email
- add first name
- add surname
- add billing address
- add city
- add country
- add region
- add zipcode
- add phone number
- select package / form
</details>
<details>
<summary>Update</summary>
- same attributes as create
</details>
<details>
<summary>List all forms, each composed by</summary>
- title
- images of people currently editing the form (only if form has clients)
</details>
<details>
<summary>Search</summary>
- should be able to search through forms list
</details>
<details>
<summary>Share</summary>
- create a link that forwards to form page (front?)
- send link via email
</details>
<details>
<summary>Delete</summary>
- freelance user should be able to soft delete a form
</details>
</details>
These features contemplates both frontend and backend implementations such as:
- Web App GUI
- API Server
- Database
- Broker service (front/back bidirectional communication)
- Third party services integrations
### Simple 'freelancer user' application flow
- Update account settings
- Create a package / form (CRUD)
- Share form to a potential client
- Add a client (CRUD)
- Clients on freelance side are associated to real client account through email?
- Optionally, a client can be associated to a specific package / form
- Add an invoice and save options for future use as template (CRUD)
- Is an invoice automatically generated for every purchased package?
- Send invoice to a client
- Create an order/project (CRUD)
- Select package / form (from added packages/forms)
- Select client (from added clients list)
- Send it to client
- Chat with client
- See revenue graph in dashboard
### Simple 'client user' application flow
- Update account settingse
- View forms / projects / invoices history and status
- Select and view specific package / form
- See package / form info
- Purchase package / form
- View specific project
- See project info
- Track order status (progress)
- Chat with project freelancer
- View specific invoice
- See invoice info
- Download invoice
- Pay invoice
### Milestones
- **Freelancer Side**
- Packages CRUD
- React, API (Node), Database
- Clients CRUD
- React, API (Node), Database
- Projects (Order)
- React, API (Node), Database
- Cloud storage? (images)
- Invoices CRUD
- React, API (Node), Database
- Settings CRUD
- React, API (Node), Database
- Cloud storage? (images)
- Dashboard with graphs (revenue, clients, orders)
- React
- **Client Side**
- Settings CRUD (Front and back)
- React, API (Node), Database
- List available packages that can be ordered (Front and back)
- Share feature
- Read specific package
- Purchase (order) package (through payment service integration)
- List projects (purchased packages?) (Front and back)
- Filter feature
- Read specific project
- Track status and project specific info
- List invoices (which are created by the freelancer) (Front and back)
- Read specific invoice
- Pay invoice (through payment service integration)
- **General (both sides)**
- Authentication and authorization **! IMPORTANT**
- Backend and frontend implementations
- Notifications
- Send emails (backend implementation)
- In app (frontend and backend implementations)
- Chat (bound to project)
- Backend and frontend implementations
### Time estimation: 330 - 400 hours development time
** development time **_might not_** include running into snags, things messing up, backtracking in code, finding right tools for the job and so on