typy: one word at a time, type it, next word snaps in #254

Open
opened 2026-10-24 22:10:35 +00:00 by teahubxyz · 2 comments
Owner

What it is

typy (future home typy.in, read "typin'"; v0 at typy.yolopreneur.lol, slug typy) is a typing game built on the speed-reading pattern (RSVP): one word in the middle of the screen at a time. You type it, it snaps away, the next word lands. No line to scan ahead, no layout; just the word, your fingers and the rhythm. It should feel hypnotic and look great as a screen recording.

Later typy grows into a typing tracker (a browser extension that measures your real speed in sites like claude.ai, timing only, never content) with a public profile at typy.in/@you. Not v0; v0 is the game.

Tone: clean, fast, a little playful. Big type, lots of space, satisfying feedback.

v0 scope

  1. The stage. One word, large, centred. Correct letters fill in as you type; a wrong letter shakes the word and marks it. Space or the last correct letter (setting) advances. Next word animates in from the right, the done word fades left. The upcoming word can be shown as a faint ghost (setting, default on).
  2. Runs. Modes: 30 s, 60 s, 50 words, and endless. Start on first keypress. Esc restarts. Live wpm and accuracy shown small and out of the way.
  3. Tempo mode. Optional: words arrive on a beat that speeds up as you keep up (pacer starts at your last average); miss the beat three times and the run ends. This is the signature mode.
  4. Text sources.
    • Default: common English words, weighted by frequency.
    • Path as the passage: typy.yolopreneur.lol/<topic> (e.g. /react-hooks, /fano-plane) builds a passage about that topic with a cheap model (Venice), cached per topic. Pasted text works too.
    • Daily: one passage per day that everyone types (/daily), with a simple daily board.
  5. Results card. wpm, accuracy, best streak, slowest words, a small per-word speed sparkline. Shareable link (/r/<id>) with an Open Graph image showing the score, so links preview the result.
  6. Replay. The result link can replay the run one word at a time at the original timing (the timing of each keypress is stored, not personal data). Same idea as quc's scrubber.
  7. Challenge a friend. "Race this" on a result makes a link with the same passage and the original run as a ghost pacer.
  8. No account. Name optional (for the daily board). Best scores per device in local storage.

Limits

  • Passages capped (e.g. 300 words); topic generation rate-limited per visitor and cached; plain text only, filtered for anything unsafe.
  • Store per-key timings and the passage only; no tracking beyond that.
  • Keyboard first; on phones show a large input with the on-screen keyboard and still work.

Done when

  • typy.yolopreneur.lol loads straight into a ready run: one centred word, start on first key.
  • 30 s / 60 s / 50 words / endless and tempo mode all work, with live wpm and accuracy.
  • /some-topic produces a typing passage about the topic; /daily gives the same passage to everyone.
  • A finished run gives a result link with a preview image and a word-by-word replay; "race this" plays against the ghost.
  • Phone and desktop render cleanly; tests cover scoring (wpm, accuracy) and the tempo pacer.

Later (not v0)

Browser extension tracking typing speed across sites (timing only, never content), desktop app, typy.in/@you profiles and streaks, code-typing mode, multiplayer live races.

🤖 Generated with Claude Code


Implementation status — 2026-10-24

Implemented and merged in PR #255, deployed at https://typy.yolopreneur.lol/.

  • Canonical source: 5c8d0d9889b569e7df69d264d860d5bab1f24a22; live Worker revision: d81c8bfd4647f847.
  • 29 typy tests passed; repository CI run 2357 passed. Independent live desktop and phone-emulation checks passed. The real live save → result reload → replay → ghost-race flow and 1200×630 PNG preview passed; repeated daily requests matched.
  • The full deployment and acceptance receipt is recorded in PR #255.

Remaining acceptance blocker: the configured Venice account returns HTTP 402, “Insufficient USD or Diem balance to complete request.” Topic generation and caching are implemented and backend-tested, but successful live provider generation/cache verification requires credits at https://venice.ai/settings/api . No purchase or billing change was made. The other app features are live and usable.

Keep this issue open until the account is funded and a generated topic plus its cached second request are verified.

