SPB Git forge
3commits 1branches 0releases
417.0 KBsize
maindefault branch
10 days agolast push
TypeScript 66.5% Python 30.9% JavaScript 1.4% CSS 0.7%
4.4 KB · 70 lines tsx
Raw Blame History
1import type { Metadata } from 'next';2import Link from 'next/link';3import { ATTRIBUTION, DISCLAIMER, MISSION } from '@/components/meta/legal';4import { KeyValues, Prose } from '@/components/meta/prose';5import { Container, PageHeader, Section } from '@/components/ui/section';6import { AUTHOR, CONTACT_EMAIL, SITE_NAME, SITE_URL, routes } from '@/lib/site';78export const metadata: Metadata = {9  title: 'About SatelliteIndex',10  description: 'What SatelliteIndex is, who builds it, what it is not, and where the data comes from.',11  alternates: { canonical: `${SITE_URL}/about` },12  openGraph: { title: 'About | SatelliteIndex', description: 'What SatelliteIndex is, who builds it and where the data comes from.', url: `${SITE_URL}/about` },13  twitter: { card: 'summary', title: 'About | SatelliteIndex', description: 'What SatelliteIndex is, who builds it and where the data comes from.' },14};1516export default function AboutPage() {17  return (18    <Container>19      <PageHeader eyebrow="About" title="An index of everything in orbit" lede={MISSION} />2021      <Section eyebrow="What it is" title="A canonical, source-attributed layer" className="pt-0">22        <Prose>23          <p>24            {SITE_NAME} keeps one canonical record per object in Earth orbit — payloads, rocket bodies, debris, stations — and links it to the entities around it: the constellation it belongs to, the operator and country responsible for it, the launch that put it there and the site it left from. Orbital element sets are appended, never overwritten, so every object carries its own history.25          </p>26          <p>27            On top of that canonical layer sit derived views: live SGP4 positions, orbit classes, mission types, constellation growth, orbital density by altitude, reentry timelines and rankings. Each derived value is labelled as such and documented in a versioned <Link href={routes.methodology()} className="link">methodology</Link>; each raw value keeps its provenance and is listed with its license on the <Link href={routes.sources()} className="link">sources</Link> page.28          </p>29          <p>30            The whole thing is exposed through a public JSON <Link href={routes.developers()} className="link">API</Link> that the website itself consumes — there is no hidden dataset behind the pages.31          </p>32        </Prose>33      </Section>3435      <Section eyebrow="What it is not" title="Honest limits">36        <Prose>37          <ul>38            <li>Not a conjunction-assessment or collision-avoidance service. We publish orbital density as an informational count, never a probability of collision.</li>39            <li>Not a reentry-prediction service. Decay dates come from the catalog after the fact; low-perigee watch lists are exactly that — watch lists.</li>40            <li>Not authoritative on ownership or mission. Operator, country, mission type and constellation membership are resolved from owner codes, CelesTrak groups and documented name patterns, and can be wrong for individual objects.</li>41            <li>Not real-time. Element sets are refreshed on a schedule and positions are propagated from them; freshness is shown on every page and on <Link href={routes.status()} className="link">/status</Link>.</li>42          </ul>43          <p className="mt-4 text-ink-3">{DISCLAIMER}</p>44        </Prose>45      </Section>4647      <Section eyebrow="Who" title="Built and operated by">48        <KeyValues49          rows={[50            { k: 'Author', v: AUTHOR },51            { k: 'Contact', v: <a href={`mailto:${CONTACT_EMAIL}`} className="link">{CONTACT_EMAIL}</a> },52            { k: 'Hosting', v: <>Self-hosted on <a href="https://www.maclustr.io" rel="noopener noreferrer" className="link">MacLustr</a>, a cluster of Apple silicon machines; public routes go through the MacLustr Tunnel.</> },53            { k: 'Stack', v: 'Python 3.12 · FastAPI · PostgreSQL · Redis · python-sgp4 · Next.js · Tailwind' },54            { k: 'Status', v: <>MVP. The API is free without keys for now (<Link href={routes.developers()} className="link">details</Link>).</> },55          ]}56        />57      </Section>5859      <Section eyebrow="Sources" title="Attribution">60        <Prose>61          <p>{ATTRIBUTION}</p>62          <p>63            Read the <Link href={routes.terms()} className="link">terms</Link> and <Link href={routes.privacy()} className="link">privacy</Link> pages for the legal details; they are short.64          </p>65        </Prose>66      </Section>67    </Container>68  );69}70