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.0 KB · 56 lines tsx
Raw Blame History
1import type { Metadata } from 'next';2import Link from 'next/link';3import { KeyValues, Prose } from '@/components/meta/prose';4import { Container, PageHeader, Section } from '@/components/ui/section';5import { CONTACT_EMAIL, SITE_URL, routes } from '@/lib/site';67export const metadata: Metadata = {8  title: 'Privacy',9  description: 'SatelliteIndex has no accounts, no tracking cookies and no advertising. What little we store, listed plainly.',10  alternates: { canonical: `${SITE_URL}/privacy` },11  openGraph: { title: 'Privacy | SatelliteIndex', description: 'No accounts, no tracking cookies, no advertising. What little we store, listed plainly.', url: `${SITE_URL}/privacy` },12  twitter: { card: 'summary', title: 'Privacy | SatelliteIndex', description: 'No accounts, no tracking cookies, no advertising.' },13};1415export default function PrivacyPage() {16  return (17    <Container>18      <PageHeader eyebrow="Privacy" title="What we store, and what we don't" lede="SatelliteIndex is a read-only reference site. There are no user accounts, no advertising, no third-party analytics and no tracking cookies." />1920      <Section eyebrow="Summary" title="In one table" className="pt-0">21        <KeyValues22          rows={[23            { k: 'Accounts', v: 'None. Nothing on the public site requires signing in.' },24            { k: 'Cookies', v: <>None for visitors. The only cookie the site can set is <code className="mono rounded bg-plane-2 px-1.5 py-0.5 text-[13px]">si_admin</code>, an httpOnly session cookie created when the operator signs in to the private admin console. It contains a hash, not the token, and expires after 12 hours.</> },25            { k: 'Analytics', v: 'No third-party analytics or advertising scripts are loaded.' },26            { k: 'Page-view counter', v: 'Anonymous. When you open a satellite, constellation, operator, country or launch page, the browser sends a beacon with only the entity id; the server increments a counter keyed by (day, entity type, entity id). No IP address, user agent, referrer or session is stored with it. It powers the “trending” list and nothing else.' },27            { k: 'Server logs', v: 'The API writes request logs with a random request id, method, path, status and timing, used for debugging and abuse prevention. The client IP is used in memory for rate limiting and is not persisted with the page-view counter. Logs are rotated and are not shared.' },28            { k: 'Search', v: 'Search queries are processed to return results and are not stored per user.' },29            { k: 'Third parties', v: 'Fonts and scripts are served from this site. Data upstream (CelesTrak and other sources) is fetched by our servers, never by your browser.' },30            { k: 'Location', v: 'Hosted in Canada (MacLustr). Public traffic terminates on a gateway in Beauharnois, Québec.' },31          ]}32        />33      </Section>3435      <Section eyebrow="Details" title="Admin console">36        <Prose>37          <p>38            The admin area under <code>/admin</code> is for the operator only. Signing in sets the <code>si_admin</code> cookie described above (httpOnly, SameSite=Lax, Secure in production). Signing out clears it. Admin actions (running a connector, resolving a duplicate) are recorded server-side for auditability; they are not linked to any visitor.39          </p>40        </Prose>41      </Section>4243      <Section eyebrow="Your rights" title="Questions">44        <Prose>45          <p>46            Because we do not hold personal data about visitors, there is nothing to export or delete. If you believe something on this site concerns you personally, or you have any question about this page, write to <a href={`mailto:${CONTACT_EMAIL}`} className="link">{CONTACT_EMAIL}</a>.47          </p>48          <p className="text-ink-3">49            See also the <Link href={routes.terms()} className="link">terms of use</Link>. This page will be updated if the practices above change; the last change is reflected in the site&rsquo;s version history.50          </p>51        </Prose>52      </Section>53    </Container>54  );55}56