@ewanc26/pds-landing

ewan March 8, 2026
Source

@ewanc26/pds-landing is a composable Svelte 5 component library for building ATProto PDS landing pages. It powers the page served at pds.ewancroft.uk and is consumed there via a standalone SvelteKit app in the nix-config repository.

Part of the @ewanc26/pkgs monorepo.

Installation

Quick start — full page

The PDSPage component is a drop-in fully-assembled landing page:

Import the PDS design tokens once in your layout CSS:

Composing primitives

All sub-components are exported individually for custom layouts:

Fetching status manually

Components

Component Description
PDSPage Full assembled landing page (convenience wrapper)
TerminalCard Terminal window shell with traffic-light titlebar
PromptLine user@host:path $ bash prompt header
Tagline Dimmed subtitle beneath the prompt
SectionLabel Uppercase section heading
Divider Thin green-tinted
KVGrid Key-value grid with ok / warn / err / loading states
StatusGrid Live-fetching PDS status grid (wraps KVGrid)
LinkList → link list
ContactSection Bluesky mention + optional email
PDSFooter Footer with nixpkgs / atproto links

How it works

On mount, StatusGrid (via fetchPDSStatus) calls three XRPC endpoints on the PDS:

  • /xrpc/_health — liveness check and version
  • /xrpc/com.atproto.server.describeServer — DID, invite requirements, links, contact email
  • /xrpc/com.atproto.sync.listRepos — paginated account count

PDSPage also appends any privacy policy / terms of service URLs returned by describeServer to the links section automatically. Fields absent from the server response are hidden rather than shown as errors.

Tech stack

  • Svelte 5 with runes ($state, $derived, $props)
  • SvelteKit 2 (component library via @sveltejs/package)
  • Tailwind CSS v4
  • TypeScript 5.9+
  • Zero runtime dependencies beyond @ewanc26/ui (design tokens / base styles)

Design tokens

All components consume CSS custom properties from @ewanc26/ui/styles/pds-tokens.css:

Deployment

The actual page at pds.ewancroft.uk is served by a small SvelteKit app in nix-config/modules/server/pds-landing. It consumes this package as an npm dependency, builds to a fully static site with @sveltejs/adapter-static, and is served by Caddy in the NixOS configuration:

The Nix derivation builds the SvelteKit app at eval time, so the output is reproducible without node_modules on the server.

Publishing

New versions are published to npm automatically when a tag matching pds-landing/v..* is pushed to the monorepo. The GitHub Actions workflow builds the package and publishes it with provenance via OIDC.

Licence

AGPL-3.0-only — see the pkgs monorepo.

Discussion in the ATmosphere

Loading comments...