From 30ecf9b91947235f3c99508a69bd4c3c08748ded Mon Sep 17 00:00:00 2001 From: Prasanna Akolkar Date: Sat, 23 Sep 2023 16:35:34 -0700 Subject: [PATCH 1/5] app for senior citizens for grocery shopping - Prasanna --- README.md | 77 +++++------- package-lock.json | 114 ++++++++++++++++- package.json | 8 +- public/add-to-cart.png | Bin 0 -> 12232 bytes public/add.png | Bin 0 -> 17923 bytes public/logo.png | Bin 0 -> 23595 bytes public/microphone.png | Bin 0 -> 11474 bytes public/printImg.png | Bin 0 -> 3873 bytes public/shareImg.png | Bin 0 -> 11655 bytes src/App.js | 109 +++------------- src/components/CartItemList.css | 135 ++++++++++++++++++++ src/components/Content.js | 2 +- src/components/Login.js | 79 ++++++++++++ src/components/SpeechToText.css | 174 +++++++++++++++++++++++++ src/components/SpeechToText.js | 217 ++++++++++++++++++++++++++++++++ src/components/cartItems.js | 78 ++++++++++++ src/components/login.css | 66 ++++++++++ src/components/print.css | 12 ++ 18 files changed, 929 insertions(+), 142 deletions(-) create mode 100644 public/add-to-cart.png create mode 100644 public/add.png create mode 100644 public/logo.png create mode 100644 public/microphone.png create mode 100644 public/printImg.png create mode 100644 public/shareImg.png create mode 100644 src/components/CartItemList.css create mode 100644 src/components/Login.js create mode 100644 src/components/SpeechToText.css create mode 100644 src/components/SpeechToText.js create mode 100644 src/components/cartItems.js create mode 100644 src/components/login.css create mode 100644 src/components/print.css diff --git a/README.md b/README.md index 58beeacc..c870f42a 100644 --- a/README.md +++ b/README.md @@ -1,70 +1,61 @@ -# Getting Started with Create React App +# Let's Shop -This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). +## Introduction -## Available Scripts +The Let's Shop app is designed to assist senior citizens in managing their grocery shopping lists efficiently. This user-friendly application leverages the WebSpeech API to allow users to add items to their cart by speaking the name of the product. Additionally, users have the option to manually enter the name of the product. The app aims to simplify the shopping experience for seniors and make it more accessible. -In the project directory, you can run: +## Features -### `npm start` +### 1. Speech-to-Text for Spoken Items -Runs the app in the development mode.\ -Open [http://localhost:3000](http://localhost:3000) to view it in your browser. +- The app provides a speech recognition feature, allowing users to verbally specify the items they want to add to their shopping cart. +- The spoken items are then checked against an items database, and a corresponding product is mapped if a match is found. -The page will reload when you make changes.\ -You may also see any lint errors in the console. +### 2. Autocomplete for Manual Entry -### `npm test` +- Users can manually enter the name of the product using the autocomplete feature, ensuring accuracy and convenience in item selection. -Launches the test runner in the interactive watch mode.\ -See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. +### 3. Edit Spoken Content -### `npm run build` +- To accommodate variations in pronunciation and speech recognition accuracy, users have the option to edit the transcribed content. -Builds the app for production to the `build` folder.\ -It correctly bundles React in production mode and optimizes the build for the best performance. +### 4. Add to Cart Button -The build is minified and the filenames include the hashes.\ -Your app is ready to be deployed! +- The app includes an "Add to Cart" button (represented by a plus sign icon) to add selected items to the cart, allowing users to build their shopping list easily. -See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. +### 5. Show Cart -### `npm run eject` +- Users can view the list of items they've added to their cart by clicking the "Show Cart" button (represented by a cart icon). -**Note: this is a one-way operation. Once you `eject`, you can't go back!** +### 6. Print List -If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. +- The app offers a "Print List" feature, allowing users to generate a physical shopping list for reference while shopping in-store. -Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own. +### 7. Share List via Email -You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it. +- Users can share their shopping list with the grocery store or family members via email, making it a collaborative and convenient shopping experience. -## Learn More +### Login Feature -You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). +- The app includes a login feature that allows users to access their shopping lists securely. +- Users can log in using their username and password. -To learn React, check out the [React documentation](https://reactjs.org/). +## Authentication -### Code Splitting +- The login feature makes use of the Authentication API at [https://fakestoreapi.com/auth/login](https://fakestoreapi.com/auth/login). +- The predefined username and password for logging in are as follows: + - Username: "mor_2314" + - Password: "83r5^_" -This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) +## Routes -### Analyzing the Bundle Size +- `/`: This route leads to the login page where users can log in using their credentials. +- `/cart`: This route provides access to the text-to-speech and cart functionality, allowing users to interact with their shopping list. -This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) +## APIs Used in the Project -### Making a Progressive Web App +- **Get a List of All Available Products**: The app retrieves a list of all available products from [https://dummyjson.com/products](https://dummyjson.com/products). This API is used to populate the product database and provide a wide selection of items for users to add to their shopping lists. -This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) +- **Authentication API**: The authentication feature of the app utilizes the Authentication API at [https://fakestoreapi.com/auth/login](https://fakestoreapi.com/auth/login) to securely authenticate users and grant access to their shopping lists. -### Advanced Configuration - -This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) - -### Deployment - -This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) - -### `npm run build` fails to minify - -This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) +The Let's Shop app is designed to make grocery shopping more accessible and user-friendly for seniors. Enjoy a seamless and efficient shopping experience with the convenience of speech recognition, manual entry features, and secure login functionality. \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 89f4e0cd..6f686953 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,8 +16,12 @@ "@testing-library/jest-dom": "5.16.5", "@testing-library/react": "13.4.0", "@testing-library/user-event": "13.5.0", - "react": "18.2.0", - "react-dom": "18.2.0", + "react": "^18.2.0", + "react-autosuggest": "^10.1.0", + "react-dom": "^18.2.0", + "react-mic": "^12.4.6", + "react-router": "^6.16.0", + "react-router-dom": "^6.16.0", "react-scripts": "5.0.1", "web-vitals": "2.1.4" } @@ -4530,6 +4534,14 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@remix-run/router": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.9.0.tgz", + "integrity": "sha512-bV63itrKBC0zdT27qYm6SDZHlkXwFL1xMBuhkn+X7l0+IIhNaH5wuuvZKp6eKhCD4KFhujhfhCT1YxXW6esUIA==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -8293,6 +8305,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -17139,6 +17156,21 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, + "node_modules/react-autosuggest": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/react-autosuggest/-/react-autosuggest-10.1.0.tgz", + "integrity": "sha512-/azBHmc6z/31s/lBf6irxPf/7eejQdR0IqnZUzjdSibtlS8+Rw/R79pgDAo6Ft5QqCUTyEQ+f0FhL+1olDQ8OA==", + "dependencies": { + "es6-promise": "^4.2.8", + "prop-types": "^15.7.2", + "react-themeable": "^1.1.0", + "section-iterator": "^2.0.0", + "shallow-equal": "^1.2.1" + }, + "peerDependencies": { + "react": ">=16.3.0" + } + }, "node_modules/react-dev-utils": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", @@ -17267,6 +17299,28 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/react-mic": { + "version": "12.4.6", + "resolved": "https://registry.npmjs.org/react-mic/-/react-mic-12.4.6.tgz", + "integrity": "sha512-2/DZoz7thR2nJyekF10zBvs/7a8HhUQ4L8MV6BpC+Q/T8G1MvpRHGSHjSlVtnbzaCMDJ3R1MdThoLu15WuVh/g==", + "dependencies": { + "prop-types": "^15.5.10", + "react-ga": "^2.2.0" + }, + "peerDependencies": { + "prop-types": "^15.5.10", + "react": "16.x" + } + }, + "node_modules/react-mic/node_modules/react-ga": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/react-ga/-/react-ga-2.7.0.tgz", + "integrity": "sha512-AjC7UOZMvygrWTc2hKxTDvlMXEtbmA0IgJjmkhgmQQ3RkXrWR11xEagLGFGaNyaPnmg24oaIiaNPnEoftUhfXA==", + "peerDependencies": { + "prop-types": "^15.6.0", + "react": "^15.6.2 || ^16.0" + } + }, "node_modules/react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", @@ -17275,6 +17329,36 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.16.0.tgz", + "integrity": "sha512-VT4Mmc4jj5YyjpOi5jOf0I+TYzGpvzERy4ckNSvSh2RArv8LLoCxlsZ2D+tc7zgjxcY34oTz2hZaeX5RVprKqA==", + "dependencies": { + "@remix-run/router": "1.9.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.16.0.tgz", + "integrity": "sha512-aTfBLv3mk/gaKLxgRDUPbPw+s4Y/O+ma3rEN1u8EgEpLpPe6gNjIsWt9rxushMHHMb7mSwxRGdGlGdvmFsyPIg==", + "dependencies": { + "@remix-run/router": "1.9.0", + "react-router": "6.16.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/react-scripts": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", @@ -17347,6 +17431,22 @@ } } }, + "node_modules/react-themeable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/react-themeable/-/react-themeable-1.1.0.tgz", + "integrity": "sha512-kl5tQ8K+r9IdQXZd8WLa+xxYN04lLnJXRVhHfdgwsUJr/SlKJxIejoc9z9obEkx1mdqbTw1ry43fxEUwyD9u7w==", + "dependencies": { + "object-assign": "^3.0.0" + } + }, + "node_modules/react-themeable/node_modules/object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -17928,6 +18028,11 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/section-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/section-iterator/-/section-iterator-2.0.0.tgz", + "integrity": "sha512-xvTNwcbeDayXotnV32zLb3duQsP+4XosHpb/F+tu6VzEZFmIjzPdNk6/O+QOOx5XTh08KL2ufdXeCO33p380pQ==" + }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -18125,6 +18230,11 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", diff --git a/package.json b/package.json index ca2a9136..7260e994 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,12 @@ "@testing-library/jest-dom": "5.16.5", "@testing-library/react": "13.4.0", "@testing-library/user-event": "13.5.0", - "react": "18.2.0", - "react-dom": "18.2.0", + "react": "^18.2.0", + "react-autosuggest": "^10.1.0", + "react-dom": "^18.2.0", + "react-mic": "^12.4.6", + "react-router": "^6.16.0", + "react-router-dom": "^6.16.0", "react-scripts": "5.0.1", "web-vitals": "2.1.4" }, diff --git a/public/add-to-cart.png b/public/add-to-cart.png new file mode 100644 index 0000000000000000000000000000000000000000..eda88a070ff2299a10acf3090ce3a741805de877 GIT binary patch literal 12232 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 xNXdrq($bveHW{&biLHwsT$YYpxzTXeY5wejNls z681Q(3k1QzU*V7_68td})v*Zv5DMRK?r*92e*@~%Jt5OCp@OvUv#hh;qiO-vKf0+2-%l-5WCylh4?W zibhx2Q0%8yG))KiClqs`)QY%?!6Fy|LYMlO{u$ar2?$@=XE4CO^^>P9^{vecJL*e> zu-|ff_cOgH20xcPDADVe|9zNhme<-K@#;HsWqM`#9moH&+NJ;#0|7 z)hpLk;=Jn*RX|dR`Cm;xxp9&4dOG>I?DNyv*(z%n!koNY~2et~+pk{_UylR|lOW$j#pL(0K*eBzN|1qwSfUBb_U5 zEl`+Rz#q#hA=G9Ah)wLQUpc~BlHj-8x#M?e^_4eTh-uL0tQveDY3ccfCElahQ@z+L ze{84zbu86}D7v>S?op&f5*tN?XunuNyYLz=F9$Bqq&{z6Ru{Z@N*g^7IU;YRAKKoV^s*FGZB_~w&3k0s*`FgV<5q8W>(8*bjG+u+E}W# znd2`sBt4QZ5ADjKYVFVK8@TDVa5L3uht@AeFd*fr+mu6?a@MVfu*|!;y|0*(OmpTf zCj0SK+K*eXR^e9U-t+TE6Q+|$2PDXT74 zt%d%)&KO!yt@I94%nI2jwk%}K;Z$6e+^#1B-rg9^dcHzQu(#tSU+1ZFH*w!yczWpE zU8Lm`JmGUz@~Q~s&86>2;;$TO9u(L9mEXfUU`KYOQneiOzFBNNW?`J(ti!R&+YD$H zB};Cfpdl@<&@r?j4()EEhK{*m7VaUH_CWL?EUxtR6~EjLsQFNCFP2-({L1Wmc@}$) zBo&4VqcfZ{B)7LbKw2W-vvNetg%#nN8x`$nLe2;cght)c#`cr6I`FAwZm%C#l%2jR z20nGrM=a=uU1AK#D%s}QNsv3pQnN;4}h}|>@-?M zP~u@n)~9c06QtmL$>l?6I9m&l)I}?ZT->??(^)dCL0Y1Y8_=v5ytBoqd*OiuISy>hoTw$m2c3iez0(O_5ZM)~T{5%sFw9 zZp$`#1Q9M0y>y@I1P&tlqqyY<_ly}O__76l1Td`^)dum`6_nYDe0GwsOriE3WFDow zYxltV4Tm6B-*L3BN}_Z-pr@JCa)|<{K^v2j^v{xT*guScjY`-njxmtuzpNbnDqphK z;a^*_24k7!ga{x8a!R&W?9h`v@s01Lo{*@kw^3jko$u^>uFVH|7p} z@2I~OzX4T=(K(wL?YDEUh-AdPDcH&99guz!RST|YQ-42lf0*J3OPqb48|Rg|!c50JOR2!_%NdQ%z0 zk6XR>H8)&dRp*987H!U>Zy?lcsFa*G6wc2ii0}9k#NKFA6h1!!q$rXIts@Zf5qya< zmBM>(?jyP(SIQnrY5z)Z53a?J;0XH+O+q!oHTz@4Q5@LCW==(hBkw~H=-GU1m*L?+AbVV1hOJ0eEBGXdI$?jI!MQtH zvbB`y&J<=|=EeDjDUT#jgB^%M5!P;{WM3^IR&1eMt7WPI_mqu6e>uM{Vcp{|dPYB%}JmY1AaeUpsuD}WN zd&aihr^c~5gW$@R?p=Zun$(E}44i@xf2$H!_JD-teL8Hk$X;PZRxJI~rbxIy%)f3a zxc%e~6@sB$&$C4jZR3Nk4g334qsrvR_m#k!GpSk<1y-Jn>#P0Ni}&Mm7z3M>Y=8R` z@`3urlB*NG>%Y9rOysOkhgJ2o4Irv+RSUT&E8X$NmwiG7_PZCmZ4$H2QF~><+AZ*% zTw^tcO3w#QXp$tV!WEGzjW&fA3@eY3a^TP5%a@+QMr0z3lnU(R|7A77OtTEXy^zxS zF#Ao7yO9@nfwaNC1M*|Cnh-w1l4-3jw_|XTss%rJ&e+7PpXjO|lmzmwGgohK8Gr+A z^-ur9zfN&MY+$jDAX~SY6>An!tvuCDgli8dr0&>XeK<0PUB)~yOn4pQEj&IU(76D# z0YqVqAEzB3`C#Y2>)+$dcg&3bSWnW{EE86c%#<{D!%TC?gImzt`S}4Gk$^o0kQHlO zl)Gox@5#Xf!s)_scdBFGc~l?e#?tJfo=K#;UOGxC=B)fPtQt&1;+t7Px?DGQ>nV@Q zUS=K5(e_cgAdOA6ifI1RTXR>M#agv%F3)QThv*-2~l#N&fBoO7MHgL~$h^7t( za94P7(WK1#t_U4Gp++UZ!7D?wWh{W*^x|6o${XP0UK0o@h$2+*){dJA(JheVxp{PP zf<9HA4AZM>gM5&h7)RSxcmY%}%xkkrl)g$JIKmUJ&51Rb7#}>SxBwiFKOpad(18dw zIwMa@6TrF$g}H&uU-g@?gK2a}rn!V7Qd3${L*oIISie--ZUtfm%NEwS6YbhcM0#uX z)tk8drS!A&5AMEB8f<0d2&bchWjmg$zI#KvhA7IAWbYtCL_flw?1;rs`9igg{xG|` zCF^!8tb;G16#n)$+WKd0*33UlUqE@kgryTJ$bjpDF9-WwD{0K)Q~(im!JuO_0{#T0 z2p(?fdC5^pm1GNH3hBsB^y1|o`Llu$Z0Y*Xw*GQYdYKg7>i1z)wKHD2WA+9U@$wUk(|M8?WqJ<2@u6vU`bU_u z{i7}blJX)2N78!rkS$Q^oj&h#<`a2yjhlPkazaxiQK%K&s&~xZr-7l&13(KJjWM{^ zzL~U|z|P{hA@-wh@$yp<;9v+3%|C={#MXR1wJ$8h;K~R186+M?w~pI;&n#o{Ij;WP z^vtj-N^dJ60ve(Jep6f}{%)GaK#-1o6zzagZ)3j9>-B}d8Yrig8di5{v%@-(FT>BY zWivl9=P-r~X-|c8ibk`q`h2?ejgMgeFx$O~(mE8|^=wD%+-JNTx4YhQI87g+b92;T z-~+||Zk71U6k74c_)SV!?5W&dJDi=^vy=ARlWbR~dWYJ($lIp~d)T-3#D;Ej`ZFLc z7)0$|q^VKT1YbUtD1b2fhvwaj@~x0b9F#t;`h;CTcqiaxf8Ueoc*6Q?^#e|TpPu#1Ri619fnC{-`V%&Pvp;rSrA0v5nI}&6Z;{%HN;^Eq6d?9? zU8hF-Q3AK3emBx!^6u4~j-(FMs$EO>gBYt4%zkTONf zgCJIrDZ6TQBjBvLhqJ)i zCCA5kQg$NJSp=ObcXA3vLh$`3rXerxC@J$Ku~QjB$E+VY+jw7=Uuxf0OJ7LA1=Dp; zo3gil!hXn9mb&OD80G}HNy&ONdmN4VK=#Jf&z$lED-F0s4Cq1G5@%ipSj$n z4>3!aUG3YDgLX7V#RI{-Kj}@m9DCn`8-tzbo6A2YBblspXfCZ)SM@DIWX()rX@BUC ze_FD8K4F)R7!?1KZxs8;`XaoHJkwX=EUEZ|_tpl`iO{RsPVqhS<$Fg3+_Zja@@|5- zOR)lk_L5uJUU`v}llOexMHUA{{V3D~fgqB}lRndTvrL2htZr$0yA|@@V@HT!c#G5& z|0$VI!b@$AmwsnuAUk0tpP%O!%`Sv}FHR75@Ku1grA)*2ZNxeK0MF4&V2e@VZocev znl9bGW?N^rEpbrB(m-wY^{}ErOfHGpHUZ8RYkP{IkSQtdsfKZEkqr7)7WiErLVp&o zl{v$%DtMNa%rCl|kd&0##QNeugsa>6m$W-FP5W1_46B|ex`C~Ayk@vkE?s!f_9$%f z{QP~V@~b#&YOfwsJD^K%e1+yjX~T+?IQq^(xm1|{$Fgtnuz(hyH$K?p!)YF-*-e%A zk0FeU=>};ZbCJ-3KfZf-gF!v{>F34((?A=VF#U0$R9>ghxPxFsk{UR0g#h}+tYJ-q zy5yO^bO?lv_KA-TPMdHyvs)?+udT|dmor6 zASU64+AEHp8*`w8G?O>+t;KObli6E4b8FB6sezZy+gCq0W77uZ0z27uH@pM*$HEJ( zKG-}uMuWQ!PX%-Le&DpFNw$}s5}ct}tyu1+!h6V1_JONM!D&m&?LdFN@>BzVij*UN z0AYA`-mW-d=5DhZc~m#`Q-JNS_{}|DU<3MY%a6^er^VjO7b-Y0T1>GqgqT@ONpOB# zn%7F+Om1pY^FzAsq%Tdkl4P1mbUB;s1=p!+p_Ee8`#*vpKhB#ZDxD=th}aPpL`s)u z3Drc*j}<47iXS3xUl^RsU@ijo!x|V{dJU43I^M9-5#~yT#mLCa^mTiGwlmo|(2E1; zWPZk(j{z87w?Qs%);?O>-+v=V+=an;NS5uccSKM9Mya>w)A^G!V%jAKypcIWL1Fy#4Z~j@3J- zIQ>$h@9SZZxn$55rMu25k@H@~)=5d%@5-YslnaZUC*k+8iCdj&fKt`yjS&0Qz{0<7 zisUa1Z$P2c^r|L7Og=RHx{B!+8Lx?H#+?g+S`iT$t?h~Vl=A+SdjiD*!`_escgAd7 zaOSKev~RP`{vkuAPB`_x;R~~cEr39w%;-%YpYMvXV2ZHDR|F$C;$*6pSie}=2EfY_ zV@a-k8y1_#WSNUE8)NKLl!d#(=gZ`&ivEzfGoZ61ATnFh)G;YojRVua*qWtXDhDJ^ zq4vhP&_#xD6yyG?4R+LhLS(_L@-Qh!xdk!|n_ntUU}b$4XNq0-TK2(?0U`+9?l|%m zz~vcuX6Ni=uRdUWp$0{uN)rTKkx+7gEc|N$JWQ@gN?r>TbfI9wJQihb-TV62C?U#kZ7?aeS(q`383O zD-a<=v08;=7=2vm385O&JUg^PMtWB=H5l?RCRh zVg>R5WcrWrFsGb0v?4Ix(gA36J`SUTe?6>eR@=jgyn11}5*U!rH}q0~5mf<3G%Kp} zSc6nR(B76-!rZNgMpF4e1_LRL>!PPuFS0p}o0ay{ya+XNm1-l$*d`X4t-Fe*!^;^1 z8?GIqMG_)*PPGgxn$hGoi9Mm18RYH73=*R9-JyZncr>Nu>6niLNIAiM z?(koR?GAg&aGtQZ(TsP`Kz^}|wtMd*)ezj{vv>O(H0~7rMuq!f_iDB&+N*`tigwgb zP&w~k4=zj$9GO(hzDF#(wO^j$_(Xan;L062PsE|)3)7cRKKDs`F~U1)m$<=W13DkR zO#WIHlP(f>==lR&4qcb=uLgXzg>@xD=gY?&h&ArZoWJs$FdHq}^O55Nf^t0>^im+# zh>5a}8#_u?0?}^b@(YxbZj~DD!?RLb{}HwoZ}s)bhW119WTMm0y_k6MU0dSEcw4ZE z8|1E1%dIf5;NIJ!&RGZlZLk<#v9Uc(V8E>78y-2&!^Rj(dlKS`Pinyq+-dk0e=E7s zk7xSt=6L%2>Ot;ON-ACcbz4en`#l3WHV26)f<5e7okSdw8&>EHRM+X{Os1_Z@3UAf z(B9Mjk&Qbr|1{%RL0VkH_ZS5(3?Cd>WYBCR*Cfs~zwW*aJLvZ7rnh^>r#LmtTkjVx zr)Az9G{`C1T3GB@icnFU$rtxUaxv^}BKM-;$KGti!~|i^NI>4a^qV$SVZkUtc`(;rh)g`d2Toycu!q?Xv<{*W z2(}N5Au%p78mUzIL&y1)%!qCEgP->Jkzvj0Xymb0j*ozyY$A2k6Ax}c#}_U$Ce0si zQRxBV;)IM)>KK!1J_)3(E;7sKSK{@N)u(&Rr&33g~culGX2gCVT!OG$fq#` zMuiG678?mQn*wC{jp-2La$c_T=qd-+1b%%;;$u&YV9=PzvO!uJ-IFg|59f(;U$D;t}= z!riL$XAg>f!d=2x9b>m;j&7*ab+=WHjMzC;|K=?v)HZR0bXM5Fj?RB%4nXEE-6@^D z&~^P4ei6^y4D(M?(!X@#%Xr(N;r+qYH93H64Z@*!WyyG|P+&x}($ z&;yaTX`y_OUrt?nmq=GH*aWt?ItV$wq(~n1cyC8}Gb*Z&*UmoZdI1C2*Ct7loAJ3I z*0W}QYxlrR$yB;DW<2iJMO0dx-V{$(dAN|0)VxgZn@Si~RPs!f-`ihW4BL5nFA~4iPf=mq-4q}HUZ8PcSOr`*rgo>sU|E+5`!92Z6ojtF6tPu@W z`yAA<1OYW*dHjak9?9_`qxpUiee7q7EJaUmtA8a(0(l$!*+h zfpD<5-pnLA@*>KK=k4mLupaSacb4{9N8V?&r3?1I3fiVdv7 zT9YL~+?3|(5IjojEeCLJyw-8+DHyd?6jZ&)-gP#!b8LGzGbK zj_aPsASyRj9-554a{u}+d1>ig&SD0HZJ2$VD?cG`|1-ij<*eLaTh;;hv^q3k21D=l zHH1313m;e7yMgvk>j5nG{gM6Uz4xxYg_(l&7U(JS_k6WT24_?Lk7pIUBqD=;ZH<%{ zXQgJ1RFHdlodF=#RK{@%fE;?Ly99jgZyBio%X~vA4@^ND53Mb;Yv-MxLB~6%gyjQ~ z_&vYlmnU_(O=~pdjk1Z(t+FV=yHZ$B%?nLLcori@Ao>A`^q<~9y%5D+Q|kKA7Oa5b zu3dNLX1aht8~^s<$8TOZzc#Ya=Nj=)Yt19#pCsFSSdVB__)0YK{0#LZ z@eDpNJV|t)x|G~ECiDvu=M9L z#P%eE=YvQ*@xT8*d{n}c*T%Q_#*m|?>{vv(_tHh*7S(;et!P8&gW z6?_Yj&lK<@P4#lmKWA|}7a1FsVx z@CH1PH~1|G_(e3)Gsc{ED^f>60KI2kzWRXs7$w>t>Jkl$9x5Nh{x#djM+32R3 z+kfRTtKF@7_mC+}c3bCiH`x7dzDkmS8vBmOT}0|hiJcE%wH5+HUFS>!vOsDueKu2ls7IvUEYm zF#d}L05;be5Ze0s2^gWXOQ-qRea6zYwKK*X?kpQ=H?h?fdw&K}{=1fYg0-BIVZI{N z?9|aUW}P9y@h@59<;*6gLuXs^;L5yKa$}e^7KK?)MX?3a|dfLigRVw29y^UtA$6ZNY|*x{RsKCBH8IbPB4H#;I{jULXRYyeY#-*$RsqR;H2EHol;(Xos8~ZamAdXnZ{B9j%kw_)R)N2^X9b1g zKMX6P^zLevwmtN_O+T(}H?;N5KWCW>!<&kuwqeMiETJ=XPcVe8?Ox>m&brkg=pqjd zp^FjCfpa2VX}~)ad)}P!xUp~0`?WeK{~nxBP_o2g?zR!l&pkTXs|{m;qZWj@Uz7^1 zv6$byQS_c);Eg9dGkx6QOWNI}hLC+Df1iQTgZ*aJ@8*Cm()N4?##nVyK4(S7vX$eS zU#1A?*57RlQvOSKZKT86$VJxAZA1SXct%HhSBiO6baUO6(~Uxz;qx8p8;cQ1xT7=F z7O;NJB{gyZ9|9#{k_sLkV=q^||8M!fwJ&evzEC}pL zJ?m#~Bduf!)oT4eUlNE&OU&6gU^hpS|4!P{{2bO?7ekbYY?P=q1*b+D{4dl0VX&o5 zupYY^j~2WCt*6F>+K_J}ZC})Wt=PIb@c(#BW(-JO6p%?B{oLvA{yQ^V;zOL6>JYCa z?S;@j5Ts&lXTS#T{_}tQVtA|m-0*f2tRJ?h)Vw%5qaZLh2cnts;$*^zBuQ!N+Y*7W zWUo=eUmb?@?m9z9ZGc@=jg_^KR@!fS{qL*8Xs>;ke^?(l{_shWM^{@>>~r1FWQF;) z>@0eO7Vt5f&`mIH+Xq`;(}tnnw!GCHQ+v5HKp?fwW2PRBR_*-r?s>#>W650E!c*cO zY(+A&>XyVKEjAd#bCnD2XlnNncC||s-mPizkk3Hh?gO~Oi@K$wl=I|CL=}K5=yz(e z{euce(HhYoo=0qM2Uar;MP^ux@?6PI6cy-#qCHJHUOo1{;raPpyho*RA2NXg0FiYg zCF>4;v3cj+zjB1@OE8q|k?m3H5j}QiF?xOFA@BWJK`p4wOK(eyyl~GJozBnqX1%0o z0QGnvtIn4r_wzTL7V0FQkDi^*qw6;R>Fw#~h?XfRor3XDEs%XEf&S6R0cftL7;uuG zcCs%M$uTAvyAl?w7@hixbDSS+lieS9R5}JaH+dKMj-NMUCjMvU9|e4;?_v}beLbPO zW`1v;dvyF0XXVG)PJVN=EPi&)qaOD(1NWBuuw)+I)uYSq*Mcha2|O z|CGSO<~^9Nv#vJjP#T=wWu&DkZl&rV5%=cxnnQxPFK+7;_NfYHYu9 zKMxC%0jiAk6R+#0cN3q>gAgQZaqvVbfI=lDiCglj>CH&|6ROrGAlq2K9qws)iXfT+ z+0+#H7{~%hOM8&d(auP0P@WizcI&o>AZ5|A& zy}&%VSp9_hBaVA1DM{bkJ>>`}{#=m`T)ZStEQp$(Ol;Nc+@y92lx3+}Mv3DZC2eqJribB=oyT_}Dv^p}_K^Cfqu2-vCkC zNlJCYAb2&|0BF`ZJhTG$t)r5vI8Fq>@SsrT?*9#2YlRmaS3HQ-Y1HQ?{|$D}HNqFP zS&_n1{jxofTOx8WPMP_N8MAf=8*4~(OE?!XixYubbo<1i>yM>w|Fdf=2+VS1h;0uI z8pI@+dkKWK%bpTFugZ~>E;-W)c_UbK?GKh^qQhq`LHa(&$-Y{{zY1q?kzyMRWX9(A zfCy9>vli>7$q-vR-6ec(KPEuX-m+aR)rpOQgYyJ?k0wlnI3OzTP@VqXf{t|NNq}3> z?HnZc0{7Qym3aRPfmG0bIXpDTxJI0R*aRe!LrEFM>EqRw?SN1`xp63PFCDzWP+?@f z99S2+%4v-;w7UV}Ik-d*KO{uHI>oK(EjV~CuMK{5_SzZT z-`mP*aDDQ2|9gFcPHQ5{f(c#%eaIq|5I^*Ro9xH4dv(t8QNBB2Q{$@LSp^ zjDAelFZ1n8j0GC3Z@bIjUa34M7!f8t<$beJ#yzfikm}Dby7T%I|7X{Eup1T7P{h*GrRz`5T4S-lT^%G$p3z&5 zkIY8@sft;SeO+@?01X3TdAfx7_5|3E4p%2$HLP}1ZrArorTbz`yS1%9YrbD_ueTN4 z>jgIKD5YrbcML-DZVMTN$0c-vqD*12wM99&+b^2vJ-dFIe4fHtTaa#qMrXRrjCaaX z0JIlzYyA7X)TgX93D|nCBUQt`x>m!?2;!NqU$C!ejBoxDK=4}I)&}?LZ-s(P!!<$r zV!&(q;NpD-`-BAfdW1G?Pu)`0N&{{H4Y`wD3=w-JFQNpB z={L0T`r&0*>&UYOYcogaP^%uqe84LE=TjlDX`=MJsghyE;|n25+AfY@-8T`D9lt!S zE8$bW1QL;*2DHIiEF^rsR-CS5bDjZ%3-X^{H%MW}#pb)Ah6DAlf3}@(oKnq!!sa!|DpKF7Mf`NRx!?el zFxnWV=sDI7y=>o|AYEBtp7c!$0o;NP09|O2B?cvszNV3l;Gmn&u!3y3A;0Tt2W{|5 zg6dcjcr;$f{LyYw&t)QcaYL#nE~=s-h!>|2_VxCOc*_?A0%8d*U1IHiCL^O&_vUx^ zWwpr8p4Dowhl@XMCtHYD!X7Fbal0!%%QCG5`xB-)g(Zo)T=5lb0#}v2)hCWlIrd+UW8dUtqo89kAB!p|ZNUANGUFu{V~K{h z8Vo(IraqKcor67+`}X++V!Zg9_GRN+Pm(Q|@#5d74W{HE2(93ZQ72VX8a`k@j!dZNJ`}+!Vjn1##%lw$sNq zi&yTRQW5O%4<27ENOYOjbaO?l^5kqE>fVABd+Uj8Q@L-u>a9KCQ4=jJ^H)%azB~Z0 z)$roZ1K3eWZf_1vj#4_cE6 zFu%i@GwDD=pqd72l^@OT`tHM7Ndc=K6`(leVPrdzvz-rdLg*#<6#s7c3>QFEt4_W+ ziACU<5=?dL*zcF58{drxo!+)(@J>aB8~>8e*14rF{Jt=U zP9|_1w)Dq;Hof1o3i0*Eze!ms?C4+F$CZ+v#gsJOPW+BKPj#hTum&sy>g-da7cXflN*kKRnw! zP%TKuUzpldna;3KkV9P%1GWXZ90+QFT9O5>N_3DnvObhnH*|>bOJrd`=~tq-Jo)`Q z%M!+@kdvs+@+lz)hh z7(RG5c51V9)&=*m)kYD+X9i7;yXA&S$_j zWxD=KWP#X=6=csnh`&6n8QU|!X~pm;641Ikq#~!OWyeYAmQzCE)_- zkEgkyz>ay(QAv?}tlAq4FUY6LO_|~uV98Oio<2?}D7c|q-~td--jfHb@gmD<{@#97 zArQA(Le&Tkz)~|`odr;vufQ6iOwa%VwTJQylssR5VBTMYK(+fZgme-a17gcDpmhIy zb8T(?pF;rAb0{rqi)#cp+xh+!i%mKR2&fJePaAJh&Ak6KA`Aekt+3d0rwAJd+=_D!;Vn6TcB+tG9szfCE+N=tbb(<{`49Ts=Y%nr=AV5yQXdx zNG*G0q7;Ay_PRP#YqRlId6DG!Fz_1lrQ&w03y1q|7hFgcv$SDAFZ zO#XH2wzL4JUw`O7H&raCkxl4!hP{)gd zp*zw71iBQ!KKwEe3$R`8%$RBoORU4;@<04+LhN*75vgMm-EK9?P7+Y$>%_pcZNNA~ z=8p>)Fz!&A`^`^f-}o|>N3SJY=&v1>0@)cm^bqu>I23MFMVXW~J=_z}dZp3C{BUQE zZGg8x-yR?al3Nc8B%1E}6vU-2X--Eoo9OC)j<~zZKR6r%{Ui{+Q$C#O(%(e$O_=ZE zz);yKqe1-eGp%Cr;oibQlRT$d%AAC}2?9E_BJx=w3I*V6>hPfvS*tZ{T%p}`GJhjY z+bd0T^&?jxuPU%PHBN2!j`fHK?vVkYo#SEC?N4W#%HzUgHupTEZ%gYOUK48(MWsSt zNZh!Km0sFvxj|ZPonty8T`kSVDV*ePDqsE>EY6?cpG`pI4cjpX>S8_-FxVaF&XG6^ z$XurIv}NnL`IWoY;@0`{YMb}kz$sp!`E zPglTc!NK{%i&9#3Egd2M+}_AiiA@KG?$Q+O9OlI16|*eZ%3KgIzO#MyOpra8s~Fm0NH|o`nJ!>~BAU3i5?h zRU?2Ee_Z%dQ&h-aT-zaRedC2s!7Y!QXwb_YW zy^j>&YP0jm)dCo;7QoY*3YgIZ&Pe}9BLGQltG(&A3~X|CLRW}jd$ybsxh>Jw7Amy- zl9hMi`hz6WZF$71rD-z%HB)l;Drj8L*%BGQp(pF-@ooFE-%viaj4xequ%sQQA7331 zIjE5)>@+V_>1)vBXyXWN*QrVaV#^DlOfzmg-4PZ8tf!nN`ZHPo$3V{OSGSNgk@NY* z34^w1X#2y}yW{Yur>`|%VO9&Q8W>qHijLEo*tOb*U_4yNI3U4<*Dh5vV<FGS6o(r3i*;)EJ>n7NKQ*bdIR@$bB60_f?g zph+yKZ@OFsuU^Su_y7p7e;#bB_3V~27WgAzJMyY_ggvBskhV&X+)_(qKiUYa$WlUy7 zi;$(fWr$9dcCJT$jukf9m+-x1d_7a*DZmWvf77@p4>p`loe(RqXUqw)&h7!BZUwk; zqNeq#$|;lWk49Ea2-){n+R`LlWB{43|q5BJI(TnO;?+ItR6Ie^}E>87_Htemyw#r#Gk*$O7@QHK;tzZe`U7 zgS!f#`o*K#{gO1-`+aBJxkm|e;po8E!VaijovLcq_z<(=Oz5xpJW@?#a(o6D{9v?) z>w^G2B4YX*jinc|AN6bk=QR4e4Uzb%H5M1X57uC(u{>)hVJQI=6F`-Aw|iVNgI$z0 zZsGXbB}xaZ1C4QtLdzl(t3U&fGy)9MqhZy1u82b$(Owd@n?90^y+ss%@{WR_X;&fj z`NjqLN*hv+c)w%bTz7e#!AE6so?HC3XNZv0)@+Iv`9sV20d(NlA`R!m3UWuAZmd<@ z432CpV)yDSXm{Ek8K2rAG%Whw&xb3CHf>_%q)BcEQAWNW;Vl%IX>Og})G1zit`HX+8NU~kihD}*=bxl~Yjg`MC@`KfiR8Bpt2*67;+d=<3$8wXf7tc@ zeG-c63kG@Gwu#bmhUk3Ji!#RRKFahq5FnAdB`WC20J6Rzw>N^>Mmc@A%5T`7yNCIX z_oeCkjeDnALGY=wTr_jt%d_WZ^rzw?8~0&wpGsg`vq#Iw>nZ=&1M|0gr(OU))*w6I zdDW;o4`YnV@xOwG87yH=mU|IDCTOrZ=&5J&k~1j*>Jvt2uWO`p0|T%Wk+<)9J86!w ztBOiAEx;<3s)Z~_R-Tmm5XAN78XvdN1dz{i@^*?D>L50h4wDvxP>pzI!p=Rdqo?RXlWggkX}_}7G|KPXo6G1z#T1G z#VrZ#&;Y2U1<^3k%8;-EmwmADFM;vxH3J9lKb@+0B*D7#1>0w3h#0yA*jcD?}A!XHxZxs9MhT)X;U65kYyV*!2q< zkwtP!vBMFTWsz=fE!VNKx}QR9uq9|RbV?LYLYv~bSj<08X^4_`P^<3D&tpsBI@zYS%u zaRA=^lRNzH1}9=M+@kEWKnxRllit8vYiu0*evEBW}5u%zI((< zBQ>+CMybk^L3f+#)-Pl-__~-R&0Kjh-0j(wLR=qt$83yvt!OQ@Pz?YS#u=bO|6DFg zs#2kHedQ_e4My0wp9A2dS?&Mn>01nQ0(TR9MfR=3FQD3woKW%B?XfylPWCYY5!(x^ z?_4ty@s|&)WE3eVVKK$X+d70AnJ`SHH7O@2>iW~GBhQ#_k?}gl8L0rrjHnU*; zy1oJNw^4CN@Qmrfr8DorWOzc2Nk9S@;JiJ9FkuoUaR-_vjYMonmk{LcByf* zj;_8NgJab<92ra6Fp?%ue&wzp)F{5ZU1zUx`VJ|$QOkVzGe+AwCwEb_m*_E(9={hw zov844fdtUQYW^TC?zAi7;|2j7oVxJ0)ly#~xnue| zd73>fOn{{p%v1zARCTLt$i?J%E2C>SP9X!DxG?tFlJL0aDp5>Mk+`F=dC~_65H?Y-CET4V;uIIw zRr(1k{WmFFaEvPd>=$)ub9-nS_Ufs>#-i|I`UV5)Z7@5;K){%uJFqcljL}|H5`T^d zI)ec`3;}x6KtqOK*wes8 z($f#YOpCfDwRWo=S8^cFvPEvF1IA{GD(G8QY|AvC&ZjRt%O^lW5ISGzV%E$scR%O= zr^Qu~Cn3;59RNB!Z^=W{L~5{5LDC}y*???E%4^O_&ai5>loqUcU;m11j{MQ2$AeZN+-08 z({cG`xcd9^iM&-JY3r^Oc@X|l(?sq={4K}S1aJ3=FK?MLi|lUy!rmz8QYYHtRk%3( z|I?-Z;+JD105g=c#zS#w%tz$4=5~?2Lh0f2e9*+-atAcczhbE)?4TvYMo<#Ieg-+^ z%N2@j)B=VuLmrabiS|-n*aVF20nq<1vrnQx9QY+?K~pIxxmttBijo0OEVdK1u{|d> zvX$q`iM;@N=FJTtJvRb@$)F?v2k`6hRqXy2p;lqg$3G^Yc{&NKXe-)F)|lKOUZ$dG z=aNSM2UblXN^iy5GtU~AIAWf_`RLK z8eG879k_s~Sg7YJiT_8LnGJqRLG2cz710Xcdv^XP_w_X_rUKx*z8{10yi4YR1S~_rx?{) zeAzTBk8=FuI5~CvEEnbSvJsmxZV%Ke^GFFn#BgY~mr~w7Zt2wmfAn)U^iTJg*NdlD z<)HurfZFO=*HZ(2i6Sce%uc!MjhX9KLI1XVWW26nHck;Bpu%;l_yb=!W%}aSlUw65 zxKj0>Q0wX|LrS-BSH4U1l%GFowPCFFn^crHE7kY=t0OK4iw6*|cQC9ChaC0ZmBA3) zOY-Xu?oY`csJ~;l~VRm?Mq|CWWCu5B|Y6yp|SN4!ipNXeQdPS zj##WceQ0vRrtc1<`oxb=qi%h}?KWAMM9q`u_k2 CIZc58 literal 0 HcmV?d00001 diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..17a465080d7c9e41e80812349d99e0822d6e70b8 GIT binary patch literal 23595 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 aH7ziZsX6u~oQ_6**X6*`{S{86OaB4+YeCuo literal 0 HcmV?d00001 diff --git a/public/microphone.png b/public/microphone.png new file mode 100644 index 0000000000000000000000000000000000000000..7ed7d52ddbccf6028ec7605b3a4ff020a004b506 GIT binary patch literal 11474 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%0AFSS-97vu1@MX5@J;K~?xO3b6pTPm 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 YNO9SE%6D%I@#|sCXcor#MsCsn0?C@mTL1t6 literal 0 HcmV?d00001 diff --git a/public/shareImg.png b/public/shareImg.png new file mode 100644 index 0000000000000000000000000000000000000000..a3476d5b6104f6bc96608863e4aef26be26e6568 GIT binary patch literal 11655 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 { - - const [loading, setLoading] = useState(false) - - useEffect(() => { - - // show a loading indicator - setLoading(true) - - setTimeout(() => { - - // hide loading indicator - setLoading(false) - }, 1000) // 1 second - - // hide loading indicator - return () => { - setLoading(false) - } - }, []) - - const renderLoading = () => { - if ( !loading ) { return } - return - } - - const renderContent = () => { - if ( loading ) { return } - return - } +import React from 'react'; +import Login from './components/Login'; +import SpeechToText from './components/SpeechToText'; +import { BrowserRouter, Routes, Route } from 'react-router-dom'; +function App() { return ( - - - - {renderLoading()} - {renderContent()} - - - ) + <> + + + }> + }> + + + + ); } -export default App +export default App; diff --git a/src/components/CartItemList.css b/src/components/CartItemList.css new file mode 100644 index 00000000..341c76fe --- /dev/null +++ b/src/components/CartItemList.css @@ -0,0 +1,135 @@ + +.cart-item-list { + /* padding:10%; */ + margin:5%; + background-color: #f7f7f7; + border: 1px solid #ddd; + padding: 20px; + border-radius: 5px; + margin-top: 20px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); +} +.item-quantity { + font-size: 16px; + color: #666; + +} +.item-image{ + width: 50px; + height: 50px; +} +.cart-header { + font-size: 24px; + margin-bottom: 20px; + color: #333; +} + +.cart-list { + list-style: none; + padding: 0; +} + +.cart-item { + border: 1px solid #ccc; + padding: 10px; + margin-bottom: 10px; + border-radius: 5px; + display: flex; + flex-direction: column; +} + +.item-title { + font-weight: bold; + font-size: 18px; + margin-bottom: 10px; + color: #333; +} + +.item-details { + display: flex; + flex-direction: column; +} + +.item-id, +.item-price, +.item-rating,.item-quantity { + font-size: 16px; + margin-bottom: 5px; + color: #666; +} + +@media (max-width: 768px) { + .cart-item { + flex-direction: column; + } + + .item-title { + font-size: 16px; + } + + .item-id, + .item-price, + .item-rating { + font-size: 14px; + } + + .cart-buttons { + display: flex; + justify-content: space-between; + align-items: center; + margin-top: 20px; + margin-bottom: 10px; + } + + .cart-button { + width: 100px; + height: 40px; + background-color: #22847f; + color: #fff; + border: none; + border-radius: 5px; + cursor: pointer; + transition: background-color 0.3s; + display: flex; + align-items: center; + justify-content: center; + } + + .cart-button i { + margin-right: 5px; + } + + .cart-button:hover { + background-color: #0056b3; + } +} + + +@media (min-width: 769px) { + .cart-buttons { + display: flex; + gap: 10px; + } + + .cart-button { + width: auto; + height: auto; + background-color: #22847f; + color: #fff; + border: none; + border-radius: 5px; + cursor: pointer; + transition: background-color 0.3s; + display: flex; + align-items: center; + padding: 5px 10px; + } + + .cart-button i { + margin-right: 5px; + } + + /* .cart-button:hover { + background-color: #0056b3; + } */ +} diff --git a/src/components/Content.js b/src/components/Content.js index 44b93897..2444a61e 100644 --- a/src/components/Content.js +++ b/src/components/Content.js @@ -10,7 +10,7 @@ const Content = ({ socketConnection }) => { return ( - {renderHello()} + {/* {renderHello()} */} ) } diff --git a/src/components/Login.js b/src/components/Login.js new file mode 100644 index 00000000..2f8b9e3c --- /dev/null +++ b/src/components/Login.js @@ -0,0 +1,79 @@ +import React, { useState } from 'react'; +import './login.css'; +import { useNavigate } from 'react-router'; + +function Login() { + const navigate = useNavigate(); + + const [username, setUsername] = useState(''); + const [password, setPassword] = useState(''); + const [message, setMessage] = useState(''); + + const handleUsernameChange = (event) => { + const { value } = event.target; + setUsername(value); + }; + + const handlePasswordChange = (event) => { + const { value } = event.target; + setPassword(value); + }; + + const handleLogin = (event) => { + event.preventDefault(); + + fetch('https://fakestoreapi.com/auth/login', { + method: 'POST', + body: JSON.stringify({ + username: username, + password: password, + }), + headers: { + 'Content-Type': 'application/json', + }, + }) + .then((response) => response.json()) + .then((data) => { + if (data.token) { + + setMessage('Login successful!'); + + navigate('/cart'); + } else { + + setMessage('Login failed. Please check your credentials.'); + } + }) + .catch((error) => { + console.error('Error:', error); + setMessage('Login failed. Please check your credentials.'); + }); + }; + + return ( +
+

