{"id":20936330,"url":"https://github.com/extrange/web-app","last_synced_at":"2025-06-11T12:33:05.799Z","repository":{"id":115161496,"uuid":"297691437","full_name":"extrange/web-app","owner":"extrange","description":"A personal dashboard to manage tasks, investments, booklists and more. Built with React and Django","archived":false,"fork":false,"pushed_at":"2024-09-11T02:56:38.000Z","size":108016,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-13T02:43:58.876Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://app.nicholaslyz.com","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/extrange.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-22T15:26:51.000Z","updated_at":"2023-10-06T20:21:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"e957c0cc-c083-408f-9425-0744beda5bd0","html_url":"https://github.com/extrange/web-app","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/extrange%2Fweb-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extrange%2Fweb-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extrange%2Fweb-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extrange%2Fweb-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/extrange","download_url":"https://codeload.github.com/extrange/web-app/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extrange%2Fweb-app/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259265036,"owners_count":22831064,"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":[],"created_at":"2024-11-18T22:19:06.576Z","updated_at":"2025-06-11T12:33:05.735Z","avatar_url":"https://github.com/extrange.png","language":"JavaScript","readme":"# Web App\n\nResponsive PWA to manage lists, books and more. Uses ReactJS and Django.\n\n[Demo](https://app.nicholaslyz.com) (Username: `guest`, Password: `123`)\n\n\n## Features\n\n### Frontend\n\n- :iphone: Complete [PWA][pwa] integration with automatic updates (installable as phone app)\n- :milky_way: Pretty [Three.js][three-js] space background (via [React Three Fiber][react-three-fiber])\n- :zap: High performance input UI (no re-renders!) with [React Hook Form][react-hook-form] (schema validation via [Yup][yup])\n- [Material UI][material-ui] styling\n- Stylish, responsive [scrollbars][overlay-scrollbars] on desktop and mobile\n- [Virtualized scrolling][react-virtuoso]\n- State management with Redux\n- Query caching with [RTK Query][rtk-query]\n- [Sortable tree][react-sortable-tree] for Literature genres\n- Random daily wallpaper\n- (Debounced) autosave on type\n\n### Backend\n\n:lock: Security\n\n- :key: 2FA TOTP support with support for remembered browsers\n- Session Management with ability to log out other sessions\n- Session Hijacking Protection (via country code)\n- :sound: Notification on new logins\n\n:newspaper: Lists\n\n- Undo\n- Support for recurring tasks\n- View completed tasks\n\n:blue_book: Literature  \n\n- Goodreads/Google Books API lookup\n\nPassword Generation\n\n- Cryptographically secure in-browser password generation (via [Web Crypto API][web-crypto-api])\n- [Have I Been Pwned][hibp] cached database lookup\n\n### CI/CD\n\n- Automatic rebuild on `git push` via [Github Actions][github-actions]\n\n## Naming Conventions\n\n- Directories: `kebab-case`\n- Component directories: `PascalCase`\n- Component .js files: `PascalCase`\n- Non-component .js files: `camelCase`\n\n## Directory structure\n\n- `app/`: app-wide setup and globals that depend on all the other folders e.g. - auth, notifications, network error/loading statuses\n- `modules/`:\n  - `Module1/`: No subdirectories\n    - `Module1.js`\n    - `moduleApi.js`: RTK Query definitions via `injectEndpoints`\n    - `moduleSlice.js`: Module specific actions/reducers via `createSlice`\n- `shared/`:\n  - `components/` Shared components e.g. `GenericList`\n  - `static/`: Images, fonts\n  - `useSomeHook.js`\n  - `util.js`\n- `test/`: Mocks (MSW) and tests\n  - `mocks/`:\n    - `module1/`\n      - `module1Api.js`: MSW definitions for module1's api\n      - `module1FakeData.js`\n    - `browser.js`: MSW endpoint\n\n## Misc\n\n- `.github/workflows/main.yml` configures the CI process\n- Check for circular dependencies with `madge -c src` before pushing to `master`\n\n[pwa]: https://web.dev/progressive-web-apps/\n[three-js]: https://threejs.org/\n[react-three-fiber]: https://github.com/pmndrs/react-three-fiber\n[react-hook-form]: https://react-hook-form.com/\n[yup]: https://github.com/jquense/yup\n[material-ui]: https://v4.mui.com/getting-started/installation/\n[overlay-scrollbars]: https://kingsora.github.io/OverlayScrollbars/\n[rtk-query]: https://redux-toolkit.js.org/rtk-query/overview\n[react-virtuoso]: https://virtuoso.dev/\n[react-sortable-tree]: https://github.com/frontend-collective/react-sortable-tree\n[web-crypto-api]: https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API\n[hibp]: https://haveibeenpwned.com/\n[github-actions]: https://docs.github.com/en/actions","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fextrange%2Fweb-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fextrange%2Fweb-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fextrange%2Fweb-app/lists"}