Skip to content
Go back

Why it exists · Ismi

Why I built Ismi: a baby-names app where every meaning has a source

When you’re expecting a child in a Muslim family, the name conversation is not a small one. A name’s meaning is treated as the child’s first dua — a wish pronounced over them every day for the rest of their life. So it should be true.

Install the top baby-name apps and check a few meanings against a dictionary. You will find names whose “meaning” is a folk etymology copied from a forum, Quran citations that point at a verse containing a different word that happens to be spelled the same, and names labelled “Islamic” that are simply Arabic, or not even that. Nobody verified anything because verifying is expensive and nobody was checking. Ismi (اسمي, “my name”) is the app that pays that cost.

Table of contents

Open Table of contents

The rule: nothing is invented

Every name in Ismi shows its Arabic script, a transliteration, a meaning, and where the meaning comes from. A meaning is either hand-written from the Arabic root or taken from a published dictionary entry, and the card says which. A Quran citation appears only when the name genuinely occurs in the Quran at that chapter and verse.

That rule makes the dataset the product. Ismi shipped with 1,826 names, 565 of which carry a verified citation. Getting there was a pipeline, not a spreadsheet.

The pipeline

Growing a names list without lowering the trust bar is the whole engineering problem, so it lives in the repo as a set of scripts you can run end to end:

  1. Harvest. harvest_wikidata.py pulls candidate given names and their Arabic labels from Wikidata (CC0), which gives a broad, licence-clean starting set with stable IDs.
  2. Reconcile. reconcile.py deduplicates against the existing set, normalises Arabic orthography, and looks each Arabic form up in the Quranic Arabic Corpus to find genuine occurrences with chapter and verse.
  3. Judge. This is the step that matters. A pair of LLM judges read each candidate with its proposed meaning and citation and reject it for one of two reasons: it isn’t an Islamic name in any meaningful sense, or its citation is a homograph collision. The canonical example is Matt (مات), which does occur in the Quran — as the verb “he died”. An unverified app would happily cite that. The judge sends it back.
  4. Merge. merge_accepted.py re-verifies every citation a second time before writing to the dataset, because the judge’s job is to reject, not to approve.

The judges are deliberately adversarial: they’re instructed to find reasons to say no. The set grows slowly, and that’s fine. A single wrong citation in a religious names app is a review-bomb; the moat is the opposite.

Sect-neutral by construction

The Muslim world disagrees about some names, and a names app is not the place to settle it. Ismi’s category labels — Quranic, Prophets, Sahaba, Ahl al-Bayt, Abdul-X — are descriptive, never doctrinal. Where scholars differ on a name, the card carries a “views differ” note that shows both positions with their sources and issues no verdict. Getting this right took more editorial time than any feature.

”Travels well in English”

The diaspora problem: a name can be beautiful in Arabic and a daily ordeal at an English-speaking school. Every name in Ismi is rated for how easily an English speaker says and spells it, and you can filter on it. No competing app does this, which surprised me, because it’s the first thing my friends in Manchester and Toronto asked about.

Two native apps, one dataset

Ismi is two apps in one repository: SwiftUI + SwiftData on iOS, Jetpack Compose + Room on Android. They share shared/names.json — edit once, copy into both resource folders, rebuild. The UI strings work the same way: an en.json catalog plus nineteen translations, and a generator that emits Apple .strings and Android strings.xml from them, converting {count}-style placeholders to each platform’s format positionally so translators can reorder them. When the “More from Saltserv” screen was added to all my apps this month, adding it to Ismi meant adding keys to twenty JSON files and running one script.

Why not Kotlin Multiplatform? The app is a swipe deck with heavy typography — Amiri for Arabic, Cormorant and Figtree for Latin — RTL layout in three languages, and a mihrab-arch card motif. Every one of those is easier to get right in the platform’s native toolkit, and the shared surface (a JSON file and a filter algorithm) is tiny. I use KMP where the shared surface is large; here it isn’t.

No ads, and the reason

Interstitial ads are the single most common complaint in the reviews of competing baby-name apps. Ismi has none — not a banner, not a “watch a video to see the meaning” — and no analytics either. It works fully offline; the entire dataset ships in the app. The business model is a one-time unlock, and partner matching is always free because that’s the feature couples screenshot.

The keyword that decided the title

“Islamic baby names” has moderate search volume and — this is the important part — a difficulty score of 5 on the App Store, because the incumbents have between zero and thirteen ratings. Searchers type “islamic”, not “muslim”. The US title carries the exact phrase; every other locale’s title carries the local rendering of the same intent with the brand name stripped, because “Ismi” ranks for nothing and the characters are better spent on words a parent would actually type.

Ismi is on the App Store and Google Play. If you find a meaning you think is wrong, the app has a button for exactly that, and I’d genuinely like to know.

Share this article