Skip to content

Latest commit

 

History

161 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Blowhorn

Blowhorn site and downloads

This repository is two things for Layer5 Blowhorn:

  1. The marketing site at blowhorn.ai. It is a Hugo site with Docsy as a Hugo module, built like docs.layer5.io and deployed to GitHub Pages by site.yml. The Pages custom domain is already blowhorn.ai, so the project URL https://layer5io.github.io/blowhorn-site/ only redirects there; the site is reachable once the domain's DNS points at Pages, as docs/deploy.md describes.
  2. Public downloads. macOS disk images and their checksums are published as GitHub Releases on this repository. No release binary is committed here.

Blowhorn is a social media console that takes one message and broadcasts, reposts and amplifies it across every profile and platform your community runs, on autopilot. One message out, many ears in.

Download

Once the first stable release is public, this link always points at the newest universal macOS build:

https://github.com/layer5io/blowhorn-site/releases/latest/download/Blowhorn-mac.dmg

Every release carries a SHA256SUMS.txt. Check the image before you open it:

shasum -a 256 -c SHA256SUMS.txt

The Chrome extension ships through the Chrome Web Store, not from this repository.

Where things live

Site configuration hugo.toml; the pinned toolchain is go.mod (Docsy as a Hugo module), package.json (Hugo extended, postcss) and .nvmrc (Node.js)
Pages content/en/: the home page's front matter, the Trust Center and its privacy and terms pages (legal/), the onboarding pages and short redirect paths at the root (welcome.md, signup.md, ...), and the docs/ section scaffold (landing, quadrant, group, and CLI indexes) in Markdown
Templates layouts/: the home page (home.html), the shared shell (baseof.html), the Trust Center hub (trust-center.html), the legal pages (legal.html), the onboarding pages (onboarding.html), the redirect pages (redirect.html), the 404 page, the header, footer and icon sprite partials, the llms.txt and Markdown outputs, and the Docsy-based docs shell (layouts/docs/)
Styles and script assets/css/site.css and assets/js/download.js (the /download/ page); Hugo minifies and fingerprints both. The docs section's Blowhorn skin over Docsy is assets/scss/, with its sidebar toggle and offline search in assets/js/
Brand assets static/assets/brand/, served at /assets/brand/: version 1 of the brand kit (logo system, Major Blowhorn, marketing art, tokens.json) and the three self-hosted fonts; attribution in LICENSES.md
How the site deploys and how the domain is wired docs/deploy.md
How releases are published docs/distribution.md
Release binaries Releases on this repository
Product source and build pipeline Private: leecalcote/blowhorn

Reporting problems. The product repository is private, so use this repository's issues for everything public: site content, a download that will not open, a wrong checksum, or a bug in the app. Maintainers triage app bugs into the product repository. The Layer5 Slack works too.

Working on the site

You need Go (Hugo modules), Node.js and npm (the pinned Hugo extended and postcss come from package.json), Python 3 and make. The build targets follow the shared contract of layer5io/docs. make help lists every target.

make setup             # npm install: the pinned Hugo extended and postcss
make site              # serve at http://localhost:1313 with live reload
make serve             # serve once, without live reload
make build             # local build with draft, future and expired content
make build-production  # public production build into public/, what CI deploys
make site-internal     # internal build into public-internal/ (needs ../blowhorn)
make check             # every check, against a fresh production build
make ci                # exactly what site.yml's check job runs, starting with npm ci

Every CI step that runs repository logic is a make target, and the workflow calls that target, so one make command reproduces any CI step:

