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. You can then 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 API keys and no backend for prices. Everything works offline; your holdings live on your device. An optional Nafis Pro account adds cloud sync, family vaults and server-side alerts.
Nafis (نفيس) is Arabic for precious. The goal is 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 and on the App Store. It's free to use (Nafis Pro is an optional in-app purchase, monthly or lifetime), in العربية / English with a right-to-left layout, offline-first, and keyless for prices. Home-screen widgets, launcher shortcuts and the always-awake alert service are Android-only.
Screens#
A tour of Nafis in sixteen screens that cover 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.
















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 keyless price sources and no account required.
- 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".
- Light and dark themes: a "Bullion" dark and "Champagne" light identity, warm-tinted, following the system by default, with full RTL, Readex Pro for the Arabic half, Bricolage Grotesque for Latin and numerals, and no floats anywhere.
- A first run that sets you up: a five-step welcome picks your currency, karat and alerts before you start.
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, a market-range bar per bank and sorting by best buy, best sell or smallest spread, 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 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. One year of history is free; the 5-year window is a Pro feature
- Alerts that stay awake: target prices, move thresholds, dips, breakouts, Compass flips and Fear & Greed crossings, plus a morning digest, a weekly recap and scheduled price reports on the assets, times and days you pick. Every banner states the actual price and the price the move came from, 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 (Android)
- Four widgets: gold price, portfolio value (today and since you bought), a currencies board and a gold trend widget. There are also 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
- Nearby goldsmiths (أقرب صاغة): lists the actual shops around you from your live location, with name, kind and distance, before handing off to the map app
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
Privacy & backup
- App lock behind your fingerprint or device credential, screenshot blocking, and balances masked everywhere from one component, including the home-screen widget
- A single backup 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
- A daily automatic backup, taken on its own
Nafis Pro (optional)
Everything above works without an account. Pro is the layer that needs one: sign in with Google (or Apple on iPhone), then:
- Cloud sync and restore: the vault and settings are kept on the server and come back on a new phone
- Family vaults: several named vaults in one account, each with its own value, zakat and alerts, and a vault you can share by invite code with the people who own it with you
- Verdict alerts: a buy/sell verdict with its reasoning, a weekly vault-versus-market recap, and an arrival-price alert per piece, delivered by a server push for target rules
- Vault statement PDF, a sell backtest that replays the buy/sell verdict over a year of gold, a widget per vault, the 5-year chart window, and a read-only web dashboard opened from account settings
- Lifetime and monthly plans; the prices on the paywall come straight from the store, none are hard-coded
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.
The Pro layer is the one part with a server. Sign-in is Better Auth on a Cloudflare Worker (Hono, D1), social providers only; purchases go through RevenueCat, and its answer is cached in MMKV so a paying user with a flaky connection stays a paying user. Personal sync pushes and pulls the whole backup as one snapshot, last-write-wins. It is not row-level, which is the known ceiling for editing from two phones at once. A shared vault is its own server document, merged rather than replaced when a pull meets unpushed local edits. Prices, rates and news stay keyless and on-device, and no secret ships in the app. The Worker holds them.
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 5.8, 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 (schema v8: vaults, shared vaults) |
| 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, trend |
| Animation | react-native-reanimated 4 + worklets · SVG via react-native-svg · FlashList 2 |
| Pro | RevenueCat (react-native-purchases) · Better Auth on a Cloudflare Worker (Hono, D1) · Google and Apple sign-in · expo-print for the statement PDF |
| Privacy | expo-local-authentication (app lock) · expo-secure-store |
| 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 price source is a free public API with a fallback behind it. The app holds no secrets; the Pro Worker holds them, and prices, rates and news never touch 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.