TigerType is a Princeton-themed typing platform, inspired by tools like TypeRacer or Monkeytype but tailored for the Princeton community. Users can:
- Practice alone to improve typing speed and accuracy on selected or random text snippets.
- Create private lobbies by generating an invite code to race against friends in real time.
- Join an open queue to compete with any user currently searching for a public match.
Ultimately, TigerType will provide a fun, campus-themed environment with potential for departmental leaderboards, achievements, and social features.
-
User Management & Leaderboards
- CAS authentication for netid-based sign-up/login.
- Global leaderboards that rank users by WPM, accuracy, or total races.
- (Optional) Departmental or class-year leaderboards using ActiveDirectory or user-provided data.
-
Typing Mechanics
- Practice/Single-Player mode for personal improvement.
- Private Lobby mode: generate an invite code for friends to join; all participants race simultaneously.
- Global Matchmaking: random pairing in a public queue.
-
Real-Time Racing
- WebSocket-based communication for broadcasting typed progress live.
- Visual progress bars or snippet highlighting to show each racer's position.
-
Achievements & Analytics (Optional)
- Milestone achievements: "100 WPM Club," "Flawless Accuracy," etc.
- Track improvement over time, display graphs of WPM or accuracy progression.
- Puzzle Mode: Users type to unlock clues or partial text reveals tied to Princeton-themed riddles.
- Tournament System: Bracket-style multi-round competitions.
These are beyond the primary or mid-range scope and would only be considered after core development is complete.
- Node.js (v18 or higher)
- npm (v6 or higher)
- PostgreSQL
-
Clone the Repository
git clone [repository-url] cd tigertype
-
Environment Configuration
- Copy the example environment file:
cp .env.example .env
- Edit the
.env
file with your configuration:- Set up your database credentials
- Configure CAS authentication settings
- Set any other required environment variables
- Copy the example environment file:
-
Install Dependencies
npm run install:all
This will install both server and client dependencies.
-
Running the Application From the root directory, run:
npm run dev
This single command will start both:
- Frontend: http://localhost:5174
- Backend: http://localhost:3000
Note: You only need to run the command from the root directory. Do not run any commands in the client directory separately.
- The backend API server runs on port 3000
- The frontend development server runs on port 5174
- All API requests from the frontend are automatically proxied to the backend
- During development, always access the application through http://localhost:5174
- The backend port (3000) is for API requests only and should not be accessed directly in the browser
- If you encounter dependency issues, try deleting
node_modules
andpackage-lock.json
in both root and client directories, then runnpm run install:all
again - Ensure all environment variables are properly set in your
.env
file - If you see port conflicts, make sure you don't have any other development servers running
- Make sure you're accessing the application through port 5174, not port 3000
-
UI Tier
- Web-based front end (React, Angular, etc.).
- Displays typing interface, race creation/join, leaderboards, user stats.
-
Processing Tier
- Python (Flask/Django) or Node.js (Express) for business logic.
- CAS authentication handling.
- Race session management (especially real-time WebSockets).
- Leaderboard updates and queries.
-
Data Tier
- PostgreSQL or MongoDB for persistent storage of user profiles, snippets, race results, achievements.
- ActiveDirectory: for class-year or department info if you implement specialized leaderboards.
- PrincetonInfo or Art Museum data (optional) for theming text snippets.
- Must request a service account and CAS whitelisting for any non-localhost domain.
- Non-trivial concurrency or real-time features.
- Substantial database schema (users, race results, achievements).
- Weekly demos showing iterative progress.
- Defined MVP so you have a working product early on.
Note: The project name is ultimately TigerType, but the following ideas are retained for completeness.
- Clack & Bicker
- Precept Prowl
- Dean's Date Dash
- Firestone Frenzy
- Orange Bubble Bash
- Street Speed Showdown
- Late Meal Lunge
- Cannon Clack
- Tiger Transit Typers
- Claw to the Top
- Wawa Warriors
- P-Set Panic
- Tap & Toast
- Roaring Revision
- The Paw-suit of Speed
- Keyed Up on The Street
- Tiger Taps
- Precept Pulse
- McCosh Mash
- PawBoard Prowess
- Late Meal Lightning
- Stripes & Hypes
- Pounce & Precept
- Type & TigerInn
- Nassau Knockout
- TigerKeys
- Roaring Typist
- Stripes & Keys
- Paws 'n' Claws Typing
- Clack & Roar
- TigerDash
- OrangeLightning
- Speedy Stripes
- Princetypers
- Paw to the Metal
- IvyKeys
- Clawed to the Top
- TigerClack
- RapidRoar
- Prowl & Type
- Quill & Paw
- Type 'n' Stripe
- TigerHype
- PawBoard
- FlashFur
- KeyGrowl
- Type of the Tiger
- PawPulse
- IvyType
Elevator Speech
TigerType is a Princeton-themed typing race application where users can practice alone or create lobbies (with invite codes) to race against friends. They can also queue up for a public match to race against random Princeton netid holders. Potential departmental or class-year leaderboards and achievements enhance friendly competition.
What the System Will Do
- Single-Player Practice to boost speed/accuracy.
- Private Lobbies where a race code is shared with friends for a real-time race.
- Global Matchmaking to find open races with random participants.
- Leaderboards & Stats showing WPM, accuracy, achievements, and possibly departmental ranking.
Architecture
- UI: A single-page application (React, etc.).
- Server: Flask or Node.js with real-time (WebSocket) capabilities.
- Full, live‑introspected schema with columns, constraints, and ER diagram is available at
docs/DatabaseSchema.md
. - To apply pending DB changes (including making snippet deletes safe via
ON DELETE SET NULL
onlobbies.snippet_id
andrace_results.snippet_id
), run:
npm run migrate
- Database: PostgreSQL or MongoDB for storing user data, race info, snippet text, etc.
-
Row in the ProjectFinder
- Each team member adds a row with project name "TigerType" and a short description.
-
Project Approval Meeting
- Bring this roadmap, possibly a minimal proof-of-concept.
-
Version Control Repository
- Create a private GitHub repo named "TigerType," grant instructors read access.
-
Team Directory
- A private Google Drive folder named "TigerType" containing docs like ProjectOverview, Timeline, wireframes, etc.
-
Project Overview Document
- ~3–7 pages detailing identification, elevator speech, overview, requirements, functionality, design, milestones, risks.
-
Wireframes
- Sketches for login flow, race UI, scoreboard, etc.
-
Prototype
- Basic end-to-end skeleton with minimal front end, CAS login, and simple race logic (storing user data in DB).
-
Alpha Version
- Real-time racing for at least two users in a private lobby.
- CAS integration and a rudimentary leaderboard.
-
Beta Version
- All core features stable: practice mode, private lobbies, global matchmaking, potentially some achievements.
-
Presentation & Slides
- 20-minute public demonstration during reading period, plus Q&A on architecture and lessons learned.
-
Grader's Guide
- Step-by-step instructions for each use case: logging in, creating/joining a race, viewing leaderboards, etc.
-
Product Evaluation
- Testing strategy (white-box, black-box, stress), user feedback, heuristic evaluation, known bugs.
-
Project Evaluation
- Reflection on planning, technical issues, what worked well, acknowledgments.
-
Source Code
- Final code snapshot stored in a
src/
directory in the team's Google Drive, ignoring compiled artifacts.
- Final code snapshot stored in a
-
Final Product
- Deployed "TigerType" site, live for ~two weeks post Dean's Date.
-
CAS Login
- Whitelist the domain and verify netid creation in the DB upon login.
-
Single Snippet Race (Basic)
- A single snippet in practice mode.
- Calculate WPM, accuracy, store results in
race_results
.
-
Result & Leaderboard
- Show final stats to user.
- Possibly a top-5 WPM listing for MVP.
-
Database Essentials
users
: netid, creation timestamps.snippets
: text for typing.race_results
: user_id, snippet_id, wpm, accuracy, timestamp.
-
Deployment & Testing
- Heroku/Render deployment, confirm CAS flow.
- Simple smoke test (login → type → see results).
All members share responsibility for documentation, weekly TA meetings, and consistent commits.
Below are mid-range goals to enhance TigerType before exploring puzzle modes or tournament brackets:
-
Snippet Categories & User-Submitted Snippets
- Store multiple snippet categories (literature, campus-themed, random).
- Potential user submissions (admin-reviewed).
-
Departmental/Class-Year Leaderboards
- Use ActiveDirectory or user-submitted profile data to segment boards.
- Let users filter between "Global," "My Department," and "My Class Year."
-
Async Challenges & Friend Invites
- "Challenge a friend by netid" to beat your score in a snippet.
- Store "challenge" in the DB; friend sees "Pending Challenge" on next login.
-
Achievements & Basic Analytics
- Badges for hitting milestones: "10 Races," "100 WPM," "1,000 typed words."
- Track WPM or accuracy over time in simple data visualizations.
-
Small Real-Time Quick Race (Lobby)
- Create a short code or link for up to N participants.
- WebSockets broadcast typed progress.
- Finishing order displayed once everyone completes or times out.
(Further expansions like puzzle modes or multi-round tournaments can be revisited after these core goals.)