## What it is **typy** (future home typy.in, read "typin'"; v0 at `typy.yolopreneur.lol`, slug `typy`) is a typing game built on the speed-reading pattern (RSVP): **one word in the middle of the screen at a time.** You type it, it snaps away, the next word lands. No line to scan ahead, no layout; just the word, your fingers and the rhythm. It should feel hypnotic and look great as a screen recording. Later typy grows into a typing tracker (a browser extension that measures your real speed in sites like claude.ai, timing only, never content) with a public profile at typy.in/@you. Not v0; v0 is the game. Tone: clean, fast, a little playful. Big type, lots of space, satisfying feedback. ## v0 scope 1. **The stage.** One word, large, centred. Correct letters fill in as you type; a wrong letter shakes the word and marks it. Space or the last correct letter (setting) advances. Next word animates in from the right, the done word fades left. The upcoming word can be shown as a faint ghost (setting, default on). 2. **Runs.** Modes: 30 s, 60 s, 50 words, and endless. Start on first keypress. Esc restarts. Live wpm and accuracy shown small and out of the way. 3. **Tempo mode.** Optional: words arrive on a beat that speeds up as you keep up (pacer starts at your last average); miss the beat three times and the run ends. This is the signature mode. 4. **Text sources.** - Default: common English words, weighted by frequency. - **Path as the passage:** `typy.yolopreneur.lol/<topic>` (e.g. `/react-hooks`, `/fano-plane`) builds a passage about that topic with a cheap model (Venice), cached per topic. Pasted text works too. - **Daily:** one passage per day that everyone types (`/daily`), with a simple daily board. 5. **Results card.** wpm, accuracy, best streak, slowest words, a small per-word speed sparkline. Shareable link (`/r/<id>`) with an Open Graph image showing the score, so links preview the result. 6. **Replay.** The result link can replay the run one word at a time at the original timing (the timing of each keypress is stored, not personal data). Same idea as quc's scrubber. 7. **Challenge a friend.** "Race this" on a result makes a link with the same passage and the original run as a ghost pacer. 8. **No account.** Name optional (for the daily board). Best scores per device in local storage. ## Limits - Passages capped (e.g. 300 words); topic generation rate-limited per visitor and cached; plain text only, filtered for anything unsafe. - Store per-key timings and the passage only; no tracking beyond that. - Keyboard first; on phones show a large input with the on-screen keyboard and still work. ## Done when - `typy.yolopreneur.lol` loads straight into a ready run: one centred word, start on first key. - 30 s / 60 s / 50 words / endless and tempo mode all work, with live wpm and accuracy. - `/some-topic` produces a typing passage about the topic; `/daily` gives the same passage to everyone. - A finished run gives a result link with a preview image and a word-by-word replay; "race this" plays against the ghost. - Phone and desktop render cleanly; tests cover scoring (wpm, accuracy) and the tempo pacer. ## Later (not v0) Browser extension tracking typing speed across sites (timing only, never content), desktop app, typy.in/@you profiles and streaks, code-typing mode, multiplayer live races. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- ## Implementation status — 2026-10-24 Implemented and merged in [PR #255](https://teahub.xyz/teahubxyz/time/pulls/255), deployed at **https://typy.yolopreneur.lol/**. - Canonical source: `5c8d0d9889b569e7df69d264d860d5bab1f24a22`; live Worker revision: `d81c8bfd4647f847`. - 29 typy tests passed; repository CI run 2357 passed. Independent live desktop and phone-emulation checks passed. The real live save → result reload → replay → ghost-race flow and 1200×630 PNG preview passed; repeated daily requests matched. - The full deployment and acceptance receipt is recorded in PR #255. **Remaining acceptance blocker:** the configured Venice account returns HTTP 402, “Insufficient USD or Diem balance to complete request.” Topic generation and caching are implemented and backend-tested, but successful live provider generation/cache verification requires credits at https://venice.ai/settings/api . No purchase or billing change was made. The other app features are live and usable. Keep this issue open until the account is funded and a generated topic plus its cached second request are verified.
teahubxyz added the venture label 2026-10-24 22:10:35 +00:00