Let's Shop

+ Logo +
+ + + +
{message}
+
+
+ ); +} + +export default Login; diff --git a/src/components/SpeechToText.css b/src/components/SpeechToText.css new file mode 100644 index 00000000..61d3f551 --- /dev/null +++ b/src/components/SpeechToText.css @@ -0,0 +1,174 @@ + +.container { + text-align: center; + margin: 2rem auto; + max-width: 80%; + padding: 0 20px; + box-sizing: border-box; + display: flex; + flex-direction: column; + align-items: center; + position: relative; +} + +.header { + font-size: 24px; + margin-bottom: 1rem; + color: #333; +} + + +.record-button { + width: 80px; + height: 80px; + /* background-color: #007bff; */ + color: #fff; + border: none; + padding: 10px; + font-size: 18px; + cursor: pointer; + border-radius: 50%; + outline: none; + display: inline-flex; + align-items: center; + justify-content: center; + transition: background-color 0.3s; + position: relative; + z-index: 1; +} + +.record-button.listening { + background-color: #dc3545; +} + +.mic-image { + width: 30px; + height: 30px; +} + +.transcript-container { + margin-top: 1rem; + position: relative; +} + +.transcript-header { + font-size: 18px; + margin-bottom: 1rem; + color: #333; +} + +.transcript-textarea { + width: 100%; + height: 50px; + padding: 10px; + border: 1px solid #ccc; + border-radius: 5px; + font-size: 16px; + resize: none; + z-index: 1; +} + +.suggestions-container { + position: absolute; + width: 100%; + max-height: 150px; + overflow-y: auto; + background-color: #fff; + border: 1px solid #ccc; + border-radius: 5px; + box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1); + z-index: 1000; + top: calc(100% + 10px); + left: 0; + display: none; + list-style: none; + padding: 0; +} + +.suggestion { + + cursor: pointer; + transition: background-color 0.3s; +} + +.suggestion:hover { + background-color: #f0f0f0; +} + + +.add-to-cart-button, +.show-list-button { + background-color: rgb(147, 173, 184); + border: none; + cursor: pointer; + outline: none; + /* margin: 1rem; */ + margin-right: 0.5rem; + padding: 1%; + width: 50%; + position: relative; + z-index: 1; +} + +.button-icon { + width: 30px; + height: 30px; +} + +.button-container { + display: flex; + flex-direction: row; + margin-top: 1rem; + width: 50%; +} + +.input-method-container { + display: flex; + flex-direction: row; + gap: 20px; + align-items: center; + justify-content: center; +} + +.input-method-container label { + display: flex; + align-items: center; +} + +.input-method-container input[type="radio"] { + margin-right: 8px; +} + +@media (max-width: 768px) { + .container { + padding: 0 10px; + } + + .record-button { + font-size: 16px; + padding: 8px; + width: 50px; + height: 50px; + } + + .mic-image { + width: 16px; + height: 16px; + } + + .transcript-textarea { + height: 30px; + font-size: 14px; + } + + .add-to-cart-button, + .show-list-button { + font-size: 16px; + padding: 8px 16px; + } + + .button-icon { + width: 24px; + height: 24px; + } +} diff --git a/src/components/SpeechToText.js b/src/components/SpeechToText.js new file mode 100644 index 00000000..8967b17d --- /dev/null +++ b/src/components/SpeechToText.js @@ -0,0 +1,217 @@ +import React, { useState, useEffect } from 'react'; +import './SpeechToText.css'; +import Autosuggest from 'react-autosuggest'; +import CartItemList from './cartItems'; + +const recognition = new window.webkitSpeechRecognition(); +recognition.continuous = true; +recognition.interimResults = true; +recognition.lang = 'en-US'; + +function SpeechToText() { + const [listening, setListening] = useState(false); + const [transcript, setTranscript] = useState(''); + const [isDisabled, setIsDisabled] = useState(false); + const [inputMethod, setInputMethod] = useState('speak'); + const [manualInput, setManualInput] = useState(''); + const [cartItems, setCartItems] = useState([]); + const [showCart, setShowCart] = useState(false); + const [suggestions, setSuggestions] = useState([]); + + useEffect(() => { + recognition.onresult = handleRecognitionResult; + recognition.onerror = handleRecognitionError; + return () => { + recognition.onresult = null; + recognition.onerror = null; + recognition.stop(); + }; + }, []); + + const toggleCart = () => { + setShowCart(!showCart); + }; + + const handleRecognitionResult = (event) => { + let newTranscript = transcript; + for (let i = event.resultIndex; i < event.results.length; i++) { + newTranscript += event.results[i][0].transcript + ' '; + } + setTranscript(newTranscript); + }; + + const handleRecognitionError = (event) => { + console.error('Speech recognition error:', event.error); + stopRecording(); + }; + + const startRecording = () => { + setTranscript(''); + recognition.start(); + setListening(true); + setIsDisabled(true); + }; + + const stopRecording = () => { + recognition.stop(); + setListening(false); + setIsDisabled(false); + }; + + const handleTextareaChange = (e) => { + if (inputMethod === 'speak') { + setTranscript(e.target.value); + } else if (inputMethod === 'type') { + setManualInput(e.target.value); + } + }; + + const fetchGroceries = () => { + const url = 'https://dummyjson.com/products'; + return fetch(url) + .then((res) => res.json()) + .then((data) => { + return data; + }); + }; + + const addToCart = async () => { + let product; + const data = await fetchGroceries(); + if (inputMethod === 'speak') { + console.log('Item added to cart:', transcript); + product = searchProductByWord(transcript, data.products); + } else if (inputMethod === 'type') { + console.log('Item added to cart:', manualInput); + product = searchProductByWord(manualInput, data.products); + } + + if (!product || (transcript.trim().length == 0 && manualInput.trim().length == 0)) { + console.log('No matching products found.'); + alert('No matching products found.'); + } else { + console.log(`ID: ${product.id}`); + console.log(`Title: ${product.title}`); + console.log(`Price: $${product.price}`); + console.log(`Rating: ${product.rating}`); + console.log('------------------------'); + setCartItems([...cartItems, product]); + alert(product.title + ' - Added to the cart'); + } + }; + + const handleRadioChange = (e) => { + setInputMethod(e.target.value); + setTranscript(''); + setManualInput(''); + }; + + const getCartItems = () => { + console.log('cart items', cartItems); + }; + + function searchProductByWord(word, productsData) { + const cleanedWord = word.replace(/^\s+|\s+$/g, ''); + const foundProduct = productsData.find((product) => + product.title.toLowerCase().includes(cleanedWord.toLowerCase()) + ); + + return foundProduct; + } + + const renderSuggestion = (suggestion) => ( +
{suggestion.title}
+ ); + + const handleInputChange = (event, { newValue }) => { + setManualInput(newValue); + }; + + const onSuggestionsFetchRequested = async ({ value }) => { + const data = await fetchGroceries(); + const filteredProducts = data.products.filter((product) => + product.title.toLowerCase().includes(value.toLowerCase()) + ); + + setSuggestions(filteredProducts.slice(0, 5)); + }; + + const onSuggestionsClearRequested = () => { + setSuggestions([]); + }; + + return ( +
+
+

Please Select Input Method

+
+ + +
+ {inputMethod === 'speak' && ( +
+

Transcript:

+