MCPcopy Create free account
hub / github.com/ShivaBhattacharjee/KeyZen

github.com/ShivaBhattacharjee/KeyZen @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
945 symbols 1,920 edges 193 files ⚖ Apache-2.0 10 documented · 1% updated 41d ago★ 139

Browse by type

Functions 776 Types & classes 169
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

image

KeyZen

KeyZen is a typing-test website: timed and word-count drills, quotes, and a zen mode, with detailed results (WPM, accuracy, consistency, charts). On large screens you can turn on a virtual keyboard that highlights keys as you type, plus key sounds and optional haptics (supported devices).

Live : KeyZen


Features

Area What you get
Test modes Time (e.g. 15s–120s), word count, quotes (length presets), zen
Results WPM, raw speed, accuracy, character breakdown, consistency, elapsed time, WPM-over-time chart
Virtual keyboard Classic layout; mirrors expected keys while typing (desktop / lg+ only in the UI)
Sound Per-key feedback via Web Audio (public/sounds/sound.ogg); toggle in Settings
Haptics Optional vibration on supported hardware (web-haptics)
Settings Theme (light / dark / system), accent color, typography (many Google fonts), show keyboard, sound, realtime WPM

Settings are stored in localStorage in the browser.


Prerequisites

  • Node.js 20+ (LTS recommended)
  • pnpm 9+ (used in the commands below)

If you use npm or Yarn, run the equivalent of install and the scripts from package.json.


Installation

  1. Clone the repository

bash git clone https://github.com/shivabhattacharjee/KeyZen.git cd KeyZen

If your folder name differs (e.g. keyboard-typing-test), cd into that directory instead.

  1. Install dependencies

bash pnpm install

This installs all packages and runs postinstall, which copies quote text from the inspirational-quotes package into:

data/quotes.json

Quote mode needs that file; if pnpm install fails, fix the error first—do not skip install.

  1. Run the development server

bash pnpm dev

  1. Open the site

In your browser go to http://localhost:3000.


Production build

pnpm build
pnpm start

By default the app listens on port 3000 (next start). Use pnpm start -- -p 4000 (or your host’s process manager) to change the port.


Sound and the browser

Audio uses the Web Audio API. Many browsers only unlock audio after a user gesture (click, tap, or key press). If sound is enabled in Settings but you hear nothing, interact with the page once (e.g. start typing or click the test area), then try again.


Project scripts

Command Description
pnpm dev Development server (Turbopack)
pnpm build Optimized production build
pnpm start Serve the production build
pnpm lint Run ESLint
pnpm typecheck Run TypeScript (tsc --noEmit)
pnpm format Format TS/TSX with Prettier

Tech stack

  • Next.js (App Router), React 19, TypeScript
  • Styling: Tailwind CSS, shadcn-style UI (Radix primitives, cmdk)
  • Charts: Recharts
  • Motion: Motion
  • Words / quotes: random-words, inspirational-quotes (data copied on install)

Contributing

Issues and pull requests are welcome on GitHub. Before contributing, please read the Contributing guide for the project rules and workflow.

Contributors

Thanks to everyone who has contributed to KeyZen!

ShivaBhattacharjee ShivaBhattacharjee priyanshuwq priyanshuwq RusilKoirala RusilKoirala saaahilhussain saaahilhussain

Extension points exported contracts — how you extend this code

browse all types & interfaces →

Core symbols most depended-on inside this repo

browse all functions →

Shape

Function 546
Method 230
Class 105
Interface 55
Struct 6
Enum 3

Languages

TypeScript83%
C++4%
Go3%
Java3%
Python2%
Rust2%

Modules by API surface

public/sw.js255 symbols
components/ui/keyboard.tsx31 symbols
components/settings-context.tsx30 symbols
components/results-screen.tsx30 symbols
components/ui/magic-keyboard.tsx24 symbols
lib/mistakes.ts16 symbols
components/shareable-result-card.tsx16 symbols
components/settings-panel.tsx13 symbols
app/landing/_components/StatsShowcase.tsx13 symbols
lib/test-storage.ts12 symbols
data/cpp/08_template_specialization.cpp11 symbols
components/ui/alert-dialog.tsx11 symbols

For agents

$ claude mcp add KeyZen \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page