ultimate-jekyll-manager 1.6.7 → 1.6.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -14,6 +14,25 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
14
14
  - `Fixed` for any bug fixes.
15
15
  - `Security` in case of vulnerabilities.
16
16
 
17
+ ---
18
+ ## [1.6.9] - 2026-06-08
19
+
20
+ ### Added
21
+
22
+ - **Bootstrap-first theming convention.** Added comprehensive guidance to `docs/themes.md` and the default consumer `CLAUDE.md` — themes must restyle Bootstrap classes, not create parallel design systems.
23
+ - **Dev workflow documentation.** Added explicit instructions to `CLAUDE.md` and consumer defaults to check `logs/dev.log` instead of running `npm start`/`npm test` in consumer projects.
24
+
25
+ ### Fixed
26
+
27
+ - **Signup metadata failure notification timeout.** Changed dev-only notification from permanent (`timeout: 0`) to 1 second (`timeout: 1000`) so it doesn't block the screen during development.
28
+
29
+ ---
30
+ ## [1.6.8] - 2026-06-07
31
+
32
+ ### Fixed
33
+
34
+ - **Lazy loading animation flash.** Elements with `data-lazy="@class animation-*"` were briefly visible before the IntersectionObserver fired, causing a jarring flash (visible → disappear → fade-in). Added CSS rule to hide these elements from initial paint so they smoothly animate in.
35
+
17
36
  ---
18
37
  ## [1.6.5] - 2026-06-04
19
38
 
package/CLAUDE.md CHANGED
@@ -43,6 +43,10 @@ The only things that ARE safe to run inside UJM itself:
43
43
  4. `npm run build` — production build (`UJ_BUILD_MODE=true`)
44
44
  5. `npm run deploy` — build + `npu sync --message='Deploy'`
45
45
  6. `npm test` (or `npx mgr test`) — runs framework + project test suites
46
+ - `npx mgr test pages/home` — run a specific test by path (relative to `test/`)
47
+ - `npx mgr test ujm:pages/home` — run only framework tests matching a path
48
+ - `npx mgr test project:custom-test` — run only consumer project tests matching a path
49
+ - Prefix with `TEST_EXTENDED_MODE=true` for tests that hit real external APIs
46
50
 
47
51
  ### For Framework Development (This Repository)
48
52
 
@@ -154,6 +158,10 @@ Same `{ layer, description, run(ctx) }` contract as EM/BXM. JSON-line reporter p
154
158
 
155
159
  Note: `-t` short alias belongs to `translation`. The `test` command uses `--test` flag + `test` positional only. See [docs/cli.md](docs/cli.md) (planned).
156
160
 
161
+ ## Development Workflow
162
+
163
+ - **🚫 NEVER run `npm start` / `npm run build` / `npm test` in a consumer project** unless the user explicitly asks. The user runs the dev server — running it again kills theirs. Instead, **check `logs/dev.log`** after editing files to confirm the watcher recompiled successfully (`Reloading Browsers...` = success; `errored` = fix the error). If editing multiple files, check the log once after the last edit. A change that breaks the build is not a completed change.
164
+
157
165
  ## File Conventions
158
166
 
159
167
  - **CommonJS** in build-time / Node files (gulp tasks, commands, lib/). **ESM** in `src/index.js` (frontend Manager — webpack-bundled).
@@ -12,6 +12,12 @@ img[data-lazy] {
12
12
  height: auto; // Maintain aspect ratio
13
13
  }
14
14
 
15
+ // Hide elements with pending animation classes to prevent flash
16
+ // (visible → disappear → fade-in) when IntersectionObserver fires
17
+ [data-lazy*="animation-"] {
18
+ opacity: 0;
19
+ }
20
+
15
21
  // Hide video/audio elements until loaded to prevent ugly native controls showing during shimmer
16
22
  [data-lazy-load-container].lazy-loading video,
