InfrastructureTradenour (personal project)

Tradenour

Live screener: LCP 2.0s, SEO 37→80+

Next.js 16React 19Tailwind CSS v4SupabaseTypeScriptSEOGA4CloudflareDigitalOceanTradingView
Visit project
Tradenour

Overview

Tradenour is a real-time market data dashboard built for professional traders and analysts to screen and analyse cryptocurrency and US stock markets. It surfaces momentum and EMA-proximity signals across the top 250+ cryptocurrencies (via CoinGecko) and the full US stock universe (via Finviz), with fast, sortable, filterable tables.

The product is free during beta. The screener routes sit behind a free account, while a full public marketing and legal surface drives organic discovery — an intentional strategy so growth comes from trust and content, not from exposing the product itself.

Key features

  • Momentum Screener — cryptocurrencies ranked by momentum in real time.
  • EMA Proximity scans (1H and 4H) — surfaces coins trading near their exponential moving averages across timeframes.
  • Stock Screener — the full Finviz dataset (NASDAQ, NYSE, AMEX, CBOE) with dynamic column filtering and formatting.
  • Coin & stock detail pages with embedded TradingView charts and technical analysis.
  • BTC-denominated proximity view — coins measured relative to Bitcoin rather than USD.
  • Saved filters — users save and reuse custom table configurations across sessions.

Architecture & tech stack

The frontend is Next.js 16 (App Router, Turbopack), React 19, Tailwind CSS v4 and TypeScript, built on the @nizam-org/web design system with self-hosted fonts. Supabase provides authentication and market-data storage; Sentry handles error tracking (tunnelled through a /monitoring proxy to avoid CSP issues).

Caching is hybrid: stock data uses Next.js 16 Cache Components with on-demand revalidation (invalidated by webhook when a fresh snapshot is uploaded), while live crypto and EMA data render dynamically with no-store to stay fresh. Chart symbols on proximity pages are resolved server-side to avoid a client-side "Resolving…" flash.

Data & column system

A metadata-driven column system means new market-data columns appear automatically with the correct filter widget, formatter and sort behaviour — zero frontend changes. The backend publishes per-column metadata (type, format, options, label) and a pure column builder maps it onto the UI. Add a new Finviz column and it simply shows up, filtered and formatted correctly.

TradingView integration

For crypto, a smart exchange fallback probes preferred exchanges in order (Binance → MEXC → ByBit) and stops at the first exact ticker match, falling back to a manual search link when a coin trades nowhere expected. For stocks the exchange is already known from Finviz (only NASD → NASDAQ needs remapping). Proximity detail pages resolve both BTC and USD chart symbols on the server so the chart loads instantly at the timeframe the user clicked from.

SEO optimisation (10-phase rollout)

A comprehensive, evidence-backed SEO programme took the site from a baseline audit score of ~37/100 to an estimated 80+/100. Highlights across the phases:

  • Crawl foundation — fixed a site-wide soft-404 by inverting auth middleware to a gated-prefix allowlist, and added real robots.txt, sitemap.xml, llms.txt and a branded 404.
  • Security & analytics — full CSP, HSTS and related headers; GA4 wired in site-wide.
  • Canonicalisation — metadataBase, canonical tags, and a www → apex 301 redirect.
  • Gated routes set to noindex as defence-in-depth.
  • Structured data — Organization, WebSite and WebApplication JSON-LD linked by @id for AI citability, plus reusable breadcrumb schema.
  • Dynamic Open Graph images generated with Next.js ImageResponse (no raster assets to keep in sync).
  • AI/GEO readiness — llms.txt and citable, question-phrased definitional passages.
  • A new public content surface: about, contact, privacy, terms, disclaimer, features and pricing pages.
  • Core Web Vitals — diagnosed and fixed a real CLS 0.291 regression caused by Suspense skeleton mismatches, landing at LCP 2.0s, CLS 0 and TBT 50ms.

Analytics — GA4 & Search Console

Google Analytics 4 was integrated via @next/third-parties. The tag rendered but no data reached the dashboard — the root cause was a Content-Security-Policy blocking Google’s scripts and collectors. Whitelisting googletagmanager.com and the regional google-analytics.com hosts fixed it, verified via 200s on the tag loader and g/collect beacon and live traffic in GA4 Realtime. Google Search Console was verified at the domain level with the sitemap submitted.

Email infrastructure

Transactional auth email (signup codes, password resets, invites) sends from noreply@tradenour.com via Resend SMTP through Supabase, with DKIM, SPF and DMARC on a dedicated send. subdomain. Human support runs on support@tradenour.com via Cloudflare Email Routing, with Gmail "send as" (through Resend SMTP) so replies come from the same address. Sending and receiving live on separate DNS namespaces so they never conflict — and because that address is published on the contact page, footer and Organization JSON-LD, it genuinely receives and answers mail.

Domain, DNS & hosting

I purchased tradenour.com and run DNS on Cloudflare (CNAME flattening for the apex, www → apex redirect, and email routing). The app is hosted on DigitalOcean App Platform with auto-renewed TLS 1.3, deploying automatically from GitHub on push.

Outcomes

  • Shipped live and in production at tradenour.com.
  • SEO audit lifted from ~37/100 to an estimated 80+/100 across a 10-phase rollout.
  • Core Web Vitals: LCP 2.0s, CLS 0, TBT 50ms — fixing a real CLS 0.291 regression.
  • GA4 and Search Console live and tracking; full JSON-LD for AI citability.
  • Two-way transactional and support email working end-to-end.

THE CHALLENGE

Draft: confirm details — Tradenour needed a live market screener fast enough to feel like a native tool and visible enough on Google to grow without paid traffic.

THE TECHNICAL SOLUTION

Draft: confirm details — built a performance-first screener in Next.js with aggressive caching and technical SEO baked in from the first commit.

KEY BUSINESS OUTCOME

Draft: confirm details — Largest Contentful Paint of 2.0s on real devices and a Lighthouse SEO score up from 37 to 80+ — live and growing.