---
# System prepended metadata

title: MVP Project Features

---

# 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