Skip to content

About

The machine-made website.

Resources

Code of conduct

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

machine-made.github.io

The machine-made website: one page and one llms.txt, built from site.json.

Status: live at https://machine-made.github.io/.

Build

python3 build.py        # writes docs/
python3 check_site.py   # prints OK, or one line per failure
python3 check_site.py --self-test   # breaks a copy of docs/ and checks that each break is caught
sh gate.sh              # build twice and compare, self-tests, check, forbidden words
python3 shots.py        # screenshots in shots/, light and dark; needs Playwright
python3 brand.py --fonts fonts   # the profile hero and the avatar in brand/; needs Playwright, fontTools, brotli
MM_FONTS=fonts sh gate.sh        # the gate, with brand/ built twice and compared
python3 build.py --site houses/openfluids          # a house site, into houses/openfluids/docs/
python3 check_site.py --site houses/openfluids     # its checks, against its own allow.json
sh publish.sh openfluids ../openfluids.github.io   # build a house into its Pages repository
python3 fonts.py --type DIR      # fonts/ from a checkout of machine-made/type; needs fontTools, brotli

build.py, card.py and check_site.py use only the Python 3.11 standard library. The build is deterministic: the same source tree gives the same bytes.

Files

Path Holds
site.json The content: name, line, subtitle line, the three project groups, houses
card.py The marks: the square logo, the punched card of the profile hero and the rows of dots. The palette
build.py The generator: page, style, llms.txt, the weave; uses card.py
brand.py The GitHub profile hero and the avatar, drawn from card.py and fonts/. Writes brand/
fonts.py Cuts the web fonts from machine-made/type. Writes fonts/
fonts/ The two web fonts and their licences. build.py copies them to docs/fonts/
brand/ The profile hero (light and dark: SVG, PNG, PNG @2x) and avatar.png. Do not edit by hand
src/style.css The style. build.py adds the colours and writes docs/style.css
check_site.py The checks for the built site
gate.sh The gate
shots.py Screenshots at 1440 px and 375 px, the scroll check and the line-length check. Writes shots/
DESIGN.md The grid, the type, the colour, the mark, the weave and the rows of dots
docs/ The built site. Do not edit by hand
houses/<name>/site.json A house site from this same generator: openfluids, boringquantsystems
houses/<name>/allow.json That house's public list, kept apart from its site.json: the checks pass only when both agree
publish.sh Builds one house into the docs/ of its own Pages repository. gate.sh builds and checks every house

Houses

One generator, one look, one tab row for every house. A house site is its site.json and its allow.json in houses/. gate.sh builds each house twice, compares the bytes and runs its checks. publish.sh writes the built site into the house's own Pages repository; that change lands there through a pull request.

Fonts

The site is set in machine-made Weft 0.1 (monospace: name, headings, project names) and machine-made Sans 0.1 (reading text), from machine-made/type. machine-made Sans is based on Plus Jakarta Sans by Gumpita Rahayu, Tokotype. Both are under the SIL Open Font License 1.1; the licences are fonts/mm-weft-OFL.txt and fonts/mm-sans-OFL.txt, and the build ships them next to the fonts in docs/fonts/.

fonts/ is vendored, so the build needs only this repository. To update it, check out machine-made/type and run python3 fonts.py --type DIR, then python3 brand.py --fonts fonts and MM_FONTS=fonts sh gate.sh. The cut keeps the variable axes (Weft: wght 100 to 900, FRAG 0 to 15; Sans: wght 200 to 800) and Latin-1 with common punctuation. The same input gives the same bytes.

File Source (machine-made/type a24c99d) Source size Cut size
fonts/mm-weft.woff2 fonts/weft/variable/MachineMadeWeft[FRAG,wght].ttf 61,332 bytes as WOFF2 23,744 bytes
fonts/mm-sans.woff2 fonts/sans/variable/MachineMadeSans[wght].ttf 72,172 bytes as WOFF2 24,112 bytes

Rules

  • The page shows the name, the line, the subtitle line, the public projects.
  • Only public repositories are named or linked. A new public project needs an entry in site.json and in PUBLIC_REPOS in check_site.py.
  • check_site.py --deny FILE, or MM_DENY_FILE=FILE sh gate.sh, also rejects any name listed in FILE. Keep FILE outside this repository.
  • No script, no tracking, no personal names, no costs.

Licence

To be confirmed (Apache-2.0 proposed).

About

The machine-made website.

Resources

Code of conduct

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages