Default bifrost-UI
  • CSS 73.5%
  • HTML 9.5%
  • Python 9.2%
  • JavaScript 6.4%
  • Dockerfile 1.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Jriyuu 4b1971bd23
All checks were successful
checks / lint (push) Successful in 7s
release / check (push) Successful in 4s
release / move-major-tag (push) Successful in 4s
release / demo-image (push) Successful in 36s
Merge pull request 'Add Stackwatch example app and phone sidebar (v1.1.0)' (#1) from example-app into main
Reviewed-on: #1
2026-11-01 16:58:52 +11:00
.forgejo/workflows Add shared lint and PR review checks from template-default 2026-11-01 16:44:47 +11:00
assets Initial release of Bifrost UI v1.0.0 2026-11-01 15:28:38 +11:00
demo Add Stackwatch example app and phone sidebar (v1.1.0) 2026-11-01 16:23:32 +11:00
docker Initial release of Bifrost UI v1.0.0 2026-11-01 15:28:38 +11:00
scripts Initial release of Bifrost UI v1.0.0 2026-11-01 15:28:38 +11:00
src Add Stackwatch example app and phone sidebar (v1.1.0) 2026-11-01 16:23:32 +11:00
ui Add Stackwatch example app and phone sidebar (v1.1.0) 2026-11-01 16:23:32 +11:00
.gitignore Initial release of Bifrost UI v1.0.0 2026-11-01 15:28:38 +11:00
CHANGELOG.md Add Stackwatch example app and phone sidebar (v1.1.0) 2026-11-01 16:23:32 +11:00
README.md Add Stackwatch example app and phone sidebar (v1.1.0) 2026-11-01 16:23:32 +11:00
VERSION Add Stackwatch example app and phone sidebar (v1.1.0) 2026-11-01 16:23:32 +11:00

Bifrost UI

The shared theme for every web app and frontend in jriyuu-labs: one set of colours, fonts, components and a sidebar app layout, so every app looks like part of the same family.

Apps don't keep their own copy. They pull a tagged version of this repo in at build time, so a change here reaches every app on its next build, the same way ci-actions works.

Layout

bifrost-ui/
├── .forgejo/workflows/release.yml   # check, move the major tag, build the demo image
├── assets/                          # repo icon (also the Unraid template icon)
├── src/
│   ├── tokens.json                  # source of truth: colours, type, spacing, radii
│   └── bifrost.css                  # source: components and the sidebar shell
├── ui/                              # WHAT APPS GET: built theme, fonts, icons, starter page
├── demo/
│   ├── index.html                   # component gallery (ui.jriyuu.io)
│   └── app/index.html               # Stackwatch, the working example app (ui.jriyuu.io/app/)
├── docker/                          # demo image: Dockerfile, nginx.conf, compose.yaml
├── scripts/build.py                 # src/ → ui/
├── VERSION
└── CHANGELOG.md

Only ui/ is copied into apps. Everything else is for maintaining the theme and the demo.

Making a change

  1. Edit src/tokens.json (colours, sizes) or src/bifrost.css (components, layout).
  2. Run python3 scripts/build.py to regenerate ui/.
  3. Open demo/index.html in a browser and check both themes.
  4. Commit. CI fails if you forgot step 2.

Releasing

  1. On a branch, bump VERSION and add a line to CHANGELOG.md, then open a PR to main.
  2. Once it's merged, tag main and push the tag: git checkout main && git pull && git tag v1.1.0 && git push origin v1.1.0
  3. CI moves v1 to the new release and publishes the demo image. Pull the new image on Unraid to update ui.jriyuu.io.

Apps pinned to v1 get the change on their next build. Use a new major version (v2) only for changes that break existing apps, such as renamed classes or tokens; apps move to it when you change their .bifrost-ui file.

How apps get it

Each app repo has a .bifrost-ui file containing the version to use (normally v1), and assets/ui/ is git-ignored.

  • In CI: the bifrost-ui action in ci-actions runs before the build and fills assets/ui/.
  • On your machine: scripts/fetch-ui.sh (or fetch-ui.ps1 on Windows) does the same.

template-default already includes all of this.

Demo site

The demo image is nidavellir.jriyuu.io/jriyuu-labs/bifrost-ui-demo, a static nginx site serving the gallery at /, the example app at /app/ and the theme at /ui/. Run it on Unraid and put it behind SWAG as ui.jriyuu.io. No app depends on it being up.