🔭 Scout: the repos that gained the most stars this week.

  • pengchujin/aerial-tv (4366★, Kotlin): 给国产电视的一块干净桌面:参照 tvOS 设计的开源 Android TV 桌面,没有广告,开机自动接管。A tvOS-style launcher for Xiaomi, TCL and other China-market TVs.
  • simbasjungles/free-my-tv (4294★, Java): A fast, ad-free home screen for Google TV, LG webOS and Samsung Tizen. One button to undo. [android-tv, claude-code, google-tv, home-screen, launcher, no-ads]
  • JoasASantos/REA-Prompts (2085★, ): REAP - Prompts for you to use REA (Reverse Engineer Anything), get the most out of it, and clone or break down any program [prompt-engineering, rea, reverse-enginnering]
  • EthanArbuckle/fairplay-decrypt (1958★, C): Offline FairPlay App Store IPA decryption with independent key derivation
  • ikow/php2shell-poc (1754★, Python): CVE-2026-109618/109619 — 5 RCE chains + detection rules (Suricata, Sigma, ModSecurity). PHP session.upload_progress pre-auth exploit research. [cve-2026-109618, cve-2026-109619, detection-rules, exploit, php-exploit, php-security]
  • xevrion/hatchzip (1699★, Rust): Extract huge archives in place: the archive shrinks as your files hatch, so you only need room for the output. ZIP, 7z, tar, split archives. [7z, archive, cli, crash-safe, disk-space, extract]
  • wesbos/3d-model-anything (1646★, Swift): Capture iPhone LiDAR and photos, reconstruct editable Three.js rooms, and explore them in a browser.
  • 9bie/php2shell-bypass-aslr-exp (1400★, Python): A php2shell exploit that requires no modifications to the official version, and does not require display_errors or limit_memory.
  • openai/php2shell-checker (1381★, JavaScript):
  • oosexgang/hackios-xnu-kernel (1283★, C):
  • colinhacks/reylo (1211★, Rust): Import .sql files into TypeScript with full type inference and zero codegen.
  • Jakeschincariol/day-trader-skill (1106★, Python): 11 Claude skills for day trading: scan thousands of charts, track breaking news, time every entry and exit, and replay every outcome before you risk a dollar. [backtesting, claude, claude-skills, day-trading, stock-market]
