ultimate-jekyll-manager 1.9.4 → 1.9.6

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.
Files changed (62) hide show
  1. package/CLAUDE.md +6 -0
  2. package/dist/assets/css/core/_utilities.scss +5 -2
  3. package/dist/assets/js/libs/form-manager.js +7 -8
  4. package/dist/commands/install.js +2 -2
  5. package/dist/commands/setup.js +2 -1
  6. package/dist/defaults/.github/workflows/build.yml +3 -1
  7. package/dist/defaults/dist/_includes/core/body.html +1 -7
  8. package/dist/defaults/dist/_includes/themes/classy/frontend/sections/footer.html +9 -1
  9. package/dist/defaults/dist/_layouts/blueprint/admin/calendar/index.html +1 -1
  10. package/dist/defaults/dist/_layouts/blueprint/admin/firebase/index.html +2 -2
  11. package/dist/defaults/dist/_layouts/blueprint/admin/studio/index.html +1 -1
  12. package/dist/defaults/dist/_layouts/blueprint/admin/users/index.html +2 -2
  13. package/dist/defaults/dist/_layouts/blueprint/admin/users/new.html +1 -1
  14. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/account/index.html +13 -13
  15. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/auth/reset.html +2 -2
  16. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/auth/signin.html +3 -3
  17. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/auth/signup.html +3 -3
  18. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/blog/index.html +1 -1
  19. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/contact.html +1 -1
  20. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/download.html +1 -1
  21. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/feedback.html +1 -1
  22. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/index.html +2 -6
  23. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/payment/checkout.html +1 -1
  24. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/portal/email-preferences.html +2 -3
  25. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/status.html +1 -1
  26. package/dist/defaults/dist/_layouts/themes/newsflash/frontend/pages/blog/index.html +1 -1
  27. package/dist/defaults/dist/_layouts/themes/newsflash/frontend/pages/contact.html +1 -1
  28. package/dist/defaults/dist/pages/test/libraries/form-manager.html +31 -31
  29. package/dist/lib/safe-install.js +13 -0
  30. package/package.json +8 -1
  31. package/.nvmrc +0 -1
  32. package/CHANGELOG.md +0 -792
  33. package/CLAUDE-ATTRIBUTION.md +0 -215
  34. package/PROGRESS.md +0 -27
  35. package/TODO-ATTRIBUTION2.md +0 -753
  36. package/TODO-AUTH-TESTING.md +0 -165
  37. package/TODO-BACKEND.md +0 -13
  38. package/TODO-CHAT1.md +0 -41
  39. package/TODO-CONSENT-LIVETEST.md +0 -201
  40. package/TODO-NEW.md +0 -21
  41. package/TODO-themes.md +0 -34
  42. package/TODO-tracking.md +0 -69
  43. package/TODO-tracking2.md +0 -103
  44. package/TODO.md +0 -415
  45. package/_notes/CLAUDE-pages.md +0 -19
  46. package/_notes/CLAUDE-pages2.md +0 -18
  47. package/_notes/LOGOS.md +0 -1
  48. package/_notes/NOTES-app.md +0 -92
  49. package/_notes/NOTES-sub-2.md +0 -42
  50. package/_notes/NOTES-sub-ai.md +0 -165
  51. package/_notes/NOTES-sub-endpoints.md +0 -44
  52. package/_notes/NOTES-sub-example.md +0 -92
  53. package/_notes/NOTES-sub-plan.md +0 -36
  54. package/_notes/NOTES-sub-status.md +0 -123
  55. package/_notes/TODO-Claude.rtf +0 -105
  56. package/_notes/TODO-FileStructure.md +0 -249
  57. package/_notes/TODO-checkout.md +0 -33
  58. package/_notes/TODO-frontend.md +0 -61
  59. package/_notes/TODO-legacy.md +0 -18
  60. package/_notes/TODO-template-system.md +0 -73
  61. package/_notes/TODO-theme.md +0 -17
  62. package/logs/test.log +0 -144
