"use client"; import Link from "next/link"; import { RefreshCw } from "lucide-react"; import { api } from "@/lib/api"; import { useAsync, useInterval } from "@/lib/hooks"; import { fmtBytes, fmtCompact, fmtGB, fmtInt, fmtRelative } from "@/lib/format"; import { Card, ErrorState, KpiTile, PageHeader, Skeleton, StatusBadge } from "@/components/ui"; import { DataTable } from "@/components/DataTable"; export interface PublicOverviewData { generated_at: string; status: string | null; totals: { files: number; rows: number; bytes: number; datasets_active: number; dataset_versions: number; raw_archives: number; raw_bytes: number }; families: { family: string; datasets: number; rows: number; bytes: number }[]; datasets: { id: string; name: string; kind: string; asset_class: string | null; interval: string | null; adjustment: string | null; status: string; current_version: number; row_count: number | null; bytes: number | null; file_count: number | null }[]; coverage: { dataset_id: string; symbols: number; first_session: string | null; last_session: string | null; bars: number | null }[]; options: { underlyings: number | null; first_day: string | null; last_day: string | null; rows: number | null }; fundamentals: { entities: number; facts: number; first_period: string | null; last_period: string | null; earnings_events: number }; instruments: { n: number; active: number; delisted: number }; freshness: { vendor_last_update: string | null; last_successful_job: string | null; jobs_24h: Record }; storage: { hot_free_gb: number | null; cold_free_gb: number | null; curated_gb: number | null; raw_gb: number | null }; backup: { last: string | null; verified: boolean | null }; license: string; } const FAMILY_LABEL: Record = { "market_bars.stock": "US stocks", "market_bars.etf": "US ETFs", "options.eod": "Options (EOD chains)", "market_bars.futures": "Futures (continuous)", "market_bars.futures_contracts": "Futures (contracts)", "market_bars.fx": "FX", "market_bars.crypto": "Crypto", "market_bars.index": "Indices", }; export function PublicOverview({ signedIn }: { signedIn: boolean }) { const { data, error, loading, reload } = useAsync((signal) => api.get("/public/overview", undefined, signal), []); useInterval(reload, 120_000); const stocks = data?.coverage.find((c) => c.dataset_id === "market_bars.stock.1m.raw"); const etfs = data?.coverage.find((c) => c.dataset_id === "market_bars.etf.1m.raw"); const indices = data?.coverage.find((c) => c.dataset_id === "market_bars.index.1m.raw"); const jobs = data?.freshness.jobs_24h ?? {}; return ( <> Catalog figures refreshed {fmtRelative(data.generated_at)} · public metrics only, data access requires sign-in : "Research-grade market data lakehouse (FirstRate Data, private use)"} actions={ <> {data?.status && } {!signedIn && ( Sign in )} } /> {error && } {!data && !error && } {data && ( <>
r.family} mobile="scroll" columns={[ { key: "family", header: "Family", render: (r) => {FAMILY_LABEL[r.family] ?? r.family} }, { key: "datasets", header: "Datasets", render: (r) => {fmtInt(r.datasets)} }, { key: "rows", header: "Rows", render: (r) => {fmtInt(r.rows)} }, { key: "bytes", header: "Size", render: (r) => {fmtBytes(r.bytes, 1)} }, ]} />
  • Status
  • Dataset versions published {fmtInt(data.totals.dataset_versions)}
  • Fundamentals periods {data.fundamentals.first_period ?? "—"} → {data.fundamentals.last_period ?? "—"}
  • Last backup {data.backup.last ? ( <> {" "} {fmtRelative(data.backup.last)} ) : ( )}

{data.license}

API reference: /api/docs · Documentation

d.status === "active" && (d.row_count ?? 0) > 0)} rowKey={(r) => r.id} mobile="scroll" columns={[ { key: "id", header: "Dataset", mono: true, render: (r) => (signedIn ? {r.id} : r.id) }, { key: "asset_class", header: "Asset", hideSm: true, render: (r) => r.asset_class ?? "—" }, { key: "interval", header: "Interval", hideSm: true, render: (r) => r.interval ?? "—" }, { key: "adjustment", header: "Adjustment", hideSm: true, render: (r) => r.adjustment ?? "—" }, { key: "row_count", header: "Rows", render: (r) => {fmtInt(r.row_count)} }, { key: "bytes", header: "Size", render: (r) => {fmtBytes(r.bytes, 1)} }, { key: "current_version", header: "Version", hideSm: true, render: (r) => v{r.current_version} }, ]} /> )} ); }