{"id":15111879,"url":"https://github.com/gustavewpm/oc-kasa","last_synced_at":"2025-09-27T13:30:43.224Z","repository":{"id":150239435,"uuid":"622840822","full_name":"gustaveWPM/OC-Kasa","owner":"gustaveWPM","description":"React webapp made during an OpenClassrooms bootcamp. \"Raw React\" project (React libs disallowed).","archived":true,"fork":false,"pushed_at":"2024-03-02T04:18:06.000Z","size":11194,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-09-27T00:24:42.339Z","etag":null,"topics":["damerau-levenshtein","fuzzy-matching","html5","i18n","openclassrooms","openclassrooms-frontend","react-hooks","reactjs","responsive","sass","sass-mixins","typesafe","typesafe-i18n","typescript","vanilla-react","vite","vitejs","vitejs-react"],"latest_commit_sha":null,"homepage":"https://oc-kasa-lyart.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gustaveWPM.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2023-04-03T07:10:06.000Z","updated_at":"2024-03-02T04:18:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"343de8a7-1838-42ed-b1e7-414b5cc90a9b","html_url":"https://github.com/gustaveWPM/OC-Kasa","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gustaveWPM%2FOC-Kasa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gustaveWPM%2FOC-Kasa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gustaveWPM%2FOC-Kasa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gustaveWPM%2FOC-Kasa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gustaveWPM","download_url":"https://codeload.github.com/gustaveWPM/OC-Kasa/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234438059,"owners_count":18832618,"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":["damerau-levenshtein","fuzzy-matching","html5","i18n","openclassrooms","openclassrooms-frontend","react-hooks","reactjs","responsive","sass","sass-mixins","typesafe","typesafe-i18n","typescript","vanilla-react","vite","vitejs","vitejs-react"],"created_at":"2024-09-26T00:24:06.875Z","updated_at":"2025-09-27T13:30:42.796Z","avatar_url":"https://github.com/gustaveWPM.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kasa's React App\n\n## Have you ever done a web application with React?\n\nI didn't either...  \nThis is my first webapp made with React.\n\nProject made during an _OpenClassrooms_ bootcamp.  \n[Learning path: _Développeur Web_](https://openclassrooms.com/fr/paths/717-developpeur-web)\n\n**\"Raw React\" project.**  \n**No React library allowed.**\n\n### Implemented features\n\n#### (_Despite the fact that villains \"educators\" tried to make me build a crappy app by forbidding me to use libs... Boo that!_)\n\n- Rescue mechanisms based on the Damerau-Levenshtein distance (and on the number of consecutive characters in common between the given string and the\n  expected string) to redirect to the right page or suggest a corresponding page possibility for a given URL (typed with typos or incomplete)\n\n  - Incomplete URLs\n    - Redirection\n      - [https://oc-kasa-lyart.vercel.app/about](https://oc-kasa-lyart.vercel.app/about)\n    - Suggestion\n      - [https://oc-kasa-lyart.vercel.app/abou](https://oc-kasa-lyart.vercel.app/abou)\n      - [https://oc-kasa-lyart.vercel.app/housing](https://oc-kasa-lyart.vercel.app/housing)\n  - Typos\n    - Suggestion\n      - [https://oc-kasa-lyart.vercel.app/bauo-tsu](https://oc-kasa-lyart.vercel.app/bauo-tsu)\n    - Redirection\n      - [https://oc-kasa-lyart.vercel.app/about-su](https://oc-kasa-lyart.vercel.app/about-su)\n      - [https://oc-kasa-lyart.vercel.app/abuot-su](https://oc-kasa-lyart.vercel.app/abuot-su)\n      - [https://oc-kasa-lyart.vercel.app/abuot-us](https://oc-kasa-lyart.vercel.app/abuot-us)\n      - [https://oc-kasa-lyart.vercel.app/bauot-su](https://oc-kasa-lyart.vercel.app/bauot-su)\n\n- Dynamic database re-fetching on page first-load/change + local database caching\n\n- Loading placeholders (\"_First-load_\" placeholders, \"_Retrying to load_\" placeholders, \"_Failed to load_\" placeholders, _user local cache-based_\n  placeholders)\n\n- Dark/Light theme\n\n- i18n\n\n  - Infers the language according to the web browser settings\n  - Keeps track of the most recent language choice\n  - Dynamically generates internationalized routes (`/fr/`, `/en-us/`, etc)\n  - Dynamically redirects to the correct route corresponding to the language choice made either by the user or by the language inference\n  - Extensible codebase (type-safe dictionnaries, dynamic API endpoint choice, typed Vocabulary Accessor, automated generators...)\n\n- Animated accordions\n\n  - Possibility to have only one accordion's item opened at a time (just pass several `items` to your `\u003cAccordion\u003e` component)\n  - Possibility to bypass this previous behavior (using multiple mono-item accordions)\n    - [https://oc-kasa-lyart.vercel.app/housing-sheets/c67ab8a7](https://oc-kasa-lyart.vercel.app/housing-sheets/c67ab8a7)\n    - [https://oc-kasa-lyart.vercel.app/about-us](https://oc-kasa-lyart.vercel.app/about-us)\n\n- Animated images slider + infinite loop\n  - [https://oc-kasa-lyart.vercel.app/housing-sheets/0979876d](https://oc-kasa-lyart.vercel.app/housing-sheets/0979876d)\n  - Also has a swiping feature (only on mobiles/tablets).\n\n### Resources\n\n- [Figma Mockups](https://www.figma.com/file/bAnXDNqRKCRRP8mY2gcb5p/UI-Design-Kasa-FR?node-id=3%3A0)\n- [The best articles you would ever read about \"Raw React\"/the React's runtime](https://www.developerway.com)\n\n#### Demo\n\n[https://oc-kasa-lyart.vercel.app/](https://oc-kasa-lyart.vercel.app/)\n\n### How to run this project locally\n\n- `$ yarn start`\n- (or) `$ npm start`\n\n---\n\n\u003cp align=\"center\"\u003e\u003cem\u003eThis GitHub repository is not part of the OPENCLASSROOMS website or OPENCLASSROOMS SAS.\u003cbr\u003eAdditionally, this GitHub repository is NOT endorsed by OPENCLASSROOMS in any way.\u003cbr\u003eOPENCLASSROOMS is a trademark of OPENCLASSROOMS, SAS.\u003c/em\u003e\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgustavewpm%2Foc-kasa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgustavewpm%2Foc-kasa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgustavewpm%2Foc-kasa/lists"}