Commit Graph

70 Commits

Author SHA1 Message Date
kennethreitz fcf18f627c Cadence families and unanswered endings
Two starred ideas, zero new chrome:
- Rhythm dots take a shared color when 2+ lines have the identical
  stress contour (5+ syllables) — flow rhymes, visible
- Line-endings with no rhyme partner get a faint gray fill in the
  rhyme layer: the open loops that show where to strike next

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 05:39:24 -04:00
kennethreitz 57710fd001 Files in, files out: Save .txt and drag-drop import
Drafts escape localStorage — a Save .txt button downloads the current
draft (named after its first line), and dropping text files anywhere
on the page turns each into a new draft tab.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 05:36:45 -04:00
kennethreitz 16b5601cdd Rhyme toggle: switch the color highlighting on/off
First in the toggle row, on by default; the export honors it. Rhythm
dots and alliteration underlines are independent layers, so any
combination works (e.g. rhythm-only for a clean flow view).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 05:34:26 -04:00
kennethreitz c7af71ac75 Three lookup/layer upgrades: ticks, senses, alliteration
- Rhyme/synonym chips already in your draft get a gold tick
- Word card shows WordNet sense count (3+) — double-entendre fuel
- "alliteration" toggle underlines words sharing an initial sound
  (locally clustered, 3+ words), in the editor and the PNG export:
  fills = tail sound, underlines = head sound

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 05:27:09 -04:00
kennethreitz 56ec754c5f Rapper-native: ad-lib awareness and a bar counter
Inline (parentheticals) are delivery, not text — they no longer rhyme
or steal the line-ending slot ("...bunch (yeah)" rhymes on bunch).
The readout leads with "bar 3/16" for the caret's place in its verse.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 05:16:39 -04:00
kennethreitz a5e835bcd7 Drop a stray measurement line in the export dot loop
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 05:12:14 -04:00
kennethreitz 8262f65ae7 Export carries the rhythm dots when the toggle is on
WYSIWYG: PNG line spacing widens to fit, dots centered under each
word in ink, same notation as the editor.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 05:12:03 -04:00
kennethreitz 1027302ab8 Rename the stress toggle to "rhythm"
Sheet music for rapping — the label should say what it feels like,
not what linguists call it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 05:10:39 -04:00
kennethreitz 1d3e78bb99 Stress dots on monosyllables too; nudged lower again
Single-syllable words now get one dot; dots at 2.2em, line-height 2.35.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:47:40 -04:00
kennethreitz 8897b63fa0 Stress dots in ink (white) instead of gold
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:46:39 -04:00
kennethreitz 4afb8f960b Stress dots slightly lower (2.04em, line-height 2.2)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:45:58 -04:00
kennethreitz 566645e22d Nudge stress dots lower (1.9em) with a little more line-height
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:45:40 -04:00
kennethreitz 88aad2de45 Lower the stress dots further (1.72em)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:45:10 -04:00
kennethreitz c858c9fd19 Stress dots sit lower; toggle moves right of Export image
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:44:41 -04:00
kennethreitz c8a498d4e5 Stress-dots layer: syllable emphasis under each word
Optional "stress" toggle renders ●/○ dots beneath every 2+ syllable
word (filled = stressed) in a transparent overlay behind the textarea,
so the dots never disturb text metrics. Backend emits per-word stress.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:42:57 -04:00
kennethreitz 2c07a5ec37 Remove the meter-check toggle
The wavy break-warning and its checkbox are gone; the toolbar keeps
the neutral per-line readout (syllables + meter label) on the caret
line. Backend still computes it; the warning UI just retired.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:40:14 -04:00
kennethreitz d8d9784300 Describes is the default lookup lens
First in the seg row, the initial mode, and where double-click lands.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:36:14 -04:00
kennethreitz dc09641756 RhymeZone-inspired: Describes mode and the ? shortcut
- "Describes" lookup mode: adjectives that commonly modify the word
  (night -> dark, starry, silent) via Datamuse rel_jjb, client-side
