Skip to content

Releases: furic/richfolio

v1.5.0 — International Currency Support

28 Apr 10:24
ddffe32

Choose a tag to compare

What's New

International Currency Support

  • Portfolio now supports non-USD tickers (LSE, Frankfurt, and other exchanges) — configure defaultCurrency in config.json and holdings are automatically converted
  • FX rates fetched live from Yahoo Finance (GBPUSD=X convention) in a single batch per run — no extra API key needed
  • Sub-unit fix for exchanges quoting in fractional units: GBp/GBX (LSE pence → GBP), ILA (TASE agorot), ZAc (JSE cents) automatically divided by 100
  • All prices, limit orders, dividends, suggested buy values, and portfolio stats displayed in your default currency
  • Multi-currency caveat shown in emails and Telegram when the portfolio spans currencies
  • totalPortfolioValueUSD deprecated in favour of totalPortfolioValue + defaultCurrency in config

Ticker Name Tooltips

  • Company full names shown as hover tooltips on ticker symbols in all emails (daily, intraday, weekly, refresh)
  • Names sourced from Yahoo Finance longName field

CI & Code Quality

  • GitHub Actions CI now runs on all pull requests — catches type errors and formatting drift before merge
  • Prettier formatting enforced across src/ and test/
  • Unit tests (63 tests via node:test, zero dependencies) covering formatMoney, applyFxRate, and SUB_UNIT_FIX
  • npm test — unit tests; npm run smoke — live API smoke tests (manual)

Bug Fixes & Improvements

  • Two-stage AI analysis (Observe → Decide) improves STRONG BUY consistency by separating data parsing from decision-making
  • Earnings calendar guard: hard HOLD if earnings ≤3 days, cap at BUY if ≤7 days
  • Guard pipeline (guards.ts) programmatically enforces STRONG BUY criteria as a post-AI safety net
  • ATR (Average True Range), Stochastic %K/%D, and OBV trend added to technical indicators
  • News sentiment scoring: each headline rated bullish/bearish/neutral + impact with overall per-ticker sentiment fed to AI
  • Reasoning persistence: 7-day rolling history of AI conviction trends shown to Gemini each run
  • Fixed STRONG BUY over-strictness and bond ETF confidence constant

Full Changelog: v1.4.0...v1.5.0

v1.4.0 — Macro Indicators & Smarter STRONG BUY

05 Apr 12:52

Choose a tag to compare

What's New

Macro Environment Context

  • AI now receives real-time macro indicators (VIX, 10Y Treasury yield, S&P 500, Oil/WTI, USD/DXY) from Yahoo Finance — no extra API key needed
  • Gemini writes macro-aware risk assessments instead of generic boilerplate (e.g. "elevated VIX + high yields suggest caution")
  • Fed to both daily analysis and detailed STRONG BUY analysis prompts

Smarter STRONG BUY Criteria

  • Price below 200-day MA added as a price-level signal — ETFs (which lack P/E data) now have a viable path to STRONG BUY without requiring near-52w-low
  • Entry signals now require at least 1 price-level signal (P/E below avg, 52w position <30%, or below 200MA) — momentum signals alone no longer sufficient
  • Golden cross correctly ignored when price is below 200MA (lagging artifact, not bullish)

Bond ETF Framework

  • Two-tier framework: short-duration (BSV, SHY, etc.) hard-capped at BUY ≤65%; long-duration (TLT, BND, etc.) eligible for STRONG BUY at rate cycle peaks
  • RSI/MACD/momentum explicitly excluded as buy signals for all bond ETFs

Bug Fixes

  • Fixed 52-week position misinterpretation in detailed analysis — Gemini no longer confuses "% of annual range" with "% of 52w high"
  • Fixed golden cross framing in detailed analysis when price is below both MAs
  • Three-layer news filtering (financial phrases → language filter → Gemini relevance) reduces false positive headlines

Technical Indicators

  • MACD (12/26/9) with bullish/bearish crossover detection
  • Bollinger Bands with %B, bandwidth, and squeeze detection
  • Explicit conflict resolution hierarchy (MACD for trending, Bollinger for range-bound)
  • Bottom-fishing model: stricter threshold for stocks/ETFs (3+ indicators) vs crypto (2+)

Other

  • Intraday alerts refocused on STRONG BUY signals only
  • Baseline updated after intraday alert to prevent duplicate notifications
  • Auto-generated news search terms from Yahoo Finance company names
  • Docs rewritten as GitHub-first for non-technical users

Full Changelog: v1.3.0...v1.4.0

v1.3.0 — Refresh Analysis & Smarter Intraday Alerts

09 Mar 08:19

Choose a tag to compare

What's New

Refresh Analysis Mode

Re-analyze a single ticker with the latest price (including after-hours/pre-market) to get an updated limit order and analysis URL.

npm run refresh -- SMH

Also available via GitHub Actions: Run workflow → mode: refresh → ticker: SMH

  • Uses Yahoo Finance postMarketPrice / preMarketPrice (zero extra API calls)
  • Sends email + Telegram with updated analysis URL
  • Useful when you see a STRONG BUY alert after market close and the price has moved

Smarter Intraday Alerts

Intraday alerts now focus exclusively on STRONG BUY signals:

  1. Upgraded to STRONG BUY — any action → STRONG BUY
  2. Downgraded from STRONG BUY — STRONG BUY → any other action
  3. Confidence changed ≥10 — while staying at STRONG BUY

Other Changes

  • Fix: TradingView chart now renders correctly on the analysis page
  • Fix: Detailed analysis uses Gemini Flash instead of Pro (avoids quota issues)
  • Docs: Added "Who Should Use This" section to README
  • Docs: Gemini free-tier quota gotcha and model swap guide
  • UI: Repo icon and Google Gemini badge

