Commit Graph

52 Commits

Author SHA1 Message Date
kennethreitz 45bb65d9d1 Normal caret height when rhythm is off
Line-height returns to 1.9 by default; the roomy 2.35 line box (and
its tall caret) only applies while the rhythm dots need the space.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 11:53:36 -04:00
kennethreitz 49b536c434 Toggle order rhyme/alliteration/rhythm; dots persist while typing
The rhythm layer now keeps dots over the unchanged prefix of an
edited line (same logic as the rhyme fills) instead of blanking the
whole line until re-analysis.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 11:52:25 -04:00
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 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 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 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 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 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 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 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 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 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
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 b82b26efb1 Definition always pins on top; submodes are just the lists
The Definition button is gone — every lookup shows the dictionary card
above whichever list is active (rhymes / near / synonyms).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 02:19:36 -04:00
kennethreitz 99cd934394 Sidebar is a dictionary; modes are submodes of the current word
Tab renamed Dictionary, Definition is the default submode, and every
navigation (Go, double-click, chip click, card buttons) routes through
the same word + submode state.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 02:17:30 -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 03fc5d16d0 Remove the current-stanza legend from the side panel
The scheme readout in the toolbar covers it; the panel is for lookups.

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