- Typing a trailing "?" on a lookup jumps straight to synonyms

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:32:33 -04:00
kennethreitz 16f1db393a Remove Insert at cursor from the word card
The card is now read-only — phonetic readout and dismiss only. Dropped
the orphaned insertAtCursor helper and dead button CSS with it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:29:38 -04:00
kennethreitz 4ab6545bda Remove dictionary definitions; keep the engine-native word card
Drops the dictionaryapi.dev meanings/examples entirely. The lookup
panel ("Rhymes & words") now shows a phonetic readout for the word —
/phones/, syllables, stress, rhyming tail, sounds-like (homophones),
and what it rhymes with in your draft — over Rhymes / Synonyms lists.
RhymeZone-inspired touches kept: rarity-styled chips (common bold,
rare dimmed) and homophones.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:28:51 -04:00
kennethreitz e1b47e3af7 Remove the Mosaics tool; def card stops rebuilding on submode clicks
The two-word generator goes (the /api/word phonetics card stays);
the definition card now belongs to the word — switching Rhymes/
Synonyms only swaps the list, and a dismissed card stays dismissed
until a new word is looked up.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:24:11 -04:00
kennethreitz e45fbf6eb3 Mosaics: first-vowel anchoring and honest empties
Anchoring at the first vowel instead of the stressed rime lets
tonight rebuild as "a night"; single-letter left words return with a
rank penalty; indexes warm at boot; the no-results message stops
blaming syllable count.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:21:45 -04:00
kennethreitz 20f722e5c9 Words inside grouped phrases keep word-level rhyme rights
The pass-4 suppression predates fills-only rendering; mind/time now
pair even while «all this time» rides its mosaic.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:19:03 -04:00
kennethreitz 43bbd527a4 Sidebar exploration tools: mosaics, phonetics, draft cross-reference
- Mosaics submode: two-word phrases that rhyme with a word perfectly,
  built by splitting its rime and searching both halves with reduced-
  vowel squeezing (placement -> place meant, creation -> way shun)
- Definition cards show phonetic anatomy (/phones/ · syllables ·
  stress dots · the rhyming tail) and what the word already rhymes
  with in your draft
