Public website of PartBuddy at https://partbuddy.github.io, built with Astro and deployed by
.github/workflows/deploy.yml (Pages source: GitHub Actions).
npm install
npm run build # astro check + static build into dist/
npm run preview # serve dist/ on http://localhost:4321
npm test # release-notes parserNothing here is edited by hand for a release. The app repository PartBuddy/partbuddy is the source
(its docs/website.md has the details):
- Product facts (features, tour, standards, models, roadmap) are edited in the app repository in
site/site-content.json. Its site-sync workflow opens the pull requestsite-sync/contenthere; the build check of that pull request fails if a field is missing. Merge it, and the site deploys. - A release of the app redeploys this site at once (
repository_dispatch: partbuddy-release). The build reads the releases from the GitHub API: the hero shows the version and date, the buttons read "Download for Windows" and link the installer,/changelog.htmllists every release. No release yet means "Coming soon". The same run updates the snapshotsrc/data/releases.jsonby pull request, so a build without network or token shows the last known state. - Screenshots are rendered after each release (
pnpm site:shots) and arrive as the pull requestsite-sync/media. The hero film is still produced by hand.
Positioning copy that is not a product fact stays here: src/data/compare.ts (comparison),
src/data/site.ts (hero claim, channels, Ko-fi), FAQ in src/pages/index.astro.
Test a release locally:
PARTBUDDY_RELEASES_FIXTURE=test/fixtures/releases.json npm run buildSecrets: PARTBUDDY_RELEASES_TOKEN here (read access to the releases while the app repository is
private, optional); SITE_REPO_TOKEN in the app repository.
- Screenshots:
pnpm site:shotsin the app repository renders them at 1440 × 900 @2x intosrc/assets/shots/.scripts/crop-shots.mjscuts each one to the region insrc/data/crops.tsbefore every build. Missing files render as marked placeholders. - Build film:
hero.mp4+hero-poster.pngopen in a dialog from the hero button "Watch it build". - Lighthouse on this server: run Chrome with
--disable-gpu. Without a GPU, headless Chrome waits up to 350 ms for its software GPU process, which shows up as about 1.5 s of blocking time. - Dark only: the site uses the
<name>-dark.pngshots and falls back to<name>.png. - Logos:
src/assets/logos/, mapped by name insrc/components/Brand.astro; a name inworksWithwithout a logo shows as text. Sources and licences inTHIRD-PARTY-NOTICES.md. - Social image:
public/og.png(1200 × 630) is rendered once fromclarify-dark.png; redo it by hand when the app looks different. - No tracking, no cookies, no external requests, nothing stored in the browser.