Skip to main content

The structure & dependencies of the PWA application!

Directory Structure#

Here is the complete structure of the application (PWA version):

  • Detailed structure diagram
β”œβ”€β”€ backendsβ”‚Β Β  β”œβ”€β”€ messages-and-pictures # backend for messages & picturesβ”‚Β Β  β”‚Β Β  └── node_modulesβ”‚Β Β  β”‚Β Β  └── imagesβ”‚Β Β  β”‚Β Β  └── srcβ”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ controllerβ”‚Β Β  β”‚Β Β  β”‚   β”‚Β Β  └── file.controller.jsβ”‚Β Β  β”‚Β Β  β”‚ Β Β β”œβ”€β”€ middlewareβ”‚Β Β  β”‚Β Β  β”‚   β”‚   └── upload.jsβ”‚Β Β  β”‚Β Β  β”‚Β Β  └── routesβ”‚Β Β  β”‚Β Β  β”‚Β Β      └── index.jsβ”‚Β Β  β”‚Β Β  β”œβ”€β”€ .envβ”‚Β Β  β”‚Β Β  β”œβ”€β”€ .gitignoreβ”‚Β Β  β”‚Β Β  β”œβ”€β”€ package.jsonβ”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.mdβ”‚Β Β  β”‚Β Β  β”œβ”€β”€ server.jsβ”‚Β Β  β”‚Β Β  └── utils.jsβ”‚Β Β  β”‚β”‚Β Β  └── video-chat # backend for video chat (not present in the free version)β”‚Β Β   Β Β  β”œβ”€β”€ node_modulesβ”‚Β Β   Β Β  β”œβ”€β”€ .envβ”‚Β Β   Β Β  β”œβ”€β”€ .gitignoreβ”‚Β Β   Β Β  β”œβ”€β”€ package.jsonβ”‚Β Β   Β Β  β”œβ”€β”€ README.mdβ”‚Β Β   Β Β  └── server.jsβ”‚Β Β β”œβ”€β”€ node_modulesβ”‚Β Β β”œβ”€β”€ publicβ”‚Β Β  β”œβ”€β”€ locales # folder for translation (i18next-http-backend)β”‚Β Β  β”‚ Β Β β”œβ”€β”€ frβ”‚Β Β  β”‚   β”‚   └── translation.jsonβ”‚Β Β  β”‚ Β Β β”œβ”€β”€ enβ”‚Β Β  β”‚   β”‚   └── translation.jsonβ”‚Β Β  β”‚   └── ptβ”‚Β Β  β”‚       └── translation.jsonβ”‚Β Β  β”‚β”‚Β Β  β”œβ”€β”€ favicon.icoβ”‚Β Β  β”œβ”€β”€ index.htmlβ”‚Β Β  β”œβ”€β”€ logo192.pngβ”‚Β Β  β”œβ”€β”€ logo512.pngβ”‚Β Β  β”œβ”€β”€ manifest.jsonβ”‚Β Β  └── robots.txtβ”œβ”€β”€ srcβ”‚Β Β  β”œβ”€β”€ adminDashboard # All content of this folder are not present in the free versionβ”‚Β Β  β”‚Β Β  β”œβ”€β”€ componentsβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ Analytics.jsβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ Dashboard.jsβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ Favorites.jsβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ HeaderAdmin.jsβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ Messages.jsβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ OtherList.jsβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ Product.jsβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ Setting.jsβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ Sidebar.jsβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ Stock.jsβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ Team.jsβ”‚Β Β  β”‚Β Β  β”‚   └── TotalOrder.jsβ”‚Β Β  β”‚Β Β  β”‚β”‚Β Β  β”‚Β Β  β”œβ”€β”€ constantsβ”‚Β Β  β”‚Β Β  β”‚   └── DataProduct.jsβ”‚Β Β  β”‚Β Β  β”œβ”€β”€ hooksβ”‚Β Β  β”‚Β Β  β”‚   └── useAdmin.jsβ”‚Β Β  β”‚Β Β  β”œβ”€β”€ imagesβ”‚Β Β  β”‚   β”‚   └── #All the images needed for the dashboard's adminβ”‚Β Β  β”‚   β”‚β”‚Β Β  β”‚Β Β  β”œβ”€β”€ adminPanel.cssβ”‚Β Β  β”‚Β Β  β”œβ”€β”€ AdminPanel.jsβ”‚Β Β  β”‚Β Β  β”œβ”€β”€ adminPanel2.cssβ”‚Β Β  β”‚Β Β  β”œβ”€β”€ AdminPanel2.jsβ”‚Β Β  β”‚Β Β  └── common-css.cssβ”‚Β Β  β”‚β”‚Β Β  β”œβ”€β”€ baseLayoutβ”‚Β Β  β”‚Β Β  β”œβ”€β”€ sharedβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ alertComponentβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ checkboxAlertβ”‚Β Β  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ activateDeleteConvAtom.jsβ”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  β”‚   └── checkbox-alert.cssβ”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  β”‚β”‚Β Β  β”‚ Β Β β”‚Β Β  β”‚   └──customAlert # reusable custom Alert componentβ”‚Β Β  β”‚   β”‚   β”‚Β Β    Β Β β”œβ”€β”€ alert.cssβ”‚Β Β  β”‚   β”‚   β”‚Β Β    Β Β β”œβ”€β”€ Alert.jsβ”‚Β Β  β”‚   β”‚Β Β  β”‚ Β Β   Β  └── clickedAlertAtom.jsβ”‚Β Β  β”‚Β Β  β”‚   β”‚β”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ headerAppβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ headerApp.cssβ”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  └── HeaderApp.jsβ”‚Β Β  β”‚Β Β  β”‚   β”‚β”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ menuComponentsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ bottomMenuβ”‚Β Β  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ bottomMenu.cssβ”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  β”‚   └── BottomMenu.jsβ”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  β”‚β”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  └── radialMenuβ”‚Β Β  β”‚   β”‚   β”‚       β”œβ”€β”€ imgβ”‚Β Β  β”‚   β”‚   β”‚       β”œβ”€β”€ radialMenu.cssβ”‚Β Β  β”‚Β Β  β”‚   β”‚ Β      └── RadialMenu.jsβ”‚Β Β  β”‚Β Β  β”‚   β”‚β”‚Β Β  β”‚   β”‚Β Β  └── offlineMessageβ”‚Β Β  β”‚   β”‚    Β Β  β”œβ”€β”€ offlineMessage.cssβ”‚Β Β  β”‚Β Β  β”‚     Β  └── OfflineMessage.jsβ”‚Β Β  β”‚Β Β  β”‚β”‚Β Β  β”‚Β Β  β”œβ”€β”€ BaseLayout.jsβ”‚Β Β  β”‚Β Β  └── baseLayoutApp.cssβ”‚Β Β  β”‚β”‚Β Β  β”œβ”€β”€ chatComponents # All folders, files, custom hooks, states managment & components for chat appβ”‚Β Β  β”‚Β Β  β”œβ”€β”€ assetsβ”‚Β Β  β”‚Β Β  β”‚ Β  β”œβ”€β”€ sounds # All sounds for notification on chat appβ”‚Β Β  β”‚Β Β  β”‚   β”‚Β Β  └── Β # All sounds are hereβ”‚Β Β  β”‚Β Β  β”‚   └──# All pictures are hereβ”‚Β Β  β”‚   β”‚β”‚Β Β  β”‚ Β Β β”œβ”€β”€ components # Components for chatβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ bottomDrawerβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ bottomDrawer.cssβ”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  └── BottomDrawer.js  # Drawer that appears when you click on the home page buttonβ”‚Β Β  β”‚Β Β  β”‚   β”‚β”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ chatRoomβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ ChatRoomβ”‚Β Β  β”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ componentsβ”‚Β Β  β”‚   β”‚   β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ BottomChatComponent.jsβ”‚Β Β  β”‚   β”‚   β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ EmptyChatMessage.js # Empty message when the messages list is emptyβ”‚Β Β  β”‚   β”‚   β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ HeaderChatComponent.jsβ”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  β”‚   β”‚   └── MessagesComponent.jsβ”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  β”‚   β”‚β”‚Β Β  β”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ ChatRoom.cssβ”‚Β Β  β”‚Β Β  β”‚   β”‚   β”‚Β Β  └── ChatRoom.js # ChatRoom componentβ”‚Β Β  β”‚Β Β  β”‚   β”‚   β”‚β”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  └── HomeChatβ”‚Β Β  β”‚Β Β  β”‚   β”‚     Β  β”œβ”€β”€ HomeChat.cssβ”‚Β Β  β”‚Β Β  β”‚   β”‚    Β Β  └── HomeChat.jsβ”‚Β Β  β”‚Β Β  β”‚   β”‚β”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ joinβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ Join.cssβ”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  └── Join.js # This component is not used in the free version, it's by default component! For the pwa version this is login pageβ”‚Β Β  β”‚Β Β  β”‚   β”‚β”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ loaderβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ loader.cssβ”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  └── Loader.js #Loader componentβ”‚Β Β  β”‚Β Β  β”‚   β”‚β”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ parametersβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ parameters.cssβ”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  └── Parameters.js # Setting panel componentβ”‚Β Β  β”‚Β Β  β”‚   β”‚β”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ resetModalβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ ResetModal.cssβ”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  └── ResetModal.js # modal when you click to reset preferences in setting panelβ”‚Β Β  β”‚Β Β  β”‚   β”‚β”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ speech-recognitionβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ speechToText.cssβ”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  └── SpeechToText.js # Speech to text component integrated to the bottom chat toolsβ”‚Β Β  β”‚Β Β  β”‚   β”‚β”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ suppressConversationModalβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ suppressConversationModal.cssβ”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  └── SuppressConversationModal.js # modal when you click to delete all conversations in setting panelβ”‚Β Β  β”‚Β Β  β”‚   β”‚β”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ videoChatComponent # functionality not present in the free versionβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ videoChatComponent.cssβ”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  └── VideoChatComponent.js # video chat componentβ”‚Β Β  β”‚Β Β  β”‚   β”‚β”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ weatherComponentβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ weather.cssβ”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  └── weatherComponent.js # optional weather componentβ”‚Β Β  β”‚Β Β  β”‚   β”‚β”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ ButtonChat.js # Button on the home page to access the chatβ”‚Β Β  β”‚Β Β  β”‚ Β  └── ImageUploadComponent.js # component for uploading pictureβ”‚Β Β  β”‚Β Β  β”‚β”‚Β Β  β”‚ Β Β β”œβ”€β”€constantsβ”‚Β Β  β”‚Β Β  β”‚ Β  └── constant.js # all constants for the ChatBot intelligencyβ”‚Β Β  β”‚Β Β  β”‚β”‚Β Β  β”‚ Β Β β”œβ”€β”€ hooksβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ useAxios.js # reusable custom hook for axios request (with params) (not present in the free version)β”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ useChat.js # custom hook for chat functionalitiesβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ useChatBot.js # custom hook for chatbot functionalitiesβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ useFetch.js # reusable custom hook for fetch data ( if you dont want use axios, this custom hook is here for that)β”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ useGetUserInfos.js # custom hook for taking user infosβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ useMobile.js # reusable custom hook for  detecting if is mobile or notβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ useParams.js # custom hook for setting panel functionalitiesβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ useSpeechToText.js # custom hook for transcription from speech to txt in chat messageβ”‚Β Β  β”‚Β Β  β”‚ Β  └── useVideoChat.js # custom hook for video chat functionalities (not present in the free version)β”‚Β Β  β”‚Β Β  β”‚β”‚Β Β  β”‚ Β Β β”œβ”€β”€ servicesβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ fetchWeather.js # this component fetch openweather api for weather functionalitiesβ”‚Β Β  β”‚Β Β  β”‚ Β  └── FileUploadService.js # this file make link from font to backendβ”‚Β Β  β”‚Β Β  β”‚β”‚Β Β  β”‚ Β Β β”œβ”€β”€ stateManagerβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ atoms # here are all atoms for states managment for all chat appβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ callEndedAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ clickedGuestAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ clickedOffChatAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ clickedParamsAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ clickedSoundGuitarAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ clickedSoundSoftwareAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ clickedUserAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ dangerZoneAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ exampleClicked.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ exampleFrAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ exampleUsAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ fileFromPictureAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ imageInfoAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ infoPictureFromListAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ isAdminAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ isLanguageAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ isListeningAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ isOnlineAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ isSoundNotifications.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ messageForBotAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ messagesAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ openVideoChatAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ passwordAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ pictComment.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ plusSectionAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ receiveMediasMessageToUserAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ registeruserAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ roomIdAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ seeMediaAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ selectedDarkThemeAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ selectedLightThemeAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ selectedneumorphismThemeAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ selectedSoundAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ speechToTextAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ usernameAtom.jsβ”‚Β Β  β”‚   β”‚   β”‚Β Β  β”œβ”€β”€ validateUsernameAtom.jsβ”‚Β Β  β”‚Β Β  β”‚   β”‚ Β  └── weatherAtom.jsβ”‚Β Β  β”‚Β Β  β”‚   β”‚β”‚Β Β  β”‚Β Β  β”‚ Β  └── selectors # here are on example file for knowing how to use Recoil selectors easy and fastβ”‚Β Β  β”‚Β Β  β”‚     Β  └── exampleSelector.jsβ”‚Β Β  β”‚   β”‚β”‚Β Β  β”‚   └── http-common.js # # this is axios methode for uploading picture to backendβ”‚Β Β  β”‚β”‚Β Β  β”œβ”€β”€ componentsΒ Β β”‚Β Β  β”‚Β Β  β”œβ”€β”€ dropsβ”‚Β Β  β”‚   β”‚Β Β  β”œβ”€β”€ drops.cssβ”‚Β Β  β”‚   β”‚Β Β  └── Drops.jsβ”‚Β Β  β”‚   β”‚β”‚Β Β  β”‚   └── RecoilSimpleExample.jsβ”‚Β Β  β”‚β”‚Β Β  β”œβ”€β”€ hooksβ”‚Β Β  β”‚   β”œβ”€β”€ useDidMount.jsβ”‚Β Β  β”‚   β”œβ”€β”€ useDidUpdate.jsβ”‚Β Β  β”‚   β”œβ”€β”€ useEffectOnceWhen.jsβ”‚Β Β  β”‚   β”œβ”€β”€ useGeolocation.jsβ”‚ Β  β”‚   β”œβ”€β”€ useInput.jsβ”‚Β Β  β”‚   β”œβ”€β”€ useIntersectionObserverRef.jsβ”‚Β Β  β”‚Β Β  └── useWebPush.js # reusable custon hook for Web Push notifications (not present in the free version)β”‚Β Β  β”‚β”‚Β Β  β”œβ”€β”€ postInstallConfigβ”‚Β Β  β”‚   β”œβ”€β”€ withAdmin.jsβ”‚Β Β  β”‚   β”œβ”€β”€ withBottomMenu.jsβ”‚ Β  β”‚   β”œβ”€β”€ withRadialMenu.jsβ”‚ Β  β”‚   β”œβ”€β”€ withRecoilExample.jsβ”‚Β Β  β”‚   └── withVideoChat.jsβ”‚Β Β  β”‚β”‚Β Β  β”œβ”€β”€ Utilsβ”‚Β Β  β”‚   β”œβ”€β”€ common.jsβ”‚Β Β  β”‚   β”œβ”€β”€ routes.jsβ”‚Β Β  β”‚   └── withAdminRoute.jsβ”‚Β Β  β”‚β”‚Β Β  β”œβ”€β”€ App.css # classical file on Reactβ”‚Β Β  β”œβ”€β”€ App.js # classical file on React tooβ”‚Β Β  β”œβ”€β”€ global-css.cssβ”‚Β Β  β”œβ”€β”€ HomePage.jsβ”‚Β Β  β”œβ”€β”€ i18n.js # init file for i18nextβ”‚Β Β  β”œβ”€β”€ index.js # common file on all Reactβ”‚Β Β  β”œβ”€β”€ service-worker.js # Only in the PWA versionβ”‚Β Β  β”œβ”€β”€ serviceWorkerRegistration.js # Only in the PWA versionβ”‚Β Β  └── logo.svgΒ # RUM logo base from cra tool logoβ”‚Β Β β”œβ”€β”€ .env.local # environment variables for the frontend functionalityβ”œβ”€β”€ .gitignore # common in all projectβ”œβ”€β”€ .nvmrc # file for syncronized your node version to the best version for better performance and compatibilityβ”œβ”€β”€ jsconfig.jsonβ”œβ”€β”€ package.jsonβ”œβ”€β”€ README.md└── yarn.lock

