ai-startup-skills
创业公司做 AI 产品的 7 步 Agent Skill 合集:验证 → BP → 政策 → 路演 → 获客 → 定价 → 注册。
Translation pending
An offline-first typing competition for event booths, with live scoring, on-device leaderboards, and keyboard-first player handoffs. Built with React, TypeScript, and IndexedDB.
OtherTypeScript · CSSGitHub @heykatieOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
An offline-ready typing contest for event booths. Built for a landscape iPad and a giant physical keyboard, clickclackchallenge guides each player from a timed typing round to a saved score and the next player—without refreshing the app.
These short recordings show the real app in motion. Use the live demo to try the interactions.
Booth flow: event setup through live typing stats.
Keycap Hop: optional runner gameplay, shown after the Easter egg opens.
Five screenshots below show the individual booth screens in more detail.
Set up an event
Welcome the next playerRead the full README ↗A playful, local-first typing competition for shared screens. Set a round, type against the clock, and see how you rank. The app installs as a web app, keeps scores on the device, and continues to work offline after its first load.
Try the live demo · Product requirements · Technical plan
These recordings show the current app on a landscape iPad-sized screen, with sample scores on the board.
Operators can review this event or all-time totals, including round count, median and fastest WPM, accuracy, mode and round-length mix, activity by hour, and Plinko wins. The recap is calculated on-device and works offline.
The recap above is calculated from sample scores. Names, typed text, and individual score rows are not included in recap totals.
| Event setup: length, mode, board, and device settings | Typing: the current word highlighted, with live stats |
| Results: headline, WPM, accuracy, prize, and name entry | Leaderboard: today's top five, then the next player |
| Goal | How the app handles it |
|---|---|
| Start a challenge | Pick a 30- or 60-second round and Standard, Famous Lines, or Story mode; no passage packs or account setup. |
| Follow the round | Timing starts on the first valid character; live WPM, time, and accuracy update as you type. |
| Save and compare scores | Review results, save a name, and see the leaderboard; event and all-time boards stay on the device. |
| Keep going offline | Install the app from HTTPS to use its cached version; normal scoring and recap need no network. |
| Explore a bonus game | Open Keycap Hop, a separate runner that does not affect contest scores or leaderboards. |
This is a client-side React application with a deliberately local-first design: the browser runs the typing experience and calculations, while IndexedDB stores event data. Vite builds the static app, and the PWA service worker caches the app shell for offline launches. The core round, scoring, leaderboard, and recap paths do not depend on a server.
flowchart LR
Person[Player or operator] --> UI[React 19 + TypeScript 6]
UI --> Logic[Typed app and domain logic<br/>rounds · scoring · recap · ranking]
Logic --> Store[IndexedDB via idb<br/>events · scores · settings]
Build[Vite 8 + vite-plugin-pwa] --> Cache[Workbox service worker<br/>install · cached app shell · updates]
Cache -. serves offline .-> UI
Tests[Vitest + Testing Library] -. verifies .-> Logic
Tests -. verifies .-> Store
| Layer | Technology | How it is used |
|---|---|---|
| UI and application logic | React 19, TypeScript 6 | Typed screens, event state transitions, keyboard controls, and reusable UI behavior. |
| Build and delivery | Vite 8, vite-plugin-pwa, Workbox | Static production build, installable web app, service-worker caching, and update flow. |
| On-device data | IndexedDB through idb | Persist event settings and scores without an account or required application server. |
| Testing | Vitest, Testing Library, jsdom, fake-indexeddb | Exercise scoring, state flows, persistence, screen behavior, and IndexedDB-backed paths. |
| Code quality | oxlint | Fast static checks alongside TypeScript's project build. |
| Optional analysis boundary | Vercel serverless route, Cloudflare Workers AI | A separately tested aggregate-only endpoint is retained for future analysis; the current recap UI does not call it. |
fake-indexeddb exercises persistence paths without a real browser database.Node.js 22 is required (.nvmrc).
nvm use
npm install
npm run dev
The development server skips service-worker registration. To inspect the production build and its install/offline behavior:
npm run build
npm run preview
| Command | What it checks |
|---|---|
npm test | Vitest suite for scoring, persistence, event flows, and game behavior |
npm run build | TypeScript project checks and production Vite build |
npm run lint | oxlint static checks |
This public repository has no license file. Please ask before reusing its code or assets.