Case study · 2026
GoldFeed
A Persian-language gold market terminal — live fund pricing, eleven technical indicators voting on one mechanical rating, news impact, and an analyst that draws on the chart.
- Next.js 16
- React 19
- TypeScript
- FastAPI
- Technical Analysis
- RTL
- Persian
- PWA
- LLM
The problem
A trading panel built in Persian and right-to-left throughout. It tracks the عیار gold fund alongside metals, currency and the wider market.
The interesting constraint is honesty: the panel is a mechanical rating, not a prediction, and it is built to say so.
What it does
- Eleven indicators plus news impact vote into one rating — strong buy through strong sell — with an entry range, stop loss, two targets and a risk-to-reward ratio.
- Levels come from ATR and pivots. Structure is only used when support sits closer than the ATR distance, which fixed a first version that placed stops ten percent away and dragged risk-to-reward down to 0.24.
- If risk-to-reward falls under 1.5 the panel says so outright rather than dressing up a weak setup. Under 45% confidence, or a neutral rating, it proposes no levels at all.
- The big refresh button was replaced by two loops: price and chart every 30 seconds during the 12:00–17:00 session, five minutes outside it, and news and consensus every five minutes.
- A chat analyst that reads the live chart state and draws its reasoning directly onto it.
- Phone sign-in, subscription gating, workspaces, and alerting with deduplication.


What was hard
A signal that flatters itself is worthless
The first version anchored stops to the nearest structural support, which sometimes sat ten percent below entry and produced setups that looked tradeable and were not. Basing the stop on ATR and only tightening to structure when structure is closer is the single change that made the rating trustworthy.
Persian right-to-left is not a CSS flag
Numbers stay left-to-right inside right-to-left text, charts and their axes mirror, and Persian digits and Gregorian-to-Jalali dates have to agree everywhere. None of it is hard individually; all of it is easy to get subtly wrong.
Refresh rate should match reality
The exchange itself publishes on a two-minute cadence, so polling every second buys nothing but load. Matching each loop to how fast its data actually changes removed the refresh button entirely.
Other case studies
(2)Lumen
A lab report PDF becomes a dashboard you can read in ten seconds — parsed, scored, charted and interpreted, with a designed PDF back out.
Precision Health Platform
A clinical genomics platform built from an empty repository to production — a million classified variants, ACMG classification, polygenic risk scores, and a physician-configurable AI layer on top.