17
23
  [data-lazy-load-container].lazy-loading audio {
@@ -316,7 +316,7 @@ async function sendUserSignupMetadata(account) {
316
316
  /* @dev-only:start */
317
317
  webManager.utilities().showNotification(
318
318
  `[DEV] Failed to send signup metadata. Will retry on next page load (flags.signupProcessed is still false).`,
319
- { type: 'warning', timeout: 0 }
319
+ { type: 'warning', timeout: 1000 }
320
320
  );
321
321
  /* @dev-only:end */
322
322
  }
@@ -28,6 +28,9 @@ npm start # dev: clean → setup → bundle exec gulp serve (Jekyll +
28
28
  npm run build # production build (UJ_BUILD_MODE=true): clean → setup → full gulp pipeline → _site/
29
29
  npm run deploy # build → `npu sync --message='Deploy'` (publishes _site/)
30
30
  npx mgr test # run framework + project test suites (build / page / boot layers)
31
+ npx mgr test pages/home # run a specific test by path (relative to test/)
32
+ npx mgr test ujm:pages/home # run only framework tests matching a path
33
+ npx mgr test project:custom-test # run only consumer project tests matching a path
31
34
  npx mgr audit # HTML validation + spellcheck + optional Lighthouse
32
35
  npx mgr install dev # use LOCAL ultimate-jekyll-manager source (to test framework edits)
33
36
  npx mgr install live # restore the published ultimate-jekyll-manager from npm
@@ -35,6 +38,26 @@ npx mgr install live # restore the published ultimate-jekyll-manager from npm
35
38
 
36
39
  > Editing the UJM framework source while working here? Run `npx mgr install dev` so this project picks up your uncommitted framework changes (it otherwise uses its installed `node_modules/ultimate-jekyll-manager`). Run `npx mgr install live` to switch back.
37
40
 
41
+ ## 🚨 BOOTSTRAP-FIRST — NEVER reinvent the wheel
42
+
43
+ **UJM is built on Bootstrap 5.** Every page MUST use Bootstrap classes for layout, spacing, typography, buttons, cards, grid, flex, and all standard components. Custom CSS exists ONLY to override how Bootstrap classes LOOK (via theme SCSS), NOT to replace them with parallel classes.
44
+
45
+ - **DO:** Use `.btn .btn-primary`, `.container`, `.row`, `.col-*`, `.d-flex`, `.gap-*`, `.py-5`, `.text-center`, `.card`, `.lead`, `.shadow`, `.rounded-*`, etc.
46
+ - **DO NOT:** Create custom `.my-btn`, `.my-wrap`, `.my-section` classes when Bootstrap already has equivalents. Don't write `padding`, `display: flex`, `gap`, `margin`, `text-align`, `font-weight` in custom CSS when a Bootstrap utility does the same thing.
47
+ - **Theme SCSS overrides appearance:** `.btn { border-radius: 50px; box-shadow: ... }` changes ALL buttons site-wide. You don't need `.lm-btn` — just restyle `.btn`.
48
+ - **Custom CSS is for genuinely novel components only:** animated hero illustrations, grain overlays, marquee strips — things with no Bootstrap equivalent.
49
+
50
+ See `node_modules/ultimate-jekyll-manager/docs/themes.md` for the full "Bootstrap-first" convention.
51
+
52
+ ## 🚨 Development workflow — MUST follow
53
+
54
+ - **🚫 NEVER run `npm start`, `npm run build`, or `npm test`** unless the user explicitly asks. Assume the user is already running the dev server. Running these commands kills the user's process and wastes time.
55
+ - **✅ ALWAYS check `logs/dev.log`** after editing source files (SCSS, JS, HTML, config) to confirm the build succeeded. The dev server's gulp watcher recompiles on file change — check the log for errors.
56
+ - Success: `Reloading Browsers...`
57
+ - Failure: `'sass' errored`, `'webpack' errored`, `'build-error'`, `'jekyll' errored`
58
+ - If editing multiple files in a batch, check the log once after the last edit. Wait a few seconds for the watcher to recompile before reading the log.
59
+ - **If the log shows an error, fix it immediately.** A change that breaks the build is not a completed change.
60
+
38
61
  ## Where things live
39
62
 
40
63
  - `src/_config.yml` — Jekyll config: brand, theme, meta, web_manager (Firebase). `Manager.getConfig('project')` reads this. **`brand.id` + `theme.id` are required.**
@@ -37,6 +37,26 @@ npx mgr test --reporter json # machine-readable __UJM_TEST__ events
37
37
 
38
38
  `npm test` works too — added to consumer `package.json#scripts.test` on `npx mgr setup`.
39
39
 
40
+ ### Filtering tests
41
+
42
+ Pass a path (relative to `test/`) as a positional argument to run specific tests:
43
+
44
+ ```bash
45
+ # Run a single test file
46
+ npx mgr test pages/home
47
+
48
+ # Run only UJM framework tests
49
+ npx mgr test ujm:pages/home
50
+
51
+ # Run only consumer project tests
52
+ npx mgr test project:custom-test
53
+
54
+ # Combine with extended mode
55
+ TEST_EXTENDED_MODE=true npx mgr test pages/boot-test
56
+ ```
57
+
58
+ The filter matches against the test file path. `ujm:` and `project:` prefixes scope the filter to framework-only or project-only tests respectively. Without a prefix, both are searched.
59
+
40
60
  ## Layers
41
61
 
42
62
  | Layer | Runs in | Use for |
package/docs/themes.md CHANGED
@@ -345,6 +345,56 @@ their own (frozen) text color. Nav/dropdown/footer links already win on specific
345
345
 
346
346
  ---
347
347
 
348
+ ## 🚨 BOOTSTRAP-FIRST — NEVER reinvent the wheel
349
+
350
+ **This is the #1 theme authoring mistake.** A theme's job is to RESTYLE Bootstrap — not to build a parallel design system alongside it.
351
+
352
+ ### The rule
353
+
354
+ Every HTML element must use **Bootstrap classes first**. Custom CSS exists ONLY to override how those Bootstrap classes look (colors, shadows, borders, radii, typography) via the theme's SCSS. You should NEVER:
355
+
356
+ - Invent custom layout classes when Bootstrap grid/flex utilities exist (`.row`, `.col-*`, `.d-flex`, `.gap-*`, `.justify-content-*`, `.align-items-*`, `.text-center`, `.mx-auto`, etc.)
357
+ - Create custom button classes (`.my-btn`, `.lm-btn`) when `.btn .btn-primary`, `.btn .btn-outline-dark`, etc. already exist — restyle `.btn` in theme SCSS instead
358
+ - Create custom spacing/sizing classes when Bootstrap has `p-*`, `m-*`, `w-*`, `rounded-*`, `shadow-*`
359
+ - Create custom text utilities when Bootstrap has `.text-muted`, `.lead`, `.display-*`, `.fw-*`, `.fs-*`
360
+ - Create custom card/container classes when `.card`, `.card-body`, `.container`, `.lh-*` exist
361
+ - Write `position`, `display`, `flex`, `gap`, `padding`, `margin`, `border-radius`, `text-align`, `font-weight`, `font-size` in custom CSS when a Bootstrap utility class does the same thing
362
+
363
+ ### What theme CSS IS for
364
+
365
+ - Overriding Bootstrap component appearance: `.btn { border-radius: 50px; box-shadow: ... }` — changes how ALL buttons look
366
+ - Setting design tokens: `$primary`, `$border-radius`, `$font-family-sans-serif` — passed to Bootstrap's `@forward`
367
+ - CSS custom properties for the theme palette: `--lm-accent`, `--lm-ink`, etc.
368
+ - Dark mode overrides via `[data-bs-theme="dark"]` variable remapping
369
+ - Truly novel components with no Bootstrap equivalent (grain overlays, animated hero cards, marquee strips)
370
+ - Mixins/utilities that compose Bootstrap patterns, not replace them
371
+
372
+ ### How to check yourself
373
+
374
+ Before writing ANY custom CSS class, ask: "Does Bootstrap already have a class for this?" If yes, use it. If the Bootstrap class doesn't look right, override its appearance in theme SCSS — don't create a parallel class. The HTML should be 90%+ Bootstrap classes with custom classes only for genuinely novel UI patterns.
375
+
376
+ ### Anti-pattern example
377
+
378
+ ```html
379
+ <!-- BAD: parallel design system -->
380
+ <div class="lm-wrap">
381
+ <div class="lm-section">
382
+ <a class="lm-btn lm-btn-primary">Click</a>
383
+ </div>
384
+ </div>
385
+
386
+ <!-- GOOD: Bootstrap classes, theme restyled -->
387
+ <div class="container">
388
+ <section class="py-5">
389
+ <a class="btn btn-primary">Click</a>
390
+ </section>
391
+ </div>
392
+ ```
393
+
394
+ The GOOD version uses zero custom CSS for layout/buttons — the theme's `_buttons.scss` restyled `.btn` and `.btn-primary` to look however it wants. The page `main.scss` only adds styles for genuinely novel components.
395
+
396
+ ---
397
+
348
398
  ## Authoring conventions (both paths)
349
399
 
350
400
  1. **Every token is `!default`** so consumers can override without forking.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ultimate-jekyll-manager",
3
- "version": "1.6.7",
3
+ "version": "1.6.9",
4
4
  "description": "Ultimate Jekyll dependency manager",
5
5
  "main": "dist/index.js",
6
6
  "exports": {