// @ts-check import { defineConfig } from 'astro/config'; import starlight from '@astrojs/starlight'; import rehypeExternalLinks from 'rehype-external-links'; import { writeFile } from 'node:fs/promises'; // docs.atproto.eu - the EU-wide organizer handbook for the AT Protocol community in Europe. // // This is a standalone Astro + Starlight app that lives in the docs/ subfolder of the website // repo. It ships to its own Codeberg Pages repo (atprotoeu-docs-website) from the Tangled Spindle // CI, independent of the eight country builds. One handbook for all countries, so there is no // per-scope build here: it is EU-generic by design. const SITE = 'https://docs.atproto.eu'; const REPO = 'https://tangled.org/atcommons.eu/website'; // Codeberg Pages claims a domain from a .domains file at the site root, exactly like the country // builds. Emit it here so a bare `npm run build` produces a deploy-ready dist/. const emitDomains = { name: 'emit-domains', hooks: { 'astro:build:done': async ({ dir }) => { await writeFile(new URL('.domains', dir), 'docs.atproto.eu\n'); }, }, }; export default defineConfig({ site: SITE, markdown: { // Open external links (Wikipedia, atproto.eu, mu.social, the repo) in a new tab. Internal doc // links are relative, so they are left alone. rehypePlugins: [[rehypeExternalLinks, { target: '_blank', rel: ['noopener', 'noreferrer'] }]], }, integrations: [ starlight({ // Header shows the //atproto.eu wordmark (logo) followed by the title text, so it reads as // "[//atproto.eu] Community manager handbook". title: 'Community manager handbook', logo: { light: './src/assets/logo-eu.svg', dark: './src/assets/logo-eu-dark.svg', alt: 'atproto.eu', }, // The atproto.eu mark, matching the country sites. Starlight emits the SVG link; add the .ico // for scrapers/readers that request /favicon.ico directly. favicon: '/favicon.svg', head: [ { tag: 'link', attrs: { rel: 'icon', href: '/favicon.ico', sizes: '32x32' } }, ], description: 'Practical guides for running AT Protocol community events and helping out across Europe.', customCss: ['./src/styles/custom.css'], components: { // Append the independent-project notice under the default footer. Footer: './src/components/Footer.astro', }, editLink: { // The handbook source lives in docs/ of the website repo on Tangled. baseUrl: `${REPO}/blob/main/docs/`, }, social: [{ icon: 'external', label: 'Website repo', href: REPO }], sidebar: [ { label: 'Getting started', link: '/' }, { label: 'Event blueprints', items: [ { label: 'Hackathon', link: '/blueprints/hackathon/' }, { label: 'Meetup', link: '/blueprints/meetup/' }, { label: 'Unconference', link: '/blueprints/unconference/' }, ], }, { label: 'Contributing', items: [ { label: 'Translations', link: '/contributing/translations/' }, { label: 'Report a bug', link: '/contributing/report-a-bug/' }, { label: 'Request a feature', link: '/contributing/request-a-feature/' }, ], }, { label: 'Verification', link: '/verification/' }, { label: 'Code of conduct', link: '/code-of-conduct/' }, ], }), emitDomains, ], });