ai-startup-skills
AI 제품을 만드는 스타트업을 위한 7단계 에이전트 스킬: 검증 → 비즈플랜 → 정책 → 로드쇼 → 고객 확보 → 가격 책정 → 등록
오프라인 우선 타이핑 대회, 현장 부스용 실시간 채점·기기 내 순위표·키보드 중심 플레이 전환 지원
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.
기타TypeScript · CSSGitHub @heykatie온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
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 playerREADME 전문 보기 ↗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.