summaryrefslogtreecommitdiff
path: root/frontend/app
diff options
context:
space:
mode:
authorTyler Hoang <tyler@tylerhoang.xyz>2026-05-19 00:28:08 -0700
committerTyler Hoang <tyler@tylerhoang.xyz>2026-05-19 00:28:08 -0700
commit2881e7598628697d0a786cf840abdc69086d1d24 (patch)
treef63187ab9f55c78e3b85b6978d98f2ea1268e19f /frontend/app
parent6e0eacebc2066f87f7dc62de8eac948fa2c3928e (diff)
feat: remove Coverage card from overview tab, move Profile to top of right column
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'frontend/app')
-rw-r--r--frontend/app/page.tsx45
1 files changed, 1 insertions, 44 deletions
diff --git a/frontend/app/page.tsx b/frontend/app/page.tsx
index 971216c..7ccb781 100644
--- a/frontend/app/page.tsx
+++ b/frontend/app/page.tsx
@@ -13,7 +13,7 @@ import { TickerHeader } from "@/components/prism/TickerHeader";
import { TopBar } from "@/components/prism/TopBar";
import { ApiError, api } from "@/lib/api";
import { deltaClass, fmtCurrency, fmtLarge, fmtNumber, fmtPct } from "@/lib/format";
-import { availableFieldSummary, buildKpis, limitIndices, marketClock, OVERVIEW_NAV_ITEMS, signalTone, unavailableFields } from "@/lib/overview";
+import { buildKpis, limitIndices, marketClock, OVERVIEW_NAV_ITEMS, signalTone } from "@/lib/overview";
import type { HistoryPoint, MarketIndex, SearchResult, TickerOverview, WatchlistResponse } from "@/types/api";
type LoadState = "idle" | "loading" | "ready" | "invalid" | "error";
@@ -53,8 +53,6 @@ function OverviewClient() {
const isSaved = selectedTicker ? watchlistSymbols.has(selectedTicker) : false;
const marketCards = useMemo(() => limitIndices(market), [market]);
const kpis = useMemo(() => (overview ? buildKpis(overview) : []), [overview]);
- const missingFields = useMemo(() => (overview ? unavailableFields(overview) : []), [overview]);
-
useEffect(() => {
const timer = window.setInterval(() => setClockSnapshot(marketClock()), 60_000);
return () => window.clearInterval(timer);
@@ -314,7 +312,6 @@ function OverviewClient() {
<SignalCard overview={overview} />
</div>
<div className="psm-column">
- <DataStatusCard overview={overview} missingFields={missingFields} />
<ProfileCard overview={overview} />
<ShortInterestCard overview={overview} />
<StatsCard overview={overview} />
@@ -425,46 +422,6 @@ function SignalCard({ overview }: { overview: TickerOverview }) {
);
}
-function DataStatusCard({ overview, missingFields }: { overview: TickerOverview; missingFields: string[] }) {
- const entries = Object.entries(overview.meta.sources).slice(0, 6);
- const visibleMissing = missingFields.slice(0, 4);
- const hiddenMissingCount = Math.max(0, missingFields.length - visibleMissing.length);
-
- return (
- <section className="psm-card">
- <div className="psm-card-head">
- <div>
- <div className="psm-eyebrow">Coverage</div>
- <h2 className="psm-card-title">Coverage</h2>
- </div>
- <span className={`psm-status-chip${overview.meta.is_partial ? " partial" : ""}`}>{overview.meta.status}</span>
- </div>
- <p className="psm-quality-copy">{availableFieldSummary(overview)}</p>
- {overview.meta.is_partial ? (
- <div className="psm-stack">
- {missingFields.length ? visibleMissing.map((field) => <span key={field} className="psm-field-tag missing">{field}</span>) : null}
- {hiddenMissingCount ? <span className="psm-field-tag missing">+{hiddenMissingCount} more</span> : null}
- </div>
- ) : null}
- <div className="psm-source-list">
- {entries.length ? (
- entries.map(([field, source]) => (
- <div className="psm-source-row" key={field}>
- <span className="psm-source-key">{field}</span>
- <span className="psm-source-value">{source}</span>
- </div>
- ))
- ) : (
- <div className="psm-source-row">
- <span className="psm-source-key">Sources</span>
- <span className="psm-source-value">Unavailable</span>
- </div>
- )}
- </div>
- </section>
- );
-}
-
function ProfileCard({ overview }: { overview: TickerOverview }) {
return (
<section className="psm-card">