Commit Graph

21 Commits

Author SHA1 Message Date
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 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 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 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 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 924cc54fd5 Consonant-supported phrase matching + richer synonyms
- V+schwa phrases now need their coda consonant to agree with the
  family they join: door hinge keeps orange's R, sloth hugs no longer
  rides over/shoulder. 3-vowel and full-vowel phrase runs unchanged.
- Synonyms lemmatize the query (keys -> key) and return sections:
  synonyms, opposites, broader, related (antonyms, hypernyms,
  satellites, derivational forms) — frequency-ranked, deduped.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 02:27:28 -04:00
kennethreitz 74983245ad Merge near rhymes into the Rhymes view
mode=rhyme now returns perfect rhymes plus a "near" list; the panel
shows them as one view with dashed chips for the slant side.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 02:21:26 -04:00
kennethreitz da82cd6ee2 Multi-anchor rhyme keys + Dictionary mode in the sidebar
KET-a-mine can now rhyme from its first primary stress, not just its
dictionary-final one, so it joins meth-am-PHET-a-mine's family; multi
buckets claim biggest-first since tokens carry several anchor keys.
The lookup panel grew a fourth mode: Dictionary.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 02:14:24 -04:00
kennethreitz 69b8ab4e93 WordNet synonyms + double-click opens definitions
- mode=syn now served locally by NLTK WordNet (already a g2p-en dep),
  sense-grouped by part of speech and frequency-ranked; Datamuse gone
- Double-clicking a word in the draft opens its definition card; the
  card grew a Rhymes button for the old jump
- NLTK wordnet data baked into the Docker image and CI

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 02:09:00 -04:00
kennethreitz e33bf58b11 Fuse rhyme groups that share a vowel family
Perfect subgroups (shoulder/older/colder, coaster/roaster/toaster) no
longer split colors with the slant family around them (soldier/
holster): groups with the same multisyllabic vowel projection merge,
perfect members keep strong styling, slant members keep their marks.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 02:03:19 -04:00
kennethreitz b0c4af345a UX round: definition cards, meter toggle, annotation lines
- Clicking a lookup result now opens a dictionary definition card
  (dictionaryapi.dev) with insertion as an explicit button
- Meter-break warnings live behind a "meter check" toolbar toggle
  (persisted, off by default)
- Lines starting with #, ( or [ are annotations: never highlighted,
  no scheme letter, and they don't split stanzas
- Removed stanza reordering

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 01:56:43 -04:00
kennethreitz c60b9d6d43 Overlapping rhyme layers: phrases as a second visual channel
Phrases now compete in the perfect-rhyme pass anchored at their first
word's stressed vowel ("stir up" = ER AH P = "syrup"), render as
underlines while words render as fills, and can overlap in different
colors — the syrup/cup knot finally displays both schemes. Stopword-
anchored phrases attach only on exact rime identity. Segment-based
highlight renderer replaces the span-per-token one.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 01:41:49 -04:00
kennethreitz 7eaf815e5b Meter coaching: flag lines that break the stanza's pattern
When >=60% of a stanza's lines share a syllable count (+-1), outliers
get a wavy underline and the readout names the target count.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 01:33:27 -04:00
kennethreitz 99ff44ca0e Trim trailing schwas in multisyllabic rhyme keys
militia (IH-AH) now catches commissioner (IH-AH-ER) — a trailing
reduced syllable falls off the beat. Phrase distinctness is checked by
anchor word so "fire burns" can't pose as a rhyme partner for "fire".

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 01:19:02 -04:00
kennethreitz 7a1e0e2953 Add per-line meter detection
CMU stress markers -> stress string per line, scored against the
classical feet (iamb, trochee, anapest, dactyl, amphibrach) with
flexible monosyllables. Syllable count + best-fit meter shown in the
toolbar readout for the caret line.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 01:12:34 -04:00
kennethreitz 84bae60dff RhymePad: phonetic rhyme scratchpad for poets & rappers
FastAPI backend with CMU-dict rhyme detection (perfect, internal,
multisyllabic slant, consonance, multi-word phrases), g2p fallback for
unknown words, rhyme/synonym lookup, draggable stanza reordering,
localStorage drafts, and synthesized beats. 19 regression tests drawn
from real verses (Wayne, Em, Kanye).

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