Nafis (نفيس, "precious") puts every valuable you care about in one place — the daily gold price at your local صاغة, silver, platinum and palladium, live currency rates, and crypto — then lets you track what you actually own and what it's worth today. Local metal prices are read off the صاغة board itself, as a بيع/شراء (buy/sell) pair, so the numbers match the apps people already trust — with no backend and no API keys. Everything works offline; your holdings live on your device.
Nafis (نفيس) is Arabic for precious. The goal: the price you'd actually pay at the صاغة — not just international spot — for everything valuable you hold, with your portfolio, zakat, and a full toolbox in one calm, Arabic-first app.
Download
Nafis is live on Google Play — v1.33.0, in production at a 100% rollout. Android-first, العربية / English with a right-to-left layout, offline-first, and no backend.
Screens
A tour of Nafis — sixteen screens covering every part of the app. Shot on the "Champagne" light theme in English; the app is Arabic-first, with a full RTL mirror and a "Bullion" dark theme.
| Home | Markets |
|---|---|
![]() |
![]() |
| Asset detail | Insights |
![]() |
![]() |
| Portfolio | Portfolio performance |
![]() |
![]() |
| Compass | Fear & Greed |
![]() |
![]() |
| Calculator | Buying monthly |
![]() |
![]() |
| Gold gam'eya | Zakat |
![]() |
![]() |
| Authenticity | Fair price |
![]() |
![]() |
| News | Tools |
![]() |
![]() |
Why Nafis
Most price apps quote international spot and stop there — but nobody buys gold at spot. Nafis models the price you'd actually pay at the صاغة, tracks what you own against it, and does it all with no backend and no keys.
- Local prices, market-accurate — each karat shows بيع (buy) and شراء (sell), read off the live صاغة board. Where a board publishes 24K, that is the figure used — never one scaled off its 21K row.
- Keyless and failure-tolerant — every quote has a second source behind it (metals gold-api → Swissquote, crypto CoinGecko → Binance, FX open.er-api → a static mirror), and every socket carries a deadline sized from the real link, so one quiet host can't hang a refresh.
- Offline-first, instant — a live rates payload is cached in MMKV so the UI paints instantly on cold start; a failed fetch never blanks the screen.
- Honest about freshness — one stamp per source, each on its own clock, and the app says market closed rather than stamping a weekend copy "live".
- Polished in light & dark — a "Bullion" dark and "Champagne" light identity, warm-tinted, following the system by default, with full RTL and no floats anywhere.
Features
Local prices
- Gold (24/22/21/18K), silver (999/925/800), platinum and palladium — per gram and per ounce, each karat with a بيع/شراء spread off the live صاغة board and the الفجوة السعرية on view
- Local gold coins — الجنيه الذهب (8g 21K), half, quarter, and ounce coin
- Crypto and every major currency vs your home currency, all in your local money (USD is the anchor)
- Bank rates — the USD board across Egyptian banks, your own banks pinned to the top, sanity-checked against the CBE rate so a stale row can't move the pivot
- Browse any country — view another market's prices in its own currency and premium, and its localized news, while your home stays put
Portfolio
- Log metals (any metal + purity + weight + مصنعية) and crypto (quantity); one total value and P&L across everything
- مصنعية modeled — the portfolio shows realistic resale value (شراء − مصنعية) and true P&L, not just melt value
- Each piece can carry an heirloom photo (camera or gallery, stored on-device), and selling a piece is a first-class flow
- A timeline charts what the whole vault was worth, month by month, with best and weakest performers
Signals
- Nafis Compass — one fused buy / hold / wait verdict for gold, blending the price's own range, the dollar gap, Fear & Greed, and seasonality into a single honest read, with a "why" breakdown. Indicators, not financial advice
- Interactive charts — scrub to read the exact day, overlay a compare series (the dollar, silver, bitcoin), see drawdown and a month-by-month grid, and hold a point to arm an alert at that price
- Alerts that stay awake — target prices, move thresholds, dips, breakouts, Compass flips and Fear & Greed crossings, plus a morning digest and a weekly recap. Every banner states the actual price and can be snoozed for an hour from the banner itself; an opt-in Android foreground service keeps the loop alive on OEMs that kill background work after a swipe-away
On your home screen
- Three widgets — gold price, portfolio value (today + since you bought), and a currencies board — plus launcher shortcuts straight into the screens you use most
Toolbox
- A gold-dial hub of ~30 focused tools: zakat (nisab + 2.5% from your holdings), currency converter, "what's my gold worth?" calculator, Fear & Greed, gold seasons, records (each asset's all-time high and low), authenticity check (Archimedes water-displacement karat test), fair price and fair making-charge (مصنعية) coaches, gold gam'eya (جمعية) planner, shabka planner, buying monthly (DCA), the price diary ("was waiting right?"), break-even, allocation, gold↔silver ratio, cheapest gold form, street-dollar and dollar-gap trackers, purchasing power, goals, a time machine ("what if I'd bought…") and a year in review
- One search field over prices, tools, your vault and the news
News
- Per-country, per-language headlines (gold, currencies, central bank, crypto, economy) with the right central-bank name per country
- A clean native in-app reader with an on-device extractive summary (الخلاصة), and offline cache — never a WebView
Backup
- A single file carrying the vault, settings, goals and both quote logs — restored inside one transaction and validated field by field, so a bad file can never half-write your data
How it's built
Offline-first by design: a live rates payload is cached in MMKV so the UI paints instantly on cold start, then refetches in the background — a failed fetch never blanks the screen. All prices come from free, keyless sources, each with a second source behind it, and every request carries a deadline. USD is the single conversion pivot, and the payload is pinned to one interbank domain so a network race can't decide which dollar the percentages are measured against. Local retail metal prices come from the صاغة board where one is published and from a per-market premium model where one isn't. One asset catalog resolves every asset code (metal purity, coin, crypto, currency) to a price, change, name, and tint, so the UI stays generic. Money is integer minor units, weight integer milligrams, crypto quantity integer 1e-8, and purity basis points — never a float; every persisted figure is tagged with the currency it was recorded in, so moving your home currency can't silently re-read it. The portfolio is SQLite (source of truth), mirrored into a Zustand store. Alerts run one evaluation pass driven from three places — foreground refresh, a 15-minute background task, and an opt-in foreground service — and exit through a single delivery path that owns the channels and the ledger.
Tech stack
| Layer | Choice |
|---|---|
| Framework | Expo SDK 57 (managed) + Expo Router (typed routes) |
| Runtime | React Native 0.86 / React 19, React Compiler enabled |
| Language | TypeScript, strict mode |
| UI | NativeWind 4 (Tailwind) + a dual light/dark palette (usePalette()) |
| Client state | Zustand, persisted to MMKV |
| Local data | expo-sqlite — portfolio source of truth, offline-first |
| Server data | TanStack Query (offline-first) |
| Metals | gold-api.com → Swissquote feed · the صاغة board for local retail |
| FX | open.er-api.com → currency-api mirror · Yahoo Finance for history |
| Crypto | CoinGecko → Binance |
| News | Bing News (query-scoped) + curated RSS — all keyless |
| Notifications | expo-notifications + expo-background-task + a custom Android foreground service |
| Widgets | react-native-android-widget — gold, portfolio, currencies |
| Animation | react-native-reanimated 4 + worklets · SVG via react-native-svg · FlashList 2 |
| Icons | lucide-react-native |
| Analytics | PostHog (privacy-safe — no amounts, holdings, or vault contents) |
Non-negotiables
- Offline-first. A cached rates payload paints the UI instantly; a failed fetch never blanks the screen, and the app is fully usable with no connection.
- Keyless by design. Every data source is a free public API — no secrets, no server — and every one of them has a fallback behind it.
- Money and weight are integers. Money in minor units, gold weight in milligrams, crypto quantity at 1e-8, purity in basis points — never floats, end to end. Every stored figure carries the currency it was recorded in.
- Analytics carry no financial data. Structural events only — never amounts, holdings, or vault contents.

















