Back to all work

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.
GoldFeed market view with metal tiles, signal panel and candlestick chart
Fig. 1 The market view. Signal, entry range, stop, two targets and risk-to-reward sit beside the chart, not buried under it.
GoldFeed full panel including AI model consensus, indicators and internal rates
Fig. 2 Below the chart: four models voting independently, the eleven indicators with their levels, and the domestic rates board.

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.

Amir Trs Biomedical AI Engineer

Built with Next.js and Tailwind · 2026-08-26