@@ -1,249 +0,0 @@
1
- ⏺ Based on my analysis, here's my comprehensive naming and organization proposal for your Ultimate Jekyll
2
- template system:
3
-
4
- Proposed Naming Convention
5
-
6
- 1. Layouts Structure
7
-
8
- _layouts/
9
- ├── core/ # (was: main/global/)
10
- │ └── root.html # (was: default.html) - Base HTML skeleton
11
- ├── themes/ # Keep as-is - theme-specific layouts
12
- │ └── {theme}/
13
- │ ├── shell.html # (was: base.html) - Theme's main wrapper
14
- │ ├── page.html # (was: default.html) - Standard pages
15
- │ ├── legal.html # Keep as-is - Legal pages
16
- │ ├── blog.html # Blog layouts
17
- │ └── modal.html # (was: fullscreen.html) - Modal/overlay layouts
18
- └── blueprints/ # (was: placeholder/) - Content templates
19
- ├── legal/
20
- │ ├── terms.md
21
- │ └── privacy.md
22
- └── blog/
23
- ├── index.html
24
- └── post.html
25
-
26
- 2. Includes Structure
27
-
28
- _includes/
29
- ├── parts/ # (was: components/global/) - Core page parts
30
- │ ├── head.html
31
- │ ├── body.html
32
- │ ├── foot.html
33
- │ ├── nav.html
34
- │ └── footer.html
35
- ├── widgets/ # (was: modules/) - Reusable components
36
- │ ├── ads/ # (was: adunits/)
37
- │ ├── forms/ # Contact forms, signups
38
- │ ├── cards/ # Card components
39
- │ └── media/ # Images, videos, embeds
40
- └── themes/ # Keep as-is - theme-specific includes
41
- └── {theme}/
42
- └── blocks/ # (was: sections/) - Theme blocks
43
-
44
- 3. Assets Structure
45
-
46
- assets/
47
- ├── themes/
48
- │ ├── _base/ # (was: _template/) - Base theme template
49
- │ │ ├── theme.js # (was: _theme.js)
50
- │ │ ├── theme.scss # (was: _theme.scss)
51
- │ │ ├── js/
52
- │ │ └── scss/
53
- │ └── {theme}/ # Actual themes
54
- │ ├── theme.js
55
- │ ├── theme.scss
56
- │ ├── js/
57
- │ └── scss/
58
- ├── css/
59
- │ ├── core.scss # (was: ultimate-jekyll-manager.scss)
60
- │ ├── main.scss # User's main styles
61
- │ └── pages/ # Page-specific styles
62
- └── js/
63
- ├── core.js # (was: ultimate-jekyll-manager.js)
64
- ├── main.js # User's main scripts
65
- └── pages/ # Page-specific scripts
66
-
67
- Key Benefits of New Names
68
-
69
- 1. core/root.html - Makes it clear this is the foundational HTML document
70
- 2. shell.html - Better describes a theme's outer wrapper than "base"
71
- 3. blueprints - Clearer than "placeholder" for content templates
72
- 4. parts - More intuitive than "components" for page sections
73
- 5. widgets - Better describes reusable UI components than "modules"
74
- 6. blocks - Clearer than "sections" for theme-specific content blocks
75
- 7. _base - More descriptive than "_template" for the theme template
76
-
77
- Hierarchy Flow Example
78
-
79
- Using the terms page example:
80
- 1. src/pages/legal/terms.md → uses layout blueprints/legal/terms
81
- 2. blueprints/legal/terms.md → uses layout themes/bootstrap/legal
82
- 3. themes/bootstrap/legal.html → uses layout themes/bootstrap/shell
83
- 4. themes/bootstrap/shell.html → uses layout core/root
84
- 5. core/root.html → includes parts/head, parts/body, parts/foot
85
-
86
- Additional Organizational Improvements
87
-
88
- 1. Remove __temp directory - Clean up legacy files
89
- 2. Standardize file extensions - Use .html consistently (no .html copy)
90
- 3. Create a docs/architecture.md - Document the naming system
91
- 4. Add .keep files - In empty directories to maintain structure
92
- 5. Theme consistency - Ensure all themes follow the same structure
93
-
94
- This naming system uses single, descriptive words that clearly indicate each component's purpose while
95
- maintaining the flexibility for users to create their own layouts without conflicts.
96
-
97
- ⏺ Update Todos
98
- ⎿ ☒ Analyze current template structure and naming patterns
99
- ☒ Examine the layout hierarchy and component relationships
100
- ☒ Propose new naming conventions for layouts, includes, and components
101
- ☒ Suggest organizational improvements for the directory structure
102
-
103
- > ok what should i name "src/defaults/dist/_layouts/modules/redirect.html"? I have
104
- "src/defaults/dist/_includes/modules/adunits/adsense.html" notice how it is in an adsense subfolder. give me subfolder name
105
-
106
- ⏺ Looking at your structure and the new naming convention I proposed, for src/defaults/dist/_layouts/modules/redirect.html, I would
107
- suggest:
108
-
109
- src/defaults/dist/_layouts/utilities/redirect/redirect.html
110
-
111
- Or if you want to keep it flatter:
112
-
113
- src/defaults/dist/_layouts/utilities/redirect.html
114
-
115
- The reasoning:
116
- - utilities better describes technical/functional layouts (like redirects) vs content layouts
117
- - It follows the pattern of your _includes/modules/adunits/adsense.html where the subfolder (adunits) categorizes the type
118
- - Other utilities might include: utilities/error/404.html, utilities/maintenance/maintenance.html, etc.
119
-
120
- If you specifically want just the subfolder name: utilities
121
-
122
- ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
123
- │ > │
124
- ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
125
- ? for shortcuts ◯ IDE disconnected
126
-
127
-
128
-
129
- NEW
130
-
131
- ⏺ Great question! For organizing layouts within a theme's frontend folder, I suggest a hybrid approach that groups related
132
- layouts while keeping commonly-used ones at the root level:
133
-
134
- src/defaults/dist/_layouts/themes/bootstrap/frontend/
135
- ├── base.html # Keep at root - the main theme wrapper
136
- ├── page.html # Keep at root - standard content pages
137
- ├── modal.html # Keep at root - fullscreen/modal layouts
138
- ├── pages/ # Specific page-type layouts
139
- │ ├── legal.html # Legal pages (terms, privacy)
140
- │ ├── contact.html # Contact form pages
141
- │ ├── error.html # Error pages (404, 500)
142
- │ ├── blog.html # Blog listing/archive
143
- │ └── post.html # Individual blog posts
144
- └── formats/ # Alternative content formats
145
- ├── bare.html # Minimal layout (no nav/footer)
146
- ├── print.html # Print-optimized layout
147
- └── embed.html # For embedded content
148
-
149
- Rationale:
150
- 1. Root level - Keep the most fundamental layouts (base, page, modal) easily accessible
151
- 2. pages/ subfolder - Group content-specific layouts that correspond to actual page types
152
- 3. formats/ subfolder - Group presentation variants that could apply to any content
153
-
154
- This way:
155
- - base.html remains the foundation all others extend from
156
- - Common layouts are easy to find at the root
157
- - Specific page layouts are logically grouped
158
- - It's clear where to add new layouts as the theme grows
159
-
160
- For your current files:
161
- - legal.html → pages/legal.html
162
- - fullscreen.html → modal.html (at root, since it's a common pattern)
163
-
164
-
165
-
166
-
167
-
168
-
169
-
170
-
171
-
172
-
173
-
174
- ok so for the theme-specific layouts, theres a couple things and that leads me to a question
175
-
176
- So a theme's layouts will live in a folder like (for frontend) "src/defaults/dist/_layouts/themes/bootstrap/frontend"
177
- - A theme will always have a base.html layout that is the main layout for all pages in that theme
178
- - However, the placeholder/blueprint pages will need to use specific layouts like legal.html "src/defaults/dist/_layouts/themes/bootstrap/frontend/legal.html" and eventually even more like a 404 layout, a contact layout etc.
179
- - but there are also some more generic layouts like "src/defaults/dist/_layouts/themes/bootstrap/frontend/fullscreen.html"
180
-
181
- HOW DO I ORGANIZE THESE LAYOUTS inside a theme?
182
-
183
-
184
-
185
-
186
-
187
-
188
-
189
-
190
-
191
- I need help re-organizing some things in my lib.
192
-
193
- Review "src/gulp/tasks/webpack.js" to see how the files are being bundled and loaded and the path aliases used.
194
-
195
- src/assets/js/ultimate-jekyll-manager.js
196
- * This is the file that the CONSUMING project will load
197
-
198
- src/assets/js/utilities
199
- * This directory is DIRECTLY COPIED to the CONSUMING project so that scripts SUCH AS "src/assets/js/utilities/popupads.js" can be DIRECTLY LOADED IN A SCRIPT TAG (no webpack is run on these files)
200
-
201
- src/assets/js/libs
202
- * This directory is not copied to the consuming project OR packed with webpack. It is JUST FILES THAT ARE IMPORTED BY THE ULTIMATE JEKYLL LIBRARY ITSEF. An example is "src/assets/js/libs/dev.js" which is imported during development and has some logging and debugging features.
203
-
204
- NOW HERES THE PART I NEED HELP WITH:
205
-
206
- 1. I have "src/assets/js/redirect.js" which is loaded by "src/defaults/dist/_layouts/modules/utilities/redirect.html". I would like it to be WEBPACKED but i want to put it in a folder that is AUTOMATICALLY WEBPACKED that is distinctly separate from the main library. I need help naming that folder or deciding on a better strategy for this.
207
- 2. While youre at it, help me decide if "src/assets/js/libs" and "src/assets/js/utilities" are good names or if they should be changed.
208
-
209
-
210
-
211
-
212
-
213
-
214
-
215
-
216
-
217
-
218
-
219
-
220
-
221
-
222
- {% assign page-url-stripped = page.url | replace: 'index.html', '' %}
223
- {%- if page-url-stripped == '/' -%}
224
- {% assign page-url-stripped = '' %}
225
- {% endif %}
226
-
227
- page.canonical: {{ page.canonical }}|
228
-
229
- {% capture action_icon %}{% if action.icon %}{{ site.icons[action.icon] }}{% endif %}{% endcapture %}
230
-
231
- METHOD 1
232
- html class=h-100
233
- body class=d-flex flex-column h-100
234
- main class=flex-shrink-0
235
- footer class=mt-auto
236
-
237
- METHOD 2
238
- html class=
239
- body class=d-flex flex-column min-vh-100
240
- main class=flex-fill
241
- footer class=
242
-
243
-
244
- DONT FORGET THE FLOW (goes from top to bottom)
245
-
246
- │ src/defaults/dist/_layouts/placeholder/app.html\ │
247
- │ src/defaults/dist/_layouts/themes/bootstrap/frontend/fullscreen.html\ │
248
- │ src/defaults/dist/_layouts/themes/bootstrap/frontend/core/base.html\ │
249
- │ src/defaults/dist/_layouts/core/root.html\
@@ -1,33 +0,0 @@
1
- Build a checkout page @ src/defaults/dist/_layouts/themes/bootstrap/frontend/pages/purchase/checkout.html
2
- CSS: src/assets/css/pages/purchase/checkout/index.scss
3
- JS: src/assets/js/pages/purchase/checkout/index.js
4
- If you need inspiration for how to build a page, look at src/defaults/dist/_layouts/themes/bootstrap/frontend/pages directory.
5
- * Use bootstrap 5.3.1
6
-
7
- The checkout page should include:
8
- * cards and sections for each step of the checkout process
9
- * a summary of the items being purchased
10
- * a place for a discount code (if user enters a correct code, apply discount)
11
- * Support multiple payment methods (credit card, PayPal, Cypto.)
12
-
13
- * We should be able to get a JSON object and dynamically alter the page contents, like adding some form fields
14
- * when the user lands on the page, a query parameter with the product id is there to help us load the product details.
15
- * use the product ID along with the {{ site.brand.app}} id to make a fetch request to https://api.itwcreativeworks.com/app/{app id} to get the product details, price, etc, (its in the response.products[product_id] key), use test data for now. but add the fetch request and jsut assume we use the test data no matter what.
16
- * the product data will also include whether it is a subscription or one-time purchase.
17
- * if its a subcripiton were gonna display some slighly different UI,
18
- * like a toggle for monthly or yearly billing (and show the prices ad how much they are saving by using the yearly billing option)
19
- * a message that either says "YOu are eligible for a free trial" or "You are not eligible for a free trial" based on the product data in green or red ralert espectively.
20
- * A message like "You will be charged $X {monthky/annually} starting on {date}" if they have a free trial, or "You will be charged $X today and {annually\monthly} starting {date}" if they do not have a free trial.
21
-
22
- * IN JS, we should calculate the price after the discount code is applied, and update the total price dynamically, consider also whether they are elgiible for a free trial.
23
-
24
- * A banner that is fixed to the top of the page that says "FLash sale! Use code FLASH20 for 20% off your purchase!".
25
-
26
- Next, build a quick /purchase/confirmation.html,
27
- * The confirmation page should show a summary of the purchase and a thank you message.
28
-
29
-
30
-
31
-
32
-
33
- and a /purchase/cart.html that just redirects to the checkout page for now and is meant for sending analytics events and ensuring the user is signed in.
@@ -1,61 +0,0 @@
1
- Frontend TODO
2
- - sentry in WM
3
- - chatsy
4
- - remake chatsy into a module that we can install here and then users can load it via cdnjs instead of our website
5
- - contact form with tracking and form-manager and slapform
6
-
7
- - save utm tags, send during checkout, signup, etc
8
-
9
- - token redirect for auth system (for auth with desktop apps, etc)
10
-
11
- ensure blog, article, posts, etc all use proper HTML semantics tags, aria, etc
12
-
13
- js refactor
14
- - make all fns await asyn operations
15
- - order the fn definitions in the order they are called (most import/toplevel first then the rest. put all tracking fns at the bottom)
16
- - move export to top and do not use init() fn, just call all fns inside dom.ready OR the main export (depends on the structure)
17
- - track errors w sentry, not ga4/fb/tiktok
18
- - add Manager, options back to each index.js for standardization
19
- - for stanndardization, also ALWAYS set webManager = Manager.webManager in the index.js
20
-
21
- pages
22
- - blog + post
23
- - about
24
- - contact
25
- - team + member
26
- - extension and download
27
-
28
- MAKE OUR CUSTOM THEME CLASSY!!
29
-
30
- for pages like pricing, home, about etc
31
- - put default frontmatter in the default pages so user can override
32
-
33
- NEW PLAN NAME STANDARD
34
- 1. Basic, Starter, Pro, Max
35
- 1. Basic, Starter, Plus, Pro
36
-
37
- Implement account resolver
38
-
39
- https://docs.stripe.com/payments/link/express-checkout-element-link
40
-
41
- // // Load page specific scripts
42
- // if (url.includes('/pricing')) {
43
- // dom.loadScript({src: 'https://cdn.itwcreativeworks.com/assets/general/js/pricing-page-handler/index.js'})
44
- // } else if (url.includes('/download')) {
45
- // dom.loadScript({src: 'https://cdn.itwcreativeworks.com/assets/general/js/download-page-handler/index.js'})
46
- // } else if (url.includes('/browser-extension') || url.includes('/extension')) {
47
- // dom.loadScript({src: 'https://cdn.itwcreativeworks.com/assets/general/js/browser-extension-page-handler/index.js'})
48
- // } else if (window.location.pathname.endsWith('.html')) {
49
- // // Redirect and remove .html
50
- // window.location.pathname = window.location.pathname.replace('.html', '');
51
- // }
52
-
53
-
54
-
55
- // // Save user auth data
56
- // Manager.auth().ready(function (user) {
57
- // setupTracking(user);
58
-
59
- // storage.set('user.auth.uid', user.uid);
60
- // storage.set('user.auth.email', user.email);
61
- // })
@@ -1,18 +0,0 @@
1
- Make themes layout folder
2
- geeks (with subfolders)
3
- - frontend
4
- - backend
5
- - docs
6
-
7
- global changes
8
- - rename placeholder files
9
- layout: themes/placeholder --> layout: themes/placeholder
10
-
11
- - mayeb actually move placeholder outside of themes?
12
- - maybe move themes into master? idk
13
-
14
- - fix auth-signedin-false-element
15
- - auth-state-listener = loading, signedin, signedout
16
- dashboard-status-listenerdata-status="success"
17
-
18
- - make plugins for each theme, like navbar account dropdown?
@@ -1,73 +0,0 @@
1
- I have this tempalte system setup so making sites instantly is possible, with the option to further customize each page. It takes advantage of a multi-tier theme system.
2
-
3
- Here's an example:
4
-
5
- src/defaults/src/pages/legal/terms.md
6
- * This page is autmatically created in the CONSUMING project's pages at pages/legal/terms.md
7
- * You can see it uses "placeholder/legal/terms" layout
8
-
9
- src/defaults/dist/_layouts/placeholder/legal/terms.md
10
- * This is the layout used by the page above
11
- * Looking at it, you can see it uses a SECOND layout "themes/[ site.theme.id ]/frontend/default"
12
- * The theme ID is dynamically inserted by the gulp preprocessor as set in _config.yml
13
-
14
- src/defaults/dist/_layouts/themes/bootstrap/frontend/default.html
15
- * This is the layout used by the page above (in this example, the bootstrap theme)
16
- * You can see that it includes a nav.html and footer.html as well as the {{ content }} tag (special processing for markdown vs HTML using a custom "page.extension" check)
17
-
18
- What i want to do is create some more layouts in the "src/defaults/dist/_layouts/themes/bootstrap/frontend" directory, such as a legal layout, which would be used by terms, privacy, and cookies pages.
19
-
20
- Can you help me create the legal layout and do it in a way that doesnt duplicate too much existing code? Can we somehow take advantage of the existing default.html layout?
21
-
22
- I want to make even more layouts, such as a "full screen" layout that that would be for pages that want the content to be centered and take up the full width and height of the screen with no header or footer, just the content.
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
- I have this tempalte system setup so making sites instantly is possible, with the option to further customize each page. It takes advantage of a multi-tier theme system.
37
-
38
- Here's an example:
39
-
40
- src/defaults/src/pages/legal/terms.md
41
- * This page is autmatically created in the CONSUMING project's pages at pages/legal/terms.md
42
- * You can see it uses "placeholder/legal/terms" layout
43
-
44
- src/defaults/dist/_layouts/placeholder/legal/terms.md
45
- * This is the layout used by the page above
46
- * Looking at it, you can see it uses a SECOND layout "themes/[ site.theme.id ]/frontend/legal"
47
- * The theme ID is dynamically inserted by the gulp preprocessor as set in _config.yml
48
-
49
- src/defaults/dist/_layouts/themes/bootstrap/frontend/legal.html
50
- * Uses "themes/bootstrap/frontend/core/base"
51
-
52
- src/defaults/dist/_layouts/themes/bootstrap/frontend/core/base.html
53
- * Uses "core/root"
54
-
55
- src/defaults/dist/_layouts/core/root.html
56
- * Includes "components" src/defaults/dist/_includes/core/body.html, src/defaults/dist/_includes/core/nav.html, src/defaults/dist/_includes/core/footer.html
57
- * This is the final layout that is used to render the page and includes all the head meta tags styles, scripts, and some body html like modals and warnings that are dynamically displayed.
58
-
59
-
60
- Each theme should have a central file that the various other theme layouts use, like in this example
61
- * "src/defaults/dist/_layouts/themes/bootstrap/frontend/legal.html" USES "themes/bootstrap/frontend/core/base.html"
62
-
63
- Each theme's central file will always use "core/root.html"
64
- * And this file will always include the components that are used by all themes, like the header, footer, and body.
65
-
66
-
67
- I need your help naming ALL these things because i feel like my names are not really fitting or consistent. AND ALSO ORGANIZING THEM.
68
-
69
- I initially organized the "themes" and "main" layouts in their own folders because this leaves the ability for the user to created layouts that DONT CONFLICT with the ULTIMATE JEKYLL template layouts.
70
-
71
- The only requirement is that each "name" is a SINGLE word. I like short descriptive words.
72
-
73
- So for example, i feel like "default" and "base" and "global" are all thrown around a lot and not consistent. Very confusing.
@@ -1,17 +0,0 @@
1
- > Im going to have you build a custom bootstrap theme. We are using bootstrap 5.3.1.
2
-
3
- The theme is called Classy, you can make your changes to "src/assets/themes/classy/_theme.scss"
4
-
5
-
6
- The theme is a simple, yet modern, clean, and elegant design suitable for various types of websites, but
7
- witha primary focus on modern tech, AI, and marketing.
8
-
9
- I've attached some screenshots of the design for reference, go crazy and make it SUPER SEXY!
10
-
11
- [Image #1]\
12
- notice how when you scroll, the top bar stays withy ou and also shrinks a little\
13
- [Image #2]\
14
- [Image #3]\
15
- \
16
- Since we're using bootstrap, DO NOT MAKE CUSTOM CSS FOR ANYTHING UNLESS ABSOILUTELY NECESSARY. Obviously,
17
- you can make it for the visual changes but DO NOT REINVENT THE WHEEL!
package/logs/test.log DELETED
@@ -1,144 +0,0 @@
1
- # ujm log — 2026-06-18T20:43:18.296Z — pid=99488
2
- [13:43:18] 'test': Running tests (layer=all)
3
- [13:43:18] 'test': Test mode: normal (external APIs skipped)
4
-
5
- Ultimate Jekyll Manager Tests
6
-
7
- Framework Tests
8
- ⤷ attach-log-file — tee stdout/stderr to a file
9
- ✓ exports the expected surface (1ms)
10
- ✓ stripAnsi removes color escape codes (0ms)
11
- hello world
12
- colored line
13
- ✓ attach + stdout.write + detach: file contains the writes (0ms)
14
- ✓ idempotent: attaching twice with same name returns same fd (0ms)
15
- ✓ attach with falsy name returns null and does nothing (1ms)
16
- ⤷ CLI alias resolution
17
- ✓ cli.js exports a Main class (0ms)
18
- ✓ all expected commands exist on disk (0ms)
19
- ✓ each command module exports an async function (3ms)
20
- ⤷ collectTextNodes (utils/collectTextNodes.js)
21
- ✓ extracts page title (98ms)
22
- ✓ skips <script> and <style> (0ms)
23
- ✓ spellcheck dictionary (utils/dictionary.js) (0ms)
24
- ⤷ expect() matcher set
25
- ✓ toBe + toEqual basics (0ms)
26
- ✓ .not negates (1ms)
27
- ✓ toContain works on arrays and strings (0ms)
28
- ✓ toThrow catches sync + async throws (0ms)
29
- ✓ toBeGreaterThan / toBeLessThan (0ms)
30
- ✓ failing assertions throw AssertionError (0ms)
31
- ✓ package.json exports resolve to real files in dist/ (0ms)
32
- ⤷ Logger (src/lib/logger.js)
33
- ✓ Logger constructor stores name (0ms)
34
- ✓ Logger exposes log/error/warn/info methods (0ms)
35
- ✓ Logger.format is chalk (0ms)
36
- ✓ Logger output goes through console with prefix (0ms)
37
- ⤷ Manager (build.js) public surface
38
- ✓ Manager constructor is a function (0ms)
39
- ✓ static methods match prototype methods (0ms)
40
- ✓ isBuildMode reflects UJ_BUILD_MODE env (0ms)
41
- ✓ isQuickMode reflects UJ_QUICK env (0ms)
42
- ✓ isServer reflects UJ_IS_SERVER env (0ms)
43
- ✓ getEnvironment maps to development/testing/production (0ms)
44
- ✓ actLikeProduction is true when isBuildMode OR UJ_AUDIT_FORCE (0ms)
45
- ✓ getRootPath("package") points at UJM root (0ms)
46
- ✓ getMemoryUsage returns shape with MB-sized numbers (0ms)
47
- ✓ getArguments returns object with _ array + boolean defaults (1ms)
48
- ✓ logger returns object with log/error/warn/info methods (0ms)
49
- ✓ processBatches processes items in chunks and returns flat results (0ms)
50
- ⤷ mergeJekyllConfigs (utils/merge-jekyll-configs.js)
51
- ✓ merges collections from both configs (project additions win) (3ms)
52
- ✓ dedups defaults by scope key (project wins) (1ms)
53
- ✓ returns null when there is nothing to merge (1ms)
54
- ⤷ mode-helpers (isTesting / isDevelopment / isProduction / getVersion)
55
- ✓ helpers attach to Manager statically AND on prototype (0ms)
56
- ✓ isTesting reflects UJ_TEST_MODE env (0ms)
57
- ✓ isDevelopment false / isProduction true when UJ_BUILD_MODE=true (and not testing) (0ms)
58
- ✓ environments are mutually exclusive — testing wins under UJ_TEST_MODE (0ms)
59
- ✓ invariant: is*() exactly matches getEnvironment() + mutually exclusive (every scenario) (0ms)
60
- ✓ getVersion returns a non-empty string when run from a package (0ms)
61
- ⤷ createTemplateTransform (utils/template-transform.js)
62
- ✓ replaces [site.theme.id] with config value in .html files (1ms)
63
- ✓ leaves non-matching extensions untouched (e.g. .css) (1ms)
64
- ✓ passes directories through untouched (0ms)
65
- ⤷ node-powertools templating brackets ({} and [])
66
- ✓ default { } brackets resolve nested keys (0ms)
67
- ✓ [ ] brackets resolve nested keys when explicitly configured (0ms)
68
- ✓ [ ] brackets leave Jekyll {{ }} placeholders alone (0ms)
69
- ⤷ theme contract (structure, swappability, cross-theme JS contracts)
70
- ✓ _template: entry files + config contract (1ms)
71
- ✓ classy: entry files + config contract (0ms)
72
- ✓ neobrutalism: entry files + config contract (0ms)
73
- ✓ newsflash: entry files + config contract (0ms)
74
- ✓ _template: layouts swappable, markup clean (1ms)
75
- ✓ classy: layouts swappable, markup clean (14ms)
76
- ✓ neobrutalism: layouts swappable, markup clean (2ms)
77
- ✓ newsflash: layouts swappable, markup clean (3ms)
78
- ✓ _template: cross-theme JS contracts (0ms)
79
- ✓ classy: cross-theme JS contracts (0ms)
80
- ✓ neobrutalism: cross-theme JS contracts (1ms)
81
- ✓ newsflash: cross-theme JS contracts (0ms)
82
- ✓ page asset files match a declared asset_path shape (4ms)
83
- ⤷ validateYAMLFrontMatter (utils/_validate-yaml.js)
84
- ✓ returns { valid: true } for a file with valid frontmatter (0ms)
85
- ✓ returns { valid: true } when no frontmatter present (1ms)
86
- ✓ flags malformed YAML frontmatter as invalid with error message (0ms)
87
- ⤷ page-layer baseline (DOM + fetch + storage)
88
- ✓ document is interactive or complete (1ms)
89
- ✓ fetch() works against the local harness server (8ms)
90
- ✓ localStorage is available (1ms)
91
- ⤷ FormManager getData / setData / input groups
92
- ✓ _setNested builds nested objects from dot paths (0ms)
93
- ✓ _setNested accumulates duplicate keys into arrays (0ms)
94
- ✓ _getNested reads nested values and returns undefined for missing paths (0ms)
95
- ✓ _flattenObject converts nested objects to dot paths (1ms)
96
- ✓ getData collects text, select, radio, and textarea values with dot notation (5ms)
97
- ✓ getData handles single checkbox (boolean) and checkbox groups (object) (0ms)
98
- ✓ getData excludes honeypot fields (0ms)
99
- ✓ input group filter includes matching + global fields, excludes others (1ms)
100
- ✓ input group filter with multiple groups includes all matching (0ms)
101
- ✓ setData populates text, select, textarea fields (0ms)
102
- ✓ setData sets radio group to matching value (0ms)
103
- ✓ setData sets single checkbox boolean and checkbox group values (0ms)
104
- ⤷ FormManager disabled-state snapshot
105
- ✓ snapshot captures disabled non-submit elements, ignores submit buttons (1ms)
106
- ✓ setDisabled(true) disables everything (0ms)
107
- ✓ setDisabled(false) re-enables managed elements but keeps snapshotted ones disabled (0ms)
108
- ✓ survives multiple disable/enable cycles (0ms)
109
- ✓ onsubmit="return false" blocks native submission before FM loads (10ms)
110
- ⤷ FormManager validation + honeypot + file-accept
111
- ✓ required text field fails when empty, passes when filled (0ms)
112
- ✓ required checkbox fails when unchecked (1ms)
113
- ✓ required radio group fails when none checked (0ms)
114
- ✓ email validation rejects invalid formats and accepts valid ones (0ms)
115
- ✓ number min/max validation catches out-of-range values (1ms)
116
- ✓ minlength and maxlength validation (0ms)
117
- ✓ pattern attribute validation (0ms)
118
- ✓ honeypot detection catches [data-honey] and [name="honey"] fields (0ms)
119
- ✓ honeypot detects data-honey without name="honey" (0ms)
120
- ✓ file-accept matching: extension, wildcard MIME, exact MIME (0ms)
121
- ✓ field error display adds is-invalid class and feedback element (0ms)
122
- ✓ query param population skips UTM/tracking params (1ms)
123
- ✓ data-form-state attribute reflects state transitions (0ms)
124
- ⤷ harness globals (window.Configuration + dataset)
125
- ✓ window.Configuration has brand + theme + web_manager (0ms)
126
- ✓ document.documentElement.dataset.pagePath is set (0ms)
127
- ✓ UJ_TEST_MODE is signalled on globalThis (0ms)
128
- ⤷ prerendered icons template lookup
129
- ✓ template#prerendered-icons exists and has the test icon (1ms)
130
- ✓ looking up a missing icon returns null (0ms)
131
- ⤷ boot tests (consumer _site/)
132
- ✓ /service-worker.js served with javascript content type (130ms)
133
- ✓ index.html registers SW and reaches activated state (182ms)
134
- ✓ SW responds to get-cache-name message with brand-id pattern (86ms)
135
- ✓ home page renders with title + body content (187ms)
136
- ✓ /about resolves via Jekyll-style .html fallback (73ms)
137
- ✓ build.json is served with brand metadata (76ms)
138
- ✓ CSS bundle served with text/css content type (87ms)
139
-
140
- Results
141
- 110 passing
142
-
143
- Total: 110 tests in 3274ms
144
-