Full Changelog: v1.2.0...v1.3.0

v1.2.0 — STRONG BUY Analysis Page

05 Mar 10:45

Choose a tag to compare

What's New

STRONG BUY Analysis Page

STRONG BUY tickers now include a "More Details" link in emails and Telegram messages. Clicking it opens a dedicated analysis page on GitHub Pages featuring:

  • Interactive TradingView chart — 6-month candlestick with SMA50, SMA200, and RSI overlays
  • Detailed buy thesis — 3-4 paragraph analysis generated by Gemini 2.5 Pro
  • Risk analysis — specific risk factors to watch
  • Key metrics grid — price, P/E, 52-week position, RSI, moving averages, momentum
  • Fundamentals — ROE, debt/equity, margins, growth, analyst target
  • Action summary — suggested investment amount, limit order price with reasoning

All data is compressed and embedded in the URL hash — no server-side logic needed. The page works offline once loaded.

STRONG BUY Analysis

Other Changes

  • Fix intraday baseline — use age check instead of date string comparison
  • CONFIG_JSON moved from Actions Secret to Variable for easier editing
  • RECIPIENT_EMAIL moved from Actions Secret to Variable
  • Cleaned up duplicate setup.md (content already split across doc pages)
  • Updated screenshots, mockups, and documentation

New Files

  • src/detailedAnalysis.ts — Gemini 2.5 Pro call for detailed buy thesis + risk analysis
  • src/analysisUrl.ts — zlib compression + base64url encoding into URL hash
  • docs/analysis/index.html — Static analysis page (decodes URL hash client-side)

Full Changelog: v1.1.0...v1.2.0

v1.1.0 — Value Investing & Crypto Bottom-Fishing

26 Feb 07:48

Choose a tag to compare

What's New in v1.1.0

Two new AI analytical frameworks embedded into the Gemini prompt — zero additional API calls, stays within free tier. Inspired by @xingpt's AI agent skills article on BlockTempo.

New Features

  • Value Investing Framework — AI rates individual stocks A–D based on five fundamental criteria: ROE > 15%, debt/equity < 50%, FCF/operating CF > 80%, positive earnings growth, and price below analyst target. Displayed as colored badges in email and Telegram
  • Crypto Bottom-Fishing Model — AI detects BTC/ETH accumulation zones using four indicators: RSI < 30, volume contraction > 20%, price below 200-day MA, and death cross. 2+ triggers a bottom signal, 3+ strongly considers STRONG BUY with DCA recommendation

How It Works

Both features are prompt-only enhancements — structured analytical frameworks injected into the single Gemini call:

  • Fundamental data (ROE, debt/equity, FCF, margins, growth, analyst targets) comes from Yahoo Finance's financialData module, added to the existing quoteSummary call — zero extra API overhead
  • Volume change (7-day avg vs prior 30-day avg) computed from existing chart data for selling exhaustion detection
  • Value ratings adjust AI confidence: A boosts ~10 points, D reduces ~10 points
  • Bottom signals shown in daily email, intraday alerts, and Telegram messages

Screenshots

Daily Brief Intraday Alert Weekly Rebalance
Daily Intraday Weekly

Files Changed

File Change
src/fetchPrices.ts Added financialData module + 9 new QuoteData fields
src/fetchTechnicals.ts Added volumeChange7d computation
src/aiAnalysis.ts Extended schema, prompt with 2 frameworks
src/email.ts Value rating badges + bottom signal rendering
src/telegram.ts Value rating + bottom signal inline
src/intradayCompare.ts Propagated new fields
src/intradayEmail.ts Rendered new fields in alerts

Upgrading

No config changes needed. Just pull the latest code — the new features activate automatically when Gemini is configured. Existing config.json and .env files work as-is.

Full Changelog: v1.0.0...v1.1.0

v1.0.0 — Technical Momentum & Limit Orders

25 Feb 14:16

Choose a tag to compare

What's New

Richfolio v1.0.0 — a zero-maintenance portfolio monitoring system with AI-powered buy signals, delivered daily via email and Telegram.

Features

  • AI Buy Recommendations — Gemini 2.5 Flash analyzes valuation, allocation gaps, news sentiment, technicals, and risk
  • Technical Momentum Signals — SMA50, SMA200, RSI(14), golden/death cross, momentum classification for every ticker
  • Limit Order Prices — AI-suggested limit prices based on nearby support (moving averages, recent lows, round numbers)
  • Allocation Gap Analysis — current vs target %, with suggested buy amounts
  • Dynamic P/E Signals — trailing P/E compared against historical averages from Yahoo Finance
  • ETF Overlap Detection — reduces buy priority when you hold overlapping stocks
  • 52-Week Range Signals — highlights tickers near their 52w low or high
  • News Digest — top headlines per ticker from NewsAPI
  • Portfolio Health — weighted beta, estimated annual dividend income
  • Intraday Alerts — periodic checks that alert only when buy signals strengthen vs morning brief
  • Weekly Rebalancing Report — drift analysis with BUY/TRIM/OK actions
  • Dual Delivery — dark-themed HTML email + condensed Telegram message

Stack

All free-tier services — $0/month to run:

Component Service
Prices & Fundamentals Yahoo Finance (yahoo-finance2)
News NewsAPI.org (100 req/day)
AI Analysis Google Gemini 2.5 Flash (250 req/day)
Email Resend.com (3,000/month)
Telegram Telegram Bot API
Scheduler GitHub Actions (cron)

Getting Started

  1. Fork this repo
  2. Add secrets (CONFIG_JSON, RESEND_API_KEY, RECIPIENT_EMAIL)
  3. Run manually or wait for the daily cron (8am AEST)

See the full documentation for setup details.