Refine Apache Magpie description re AI Updated description of Apache Magpie to clarify that it uses AI
Landing page and documentation hub for Apache Magpie, an AI assistant that helps open-source maintainers handle the repetitive parts of running a project — triage, mentoring, drafting fixes, and security-report handling — so they can focus on the work that needs a human.
Status: Apache Top-Level Project. Project source lives at apache/magpie; this repo holds the public website.
| Layer | Tool |
|---|---|
| Framework | Astro 6 (static output) |
| UI | React 19 + Tailwind CSS 4 |
| Animations | Magic UI (Particles, BorderBeam, BlurFade, TextAnimate, ShimmerButton) via motion |
| Icons | lucide-react + inline SVG for brand marks |
| Docs | Astro content collections, markdown synced from apache/magpie/docs |
Zero runtime dependency on closed-source design tooling. All components are owned in-tree.
npm install npm run sync-docs # one-time fetch of markdown from apache/magpie npm run dev # http://localhost:4321
Always start the dev server with npm run dev — it runs scripts/dev.sh, which sets ASTRO_TELEMETRY_DISABLED=1 before launching astro dev. Without that, Astro tries to write to its telemetry config dir (e.g. ~/Library/Preferences/astro) and the dev server fails to start in sandboxed environments. Pass extra flags through, e.g. npm run dev -- --port 3000.
The prebuild hook runs sync-docs automatically, so npm run build always pulls a fresh copy of docs before generating the static site.
| Command | Purpose |
|---|---|
npm run dev | Dev server with HMR (telemetry disabled via scripts/dev.sh) |
npm run sync-docs | Clone apache/magpie (sparse, docs/ + images/) into src/content/docs/ and public/docs-assets/ |
npm run build | Static build to dist/ (runs sync-docs first) |
npm run preview | Serve the built site locally |
npm run astro | Astro CLI passthrough |
| Var | Default | Purpose |
|---|---|---|
MAGPIE_DOCS_REPO | https://github.com/apache/magpie.git | Source repo for markdown |
MAGPIE_DOCS_BRANCH | main | Branch to sync from |
website/ ├── scripts/ │ └── sync-docs.sh # sparse-clone docs/ + images/ from source repo ├── src/ │ ├── components/ │ │ ├── Badge/ # Subframe-derived primitives (owned) │ │ ├── Button/ │ │ ├── IconButton/ │ │ ├── landing/ # LP + SiteHeader/SiteFooter │ │ └── ui/ # Magic UI / shadcn primitives │ ├── content/ │ │ └── docs/ # synced markdown (gitignored) │ ├── content.config.ts # docs collection schema │ ├── layouts/ │ │ ├── BaseLayout.astro │ │ └── DocsLayout.astro │ ├── lib/utils.ts # cn() helper │ ├── pages/ │ │ ├── index.astro # / │ │ └── docs/ │ │ ├── index.astro # /docs │ │ └── [...slug].astro # /docs/<any> │ ├── styles/global.css │ └── theme.css # design tokens (brand, neutral, text sizes) ├── public/ # static assets (logos, favicons, /docs-assets) └── astro.config.mjs
The website is decoupled from the docs source. The markdown lives in apache/magpie/docs; this repo fetches it at build time and renders it through Astro content collections.
apache/magpie/docs/*.md
│
▼ scripts/sync-docs.sh (sparse clone)
src/content/docs/*.md
│
▼ Astro content collection
dist/docs/**/*.html (one static page per markdown file)
Image references inside markdown (../../images/foo.png) are rewritten to /docs-assets/foo.png during sync so they resolve against public/docs-assets/.
GitHub Actions workflow .github/workflows/build.yml runs on every push and PR to main:
astro check (warn-only)astro buildmain: copy .asf.yaml into dist/ and force-push the build to the publish branchThe site is published by ASF infrastructure, not GitHub Pages. On every push to main, CI builds the static site and force-pushes dist/ (an orphan, single-commit history) to the publish branch. The root .asf.yaml — carried into that branch — tells ASF infra to serve it:
publish: whoami: publish
ASF infra serves the publish branch at the project's inferred hostname — magpie-site → magpie.apache.org (served at the apex root). The hostname must not be set explicitly via a hostname: field; asfyaml forbids naming your own $project.apache.org (“it has to be inferred to prevent abuse”), and doing so stops the site from publishing.
The site is built with base: '/' so all links and assets resolve against the apex domain. Set SITE_BASE / SITE_URL to preview under a subpath (e.g. GitHub Pages).
One-time infra setup (outside this repo): for a brand-new project, ASF Infra may still need to provision DNS/TLS for
magpie.apache.orgbefore the inferred hostname resolves.