Trading Analyzer
TradingAnalyzer.ai is an AI-powered Forex analysis platform that consolidates market intelligence into actionable daily trade setups, reducing hours of manual research to around 15 minutes per day. I designed and built the entire backend from scratch as the sole backend developer.
The problem
Forex traders pull their daily picture from sources that do not talk to each other: CFTC positioning reports, market news, live price feeds, and institutional research. Reading all of it by hand takes hours and the result is not comparable across currency pairs. The platform's job is to collect those sources on a schedule, score them the same way every day, and hand the trader a ranked list instead of a reading list.
Architecture
The system runs as a set of services on Kubernetes, split into two layers: data ingestion, and a scoring, API and real-time delivery layer written in Kotlin on Spring Boot.
Ingestion is mostly Kotlin, with the scrapers written in Python on Scrapling, routed through proxy servers, for the data sources that have to be scraped rather than consumed through an API. Scheduled pipelines fetch, parse and normalise:
- COT reports — CFTC Commitment of Traders data, parsed into structured signals
- News and RSS feeds — market news ingested and preprocessed for relevance scoring
- Broker and market data APIs — live price feeds and OHLCV data per currency pair
- Banking and institutional reports — parsed from structured sources into actionable signals
Everything lands in PostgreSQL. Typesense indexes reports and trade setups so full-text search stays fast as history grows. Redis does three jobs: it caches computed scores, so searching back through scoring history stays fast even though every score is calculated rather than stored raw; it provides distributed (advisory) locks; and it caches subscription state, so authorization checks on the API don't hit the database on every request.
Scoring engine and delivery
The core is a custom multi-factor scoring algorithm that aggregates signals from every source and produces a ranked score per currency pair. It runs on a scheduled cycle and exposes results through a REST API.
New scores and trade setups are pushed to clients over WebSockets, also served from Spring Boot, so the frontend never polls. An AI integration generates market summaries throughout the day from the freshly scraped data.
Failures are handled explicitly rather than silently: a failed fetch or scoring run is retried, and if the retry fails too, the error is reported through Sentry instead of quietly degrading the scores. Where a source has no API, the engine falls back on its own scraping through the Python/Scrapling layer.
Subscriptions and billing
I built the payment and subscription system on Stripe, managing the platform's 2,000+ subscribers: plan lifecycle, Stripe webhooks, and access control gating on the API — with subscription state cached in Redis so the authorization check stays cheap.
Project Links