The Main Idea of the App is to " Dispaly a catalog of products with their details and Allow the user to add them to their quote, and then submit their quote which will be recieved by our team which will contact the user and provide them with support" ## Catalog - The Catalog will contain the list of all products and allow the user to filter and select according to category and full text search. ### Catalog Entries - Each Catalog Entry will have: - Title - Subtitle - Description - Minimum Quantity - Available Quantity - Images - Each Catalog Entry will be connected to a product from the database, ie; One Product Specification can have multiple entries (incase of multiple vendors for example) ## Request for Quote - The user will add items from the catalog to a request. - This request will be submitted with the user contact info. - The RFQ will appear on the Kham dashboard and the team will correspond with the user to try to fullfill their order. ## User Accounts ### Sign Up - The user can sign up in 2 ways: - Direct Signup: using a signup form. - Indirect Signup: when an anonymous user submits an RFQ, then a an account is created for them. ### User dashboard - The dashboard should provide for the users the ability to: - Edit their profile details. - View the history of their RFQs. - Respond and interact with the currently submitted RFQ. - Modify the RFQ that is yet to be submitted. ## Pages - Landing Page - Auth - Sign in - Sign up - Forgot Password - Reset Password - Change Password - User Profile Page - Catalog Page - Catalog Entry Page - Previous Quotes - Quote Details Page - Current Quote Page - With A Submission Form - Contact Us Page ## Tech Specifications - The database: - Due to complexity of the queries and future plans for the app, The Database of choice is `PostgreSql` - To be able to develop on a free teir and easily scale the datavse for future demand [Neon](https://neon.tech/) was chosen as the databse hosting provider. - Frontend: - The App is required to work on both Android and iOS, as well as the Web - So, To decrease the development time and increase the reusability of the code, `React Native` was Selected as the Front end framework. - Backend: - For better context switching and increase compatibility between the backend code and frontend code, `Node.js` was choosen. - `Nest.js` was choosen as the `Node.js` framework, for it's convenient toolings and stuctured architecture - Firebase: - Due to their amazing utilities and SDKs, Firebase will be used for `Deep Links, Notifications and Authentication` ![](https://hackmd.io/_uploads/HyLfnxvO2.jpg)