/** * About & Help modal body (spec §01B/§01C). * * Rendered inside ModalShell — no backdrop, close button, or focus trap here; * the shell owns all of that (docs/architecture/03 → Layer 3). This component * is pure content: app identity, keyboard shortcuts (§01D), privacy posture * (SOUL.md — local-only, no accounts, no telemetry), and acknowledgements of * the projects Astrolabe is built on and shaped by. */ import type { ReactNode } from 'react'; import { FEEDBACK_EMAIL, feedbackMailtoHref } from '../feedback'; import styles from './AboutModal.module.css'; /** True when the user agent is macOS / iOS — drives the Cmd vs. Ctrl label. */ const isMac = /Mac|iPhone|iPad|iPod/.test(navigator.platform); const mod = isMac ? '⌘' : 'Ctrl'; /** Keyboard shortcut rows sourced from spec §01D. */ const SHORTCUTS: readonly { keys: string; action: string }[] = [ { keys: `${mod}+Shift+N`, action: 'Create a new snippet' }, { keys: `${mod}+K`, action: 'Toggle the Datasets manager' }, { keys: `${mod}+S`, action: 'Publish the current snippet draft' }, { keys: `${mod}+,`, action: 'Open editor settings' }, { keys: 'Esc', action: 'Close the active modal' }, ]; /** * External acknowledgement link. Opens in a new tab so following a credit never * unloads the workspace mid-edit; `rel` isolates the opened context. */ function Ack({ href, children }: { href: string; children: ReactNode }) { return ( {children} ); } export function AboutModal() { return (
{/* Identity */}

Astrolabe

v{__APP_VERSION__}

A local-first workspace for authoring, organizing, and previewing Vega-Lite charts. Edit JSON, see the chart update live, and keep a personal library of snippets — with no account, no server, and full offline support.

{/* Keyboard shortcuts */}

Keyboard shortcuts

{SHORTCUTS.map(({ keys, action }) => ( ))}
{keys} {action}
{/* Privacy */}

Privacy

Astrolabe runs entirely in your browser. Your snippets, datasets, and settings are stored locally and never leave your machine.

{/* Feedback */}

Feedback

Found a bug or have an idea? Email{' '} {FEEDBACK_EMAIL} .

{/* Acknowledgements */}

Acknowledgements

Astrolabe stands on the work of many open projects.

Built on

  • Vega-Lite,{' '} Vega,{' '} vega-embed — render every chart
  • Monaco — the JSON editor
  • React,{' '} Zustand,{' '} Vite

Chart guidance shaped by

  • Draco,{' '} Voyager — encoding rules
  • FT Visual Vocabulary , Datawrapper
  • Lyra — authoring interactions

Design informed by

  • IBM Carbon,{' '} GOV.UK
  • WAI-ARIA APG,{' '} Nielsen Norman

Typography

  • IBM Plex and other open typefaces, self-hosted via Fontsource
{/* Sibling project */}

Also from the maker

Astrolabe has a sibling: Syto, a workspace for cleaning and reshaping data before you chart it. Go take a look.

); }