Notes for publishing Verlass and keeping it running. Everything here is done by hand in a browser or with the commands shown.
docs/app/, gmail/, or scripts/.VERSION and set RELEASE_DATE in scripts/site.config.mjs, raise version in package.json to match, and add a section to CHANGELOG.md. The build stamps the download packages with RELEASE_DATE, so set it before building.npm run build and npm run check. Both must pass. Each area has its own tests in scripts/tests/ (core, gmail, web, pages, colors, packages, ui), and npm run check -- --only=gmail runs just one while you work on it. The check compares every generated file with a fresh build, so a changed source without a rebuild fails.ui tests drive the screens in headless Chrome. They need Google Chrome, Microsoft Edge, or Chromium (set CHROME_PATH to choose one). When no browser can start, they are skipped with a note. Run them on your own computer before a release; the GitHub check does not have to.main. GitHub Pages publishes docs/ within a minute or two.Outlook users get the new version automatically, because Outlook loads Verlass from the website. Gmail users update by replacing the script files (the install page says how), so mention Gmail changes in the changelog.
The site is published from the main branch, /docs folder (Settings, Pages).
The permanent address is https://verlass.alyssaagard.dev. The Outlook manifest, every organization’s app registration, and the Gmail add-on’s icon contain this address, so it should not change once people install Verlass. To connect it:
CNAME Recordverlassalyssaagard.github.io.verlass.alyssaagard.dev resolves (usually minutes, sometimes an hour).verlass.alyssaagard.dev and select Save. GitHub adds a docs/CNAME file..dev domains require HTTPS, the site only loads once this step is done.Until the custom domain is set, the site is also reachable at https://alyssaagard.github.io/verlass/, but the Outlook add-in and Microsoft sign-in only work at the permanent address.
To use a different address, change SITE_URL in scripts/site.config.mjs, run npm run build, and update the CNAME. Organizations that already installed the Outlook add-in must then update their app registration’s redirect addresses and install a new manifest.
The name is set in scripts/site.config.mjs (NAME and SLUG), and the build uses it for the pages, the packages, and the manifests. It also appears as plain text in source comments, in README.md, CHANGELOG.md, and this file, in package.json and package-lock.json, in a few strings in gmail/*.gs and docs/app, and in two sentences that explain the name (the home page in scripts/pages.mjs and the README). Names used only inside the code, such as browser storage keys, say helpdesk and do not change. To rename: change NAME, SLUG, SITE_URL, and REPO_URL, search the repository for the old name in both capital and small letters, run npm install && npm run brand for the new logo, then npm run build and npm run check.
The automated tests run the real code against simulated Google and Microsoft services. They cannot show how Gmail draws a card, how Google and Microsoft answer in practice, or how the admin centers behave. Before telling people a platform is ready, do these by hand and note the date in the changelog.
Gmail, Standard install (a free Gmail account is enough):
= stays text in the Sheet.Gmail, Private install (needs two accounts in one Google Workspace domain; Google says test deployments are for people in the owner’s organization, so two free accounts may not work, and that is worth noting too):
ALLOWED_AUDIENCE is filled in. This confirms that Google’s sign-in token carries the add-on project’s own client ID, which the service relies on. If it is empty or the add-on is refused with “made for a different add-on”, report it; this is the one part of the Private install that could not be verified without a real account.ALLOWED_DOMAIN and check that an outside account is refused./a/<your domain>/macros/, check that the add-on still reaches it; if not, the plain /macros/s/.../exec form of the same address should work.ALLOWED_AUDIENCE in the service project and opening the add-on as the owner fixes it, and the guides already say so.setupHelpDesk from the editor.https://www.googleapis.com/auth/gmail.addons.execute from a copy of the manifest and see whether the add-on still runs. Google’s current scope list no longer shows it; if it is not needed, drop it from scripts/gmail-manifests.mjs.Outlook (needs a Microsoft 365 tenant where you are an administrator; the Microsoft 365 Developer Program offers a free test tenant to those who qualify):
npx office-addin-manifest validate docs/outlook/manifest.xml once the site is live. It asks Microsoft’s own service to check the manifest. This has not been run yet.docs/app/vendor/msal-browser.min.js is Microsoft’s MSAL.js for browsers, version 4.30.0 (the long-term support line), copied unchanged from the npm package @azure/msal-browser (lib/msal-browser.min.js). Its license is beside it. To update, download the same file from a newer 4.x release, replace it, and run the Outlook real-world tests. Version 5 changes how the library is used; read its migration guide first.
Today each organization registers its own app in Microsoft Entra, which needs no account from the publisher. Once the company has a Microsoft tenant and a verified Microsoft partner account, one multitenant registration could serve every organization: administrators would then only grant consent, and the install page’s form would need only the site address. The code already takes the application ID from the manifest, so this is a change to the install page and guide.
docs/outlook/manifest.xml with the privacy (/privacy/), terms (/terms/), and help (/help/) pages, and the icons in docs/assets/icons/.verlass.alyssaagard.dev, or choose a company subdomain and follow “To use a different address”.PROVIDER in scripts/site.config.mjs to the company’s legal name, and update the copyright line in LICENSE if the company now holds the copyright.ADDIN_ID the same: it identifies the add-in to Outlook.npm install then npm run brand regenerates every logo, icon, and favicon from brand/fonts/CormorantGaramond-500-italic.woff (the same typeface as Offizin and Cachet). Outputs go to docs/assets/, docs/favicon.*, and docs/app/ui/mark.js. For the GitHub social preview, upload docs/assets/brand/verlass-social.png under Settings, General, Social preview. Headings on the site use IBM Plex Mono, and text uses IBM Plex Sans; both are in docs/assets/fonts/ under the SIL Open Font License.
organization-it-helpdesk has a README that points here. Archive it (Settings, General, Archive this repository) only when you are ready; an archived repository is read-only but stays visible, and it can be unarchived.