Commit Graph

13 Commits

Author SHA1 Message Date
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 a62dce399a CI: pre-download NLTK data for g2p-en
Same pre-warm as the Dockerfile — without the tagger the g2p fallback
dies and the OOV-word tests fail.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 01:53:15 -04:00
kennethreitz 85cf9982a2 Add CI workflow and warm-boot the slow lazy bits
GitHub Actions runs pytest on push/PR via uv. App lifespan now loads
the g2p model and builds the near-rhyme index at startup so the first
keystroke and first lookup are never slow.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 01:52:15 -04:00
kennethreitz f60818ef02 Fix highlight class collision with the lookup mode row
The prototype's .seg (display:flex segment control) clobbered the new
highlight segments, turning every rhyme span into a full-width bar.
Highlight segments are .hseg now.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 01:46:08 -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 a58dbf6706 Multiple drafts with tabbed switching
Browser-tab-style chips above the editor; docs live in localStorage
with auto-titles from the first line, deletion backup, and migration
of the single-draft era.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 01:32:27 -04:00
kennethreitz 051534ba45 Add Dockerfile for Dokploy deployment
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 01:27:42 -04:00
kennethreitz 75c8cd9930 Stopword grammatical fillers for internal rhymes
The Ringer stress test: anaphora (don't/just/like/gonna/wanna/'cause/
even/me) lit up dozens of false internal rhymes. Fillers now only
count at line endings, where their use is deliberate.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 01:24:10 -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