- Secondary pronunciations only claim partners within 4 lines, so the
  verb pred-i-KATE can't hand predicate to a distant hook's "eight"

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:17:45 -04:00
kennethreitz 79dee968fa Dim internal fills (14%, phrases 10%)
Ends stay 34% — internals read as texture, not competition.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:10:26 -04:00
kennethreitz daa4b7e8c9 Cut display noise: refrain muting and local consonance
Words a draft uses 4+ times (niggas, bitch, Money) stop lighting up
mid-line — their line-end uses still rhyme. Consonance clusters break
on gaps over two lines: speech can't light keep from eight lines away.
Locks the swimmers/finisher/twist-her chain with a test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:07:05 -04:00
kennethreitz f46f319069 Export image button; remove Load sample
Client-side canvas render of the draft with its rhyme colors — 2x
PNG, draft-titled filename, rhymepad.org watermark. The sample still
seeds first visits; the button is gone.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:04:16 -04:00
kennethreitz f15712a3da Schwa-heavy phrases pair only with parallel phrases
A phrase run with <2 full vowels can't barge into a word family
("Two bitches" -> the Tuna chain) but may pair with a structurally
parallel phrase (clock's ticking / stop tripping).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 04:03:41 -04:00
kennethreitz c8b126d539 Weak endings demoted to a last-resort pass
The -er weak key was claiming commissioner/finisher before the
multisyllabic pass could unite them with militia — Wayne's chain
split into two colors. Weak endings (infancy/see) now run dead last.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 03:59:24 -04:00
kennethreitz bf1fbbfce6 Polish pass: volume, keyboard, focus, titles, tooltips
- Beats get a master volume slider (perceptual curve)
- Cmd/Ctrl+S flashes "saved" instead of the browser dialog;
  Cmd/Ctrl+K jumps to the dictionary input
- Editor autofocuses on desktop; lookup input selects-all on focus;
  panel scrolls to top on new lookups
- Browser tab title follows the active draft
- Tooltips on sample button and meter check

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 03:53:13 -04:00
kennethreitz 35b68cf7b8 Cot-caught merger + end-position assonance for phrases
AO merges into AA except before R (thought/lot, off/forgotten; car/
core stay apart). Line-ending phrases may rhyme on their pure vowel
run like end words always could — "forgotten" / "off of" lands.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 03:51:19 -04:00
kennethreitz e49e5f2844 UX feel pass
- Edited lines keep highlights over their unchanged prefix (no more
  blank-flicker while typing at line ends); 180ms debounce
- Sequence guard against out-of-order analysis responses
- iOS: 16px editor font (no zoom-jump); touch word-selection opens the
  dictionary (double-click equivalent)
- First-ever visit seeds the sample draft so colors show immediately
- Draft tabs restore caret and scroll position

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 03:44:16 -04:00
kennethreitz 8b7ac40f51 Weak endings carry their coda
The weak-end key is now the full final-syllable rime in its own
keyspace, and groups advertise their founding rime's final syllable:
infancy still joins see/be/me (open IY), but screams (IY M Z) no
longer rides the divinity/entirety family.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 03:40:39 -04:00
kennethreitz da3e3433d0 Pronunciation overrides for CMU howlers
stasis (STAH-seez?!) and kinda (KIH-nda) get corrected primaries;
the dict entry stays as a secondary candidate. Oasis of stasis now
glows as the perfect rhyme it is.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 03:37:51 -04:00
kennethreitz e6a721264b Meter check never persists — always starts off
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 03:27:38 -04:00
kennethreitz a8c076163d Weak endings rhyme at line ends
Feminine rhymes anchor on the unstressed final syllable: infancy
joins see/be/me (Lateralus). End-slant pass tries the bare final
vowel as a fallback key, with claiming.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 03:26:09 -04:00
kennethreitz c94cb9f42e Nasal coda class, go-live polish, mobile layout, hardening
- M/N/NG merge in consonance keys (damn/hand/plans, time/line); vc
  consensus lets vowel-founded groups advertise an agreed coda
- Meta description, OG tags, orange favicon, theme-color
- Mobile: single-column layout, panel stacks under the editor
- /healthz, 100k-char draft cap, lookup length/limit caps
- Internal fills brightened (19%, ends stay 34%)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 03:19:40 -04:00
kennethreitz 359ed2c00d Widen the end-vs-internal fill contrast
End rhymes 34%, internals 13% (phrases 22/10) — scheme structure
reads at a glance without the old underlines.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 03:13:20 -04:00
kennethreitz ba0c8a715f Highlights are fills only — no more underlines
End rhymes keep the stronger tint; phrase rhymes paint the stretches
their words don't claim, so multi-word matches still read as units.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 03:09:35 -04:00
kennethreitz aeb3fcdbfc Neutralize NEAR/CURE vowels before R; un-stopword "here"
CMU's fear (IH R) now rhymes with hear/here (IY R) as it does in
every English dialect; same merge for UH/UW before R. "here" earns
back internal-rhyme rights — poets rhyme it constantly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 03:07:31 -04:00
kennethreitz 2b9395f0ee Exact rime lets stopword-anchored phrases pair with words
Prufrock's "is it" / "visit" are phone-for-phone identical; identity
evidence overrides the anchor rule. Stopword-anchored phrases still
can't form groups among themselves.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 03:03:48 -04:00
kennethreitz 58ee98d175 Mosaic phrases reach members' advertised anchors
Groups advertise members' high-specificity mosaic keys (2+ full
vowels) for attachment, and a both-halves-taken phrase may join any
family except its anchor's own — Gambino's "pass the time" now ties
to mastermind/rind across the Mass/pass claim.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 03:02:32 -04:00
kennethreitz cab28ed23e Mosaic triple rhymes + UI truncation
Three-word vowel mosaics (mean to it / seen do it / theme music) now
group, gated hard: the mosaic must draw a full vowel beyond its anchor
word, and all-phrase buckets mirroring the same two word groups stay
suppressed. Scheme readout truncates at 16 letters; draft tabs cap at
170px with ellipsis.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 02:57:31 -04:00
kennethreitz df65fe7762 Remove the Clear button
Drafts made it redundant — open a new tab or select-all-delete.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 02:50:36 -04:00
kennethreitz 7eebbb2415 Remove caret-following suggestions
Didn't earn its place — the panel goes back to fully on-demand.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 02:49:39 -04:00
kennethreitz d2d38d0d5a Both-halves phrases may still tie into a third family
four-inch and door hinge join the orange/storage/porridge clan even
though four/door and inch/hinge each rhyme on their own — a phrase
whose target group differs from both halves' groups carries new
information. The full orange verse is now a test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 02:45:39 -04:00
kennethreitz 942e1745e4 Caret-following rhyme suggestions in the panel
The Dictionary tab pins a dashed "rhymes for this line" box that
tracks the caret line's ending word (debounced, cached) — perfect
rhymes plus a few near ones, click-through to full entries.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 02:42:46 -04:00
kennethreitz 56f2332ed2 Coda consensus: phrases can join vowel-founded groups
When a slant group's founding key is vowel-only but 2+ members agree
on a coda (orange/pourage both AO-R-schwa), the consensus key is part
of the group's sound — door hinge joins from its own line now.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 02:41:15 -04:00
kennethreitz 4d024c7194 Phrases yield only when both halves already rhyme
beast mode / sleep though / seats though: the though half rhyming
shouldn't suppress the phrase that carries the beast/sleep/seats half.
Pure-redundancy phrases (oh my over oh+my) still yield.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 02:35:54 -04:00
kennethreitz e23552237f Reset meter check to off for everyone
Default was already off; bump the storage key so previously-stuck-on
toggles reset too.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 02:28:10 -04:00