🔭 Scout: the repos that gained the most stars this week. - pengchujin/aerial-tv (4366★, Kotlin): 给国产电视的一块干净桌面:参照 tvOS 设计的开源 Android TV 桌面,没有广告,开机自动接管。A tvOS-style launcher for Xiaomi, TCL and other China-market TVs. - simbasjungles/free-my-tv (4294★, Java): A fast, ad-free home screen for Google TV, LG webOS and Samsung Tizen. One button to undo. [android-tv, claude-code, google-tv, home-screen, launcher, no-ads] - JoasASantos/REA-Prompts (2085★, ): REAP - Prompts for you to use REA (Reverse Engineer Anything), get the most out of it, and clone or break down any program [prompt-engineering, rea, reverse-enginnering] - EthanArbuckle/fairplay-decrypt (1958★, C): Offline FairPlay App Store IPA decryption with independent key derivation - ikow/php2shell-poc (1754★, Python): CVE-2026-109618/109619 — 5 RCE chains + detection rules (Suricata, Sigma, ModSecurity). PHP session.upload_progress pre-auth exploit research. [cve-2026-109618, cve-2026-109619, detection-rules, exploit, php-exploit, php-security] - xevrion/hatchzip (1699★, Rust): Extract huge archives in place: the archive shrinks as your files hatch, so you only need room for the output. ZIP, 7z, tar, split archives. [7z, archive, cli, crash-safe, disk-space, extract] - wesbos/3d-model-anything (1646★, Swift): Capture iPhone LiDAR and photos, reconstruct editable Three.js rooms, and explore them in a browser. - 9bie/php2shell-bypass-aslr-exp (1400★, Python): A php2shell exploit that requires no modifications to the official version, and does not require display_errors or limit_memory. - openai/php2shell-checker (1381★, JavaScript): - oosexgang/hackios-xnu-kernel (1283★, C): - colinhacks/reylo (1211★, Rust): Import .sql files into TypeScript with full type inference and zero codegen. - Jakeschincariol/day-trader-skill (1106★, Python): 11 Claude skills for day trading: scan thousands of charts, track breaking news, time every entry and exit, and replay every outcome before you risk a dollar. [backtesting, claude, claude-skills, day-trading, stock-market] <!-- time {"venture":true,"beat":"scouted","repos":[{"name":"pengchujin/aerial-tv","stars":4366,"desc":"\u7ed9\u56fd\u4ea7\u7535\u89c6\u7684\u4e00\u5757\u5e72\u51c0\u684c\u9762\uff1a\u53c2\u7167 tvOS \u8bbe\u8ba1\u7684\u5f00\u6e90 Android TV \u684c\u9762\uff0c\u6ca1\u6709\u5e7f\u544a\uff0c\u5f00\u673a\u81ea\u52a8\u63a5\u7ba1\u3002A tvOS-style launcher for Xiaomi, TCL and other China-market TVs.","lang":"Kotlin","topics":[],"url":"https://github.com/pengchujin/aerial-tv"},{"name":"simbasjungles/free-my-tv","stars":4294,"desc":"A fast, ad-free home screen for Google TV, LG webOS and Samsung Tizen. One button to undo.","lang":"Java","topics":["android-tv","claude-code","google-tv","home-screen","launcher","no-ads"],"url":"https://github.com/simbasjungles/free-my-tv"},{"name":"JoasASantos/REA-Prompts","stars":2085,"desc":"REAP - Prompts for you to use REA (Reverse Engineer Anything), get the most out of it, and clone or break down any program","lang":"","topics":["prompt-engineering","rea","reverse-enginnering"],"url":"https://github.com/JoasASantos/REA-Prompts"},{"name":"EthanArbuckle/fairplay-decrypt","stars":1958,"desc":"Offline FairPlay App Store IPA decryption with independent key derivation","lang":"C","topics":[],"url":"https://github.com/EthanArbuckle/fairplay-decrypt"},{"name":"ikow/php2shell-poc","stars":1754,"desc":"CVE-2026-109618/109619 \u2014 5 RCE chains + detection rules (Suricata, Sigma, ModSecurity). PHP session.upload_progress pre-auth exploit research.","lang":"Python","topics":["cve-2026-109618","cve-2026-109619","detection-rules","exploit","php-exploit","php-security"],"url":"https://github.com/ikow/php2shell-poc"},{"name":"xevrion/hatchzip","stars":1699,"desc":"Extract huge archives in place: the archive shrinks as your files hatch, so you only need room for the output. ZIP, 7z, tar, split archives.","lang":"Rust","topics":["7z","archive","cli","crash-safe","disk-space","extract"],"url":"https://github.com/xevrion/hatchzip"},{"name":"wesbos/3d-model-anything","stars":1646,"desc":"Capture iPhone LiDAR and photos, reconstruct editable Three.js rooms, and explore them in a browser.","lang":"Swift","topics":[],"url":"https://github.com/wesbos/3d-model-anything"},{"name":"9bie/php2shell-bypass-aslr-exp","stars":1400,"desc":"A php2shell exploit that requires no modifications to the official version, and does not require display_errors or limit_memory.","lang":"Python","topics":[],"url":"https://github.com/9bie/php2shell-bypass-aslr-exp"},{"name":"openai/php2shell-checker","stars":1381,"desc":"","lang":"JavaScript","topics":[],"url":"https://github.com/openai/php2shell-checker"},{"name":"oosexgang/hackios-xnu-kernel","stars":1283,"desc":"","lang":"C","topics":[],"url":"https://github.com/oosexgang/hackios-xnu-kernel"},{"name":"colinhacks/reylo","stars":1211,"desc":"Import .sql files into TypeScript with full type inference and zero codegen.","lang":"Rust","topics":[],"url":"https://github.com/colinhacks/reylo"},{"name":"Jakeschincariol/day-trader-skill","stars":1106,"desc":"11 Claude skills for day trading: scan thousands of charts, track breaking news, time every entry and exit, and replay every outcome before you risk a dollar.","lang":"Python","topics":["backtesting","claude","claude-skills","day-trading","stock-market"],"url":"https://github.com/Jakeschincariol/day-trader-skill"}]} -->

⚠️ scouted failed (1/3): ``opus's research round produced no fresh pick. Retrying next tick.

