Skip to content

Tailwind #62 — Drop Bulma + enable preflight

FieldValue
GitLabsourcecontrollers/safecall#62
Parent#52
Roadmaptailwind-roadmap.md
Depends on#61 (closed); user surfaces #56 closed
Workflowclosed

Goal

Remove Bulma entirely, enable Tailwind preflight, clean coexistence aliases, update embeds/selftests/E2E, and replace agent theming guidance so umbrella #52 can close.

Acceptance criteria

  • [x] bulma removed from web/package.json / lockfile; bulma.min.css no longer shipped or embedded
  • [x] Tailwind preflight enabled in app.css
  • [x] Coexistence aliases removed (.is-hidden.hidden only; Bulma class shims gone)
  • [x] Grep gate clean: no bulma dep, no --bulma-*, no bare is-light chip pattern as sole color
  • [x] Embeds / static selftests updated for CSS asset paths
  • [x] E2E specs updated off Bulma selectors
  • [x] Agent docs: add .cursor/rules/tailwind-theming.mdc + tailwind-ui skill (Pythia-shaped); update docs/web/index.md, docs/web/build.md, roadmap checklist
  • [x] Umbrella #52 closable after verify

Implementation notes

Phase A — leftover sweep

Migrate any deferred leftovers from #61 inventory; fix E2E assertions.

Phase B — cutover

  1. Drop Bulma from build concat / index.html links / embeds.
  2. Enable preflight; fix any reset fallout in catalog components.
  3. Remove obsolete Bulma patch CSS.
  4. Ensure data-theme="dark" is the sole theme root API (no theme-dark class).

Phase C — agent + docs

  • New always-on theming rule: tokens, soft vs solid, verify dark (and light tokens if exercised).
  • Skill with component catalog examples.
  • Update web docs tech stack bullets (Bulma → Tailwind).
  • Mark checklist items done in tailwind-roadmap.md.

Out of scope

WorkNotes
Light-mode product toggleOptional follow-up
Brand.primary_color injectionOptional follow-up
Font Awesome replacementOut of program
Mobile / VitePress themingOut of program

Key paths

  • web/package.json, web/build.ts, web/build/index.html
  • web/src/css/app.css
  • scripts/build/generators/embeds.ts, server/src/static_embeds.ts (generated)
  • .cursor/rules/, .cursor/skills/
  • docs/web/index.md, docs/web/build.md, docs/ai/tailwind-roadmap.md
  • E2E specs under project test config

Verification

  1. Full web build without Bulma.
  2. Smoke: login, shell, one user surface, one admin CRUD, one spatial page, one tool.
  3. cd web && bun run typecheck; bun test:e2e for web; server selftest if CSS embeds asserted.
  4. Grep gate as in acceptance criteria.
  5. Close #62 then umbrella #52.

Done when / handoff

  1. Operator verifies → commit with Closes #62 (and note #52) → push gitlab.
  2. Close umbrella #52.
  3. Subsequent UI work uses Tailwind catalog only (freeze permanent).