Something went wrong. Try again.
A collaborative coding-agent orchestrator for atproto radl.app
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879<!doctype html><html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <link rel="icon" href="%sveltekit.assets%/favicon.svg" />
<!-- The card an unfurler draws for a Radial link. A crawler does not run the app, so everything it can learn about a URL has to already be in the HTML it is handed — and `adapter-static` hands every route this one shell. These are therefore the *defaults*: true of the product, true of every route, and correct on any host that serves the bundle. The Pages worker (`src/edge/`) overwrites the four per-record ones — `og:title`, `og:description`, `og:url`, `og:type`, plus `<title>` — for `/g/*` and `/p/*`; everything else, everywhere else, keeps what is written here. The strings live in `src/lib/meta.ts` too, and `test/og-meta.test.mjs` holds the two copies to each other.
`og:image` must be absolute or it is ignored, and a static bundle cannot know its own origin — so it is the same `PUBLIC_RADIAL_ORIGIN` the deploy already sets for `client-metadata.json`. Unset, this degrades to a relative URL that crawlers skip, which is the right answer: the builds without it are loopback builds, and no crawler reaches loopback. --> <title>Radial</title> <meta name="description" content="Coordinate humans and coding agents on software goals. Every unit of agent work is requested by a human and lands as a signed, reviewable artifact in its author’s own atproto repo — no central server." /> <meta property="og:site_name" content="Radial" /> <meta property="og:type" content="website" /> <meta property="og:title" content="Radial" /> <meta property="og:description" content="Coordinate humans and coding agents on software goals. Every unit of agent work is requested by a human and lands as a signed, reviewable artifact in its author’s own atproto repo — no central server." /> <meta property="og:image" content="%sveltekit.env.PUBLIC_RADIAL_ORIGIN%/og.png" /> <meta property="og:image:type" content="image/png" /> <meta property="og:image:width" content="1200" /> <meta property="og:image:height" content="630" /> <meta property="og:image:alt" content="Radial" /> <meta name="twitter:card" content="summary_large_image" />
<script> // Before first paint, so a dark-mode reload never flashes the light desk. try { const saved = localStorage.getItem('radial:theme') const dark = saved ? saved === 'dark' : matchMedia('(prefers-color-scheme: dark)').matches document.documentElement.dataset.theme = dark ? 'dark' : 'light' } catch {} // `?frame` puts the comp's desk and window back: the app is full-bleed for the people using it // and framed for the pictures of it. Set here rather than in the app so an automated capture // cannot photograph the unframed layout on its way to being framed. It survives client-side // navigation because it is on the document, so one param frames a whole screenshot run. let framed = false try { framed = new URLSearchParams(location.search).has('frame') if (framed) document.documentElement.dataset.frame = 'on' } catch {} // Same reason, same moment: a rail the reader widened to 320px must not be drawn at 246px and // then jump. The bounds are repeated here because nothing is bundled yet — they are `RAIL_MIN`, // `RAIL_MAX` and `PANE_MIN` in `lib/rail.svelte.ts`, which re-reads the same key and owns the // rules; this has to reach the same answer or the jump comes back at hydration, which is what // `test/rail-bounds.test.mjs` holds the two copies to. // // `PANE_MIN` is a rule about the shell rather than the window, and the shell under `?frame` is // `min(1220px, 100%)` inside a 26px-padded body (`app.css`) — up to 52px narrower. There is no // layout to measure this early, so it is computed; after hydration `RailResizer` observes the // real `.app`. (Below the 860px breakpoint the frame is dropped and `--rail-w` is not read at // all, so the adjustment there is moot rather than wrong.) try { const width = Number(localStorage.getItem('radial:rail-width')) if (Number.isFinite(width) && width > 0) { const shell = framed ? Math.min(1220, innerWidth - 52) : innerWidth const ceiling = Math.max(190, Math.min(460, shell - 560)) const px = Math.min(ceiling, Math.max(190, Math.round(width))) document.documentElement.style.setProperty('--rail-w', px + 'px') } } catch {} </script> %sveltekit.head% </head> <body data-sveltekit-preload-data="hover"> <div style="display: contents">%sveltekit.body%</div> </body></html>