A typing test application inspired by MonkeyType and Vim Racer, built with React, Flask, and MongoDB.
- Multiple test modes: Word Targets (3, 5, 7, 10), and Language (Python, JavaScript, TypeScript, Rust, Go, C)
- Real-time Time, keystrokes and efficiency tracking, including highlighting which key combination being pressed to reach the target is the most optimal for each target.
- User account (register/login)
- Personal statistics and history
- minimal and clean UI inspired by MonkeyType and Vim Racer
- Frontend: React 18, TypeScript, Vite, TailwindCSS, Zustand
- Backend: Python, Flask, Flask-PyMongo
- Database: MongoDB
- Node.js 18+
- Python 3.10+
- MongoDB 6+
- Install MongoDB and start the service:
- Download link: https://www.mongodb.com/try/download/community
- Start MongoDB (the database should auto-create)
-
Navigate to the backend directory: cd backend
-
Create a virtual environment: python -m venv venv
-
Activate virtual environment:
- Windows: venv\Scripts\activate
- macOS/Linux: source venv/bin/activate
-
Install dependencies: pip install -r requirements.txt
-
Copy example environment file and configure it: cp .env.example .env
-
Edit .env with MongoDB connection string: MONGO_URI=
-
Initialize database indexes: flask init-db
-
Run the development server: python run.py
Click the link to the localhost if this is run on your own computer to run it
-
Navigate to the frontend directory: cd frontend
-
Install dependencies: npm install
-
Run the development server: npm run dev
Again, click the link to the localhost if this is run on your own computer to run it
- POST /api/auth/register - Register a new user
- POST /api/auth/login - Login
- POST /api/auth/refresh - Refresh access token
- GET /api/auth/me - Get current user
- PUT /api/auth/me - Update current user
- GET /api/typing/words - Get random words for test
- GET /api/typing/quote - Get a random quote
- POST /api/typing/result - Save test result
- GET /api/typing/results - Get user's test history
- GET /api/typing/stats - Get user's statistics
- GET /api/leaderboard - Get global leaderboard
- GET /api/leaderboard/daily - Get daily leaderboard
MIT