setActiveTab(v as typeof activeTab)} className="space-y-6"> Trending Macro Briefings Portfolio {portfolioSymbols.length > 0 && `(${portfolioSymbols.length})`} Watchlist {watchlistSymbols.length > 0 && `(${watchlistSymbols.length})`} Market Wire {/* Macro Briefings Tab Content */} {isLoadingBriefings ? (
{[...Array(3)].map((_, i) => (
))}
) : briefings && briefings.length > 0 ? (
Weekly educational summaries of economic indicator movements
{/* Cited Macro Briefing — on-demand Mycroft analysis */} {briefings.map((briefing) => ( ))}
) : (

No Briefings Yet

Weekly macro briefings are generated every Sunday. Check back soon for an educational summary of the week's economic indicator movements.

)} {/* Unified news content for all tabs */} {isLoading ? (

Loading sources: {[!isLoadingYahoo && 'Yahoo', !isLoadingPolygonTicker && 'Polygon', !isLoadingNewsdata && 'Newsdata', !isLoadingApitube && 'ApiTube'].filter(Boolean).length} / 4 resolved

) : mergedNews.length > 0 ? (
{mergedNews.slice(0, visibleCount).map((item, index) => (
{/* Article image */} {item.imageUrl && ( { (e.target as HTMLImageElement).style.display = "none"; }} /> )}
{/* Ticker badges */} {item.tickers && item.tickers.length > 0 ? item.tickers.slice(0, 4).map((ticker) => ( {ticker} )) : item.symbol ? ( {item.symbol} ) : null} {item.tickers && item.tickers.length > 4 && ( +{item.tickers.length - 4} )} {item.companyName && ( {item.companyName} )} {/* Source badge */} {item.source === "merged" ? "✓ Verified" : getSourceLabel(item.source)} {item.source === "merged" ? "Confirmed by multiple sources" : `Source: ${getSourceLabel(item.source)}`} {/* Sentiment badge */} {item.sentiment && ( )}
{/* Headline */} {item.articleUrl ? ( {item.headline} ) : (

{item.headline}

)} {/* Description */} {item.description && (

{item.description}

)} {/* Listen button */}
{/* Metadata row */}
{item.publisher?.name && ( {item.publisher.faviconUrl && ( { (e.target as HTMLImageElement).style.display = "none"; }} /> )} {item.publisher.name} )} {formatDate(item.date)} {item.author && item.author !== "Unknown" && ( by {item.author} )} {/* Category tags */} {item.categories && item.categories.length > 0 && ( {item.categories.slice(0, 2).join(" · ")} )}
))} {/* Progressive load sentinel */} {visibleCount < mergedNews.length && (
Showing {visibleCount} of {mergedNews.length} articles — scroll for more
)} {/* Partial loading indicator — more sources still resolving */} {isPartiallyLoading && (
)}
) : activeSymbols.length === 0 && activeTab !== "market" ? (

No Stocks to Track

{activeTab === "portfolio" ? "Add stocks to your portfolio to see relevant news." : activeTab === "watchlist" ? "Add stocks to your watchlist to see relevant news." : "No trending stocks available."}

{activeTab === "portfolio" && ( )} {activeTab === "watchlist" && ( )}
) : (

No Recent News

No significant developments found for your current selection. News sources are checked every few minutes.

Polygon Yahoo Newsdata APITUBE
)} {/* Educational Note */} {activeTab !== "briefings" && (

About Market News

Multi-Source Aggregation

This feed aggregates news from Yahoo Finance, Polygon.io, Newsdata.io, and APITUBE. Articles confirmed by multiple sources are marked with a{" "} ✓ Verified badge. Sentiment analysis (bullish/bearish/neutral) is provided where available.

Using News in Your Research

  • Context matters: Consider news alongside financial metrics and technical analysis.
  • Timing: Markets often react before news is public — be cautious of "buying the news."
  • Sentiment: AI-powered sentiment badges indicate market tone but should not be used as sole trading signals.
)}