The tree structure may seem quite large but appearances are deceiving, for the most part it is small reusable components all made up in the same way, a folder that contains a .css file and a .js file and when functions are called in these components, they come from the custom hook. All the global state management is done through atoms, but I'll explain all that in more detail throughout this documentation.

Dependencies#

 "dependencies": {    "@testing-library/jest-dom": "^5.11.4",    "@testing-library/react": "^11.1.0",    "@testing-library/user-event": "^12.1.10",    "axios": "^0.21.1", # promise-based HTTP Client    "emoji-picker-react": "^3.4.8", # this dependency is for emoji component    "i18next": "^20.3.3", # this dependency is for translation    "i18next-browser-languagedetector": "^6.1.2", # this dependency is for auto-detect browser language    "i18next-http-backend": "^1.2.6", # this dependency is for use locales folder with multiple files translation    "peerjs": "^1.3.2", # used by video chat    "react": "^17.0.2",    "react-alert": "^7.0.3", # this dependency is for copy id alert for video chat invitations    "react-alert-template-basic": "^1.0.2", # this dependency is for copy id alert for video chat invitations    "react-confirm-alert": "^2.7.0", # this dependency is for the custom alert component    "react-copy-to-clipboard": "^5.0.3", # this dependency is for automatic copy id when the user click    "react-device-detect": "^1.17.0", # this dependency is for detect if is browser, Android or IOS    "react-dom": "^17.0.2",    "react-i18next": "^11.11.3", # this dependency is for translation    "react-router": "^5.2.0", # Router    "react-router-dom": "^5.2.0", # Router    "react-scripts": "4.0.3",    "react-speech-recognition": "^3.8.2", # module for transcript speech to text    "recoil": "^0.3.1", # this dependency is for global state managment    "simple-peer": "^9.11.0", # used by video chat    "socket.io-client": "^4.1.3", # used by all chat features    "uuid": "^8.3.2", # generate ramdom id (option not activated in the app - the code is commented)    "visitor-info": "^0.3.1",  # get some infos from users chat    "web-vitals": "^1.0.1",    "workbox-background-sync": "^6.1.5", # PWA google modules    "workbox-broadcast-update": "^6.1.5", # PWA google modules    "workbox-cacheable-response": "^6.1.5", # PWA google modules    "workbox-core": "^6.1.5", # PWA google modules    "workbox-expiration": "^6.1.5", # PWA google modules    "workbox-google-analytics": "^6.1.5", # PWA google modules    "workbox-navigation-preload": "^6.1.5", # PWA google modules    "workbox-precaching": "^6.1.5", # PWA google modules    "workbox-range-requests": "^6.1.5", # PWA google modules    "workbox-routing": "^6.1.5", # PWA google modules    "workbox-strategies": "^6.1.5", # PWA google modules    "workbox-streams": "^6.1.5" # PWA google modules  },