Skip to main content

yeaboi-frontend

Every browser-facing surface of yeaboi: the retro and poker live boards, the share gate, the reporting slide deck, the supervised-ship board, and the static HTML exports. Preact + TypeScript, built with Vite.

Published to PyPI as yeaboi-web-assets — a data-only wheel holding one .js and one .css per entry. That is how the bundles reach a pip install yeaboi on a machine with no Node.

make install       # npm ci
make dev           # Vite on :5399 with HMR, proxying /api to a yeaboi dev board
make test          # typecheck (incl. the enums --check) + vitest
make build         # the six bundles, into yeaboi_web_assets/static/
make ship-gate     # the full local gate: lint, format-check, test, build, contracts, wheel

The bundles are self-contained, and that is not a style rule

No CDN, no external <link>, no eval/new Function, no dynamic import(), classic IIFE rather than ESM. An exported report is opened over file://, where a type="module" script does not execute at all, and a tunnel-served board runs under a CSP with no external origins and no eval. Both failures are invisible on localhost and on a LAN; they show up only for the teammate on the tunnel or the person who opens a report from disk months later.

vite.config.ts is written to enforce this (cssCodeSplit: false, modulePreload: false, an assetsInlineLimit high enough that every asset becomes a data: URI). The assertions live in the yeaboi repo's tests/unit/test_web_assets.py, which runs them against whatever is actually installed — so what is checked is what ships, not what this repo happened to build.

Two artifacts come from yeaboi, and neither is edited here

contracts/web/ is vendored from yeaboi and pinned by sha in .contracts-rev. make contracts-check fails if a vendored file was edited in place, and notes when the pin has fallen behind upstream.

  • enums.json — the tuples the server validates against (retro grids, reaction emoji, avatars, the poker deck, evidence sources, the two terminal fonts). scripts/gen-enums.mjs renders src/types/enums.ts from it; npm run typecheck runs --check first, so a stale file fails before anything reads it. Never edit src/types/enums.ts.
  • fixtures/ — snapshots of what the server actually sends, written by a Python test that drives real boards through a real round. src/test/fixtures/wire.ts asserts each one satisfies its interface in types/board.ts, so a response field that quietly stopped being sent fails the typecheck here rather than rendering undefined to somebody on a tunnel.

Both are reached through the @contracts alias — declared in vite.config.ts and tsconfig.json, which must agree. Changing a board tuple is a yeaboi PR first, then make contracts-sync here.

make contracts-sync   # re-vendor from the tip of yeaboi, record the sha
make gen-enums        # re-render src/types/enums.ts from the vendored contract

Releasing

.github/workflows/publish.yml publishes to PyPI over trusted publishing (OIDC) — no token, nothing to rotate. It fires when a merge to main carries a version in pyproject.toml that PyPI does not already have. workflow_dispatch with a suffix input (rc1) builds a pre-release without committing the suffix anywhere.

The wheel is built from bundles produced moments earlier in the same job; the build output is not committed. make wheel-check builds the real wheel, installs it into a throwaway environment and resolves the files the way yeaboi does — because .gitignore doubles as hatchling's exclude list, and a missing artifacts entry would ship an empty wheel that installs perfectly and renders nothing. make dist-check asserts the self-contained rules on the same build, one release earlier than the yeaboi side can.

Development against a running board

The Python side finds bundles through $YEABOI_WEB_STATIC before anything else, so a sibling yeaboi checkout can serve this tree's build with nothing published:

make build
YEABOI_WEB_STATIC=../yeaboi-frontend/yeaboi_web_assets/static  # then run yeaboi's `make dev-board`

make dev is the faster loop when only the front end is changing — Vite's own server with HMR, proxying /api to whichever board is running.

Known gaps

No ESLint. This tree never had one; with strict TypeScript on, tsc --noEmit is what rejects code, and npm run lint says so rather than pretending otherwise. Prettier is real.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yeaboi_web_assets-1.0.0.tar.gz (1.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yeaboi_web_assets-1.0.0-py3-none-any.whl (793.4 kB view details)

Uploaded Python 3

File details

Details for the file yeaboi_web_assets-1.0.0.tar.gz.

File metadata

  • Download URL: yeaboi_web_assets-1.0.0.tar.gz
  • Upload date:
  • Size: 1.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for yeaboi_web_assets-1.0.0.tar.gz
Algorithm Hash digest
SHA256 bd9ddd5e03fb459b011bf357c08545fd1d2384eec3f9fb1c51b5202c3dd0648f
MD5 d517103e87ff933cefab4dd9725354c8
BLAKE2b-256 dc4f717b1e0a00f05deb597f7c25093f85c2d34045259356a0ec727fb25d7f0f

See more details on using hashes here.

Provenance

The following attestation bundles were made for yeaboi_web_assets-1.0.0.tar.gz:

Publisher: publish.yml on yeaboi-ai/yeaboi-frontend

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file yeaboi_web_assets-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for yeaboi_web_assets-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9566c14e8b1a0a81a344e24b4ba928823a9eaa3ce1b3e78c61c9676df24ca883
MD5 ae9ccf247080239c1c61d1cb0d7029d2
BLAKE2b-256 ab34e913216f716c4c31119aa8d4c1f6052c30d4b881dcd43aa7b28e9bfc1b85

See more details on using hashes here.

Provenance

The following attestation bundles were made for yeaboi_web_assets-1.0.0-py3-none-any.whl:

Publisher: publish.yml on yeaboi-ai/yeaboi-frontend

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.0.1

2 files

This release

1.0.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page