case file 11 · one line, three ways

Misra.

Misraمصرع — is one line of a couplet. The site is one Urdu poem a week, sent by email and kept forever on the web, shown in Urdu script, Roman Urdu and natural English at the same time, with a meaning under every word that carries one.

live · misra.naveed.io Read this week's poem ↗
§ what it is

My Urdu is a listening Urdu. This is the reading half.

I grew up hearing Urdu poetry and never learned to read it. That's an ordinary place to be if you're second-generation: the sound is familiar, the script isn't, and the meaning is a third thing again, because a classical sher is compressed on purpose — Persian idiom, an old courtly register, a metaphor doing four jobs at once. The usual fix is a translation, and a translation quietly throws away the two things you actually wanted: the sound and the shape.

So Misra refuses to pick. Every poem is stored and rendered as three separate layers — the original Urdu in Nastaliq, the Roman Urdu transliteration, and a plain English reading — and none of them is derived from another at render time. You read the script, you hear the line in your head off the Roman, and the English is one click away when you want it, not sitting on top of the poem by default.

Then the layer that makes it useful: hover any word, in either script, and the gloss bar at the foot of the screen names it and gives its meaning — while its twin in the other script lights up at the same time. That cross-script pairing is the whole product, and it is also the part that fought back hardest. More on that below.

The library is 144 poems from eight poets — Ghalib, Iqbal and Mir carry all but a handful — pulled from Urdu Wikisource, where the text is public domain and the source URL is a real, citable thing. You can browse it by mood rather than by name: love & longing, grief, faith & the divine, wit & rebuke, defiance. Every poem has a recitation. One is featured each week, and everyone gets the same one.

A Hasrat Mohani ghazal on Misra with two translations revealed and the word zamana lit in rose in both scripts, its meaning shown in the gloss bar at the foot of the screen
Gloss bar · both scripts lit
The same ghazal in Misra's Gallery Light theme — black Nastaliq on near-white paper
Gallery Light · ink on paper
The Misra library page, listing poems by poet with mood filters across the top
The library · browse by mood
Misra's A Little Intro page explaining what a misra, a sher and a ghazal are
A little intro · the words
01

Three layers, never derived

Urdu is rtl, Roman Urdu is Urdu written in Latin letters and reads ltr, and each is stored in its own field. A Roman line rendered right-to-left is a bug — and it's the one the first design shipped.

02

Every poem, recited

Not read like prose. Every poem is recited in the measured cadence of shayari khwaani — a beat at the end of each misra, weight on the rhyme — so you hear where the line is supposed to break before you can read it.

03

The model never writes the poem

It transliterates, translates and explains text that came from a named source with a real URL. An invented poet or a guessed provenance is a defect, not content — and unknown is a legitimate answer that displays as nothing at all.

§ my musings

Two scripts don't agree on where a word ends.

Hovering اِس lit up “rab”. Every word after it was one off, all the way down the poem.

The hard part of this app was never the translating. It was that the same line, written twice, doesn't break into the same number of pieces. یارب is one written word and two Roman ones. An izafat chain the Roman joins with hyphens — khanda-e-zere-lab — is three separate words in the script. So you cannot pair the two lines by position, the way you'd pair anything else. You have to pair them by what the words mean, and then get two spellings of the same sound to admit they're the same word.

That produced the rule I like most in here. When the two sides genuinely disagree — sahib against Sahab — the word stays dark and doesn't respond. A word that doesn't answer is better than a word that answers wrongly. Guessing would look better on a screenshot and quietly teach someone the wrong meaning, which is the opposite of the point.

The rest was restraint. The English never sits on top of the poem — it's one click away, because the reason you're here is the sound and the shape. And an early version paged through one couplet at a time, which is fine for a mock and wrong for a poem. A poem is a whole. That went in the bin.

§ read one

No account, no app, nothing to install.

▤ live app misra.naveed.io

It's a web page. Open it on a phone in a queue somewhere — that's the length of a sher, roughly.

  1. Open misra.naveed.io for this week's poem, or hit random and take what you get.
  2. Hover or tap any word — in either script — for its meaning. Its twin lights up in the other line at the same time.
  3. Reveal the translation line by line, when you want it and not before.
  4. Press play and hear the poem recited, so you know how it's meant to land.
  5. Browse the library by mood rather than by poet — grief, defiance, wit & rebuke, love & longing.
  6. Prefer paper to neon? There are two themes, and the light one is black ink on near-white.

Signup is open. The weekly letter starts once the send is finished and reviewed — mailing a real list twice can't be undone, so that's the one piece not being rushed.

§ under the hood
Rails 8.1 · Ruby 3.3.6 Propshaft + importmap · Stimulus · no Node step SQLite everywhere · Litestream → Tigris Solid Queue inside Puma · no second service Gemini · transliteration, translation, glosses Gemini TTS + ffmpeg · AAC recitations Postmark · one letter a week Fly.io · single machine · ord
← prev case fileMH Build Studio back to the top →Weave