# Typing Speed Test App

**Tier:** 1-Beginner  

Typing speed tests are a fun and interactive way to measure how fast and accurately you can type.  
In this project, you'll build a simple **Typing Speed Test App** that displays a random passage for the user to type within a limited time.  
Once the timer runs out (or the user finishes typing), the app calculates and displays their **typing speed (WPM)** and **accuracy (%).**

This project will help you understand **real-time input handling**, **timing events**, and **DOM manipulation** — essential skills for building interactive web apps.  


## Features

- **Real-time Timer** – Start typing to begin the timer automatically.  
- **Live Accuracy Check** – Incorrect letters are highlighted instantly.  
- **Performance Stats** – Get detailed results including Words Per Minute (WPM) and Accuracy (%).  
- **Restart Option** – Take the test again with a new random passage.  
- **No External Libraries** – All calculations implemented manually.


## User Stories

- [ ] User can see a **random passage** to type on the screen.  
- [ ] User can start the test by clicking a **Start** button (starts the timer).  
- [ ] User can see a **typing input area** to type the given text.  
- [ ] User can view a **countdown timer** showing how much time is left (e.g., 60 seconds).  
- [ ] User can see their **WPM** and **Accuracy (%)** after finishing or when the timer ends.  
- [ ] User can click **Restart** to take the test again with a new passage.  
- [ ] User sees **real-time error highlighting** while typing.


## Bonus Features

- [ ] User can select different **time durations** (15s, 30s, 60s, 120s).  
- [ ] User can choose **difficulty levels** or text lengths.  
- [ ] User’s **best WPM** is saved locally using `localStorage`.  
- [ ] **Dark/Light Mode** toggle for better UI experience.  
- [ ] Live **WPM and Accuracy** tracking while typing.  
- [ ] **Progress Graphs or History** showing previous scores.  


## Constraints

- Do not use any third-party libraries for typing speed or accuracy calculations.  
- Use only front-end technologies like **HTML**, **CSS**, and **JavaScript** (or React if preferred).  


## How to Calculate WPM

**Words Per Minute (WPM)** = (Total Characters Typed / 5) ÷ (Time in Minutes)  
**Accuracy (%)** = (Correct Characters / Total Characters Typed) × 100  


## Example UI Inspirations

- [Monkeytype](https://monkeytype.com)  
- [10FastFingers](https://10fastfingers.com)  


## Useful Resources

- [Typing Test (Wikipedia)](https://en.wikipedia.org/wiki/Typing_test)  
- [MDN: Keyboard Events](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent)  
- [How to Calculate WPM](https://www.speedtypingonline.com/typing-equations)  


## Example Projects

- [Typing Speed Test – Monkeytype Clone](https://monkeytype.com)  
- [Typing Speed Test (CodePen)](https://codepen.io/rajatkantinandi/pen/PoKyLMy)  
- [Speed Typing Game – Web Dev Simplified](https://github.com/WebDevSimplified/Speed-Typing-Game)  
- [Typing Game in React](https://github.com/karlhadwen/typing-game)  
- [10FastFingers Clone – Vanilla JS](https://codepen.io/joshuaward/full/jObXJZj)  



