👉 LIVE PREVIEW 👈
Classic Where's Waldo game where a picture is shown to the user to find the characters proposed.
The user can click anywhere within the picture bounds if one of the characters is found, a dropdown will appear and the user will be able to select which character was found from a list of characters.
The locations of the characters are registered and then checked on a Firebase database to see if the location clicked is correct.
The application has a timer to set how long did the user take to find all the characters.
Once the game ends, the user will be asked to insert an alias within a modal to registers its score to a leaderboard, where all the scores registered are stored in a Firebase database.
- Select between different 4 consoles to play the game with
- Select any point on the image and choose a character from the dropdown
- Upload your score to a global database
- Use a custom username, Google username or update the score as anonymous
- Sign in with your Google username
git clone https://github.com/Vikms95/react-wheres-waldo.git
cd react-wheres-waldo
npm install
npm start
- React
- react-router
- Typescript
- SASS
- ESLint
- Jest/TL
- Firebase
- Learn how to integrate an app with a Firebase backend database
- Learn how to use semantic HTML, landmark elements, roles and aria-roles
- Learn how to integrate responsive design and media-queries
- Use a CSS preprocessor
- Use typescript's strict mode upfront
- Keep using different git tools to solidify what I've learnt on previous lessons
- Establishing a good testing architecture combining unit and UI tests
- Learn how to check roles within the Devtools to know which elements to getByRole on my UI tests
- Integrate Firebase backend with an application
- Usage of semantic HTML, landmark elements and roles
- How to check a11y roles on the dev tools console so I can use them for getByRole on RTL
- Basic usage of SASS variables, nested selectors and mixins
- How to retrieve and add data to a database
- Usage of Google Sign-in and Sign-out to get personal information of the user
- Usage of nested routes with react-router
- Proper responsive design using units relative to the viewport size
- Create a responsive Navbar which will hide elements from the navbar and add them to a floating dropdown on the side accordign to the window size
- Create only one database when the Firebase SDK get triggered
- Get the coordinates of the button click event relative to the window width, so no matter what the width is, the posisitions of the character would not get distorted.
- Usage of setInterval to hide an element after a certain time of being rendered (setting a setInterval on its useEffect)
- Take some inspiration for design before hoping in to code.
- Add all the character on each map and choose 3 of them randomly when the game starts
- Use custom hooks to abstract the React logic on each component
- Mock Firebase on the unit tests
- Tests the application further
- Improve the Homepage text sizes and weights (it's hard to discern what's a title and what's not)