{"id":21735089,"url":"https://github.com/shashwatkathuria/progressive-web-application","last_synced_at":"2026-04-09T15:49:47.671Z","repository":{"id":124642312,"uuid":"294071333","full_name":"shashwatkathuria/Progressive-Web-Application","owner":"shashwatkathuria","description":"Progressive web application made using MERN stack. Chat handled via sockets alongwith deadline tasks functionality and push notifications.","archived":false,"fork":false,"pushed_at":"2020-09-09T11:17:22.000Z","size":525,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-25T20:43:44.850Z","etag":null,"topics":["chat-application","express","javascript","mern","mern-stack","node","nodejs","progressive-web-app","push-notifications","pwa","react","redux","socket-io","socketio-chat","tasks-list","webpack"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shashwatkathuria.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-09-09T09:51:31.000Z","updated_at":"2024-01-18T10:55:49.000Z","dependencies_parsed_at":null,"dependency_job_id":"ce262c7b-592a-4176-87db-b444ada87ebf","html_url":"https://github.com/shashwatkathuria/Progressive-Web-Application","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shashwatkathuria%2FProgressive-Web-Application","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shashwatkathuria%2FProgressive-Web-Application/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shashwatkathuria%2FProgressive-Web-Application/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shashwatkathuria%2FProgressive-Web-Application/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shashwatkathuria","download_url":"https://codeload.github.com/shashwatkathuria/Progressive-Web-Application/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244712673,"owners_count":20497531,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chat-application","express","javascript","mern","mern-stack","node","nodejs","progressive-web-app","push-notifications","pwa","react","redux","socket-io","socketio-chat","tasks-list","webpack"],"created_at":"2024-11-26T05:11:53.050Z","updated_at":"2025-12-30T19:30:32.703Z","avatar_url":"https://github.com/shashwatkathuria.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Progressive Web Application ![Status completed](https://img.shields.io/badge/Status-finished-2eb3c1.svg) ![MongoDB 3.6.0](https://img.shields.io/badge/Mongodb-3.6.0-blue.svg) ![ExpressJS 4.17.1](https://img.shields.io/badge/ExpressJS-4.17.1-green.svg) ![ReactJS 16.13.1](https://img.shields.io/badge/ReactJS-16.13.1-red.svg) ![Node.js 12.18.3](https://img.shields.io/badge/NodeJS-12.18.3-yellow.svg) ![forthebadge made-with-javascript](https://forthebadge.com/images/badges/made-with-javascript.svg)\n---------------------\n## MADE USING MERN STACK\n---------------------\n Main technical details of the application:\n\n - Frontend and Backend are separate, communication happens\n   through sockets for chatting, and json for every other thing\n   for efficiency.\n\n - Webpack used as a static module bundler to build the assets\n   in a efficient and minified form (if production mode). Specifically\n   webpack used because it is the industry standard these days.\n   Assets here refer JS/JSX, Images, HTML, SCSS (Sass) \u0026 CSS\n\n - NodeJS(14.8.0), ExpressJS and Mongoose used in the backend.\n   Backend code is in src/server\n\n - ReactJS + Redux used in the frontend.\n   Frontend code is in src/assets\n\n - All static assets outputted to dist/ folder.\n\n - Single page application, i.e., only one html page will be required,\n   will serve every thing. Its logic is handled with the help of react-router-dom\n   which is why there is only one html page which webpack outputs as index.html.\n\n - Progressive Web Application - Can be downloaded, manifest and icons provided,\n   limited offline functionality\n\n - Push notifications enabled with the help of web-push and Google Cloud Messaging API\n\n - Comments given in code wherever relevant\n\n--------------------\nHOW TO RUN\n--------------------\nInstall though npm install, then run npm run dev-server in one terminal and\nnpm run dev-build-assets in another terminal.\n- npm install\n\n- npm run dev-server [Continuously watches for development changes and restarts server accordingly]\n- npm run prod-server [Start server only once]\n- npm run dev-build-assets [Continuously watches for changes and builds frontend assets normally]\n- npm run prod-build-assets [Builds minified versions of assets]\n\nNOTE: Assets outputted at dist/ directory.\n\n--------------------\nConfig\n--------------------\nsrc/config/config.js consists of some basic constants.\n\nNOTE: Please also refer to the comments there.\n--------------------\nBackend\n--------------------\n\n------------------------------------------------------------\n# src/server/server.js\n--------------------\n\nServer side configuration. Routes, chat sockets and server configuration.\n\n# src/server/db.js\n--------------------\n\nDatabase connection with mongoose (MongoDB).\n\n------------------------------------------------------------\n# src/server/models\n--------------------\n\n## user.js\n--------------------\n- Hashing, user authentication, modelling of username and password(hash) is taken\ncare of by passport-local and passport-local-mongoose.\n- friends denote the chat friends of user.\n- lastestTasksNotified refers to the last time the user was notified of task deadlines.\n\n## chat.js\n--------------------\n- Chat model is defined here.\n- sender and receiver strings denote respective user usernames(which are emails).\n- read refers to whether or not the receiver has read the message.\n\n## task.js\n--------------------\nConsists of deadline, username(email of user) and description.\n\n------------------------------------------------------------\n\n# src/server/routes\n--------------------\n\n## users_router.js\n--------------------\nHandles login, logout, register, adding new friends and fetching friends list.\n\n## chats_router.js\n--------------------\nHandles /chat paths, in this case only one (html page serving), because rest of the chatting is\nhandled via sockets.\n\n##tasks_router.js\n--------------------\nConsists of deadline, username(email of user) and description.\n\n##notifications_router.js\n--------------------\nPush notifies about upcoming deadline tasks to the user\n\n------------------------------------------------------------\nFRONTEND\n------------------------------------------------------------\n\n# index.js\n--------------------\nEvery asset(except index.html) to be added to the project must be included here.\nWebpack bundles everything from this entry point.\n\n# index.html\n--------------------\nThe only html file, consists of some basic html.\n\n# favicon.png\n--------------------\nWebsite icon.\n\n# sw.js\n--------------------\nService worker for PWA.\n\n# notifications.js\n--------------------\nHelper for notifications.\n\n# stylesheets/\n--------------------\nSass and css files.\n\n# images/\n--------------------\nConsists of sample app icons for Progressive Web Application.\n\n------------------------------------------------------------\n# javascript/\n--------------------\n\n## actions/\n--------------------\nConsists of redux actions for user, task, chat and common.\n\n## reducers/\n--------------------\nConsists of pure redux functions for the global store. Consists of user, chat,\ntask and common reducers and a root reducer which combines all the reducers and exports\nthem to javascript/components/react_container.jsx.\n\n## constants/\n--------------------\nConsists of action type constants for redux.\n\n------------------------------------------------------------\n## components/\n------------------------------------------------------------\n Main UI for the application, consists of JSX files.\n\n - react_container.jsx\n   Starting point, contains basic configuration for redux and react-router-dom\n   and adds itself to react-container (React starting point, i.e., root) in index.html\n\n - app.jsx\n   This is where the UI really starts. Consists of all the sections required.\n\n - chat_section/\n   Consists of chat_section.jsx (starting point of chat), chat_list.jsx (chat\n   users list), chat_window.jsx (when chatting with a friend) and chat_message.jsx\n   which are rendered inside chat_window.jsx.\n\n - common/\n   Consists of navbar, loading spinner and an empty file icons.jsx (icons to be added later).\n\n - error_section/\n   Consists of basic Not Found 404 and 500 internal server error element.\n\n - home_section/\n   Consists of basic home page.\n\n - task_section/\n   Consists of task_section.jsx which renders task rows and new task form.\n\n - user_auth_section/\n   Consists of login and registering forms and corresponding logic along with\n   logout button which appears in navbar.\n\n ------------------------------------------------------------\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshashwatkathuria%2Fprogressive-web-application","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshashwatkathuria%2Fprogressive-web-application","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshashwatkathuria%2Fprogressive-web-application/lists"}