Skip to content

Space Works — landing page

The public landing page for SpaceWorks, free self-hosted software for makerspaces and tool libraries.

It is a static site: styles.css, site.js, hero.js, self-hosted fonts in fonts/ and brand assets in assets/, plus pages generated by build.py. There is no framework and no build step at runtime, so any static host works (GitHub Pages, Netlify, a plain web server).

Editing

Edit index.template.html or the data in content/, then rebuild:

python build.py

build.py generates every page and crawler file from one source:

Output From
index.html index.template.html, content/site.json, content/faq.json, content/products.json
<product>/index.html (inventory, machines, events, bookings, organization, workspace, mobile) content/products.json
sitemap.xml, robots.txt, 404.html the page list and content/site.json
llms.txt, llms-full.txt the same product facts and FAQs, as plain text for AI assistants
CNAME only when content/site.json url is a custom domain

Each page gets a canonical URL, Open Graph and Twitter tags, and a JSON-LD graph (Organization, WebSite, SoftwareApplication, SoftwareSourceCode, BreadcrumbList and FAQPage). The FAQ text on a page and in its structured data come from the same entries, so they cannot drift apart. It also inserts the approved logo lockups and the QR code on the sample loan record, and checks that local asset references exist. The favicon and other brand exports are checked in separately. The QR code encodes the main repository; regenerate it with:

npx qrcode@1.5.4 -t svg -e M -m 0 -o assets/qr.svg "https://github.com/SpaceWorks-Labs/SpaceWorks"

Commit content/, the template and every generated file. Run python3 -m unittest test_build.py to check that the export is complete, current and reproducible, that no page links to the old SpaceWorks-HQ organisation, and that every page's metadata and structured data are valid.

Moving to a custom domain

The site URL lives in one place: url in content/site.json. To serve it from spaceworkslabs.dev:

  1. Point DNS at GitHub Pages: A records for 185.199.108.153, 185.199.109.153, 185.199.110.153 and 185.199.111.153 (and the matching AAAA records 2606:50c0:8000::153 to 8003::153), plus a www CNAME to spaceworks-labs.github.io.
  2. Set "url": "https://spaceworkslabs.dev/", run python build.py (it writes CNAME) and commit.
  3. In the repository's Pages settings, wait for the certificate and turn on Enforce HTTPS (.dev domains only work over HTTPS), then submit https://spaceworkslabs.dev/sitemap.xml in Google Search Console and Bing Webmaster Tools.

Until then the site stays at https://spaceworks-labs.github.io/SpaceWorks-Website/. On that address crawlers ignore robots.txt (it is only read at a host's root), so submit the sitemap directly.

Keeping product facts true

Every statement on a product page comes from that product's README. When an app ships a release or changes what it does, update its entry in content/products.json (status, version, features, FAQs) and updated in content/site.json, then rebuild.

Preview locally

python -m http.server 5100

Then open http://localhost:5100/. The site uses the cream brand theme for every visitor.

hero.js brings the inventory concept fully into view, holds it, then zooms from its center until the white content fills the screen. The next section's text enters after the zoom finishes. Reduced-motion preferences and short viewports use the normal document flow. Run node test_hero.cjs for its focused entry, reveal, reverse and fallback checks.

The browser terminal preview accepts typing at the blinking cursor. Entering tinkerhub and pressing Enter responds with six sebin; it does not execute commands. Run node test_terminal.cjs to check input handling. Run node test_site.cjs to check clipboard feedback and mobile menu navigation.

What the page says, and where it comes from

Everything on the page describes the real product, so keep it in step with the main repository:

  • The area presets and the installer summary in the terminal follow scripts/setup-area-questions.sh (area labels, their order, and the events / bookings / makerspace edition rule).
  • The sample loan follows the request workflow: requested, accepted, issued with a box QR scan and a photo, returned with a photo and a note.
  • The version line in the footer comes from hub.version and hub.released in content/site.json; keep it in step with the latest release.
  • Deployment locations and the combined 1,000+ member count were supplied by the project owner; logo provenance is recorded in assets/deployments/README.md.

License

GNU Affero General Public License v3 (AGPL-3.0-or-later), matching SpaceWorks. Font licensing and provenance are documented in fonts/README.md.

Releases

Packages

Used by

Contributors

Languages