# 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