Creating an Account
Sign Up Process
Complete Verification
- Verify CAPTCHA challenge
- Choose a unique username
- Confirm email address (for email signup)
Usernames can be changed once every 30 days. Choose carefully!
Account Requirements
- Unique username (checked in real-time)
- Valid email address
- Username cannot be on the blocklist
- CAPTCHA verification required
backend/src/api/controllers/user.ts:110-142
What Gets Saved
Test Results
Performance Data
Every completed test saves:
- WPM (words per minute)
- Raw WPM (including mistakes)
- Accuracy percentage
- Character statistics (correct/incorrect/extra/missed)
- Test duration and AFK time
- Consistency scores
Test Metadata
Additional information stored:
- Test mode and configuration
- Language used
- Difficulty settings
- Timestamp
- Restart count
- Active tags
- Funbox modes used
Performance Charts
Detailed analytics:
- WPM over time chart
- Burst speed data (per-word speeds)
- Error count progression
- Key spacing and duration timing
- Key overlap statistics
Personal Bests
PB tracking for:
- Each mode (time/words/quote/custom)
- Each mode configuration (15s, 30s, 60s, etc.)
- Each language
- Each difficulty setting
- Tag-specific PBs
User Preferences
Your account stores all customization settings:- Theme selection and custom themes
- All typing behavior preferences
- Sound and visual settings
- Keyboard layout and display options
- Result filter presets
backend/src/api/controllers/user.ts:535-628
Profile Features
Public Profile
Your profile can display:- Statistics
- Profile Details
- Activity Display
- Discord Integration
Typing Stats:
- Total tests completed
- Total tests started
- Total time typing
- Average WPM
- Personal bests for popular modes
backend/src/api/controllers/user.ts:912-1009Progress Tracking
Personal Bests System
PB Calculation
PB Calculation
Personal bests are tracked separately for:
- Mode: time, words, quote, zen, custom
- Mode2: specific duration/count (15, 30, 60, 10, 25, etc.)
- Language: Each language has separate PBs
- Difficulty: normal, expert, master
- Punctuation: on/off
- Numbers: on/off
- Lazy mode: on/off
- Funbox: Each funbox combination tracked separately
backend/src/api/controllers/user.ts:857-865Statistics Overview
Statistics Overview
Access your typing statistics:
- Tests started vs completed ratio
- Total time spent typing
- Average WPM across all tests
- Consistency trends
- Improvement over time
backend/src/api/controllers/user.ts:867-872Streak System
Streak System
Daily typing streak tracking:
- Current active streak
- Maximum streak achieved
- Streak hour offset (configurable once)
- Daily test activity requirement
- Set your timezone offset
- Maintain streak across timezones
- Premium: detailed streak history
backend/src/api/controllers/user.ts:1113-1135, 1286-1294Test History
Result Management
Accessing Results:
- View all past test results
- Filter by mode, language, difficulty
- Sort by date, WPM, accuracy
- Search specific time periods
- Full chart replay data
- Keystroke timing analysis
- Error patterns
- Word-by-word breakdown
- Chart data not stored for tests over 122 seconds (to save storage)
- Key spacing and duration data also excluded for long tests
Organization Features
Tags System
Managing Tags
Managing Tags
Result Filter Presets
Custom Filters
Custom Filters
Save Filter Combinations:
- Create reusable filter presets
- Quick access to specific result sets
- Maximum presets per user (configurable)
- Mode and mode2
- Language
- Difficulty
- Punctuation/Numbers
- Date ranges
- Tags
backend/src/api/controllers/user.ts:731-757Account Management
Profile Settings
- Username & Email
- Password & Security
- Data Management
- Account Actions
Change Username:
- Once every 30 days
- Must be unique and available
- Instant availability checking
- Cannot use blocked names
- Change email address
- Re-verification required
- Updates Firebase auth
backend/src/api/controllers/user.ts:360-491Social Features
Quotes System
Quote Interaction
Favorite Quotes:
- Save favorite quotes
- Quick access to saved quotes
- Maximum favorites limit (configurable)
- Rate quotes after completion
- Help improve the quote database
- Report inappropriate quotes
backend/src/api/controllers/user.ts:874-910Friends System (Premium)
Friends List
Premium users can:
- Add friends
- View friends’ progress
- Compare statistics
- See online status
backend/src/api/controllers/user.ts:1296-1310Premium Features
Premium features may include:
- Extended test activity history
- Friends system access
- Ad-free experience
- Additional customization options
- Priority support
backend/src/api/controllers/user.ts:595Data Privacy
What’s Stored
Personal Information:- Username
- Email address
- Password (hashed by Firebase)
- Discord ID (if linked)
- IP addresses (for security)
- All test results (unless result saving is disabled)
- Configuration preferences
- Custom themes
- Tags and presets
What’s Not Stored
- Actual typed text (only statistics)
- Passwords (handled by Firebase Auth)
- Payment information (handled by payment processor)
Data Access
- Profile data is public by choice
- Test results are private
- Leaderboards show username and scores only
- You control activity visibility
Leaderboards
Competitive Features
Competitive Features
Global Leaderboards:
- Time mode: 15s and 60s
- English language
- All-time rankings
- Daily leaderboards
- Valid test (not too short, no AFK)
- Not repeated test
- Not opted out
- Realistic WPM values
- Saves your rank for specific modes
- Quick comparison to previous rank
- Updated automatically
backend/src/api/controllers/user.ts:806-815, 1146-1199Inbox System
User Inbox
User Inbox
Features:
- Receive system notifications
- Achievement unlocks
- Admin messages
- Mark messages as read
- Delete messages
- Maximum inbox size (configurable)
- Unread count displayed
backend/src/api/controllers/user.ts:1057-1083Source Code References
- User controller:
backend/src/api/controllers/user.ts - Authentication:
backend/src/utils/auth.ts - User data model: Referenced throughout user.ts
- Firebase integration:
frontend/src/ts/firebase.ts