Inspiration

My wife and I went looking for a baby name app and found two worlds: slick swipe apps with generic Western name lists, and Islamic name apps that are static lists wrapped in banner ads, where half the "meanings" are copy-pasted folklore. For Muslim parents a name's meaning is the child's first dua — it had better be true. Nobody was taking that seriously, so I did.

What it does

Ismi is a Tinder-style swipe deck for Islamic and Arabic baby names. Swipe right to shortlist, left to pass. Every card shows the Arabic script, transliteration, meaning, gender, and — this is the part I care about — where the meaning actually comes from.

  • 1,826 curated names; 565 carry a real Quran citation, chapter and verse
  • Browse by category: Quranic names, Prophets, Sahaba and Sahabiyat, names derived from the 99 Names, meaning themes, "travels well" (easy to pronounce in English)
  • Scholarly notes where views differ (Malak, Taha, Yasin…) — sect-neutral, sourced
  • Shortlist, pin favorites, share cards
  • 19 languages, light/dark, iPhone/iPad/Android

The free tier covers 400 names; Ismi Premium (weekly, yearly with a 7-day free trial, or lifetime via RevenueCat) unlocks the full deck, all categories and filters, and audio pronunciation.

How I built it

Native twice — SwiftUI on iOS, Jetpack Compose on Android — sharing one dataset. The interesting engineering is the names pipeline: names are harvested from open data (Wikidata, Wiktionary, Arabic Wikipedia — no competitor scraping), then every claimed Quranic citation is verified against an index built from the Quranic Arabic Corpus morphology before it can enter the dataset. The rule that shaped everything: never let a language model invent a citation. Meanings are either hand-written, taken from a published dictionary entry, or translated from an authoritative Arabic source with the original kept for audit.

The verifier earned its keep. It rejected "Matt" (the Arabic homograph means "he died"), "Juan" ("treacherous"), and quietly stripped a citation from a name whose Arabic spelling collides with a word for adultery. A static list app would have shipped all of those.

Challenges

  • LLM-judged data drifted from schema in nested fields and crashed the iOS launch decoder. Fix: normalize every nested shape at merge time, and make both decoders tolerant. Lesson learned in production.
  • Google Fonts variable fonts silently pretend to be static — every weight rendered as Light until I rebuilt proper static TTFs.
  • Girl names are scarce in open data (Wiktionary has 133 Arabic female given-name pages vs 419 male). Finding a girl-biased source is still my top data problem, and my target user is an expecting mother.

What's next

Partner sync (swipe together, match on names you both loved), more girl names, and audio recorded by a native speaker instead of TTS.

Built With

  • fastlane
  • jetpack-compose
  • kotlin
  • python
  • quranic-arabic-corpus
  • revenuecat
  • room
  • swift
  • swiftdata
  • swiftui
  • wikidata
  • wiktionary
  • xcodegen
Share this project:

Updates

Submission history