Target What it runs Run by
setup-ci npm ci (the locked dependencies) site.yml
workflow-check actionlint on site.yml, publish-dmg.yml, sync-docs.yml, cloud-auth-smoke.yml and product-ci.yml site.yml
test-scripts unit tests for the check scripts in .github/scripts/ site.yml
site-check one production build, then the checks below site.yml
check-schemas data/hero.json (the home page hero variants and rotation) and data/roles.json (the /for/<role>/ pages) validate against their schemas in schemas/ (docs/hero-variants.md) site-check
validate-html html-validate on every built page site-check
check-links every local link, image, font and srcset reference resolves site-check
check-third-party no page, or stylesheet or script it loads, requests another host (except the disclosed GitHub release lookup) site-check
check-urls every published URL and anchor still exists site-check
dmg-resolve, dmg-download, dmg-package, dmg-verify, dmg-release the five steps of publishing a DMG release, each reading its inputs from the environment (docs/distribution.md) publish-dmg.yml
dmg-check DMG=... sanity-check a disk image before publishing dmg-package runs the same script (check-dmg.sh)
dmg-sync-docs after a public release, start sync-docs.yml at the product tag desktop-<version> publish-dmg.yml
docs-cli-reference regenerate the CLI reference pages in the product checkout from its CLI schema and parser, before the sync (docs/deploy.md) sync-docs.yml
docs-sync REF=... copy the product docs from a leecalcote/blowhorn checkout into content/en/docs/ (docs/deploy.md) sync-docs.yml
docs-sync-base check out the docs-sync branch on the open sync PR's head, or on master when none is open (docs/deploy.md) sync-docs.yml
docs-sync-start-checks start site.yml on the docs-sync branch after a sync (docs/deploy.md) sync-docs.yml
product-ci SUITE=python|desktop run the private product repo's CI on a checkout of it, printing only step results and pass/fail counts (output stays in a private log; public logs never show product code) product-ci.yml

Each check target builds for production first, so it also runs on its own. labeler.yml, label-commenter.yml and slack.yml only call third-party actions and run no repository logic, so they have no target.

The site follows the brand kit exactly: every colour, type style, spacing, radius and shadow in assets/css/site.css is a token from static/assets/brand/tokens.json, with light as the default theme and dark following the operating system. Brand SVGs are used as files and never recoloured. The one-to-many hero illustration and the platform marks are inline SVG drawn in currentColor.

Nothing on the site loads from another host except Google Analytics 4, and that only with consent: no CDN and no web fonts from elsewhere. The id is in [services.googleAnalytics] in hugo.toml. layouts/_partials/analytics.html sets Google Consent Mode v2 to denied, and assets/js/consent.js loads gtag.js only after the reader accepts the cookie notice (layouts/_partials/consent.html). Both render in production builds only. The other request to another host while browsing is the download page's release lookup on GitHub's API (assets/js/download.js). The footer newsletter form posts to Layer5's Mailchimp list only when submitted. The privacy page discloses all three. make site-check fails a build that loads anything else from another host. The public URLs (/, /privacy.html, /terms.html, /assets/brand/...) and the home page's anchors (#platforms, #how, #trust, #download) are linked from outside this repository; the same check fails a build that loses one.

The site also publishes /llms.txt, /llms-full.txt and a Markdown copy of every page (/legal/privacy/index.md), as docs.layer5.io does.

CI

Workflow When What it does
site.yml Pull requests, pushes to master, manual runs Lints the workflows, runs the check-script unit tests, builds the site with the pinned Hugo, Go and Node.js, runs make site-check and uploads the Pages artifact. On master it deploys the artifact to GitHub Pages.
publish-dmg.yml Manual, or repository_dispatch (publish-dmg) from product CI Downloads a built DMG over HTTPS, checks it, verifies signing and notarization on a macOS runner (required for any public release), then creates the release with versioned assets, the Blowhorn-mac.dmg alias and checksums. Drafts by default; never overwrites.
sync-docs.yml Manual, or repository_dispatch (sync-docs) from product CI Checks out the product docs at the requested ref, opens or updates the docs-sync pull request (docs: sync from <ref>), and starts the site checks on it itself (gh workflow run site.yml); merging deploys once those checks pass.
 

Join the Layer5 community!

Our projects are community-built and welcome collaboration. 👍 Be sure to see the Layer5 Community Welcome Guide for a tour of resources available to you and jump into our Slack!

MeshMates

Find your MeshMate

MeshMates are experienced Layer5 community members, who will help you learn your way around, discover live projects and expand your community network. Become a Meshtee today!

Find out more on the Layer5 community.




 
Slack logo

Layer5 Community

✔️ Join any or all of the weekly meetings on community calendar.
✔️ Watch community meeting recordings.
✔️ Access the Community Drive by completing a community Member Form.
✔️ Discuss in the Community Forum.
✔️Explore more in the Community Handbook.

Not sure where to start? Grab an open issue with the help-wanted label.