I built ShouldISwap (https://shouldiswap.com) — a free tool that compares the conversion rate between any two cryptocurrencies against their historical average. Pick two coins, pick a timeframe (7-365 days), and it tells you whether today's rate is above, below, or near the mean, plus where it sits in the 52-week range as a percentile.
How it works: Fetch 365-day price histories for both coins from CoinGecko, compute the pairwise conversion rate per day, calculate the mean for the selected period, and compare. A sliding window across the full year computes the historical best/worst deviations to give a "signal strength" — not just "above average" but how significant the deviation is relative to what's been seen all year.
Stack: Node.js + Express 5, React 19 + Vite 7, Tailwind CSS 4. No TypeScript. No database — fully stateless with three-tier in-memory caching (60s/5min/1hr). Each comparison makes 4 CoinGecko API calls (down from 6) by fetching 365-day history once and slicing per timeframe. Chart.js lazy-loaded (~173KB on demand). 66KB gzipped initial load. Single Docker container on Google Cloud Run.
Lighthouse: 99 Performance, 100 Accessibility, 100 Best Practices, 100 SEO.
Honest limitations: Depends entirely on CoinGecko's API. In-memory cache means no horizontal scaling without Redis. Signals are statistical comparisons against history, not predictions — it tells you where you are, not where things are going.
Would appreciate feedback on the architecture, the signal calculation, or the UX. Source isn't public yet but happy to discuss implementation.