⚠️ scouted failed (1/3): ``opus`'s research round produced no fresh pick`. Retrying next tick. <!-- time {"venture":true,"beat":"scouted","repos":[{"name":"pengchujin/aerial-tv","stars":4366,"desc":"\u7ed9\u56fd\u4ea7\u7535\u89c6\u7684\u4e00\u5757\u5e72\u51c0\u684c\u9762\uff1a\u53c2\u7167 tvOS \u8bbe\u8ba1\u7684\u5f00\u6e90 Android TV \u684c\u9762\uff0c\u6ca1\u6709\u5e7f\u544a\uff0c\u5f00\u673a\u81ea\u52a8\u63a5\u7ba1\u3002A tvOS-style launcher for Xiaomi, TCL and other China-market TVs.","lang":"Kotlin","topics":[],"url":"https://github.com/pengchujin/aerial-tv"},{"name":"simbasjungles/free-my-tv","stars":4294,"desc":"A fast, ad-free home screen for Google TV, LG webOS and Samsung Tizen. One button to undo.","lang":"Java","topics":["android-tv","claude-code","google-tv","home-screen","launcher","no-ads"],"url":"https://github.com/simbasjungles/free-my-tv"},{"name":"JoasASantos/REA-Prompts","stars":2085,"desc":"REAP - Prompts for you to use REA (Reverse Engineer Anything), get the most out of it, and clone or break down any program","lang":"","topics":["prompt-engineering","rea","reverse-enginnering"],"url":"https://github.com/JoasASantos/REA-Prompts"},{"name":"EthanArbuckle/fairplay-decrypt","stars":1958,"desc":"Offline FairPlay App Store IPA decryption with independent key derivation","lang":"C","topics":[],"url":"https://github.com/EthanArbuckle/fairplay-decrypt"},{"name":"ikow/php2shell-poc","stars":1754,"desc":"CVE-2026-109618/109619 \u2014 5 RCE chains + detection rules (Suricata, Sigma, ModSecurity). PHP session.upload_progress pre-auth exploit research.","lang":"Python","topics":["cve-2026-109618","cve-2026-109619","detection-rules","exploit","php-exploit","php-security"],"url":"https://github.com/ikow/php2shell-poc"},{"name":"xevrion/hatchzip","stars":1699,"desc":"Extract huge archives in place: the archive shrinks as your files hatch, so you only need room for the output. ZIP, 7z, tar, split archives.","lang":"Rust","topics":["7z","archive","cli","crash-safe","disk-space","extract"],"url":"https://github.com/xevrion/hatchzip"},{"name":"wesbos/3d-model-anything","stars":1646,"desc":"Capture iPhone LiDAR and photos, reconstruct editable Three.js rooms, and explore them in a browser.","lang":"Swift","topics":[],"url":"https://github.com/wesbos/3d-model-anything"},{"name":"9bie/php2shell-bypass-aslr-exp","stars":1400,"desc":"A php2shell exploit that requires no modifications to the official version, and does not require display_errors or limit_memory.","lang":"Python","topics":[],"url":"https://github.com/9bie/php2shell-bypass-aslr-exp"},{"name":"openai/php2shell-checker","stars":1381,"desc":"","lang":"JavaScript","topics":[],"url":"https://github.com/openai/php2shell-checker"},{"name":"oosexgang/hackios-xnu-kernel","stars":1283,"desc":"","lang":"C","topics":[],"url":"https://github.com/oosexgang/hackios-xnu-kernel"},{"name":"colinhacks/reylo","stars":1211,"desc":"Import .sql files into TypeScript with full type inference and zero codegen.","lang":"Rust","topics":[],"url":"https://github.com/colinhacks/reylo"},{"name":"Jakeschincariol/day-trader-skill","stars":1106,"desc":"11 Claude skills for day trading: scan thousands of charts, track breaking news, time every entry and exit, and replay every outcome before you risk a dollar.","lang":"Python","topics":["backtesting","claude","claude-skills","day-trading","stock-market"],"url":"https://github.com/Jakeschincariol/day-trader-skill"}],"at":"2026-10-25T00:29:10Z","errors":1} -->
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: teahubxyz/time#254