spb/market-atlas
Public
TypeScript 96.7%
SQL 1.6%
CSS 0.8%
JavaScript 0.5%
1import type { Metadata } from "next";2import Link from "next/link";3import { Page, PageHeader } from "@/components/ui/section";4import { RightsBadge } from "@/components/ui/status-badge";5import { apiOptional } from "@/lib/api";6import { DISCLAIMER } from "@/lib/site";7import type { Source } from "@/lib/types";89export const metadata: Metadata = { title: "Data rights & licensing", description: "How Market Atlas classifies the rights attached to every source and what each status allows.", alternates: { canonical: "/licensing" } };10export const dynamic = "force-dynamic";1112const STATUSES: Array<[string, string]> = [13 ["PUBLIC_OPEN", "Public data with no usage restriction known to us."],14 ["PUBLIC_ATTRIBUTED", "Public data displayed with attribution to the source (venue feeds, reference files). Not for raw-feed commercial redistribution."],15 ["OFFICIAL_OPEN_DATA", "Government or central-bank open data (public domain or open licence with attribution)."],16 ["LICENSED", "Data licensed to Market Atlas (including our sister platform HF Market Data) — redistribution within the licence."],17 ["DELAYED", "Delayed market data that may be displayed publicly with attribution and a delay notice (Cboe: 15 minutes)."],18 ["INDICATIVE", "Indicative values (reference fixings, averages) — informational, not tradable."],19 ["PUBLIC_RESTRICTED_REDISTRIBUTION", "Publicly accessible but redistribution is restricted: used internally for validation only; public values are withheld."],20 ["RESEARCH_ONLY", "Usable for internal research; never displayed."],21 ["INTERNAL_ONLY", "Internal signals (Market Atlas' own calendar/monitoring) or values built only from restricted sources."],22 ["UNKNOWN", "Rights not yet classified — never exposed publicly until reviewed."],23];2425export default async function LicensingPage() {26 const sources = (await apiOptional<Source[]>("/v1/sources"))?.filter((s) => s.category !== "INTERNAL") ?? [];27 return (28 <Page>29 <PageHeader kicker="Legal" title="Data rights & licensing" lead="Technical accessibility does not imply redistribution rights. Every connector declares a rights status; the platform enforces it — quotes built only from restricted sources are withheld, while their provenance metadata stays visible." />30 <div className="prose-ma max-w-3xl">31 <h2>Rights statuses</h2>32 <table>33 <thead>34 <tr>35 <th>Status</th>36 <th>What it means</th>37 </tr>38 </thead>39 <tbody>40 {STATUSES.map(([s, d]) => (41 <tr key={s}>42 <td>43 <RightsBadge status={s} />44 <code className="ml-2">{s}</code>45 </td>46 <td>{d}</td>47 </tr>48 ))}49 </tbody>50 </table>51 <h2>What Market Atlas never does</h2>52 <ul>53 <li>Bypass authentication, paywalls, CAPTCHAs or access controls; impersonate users; use leaked credentials or private sessions.</li>54 <li>Reverse-engineer protected feeds for unauthorized redistribution or evade a source's restrictions.</li>55 <li>Present delayed, end-of-day or stale values as real time.</li>56 </ul>57 <h2>Attributions</h2>58 {sources.length ? (59 <table>60 <thead>61 <tr>62 <th>Source</th>63 <th>Rights</th>64 <th>Notes</th>65 </tr>66 </thead>67 <tbody>68 {sources.map((s) => (69 <tr key={s.id}>70 <td>71 {s.homepage ? (72 <a href={s.homepage} target="_blank" rel="noopener noreferrer">73 {s.name}74 </a>75 ) : (76 s.name77 )}78 <div className="text-xs text-ink-3">{s.organization}</div>79 </td>80 <td>81 <RightsBadge status={s.rights_status} />82 </td>83 <td>84 {s.rights_notes}85 {s.terms_url && (86 <>87 {" "}88 <a href={s.terms_url} target="_blank" rel="noopener noreferrer">89 terms ↗90 </a>91 </>92 )}93 </td>94 </tr>95 ))}96 </tbody>97 </table>98 ) : (99 <p>Source attributions are listed on the <Link href="/sources">sources</Link> page.</p>100 )}101 <h2>Disclaimer</h2>102 <p>{DISCLAIMER} Final legal language will be reviewed before any commercial launch.</p>103 </div>104 </Page>105 );106}107