An elegant virtual keyboard web app with typing animation and keypress sound effect.
Users should be able to:
- Receive a firendly warning if they're previweing website on a non-desktop device
- Have the theme match up with their system preference and toggle it manually
- Hear a keyboard keypress sound effect as they type, and also switch it off if they wish
- Install the website as a progressive web app (PWA) and use it offline
- Semantic HTML
- Tailwind CSS - Styling
- Vanilla JavaScript
- How PWAs work and how to implement one
- How to detect caps lock state and react to it
- How to simulate virtual typing by manipulating the text inside a text box
- How to dynamically generate HTML fragments while also handling exceptions
- How to handle theme switching (manually/automatically) and detecting user's preference
1. First, you need to clone the project:
git clone https://github.com/ShayanTheNerd/virtual-keyboard-PWA.git
Alternatively, you can copy the source of the project directly to your local environment using Degit:
pnpm i -g degit
degit https://github.com/ShayanTheNerd/virtual-keyboard-PWA new-project-folder
2. Then, install required packages:
pnpm i
3. Finally, run the dev
script to start the dev server:
pnpm run dev
Now, you can preview the project on a local server of your choice. I recommend using the Live Server Extension.
Before deploying the project or creating a new pull request, run the following commands and make sure there are no errors:
pnpm run format
pnpm run build
If you want to develop this project, please stick to these rules:
- Follow the current architecture, coding paradigm, and project folder structure.
- Follow the current character case principals for ids, classes, variables, file and folder names, etc.
- Code based on the current libraries, frameworks, and packages included in the project.
- For styling, utilize Tailwind's features as much as possible, but also make sure to use BEM methodology for naming custom CSS classes.
- In case you need to access an HTML element in JavaScript by a class name, prefix the class name with
js-
. For example,js-submit-btn
. - Add Git commit messages considering Conventional Commits.
Your contribution is always welcome, please follow these steps:
- Fork the project.
- Create your feature branch:
git checkout -b feature/branch-name
. - Make sure to follow instructions in the style guide section.
- Stage all changes you made:
git add -A
. - Commit all staged changes with a descriptive commit message:
git commit -m '✨ feat: add foo bar baz'
. - Push everything to your feature branch:
git push origin feature/branch-name
. - Create a new Pull Request.
This project is licensed under MIT license. You're free to use it, but a link to this page and mentioning the author's name is mandatory. Created by Shayan Zamani.