Full-Stack App
Finance Dashboard
A live dashboard for the Egyptian financial market at finance.halemogpa.com: gold by karat, silver, the parallel and official dollar, forex crosses, crypto, and inflation. Arabic is the default locale and the layout is RTL first; English is secondary. No auth, no accounts, free.
It started as a weekend build - a vanilla JS single page app over an Express + SQLite API - and has since been rewritten as a pnpm monorepo. The web app is Next.js 16 on the App Router with Cache Components and standalone output, Tailwind v4, and next-intl v4 for the bilingual routing. Prices live in Postgres 16 through Drizzle, in a price_snapshots table partitioned monthly on captured_at. Scrapers are a long lived systemd unit on the box rather than anything serverless, and each source is guarded by a Zod contract test that runs nightly against the real upstream and opens a GitHub issue the moment a response shape drifts. It runs on Hetzner behind Cloudflare, with a health gated deploy that will not promote a build unless both the origin and the public /api/health agree the system is up.
Two data rules do most of the work, and both are the kind of thing you only arrive at by getting them wrong first.
Snapshots are append only, forever. No deletes, no truncates, no retention sweeps; growth is handled by attaching monthly partitions, never dropping them. That principle earned itself when sixteen junk rows from a test fixture reached the live gold series and dragged a week chart's minimum from 5,795 down to 1. They were removed under an exact count guard with a CSV archive first, and the cause is now locked behind two independent refusals in the test suite.
And a number the app computed is never presented as a number the market quoted. Several source chains end in a derived value, so every computed snapshot sets meta.estimated, every payload carries it through, and every UI that renders the value renders a badge. The parallel dollar was official times 1.015 for three months while the home page displayed the difference as though the premium had been observed. A constant wearing a market's clothes is worse than no number.
Gold comes from eDahab and only eDahab, with no fallback. eDahab tracks what Egyptian retail shops actually charge, which is the number a user is about to pay at a counter, and that is the entire product. If it fails three consecutive ticks the circuit opens and the gold tile goes visibly stale on purpose, because a stale price a user can see beats a wrong price they cannot.
Beyond the price tables there is a portfolio tracker, a savings simulator, a gold calculator, a currency converter, a buy signal, per karat gold pages with TradingView Lightweight Charts, and web push price alerts. The live UI polls JSON route handlers every 10 seconds rather than holding a socket open. Tests are Vitest for units and Playwright for end to end, visual, accessibility, and a bilingual matrix.
It also ships to Android. ذهبي is a Trusted Web Activity: a thin native shell that launches the site fullscreen, so it looks exactly like the website because it is the website. It is on Google Play in closed testing, currently at 1.1.1 targeting API 36, working through the fourteen day closed testing window that a personal developer account has to complete before production access. A separate React Native and Expo client, including an Android home screen widget that renders live 21K buy and sell prices, is built but not yet shipped.