gabriel / musehub public
frontend-assets.md markdown
101 lines 3.2 KB
Raw
sha256:e519738f2102d625d47828a17d113283cd744577b43551013cb668fd04f1c3fe chore(mwp8/phase5): tick all RG checkboxes; close-out doc (… Sonnet 4.6 18 days ago

Frontend Asset Builds

All CSS and TypeScript is compiled from source — never edit app.css or app.js directly.

Source vs output

Source files live in src/ at the repo root. Compiled artifacts land in static/.

src/
  ts/          ← TypeScript source (input to esbuild)
    app.ts
    musehub.ts
    pages/*.ts
  scss/        ← SCSS source (input to sass)
    app.scss
    embed.scss
    _*.scss    ← partials, imported by app.scss

musehub/templates/musehub/static/
  app.js       ← compiled output (do not edit)
  app.css      ← compiled output (do not edit)
  embed.css    ← compiled output (do not edit)
  alpinejs.min.js
  htmx.min.js
  vendor/

Quick reference

Task Command
Rebuild everything (CSS + JS + embed) npm run build
CSS only npm run build:css
JS only npm run build:js
Embed stylesheet npm run build:embed
Embed player JS npm run build:embed-player
TypeScript type-check (no output) npm run type-check
Watch CSS during development npm run watch:css
Watch JS during development npm run watch:js

Run all commands from the repo root (~/ecosystem/musehub).

Source → output mapping

Asset Source Output
Main stylesheet src/scss/app.scss musehub/templates/musehub/static/app.css
Embed stylesheet src/scss/embed.scss musehub/templates/musehub/static/embed.css
Main JS bundle src/ts/app.ts musehub/templates/musehub/static/app.js
Embed player JS src/ts/embed-player.ts musehub/templates/musehub/static/embed-player.js

src/scss/app.scss imports all SCSS partials from src/scss/_*.scss. Add new partials there, not inline.

When to rebuild

Rebuild whenever you change any .scss or .ts file. The server serves the compiled files directly — it does not compile on the fly.

npm run build also writes musehub/templates/musehub/static/.cache-id with a timestamp. The base template reads this file to generate the ?v=<timestamp> query string on every static asset URL, which busts the browser cache automatically after each rebuild.

CSS not updating in the browser?

  1. Run npm run build (or npm run build:css for CSS only).
  2. Hard-refresh: Cmd+Shift+R (macOS) / Ctrl+Shift+R (Linux/Windows).

If the page still looks wrong, check that you rebuilt to the right output path:

musehub/templates/musehub/static/app.css   ✅ correct
musehub/templates/musehub/static/css/app.css  ❌ wrong — served at /static/css/app.css, not /static/app.css

Development workflow

Open two terminals:

# Terminal 1 — watch CSS
npm run watch:css

# Terminal 2 — watch JS
npm run watch:js

Changes to any .scss or .ts file are compiled instantly. Because the watch builds omit the cache-id update, you may need an occasional hard-refresh during development.

Prerequisites

Node.js and the dev dependencies must be installed:

npm install   # installs esbuild, sass, typescript — runs from repo root

sass and esbuild run on the host (not inside Docker). The compiled output files are bind-mounted into the container via docker-compose.override.yml, so the server picks up the new files without a restart.

File History 2 commits
sha256:e519738f2102d625d47828a17d113283cd744577b43551013cb668fd04f1c3fe chore(mwp8/phase5): tick all RG checkboxes; close-out doc (… Sonnet 4.6 18 days ago
sha256:0e5174da777684df43b2db71f282079030ef28bacffb93e19c29ee712b2a8bc4 test(mwp8/phase0): audit — repair+force-push leave stale ca… Sonnet 4.6 20 days ago