{
  "path": "/projects/docsite",
  "site": "at://did:plc:ofrbh253gwicbkc5nktqepol/site.standard.publication/3mfyq5mpohw25",
  "tags": [
    "atproto",
    "tooling",
    "website"
  ],
  "$type": "site.standard.document",
  "title": "docsite",
  "description": "Source code for docs.ewancroft.uk — a documentation site for ewan's projects, built with SvelteKit and published via Sequoia.",
  "publishedAt": "2026-03-21T00:00:00.000Z",
  "textContent": "docsite is the source code for docs.ewancroft.uk — the central documentation hub for ewan's projects. It's a static SvelteKit site with a terminal-inspired aesthetic, driven by local Markdown files and published to the AT Protocol via Sequoia.\n\nHow It Works\n\nDocumentation is written as Markdown files in src/content/documentation/. Each file's frontmatter (title, description, date, tags, draft) is parsed at build time using gray-matter. The site lists all non-draft posts sorted by date and renders them via a Unified/remark/rehype pipeline with GFM support and heading id attributes for anchor links.\n\nPosts are also published as site.standard.document records on the AT Protocol PDS via Sequoia, making them part of the standard.site ecosystem. The sequoia.json config at the repo root wires the content directory, output directory, and publication record together.\n\nRoutes\n\n| Route | Description |\n|-------|-------------|\n| / | Landing page with a brief intro and quick links |\n| /projects | Index of all non-draft documentation posts, sorted by date |\n| /projects/[slug] | Individual documentation page with rendered Markdown and table of contents |\n\nQuick Start\n\nEdit .env:\n\nAdd Markdown files to src/content/documentation/, then:\n\nAdding Documentation\n\nCreate a .md file in src/content/documentation/:\n\n- draft: true hides the post from the index and all routes\n- date is used for sorting — ISO YYYY-MM-DD format\n- The filename (without extension) becomes the URL slug at /projects/[slug]\n\nSequoia Publishing\n\nsequoia.json at the repo root configures the Sequoia CLI:\n\nRunning sequoia publish syncs local Markdown files to site.standard.document records on the PDS, making them accessible to any Standard.site-compatible reader.\n\nEnvironment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| PUBLIC_SITE_TITLE | Yes | Site title used in <title> and OG/Twitter metatags |\n| PUBLIC_SITE_DESCRIPTION | Yes | Site description used in metatags |\n| PUBLIC_SITE_URL | Yes | Canonical URL used in OG/Twitter metatags |\n| PUBLIC_AP_INSTANCE_URL | No | Full URL of your ActivityPub instance (e.g. https://ap.example.com) |\n| PUBLIC_AP_USERNAME | No | Your username on the AP instance |\n\nWhen both AP vars are set, a fediverse:creator metatag is injected into every page. The tag is omitted entirely if either var is absent.\n\nTech Stack\n\nSvelteKit 2.50+ with Svelte 5, Tailwind CSS 4, TypeScript 5.9+, Vite 7. Markdown rendering via Unified, remark-parse, remark-gfm, remark-rehype, rehype-slug, and rehype-stringify. Deployed on Vercel via @sveltejs/adapter-vercel.",
  "canonicalUrl": "https://docs.ewancroft.uk/projects/docsite"
}