The static site shares ArchiveBox's navigation/footer style with the Apple and Electron app sites. It uses local assets, system fonts, semantic HTML, and responsive CSS. The default canonical URL is https://android.archivebox.io/; GitHub Pages serves it from the custom domain configured in Cloudflare.
Requires Node.js 22+:
node scripts/build-site.mjs --baseurl / --allow-missing-screenshots
npx --yes serve _siteThe explicit local-preview flag permits an empty gallery before real captures exist. It displays an honest pending-capture message, not simulated screens. It is disabled in CI.
pages.yml builds on pushes, pull requests, manual dispatch, and successful completion of the app CI workflow. Marketing edits publish alongside app CI without waiting for it. The website restores the latest verified site-screenshots artifact from successful main CI, or the published gallery after artifact retention expires. The first publication can show an explicit pending-gallery message when no published manifest exists; malformed captures and download failures still fail the build.
The restore helper records the original capture run in capture-run.json. The website checks images against that run while build.json records the current site revision separately from captureRevision. The original release site check still requires complete captures matching its own revision and version. Restored captures retain their original coverage contract; newly added screens become mandatory on the next fresh capture, so a feature addition cannot block a marketing edit using an older verified gallery. Deployments serialize restoration, building, and publication, and skip source revisions superseded on main.
RELEASE_VERSION=0.1.0 node scripts/build-site.mjs \
--screenshots-dir artifacts/screenshots --output _site --require-screenshotsSCREENSHOTS_DIR can provide the input directory instead. The default is docs/screenshots. SITE_URL overrides the canonical URL and default base path; --baseurl can set the serving path separately. Upload _site using GitHub Pages Actions. No Jekyll or third-party runtime is needed.
The default build is strict. Missing images, missing flows, invalid PNG dimensions, incorrect checksums, malformed metadata, or captures from a different GITHUB_SHA fail the build. RELEASE_VERSION, when supplied, must match the capture version. Release jobs must set both the SHA and version. Screenshot URLs include content hashes so a new capture does not reuse a browser's previous image cache.
The screenshot producer writes real app PNGs and manifest.json into one directory. Capture the running app against a real ArchiveBox server through normal user-facing interactions. Do not generate app mockups, fabricate server responses, or copy captures from another release.
Required IDs (and corresponding <id>.png filenames): onboarding, connections, discovery, library, search, snapshot, add, tags, share, share-saved, activity, settings, server-browser, home, crawls, scheduled-crawls, archive-results, server-tags, ai-agent, users, personas, api-keys, webhooks, processes, machines, network-interfaces, binaries, plugins, workers, logs, widget.
The 31 captures distinguish native Add tags (tags) from the server tag-management page (server-tags). Optional server features such as AI Agent must show their actual unavailable state when disabled, rather than simulated content.
Each manifest uses this shape; values below describe the fields and are not a usable capture:
{
"schemaVersion": 1,
"commit": "the full 40-character captured Git commit",
"appVersion": "0.1.0",
"generatedAt": "ISO-8601 timestamp",
"device": "actual emulator or device and Android API level",
"backend": "actual ArchiveBox server version or image identifier",
"workflowRun": {"url": "https://github.com/ArchiveBox/android-archivebox/actions/runs/123"},
"screenshots": [
{
"id": "share",
"file": "share.png",
"title": "Share a link",
"description": "Review a shared URL and add tags before saving.",
"width": 1080,
"height": 2400,
"sha256": "SHA-256 digest of the actual PNG bytes"
}
]
}workflowRun is optional for local captures. Keep credentials masked by the actual app UI before capture. The site builder emits the original manifest alongside the images and lists version, commit, device, capture time, and workflow provenance in the gallery.
docs/index.html: landing-page content. The builder injects real home/share captures..github/pages/base/,.github/pages/nav.html,docs/footer.html: shared ArchiveBox navigation and footer.docs/style.css: page and gallery presentation.docs/assets: official logo, favicons, and generic ArchiveBox OG image; see branding credits.scripts/build-site.mjs: manifest validation and static generation.
Keep feature claims consistent with the implementation. Add capture coverage whenever a major screen is introduced. The APK CTA is the stable GitHub release asset ArchiveBox-Android.apk. Add a Google Play CTA only after its real listing URL exists.