Repository navigation
docs: scaffold forge.electronjs.org Docusaurus site - #4386
claude[bot] wants to merge 91 commits into
Conversation
Add a standalone `website/` Docusaurus project that builds the existing `docs/` content at the site root. It has its own lockfile and is not a monorepo workspace, so the root lockfile, constraints, knip and lint are untouched. `website/sidebars.ts` re-exports `docs/sidebars.ts`. Also add a `website.yml` workflow that builds the site on PRs and pushes to `next` touching `docs/` or `website/`, and drop the leftover GitBook `layout:` frontmatter block from `docs/import-existing-project.md`. No hosting or deploy step yet. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P4HRbe7XtfgT6eVQZbjcUb
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub. |
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
|
Working with Erick Zhao Socket Security is red on this PR because two transitive dependencies of I'm not overriding the org security policy from a bot account. If a maintainer agrees these are acceptable, the per-PR override is Generated by Claude Code |
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P4HRbe7XtfgT6eVQZbjcUb
Add a `deploy` job to the Website workflow that runs after `build` on pushes to `next`: it downloads the `website` artifact, logs in to Azure via OIDC (the `website-publish` environment holds the federated credential) and `azcopy sync`s the build into the storage account's `$web` container, deleting stale blobs. A dedicated concurrency group keeps two pushes from racing the sync. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P4HRbe7XtfgT6eVQZbjcUb
…pushes to next Trigger the Website workflow on `v*` tag pushes (plus PRs for the build check) and gate the publish job on `refs/tags/v*`, matching how the TypeDoc publish triggers. The `website-publish` environment's deployment policy moves to the `v*` tag pattern on the infra side. Disable the setup-node package-manager cache in a job that publishes runtime artifacts (zizmor cache-poisoning). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P4HRbe7XtfgT6eVQZbjcUb
Prerelease tags (v8.1.0-beta.0) no longer overwrite the live site, and workflow_dispatch from a release tag re-publishes without a release. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6h4hvJEtskXTwXmXZH
- Add @easyops-cn/docusaurus-search-local (build-time index, no service) - trailingSlash: true so Azure static hosting serves dotted routes such as /config/makers/squirrel.windows/ - editUrl points at main; the next branch does not exist - Navbar API link uses js.electronforge.io until #4385 lands - Fail the build on broken Markdown links Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6h4hvJEtskXTwXmXZH
Retheme Docusaurus classic in Lucent, Electron Fiddle's design system, instead of building a custom theme. - Copy Fiddle's lucent-tokens.css and its Inter/Commit Mono fonts (SIL OFL) verbatim, and exclude them from oxfmt so they stay diffable. - Point Infima variables at the --lu-* tokens; the classic theme's data-theme attribute is the same light/dark switch the tokens use. - Add a Prism theme built from Lucent's syntax tokens (CSS variables, so one theme covers both modes). - Glass navbar over the window ground, content on a solid sheet, soft-fill admonitions, segmented-control tabs, hairline tables. - Carry over the reduce transparency, increase contrast and forced colors fallbacks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Make the site read less like stock Docusaurus with the few gradients the Lucent direction uses, kept to chrome and titles: - an Electron blue/cyan aura behind the glass chrome - a sheen and lit rim on the navbar glass and the page sheet - navbar links, colour toggle and search gathered into one glass capsule - the current sidebar page as a raised thumb - page titles fading from ink into cyan and blue - the assist-ring gradient on the focused search field - search results restyled to match (solid panel, soft accent selection) Gradients drop out under reduce transparency, increase contrast and forced colors. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Drop the gradient page titles, and replace Infima's type and rhythm with Lucent's: - body 15/24 (one step up from Fiddle's 13px UI for long-form reading), code 13/20, page titles in the display style (650 40/44, -0.028em), h2/h3/h4 at 650 22/28, 600 17/24, 600 15/20 - spacing on the 4px grid: 12px between paragraphs, 32/24px above h2/h3, 8px below headings, 16px after blocks - content capped at 720px (~80 characters a line) - sidebar rows at 28px in the label style, top-level groups as sentence-case captions; breadcrumbs and TOC in the label style Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
The font shorthand resets font-feature-settings, so the body-level setting never reached content, headings or the sidebar. Set it on every element, and leave code on Commit Mono's defaults. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Body line height 26px; 16px between paragraphs and after headings; 48px above h2, 32px above h3; 24px under the page title and after code blocks, admonitions and tables. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
This reverts commit fe90b13.
Inset the sheet 16px from the navbar and window edge, pad the content 48px from the sheet's left edge and 32px from its top, and pad the sidebar menu. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Bold prose at 600 (Lucent tops out at 650 for titles), navbar links in the label style (500 13/16), admonition titles at 600, and the current sidebar page on Lucent's chip fill like Fiddle's selected tree row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Add a homepage at / and move Getting Started to /getting-started/: - hero on the window aura: release badge, title, lead, Get started and GitHub actions, and the create-electron-app command with a copy button - the build pipeline (start, package, make, release) on a solid sheet, linking into the build lifecycle docs - glass cards for templates, makers, publishers, code signing, plugins and auto updates, linking to their docs Also restyle the footer as quiet chrome on the window ground and fix the secondary button's label colour in dark mode. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Add a track above the four pipeline steps. An app capsule travels from Develop to Publish and changes form at each step: source, app bundle, installers, then a release. The travelled part of the track fills with Lucent's assist-ring gradient and the current step lights up. Hovering or focusing a step moves the app there and pauses the loop. With reduced motion the loop doesn't run, and below 997px the track is hidden and the steps stack. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Rework the homepage pipeline into a conveyor. Three apps ride a moving belt at a constant speed, with no stops. Each passes through a glass station for Develop, Package, Make and Publish, and comes out the other side as its next form: template, src/, My App.app, installers, v1.0.0. Each app shows its icon on top with its name below. It's CSS only: it pauses in place under reduced motion and hides below 997px. Buttons now lift on hover. Primary gets a brighter sheen and a glow, and secondary gets the hover fill and a soft shadow. Press uses Lucent's press scale. No movement under reduced motion. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
The .app form on the homepage pipeline is now an app icon: the official Electron mark (from electron/website static/assets/img/logo.svg) in cyan on Electron navy, the same in light and dark. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Each station flickers and flashes with accent light as an app changes form inside it, and the new form comes out with a short afterglow. Both stay off under reduced motion. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Steps lift onto a glass card with a sheen, the number lights up, an arrow slides in, the command takes the accent, and the matching station on the line glows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
The capsule stretched to the navbar's height, so hover pills had 7px above and below but 3px at the ends and didn't sit concentric with it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Adds the nucleus and the two end rings that were left out, and widens the viewBox so the bottom orbit isn't clipped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Drops the format badge, which repeated the file extension, and moves the platform label into the title bar, centred on macOS and GNOME. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
…ghts Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
…he sketches Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Flame with a flicked tip and a star spark inside a tilted Electron orbit. Adds an SVG favicon that follows the colour scheme and removes the temporary logo sketches page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
custom.css now only imports one file per part of the site (tokens, Infima mapping, chrome, content, tabs, admonitions, buttons, footer, Mermaid, accessibility). Removes rules that match nothing on the built site (dropdown menus, legacy Mermaid class names, footer variables that .footer overrides) and merges duplicated rules. Pixel-identical on 27 screenshots across light, dark and mobile. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Drops the global Font Awesome stylesheet and web fonts (loaded on every page for one diagram). A Mermaid wrapper registers the five Lucide icons the build lifecycle diagram uses, only on pages with a diagram. Mermaid only parses fa:fa-<name> in labels, so the pack keeps the fa prefix with Lucide's names. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Lucent's capsule hover brightens to white, which vanishes on the light capsule. Light mode now uses the grey fill and full ink; dark mode keeps the capsule hover. The Docs link gets the same pill. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
…e of light Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
…hem off screen The conveyor's belt (background-position), the tiles' afterglow (filter) and the station sparks (background) repainted on the main thread every frame: about 70% of a 6x-throttled CPU while idle on the page. They now animate transform and opacity only (about 10%). The conveyor and the hero embers pause while scrolled out of view. The navbar logo gets an explicit size. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
…r the hero Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
…r-style rows Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Flush, full-height drawer on the window ground and aura instead of a floating card; main-menu rows use the sidebar's row style and chip. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
…heet Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
- Docs text follows the browser's font size setting: the root is 93.75%
and body and heading sizes are rem of it (still 15px at the default).
- Callout titles are one line box, so code or links in a custom title stay
inline, and custom titles keep their case ("CommonJS", not "Commonjs").
- Code in headings scales with the heading.
- Wide tables scroll sideways instead of being clipped.
- Previous/Next links are an outline with no fill or sheen.
- Ship only Inter's Latin subset and Commit Mono's regular face (370 KB of
fonts down to 121 KB); the site is English only.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
- tinypool 1.1.1 -> 2.2.0 (GHSA-5gmw-xhrv-c9v3, GHSA-85c8-ppgw-ccpr), via a resolution: @docusaurus/core 3.10 asks for ^1 and there is no 1.x fix. Docusaurus 4 already moves to ^2.1.2; SSG worker threads build fine. - encoding-sniffer 0.2.1 -> 1.0.2 via a resolution, dropping the deprecated whatwg-encoding (cheerio, from the local search plugin). - source-map-js 1.2.1 -> 1.2.2 (GHSA-68fv-2mgg-jv7q) and joi 17.13.7 -> 17.13.8 with `yarn up -R`. joi 17.13.9 (GHSA-4528-x5fx-h6hg) is still inside the 7-day npmMinimalAgeGate. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KsmQ6hDJc2gUo4WE4Xi5fZ
Requested by Erick Zhao · Slack thread
Decisions (from the Slack thread): the site lives in this repo under
website/; https://forge.electronjs.org is the canonical URL; the site is built fromdocs/onnextand published on every version tag (v*), not on pushes; v7 docs and electronforge.io (redirects, GitBook URLs) are out of scope for now.Before:
docs/onnexthas 56 Docusaurus-flavoured pages (plus one partial) and a completesidebars.ts, but nothing builds or publishes them; the public site is still the GitBook-era electronforge.io.After: a standalone
website/Docusaurus 3.10 project builds../docsat the site root (yarn buildpasses withonBrokenLinks: 'throw', 0 warnings, ~5 s). TheWebsiteworkflow builds it on PRs that touchdocs/,website/or the workflow itself, and on every version tag (v*) — matching how the TypeDoc publish in #4385 triggers — builds and publishes it to forge.electronjs.org.Summarize your changes:
How.
website/is its own Yarn project (ownyarn.lock,.yarnrc.ymlpointing at the vendored../.yarn/releases/yarn-4.18.0.cjs,nodeLinker: node-modules), deliberately not a monorepo workspace, so the root lockfile,yarn constraints, knip, oxfmt/oxlint and markdown lint are untouched — all of them still pass at the root with this branch checked out.docusaurus.config.tspointsdocs.pathat../docswithrouteBasePath: '/'(sodocs/index.mdis the home page),staticDirectories: ['../docs/static', 'static']so the existing/img/image.pngreference resolves, and aneditUrlfunction that maps tohttps://github.com/electron/forge/edit/next/docs/<file>. Navbar: Docs, API (packages.electronjs.org/forge/latest — not live yet), electronjs.org, GitHub; footer is minimal. React 19,@docusaurus/faster(Rspack/SWC), TypeScript 5.9 foryarn typecheck.website/sidebars.tsis a one-line re-export ofdocs/sidebars.ts, so the sidebar keeps living next to the content.docs/content edit:docs/import-existing-project.mdloses the leftover GitBooklayout:frontmatter block (11 lines). Nothing else indocs/changed — no links, headings or partials needed touching;_partials/is excluded by Docusaurus's default_*rule and the two partial imports resolve..github/workflows/website.yml: triggers onpull_request(path-filtered) and onpushofv[0-9]+.[0-9]+.[0-9]+*tags. Thebuildjob installs, builds and uploadswebsite/buildas thewebsiteartifact on both; thedeployjob runs on every version tag (v*) only — matching how the TypeDoc publish in docs: publish API docs to packages.electronjs.org and retire js.electronforge.io #4385 triggers — under thewebsite-publishenvironment withid-token: write, downloads that artifact, logs in to Azure withazure/loginvia OIDC andazcopy syncs it into the storage account's$webcontainer with--delete-destination=true --compare-hash=MD5. Aforge-website-deployconcurrency group (no cancel) keeps two tag pushes from racing the sync. All actions are SHA-pinned; zizmor reports no findings.Depends on
forge.electronjs.orgstorage account / static website, DNS, thewebsite-publishenvironment on this repo (deployment policy: tags matchingv*, so the OIDC subject isrepo:electron/forge:environment:website-publish) and theAZURE_FORGE_WEBSITE_OIDC_CLIENT_ID/AZURE_FORGE_WEBSITE_STORAGE_ACCOUNT_NAMEsecrets (AZURE_OIDC_TENANT_IDandAZURE_OIDC_SUBSCRIPTION_IDare the shared org values). Until that lands, thedeployjob will fail atazure/loginon the first version tag; thebuildjob is unaffected./config/makers/squirrel.windows) are emitted assquirrel.windows/index.html; the static website must not treat.windowsas a file extension (Docusaurus's ownservefalls back to the SPA shell for it).Known issues
copy-webpack-plugin,@pnpm/network.ca-file) — see docs: scaffold forge.electronjs.org Docusaurus site #4386 (comment). It is not a required check; a maintainer needs to triage/acknowledge them.Follow-ups (not in this PR)
https://js.electronforge.io/...links indocs/(plus the "API Docs" entry indocs/sidebars.ts) once packages.electronjs.org/forge is live — they use the old_electron_forge_*TypeDoc slugs; the new format is_electron-forge_*.docs/cli.mdhas 9 H1 headings; it renders but the table of contents is flat.CONTRIBUTING.mdand the issue template still point at the old docs repo.enonly.🤖 Generated with Claude Code
https://claude.ai/code/session_01P4HRbe7XtfgT6eVQZbjcUb
Generated by Claude Code