ultimate-jekyll-manager 0.0.144 → 0.0.146

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 (38) hide show
  1. package/.playwright-mcp/page-2025-12-09T08-57-21-148Z.png +0 -0
  2. package/.playwright-mcp/page-2025-12-09T09-11-17-887Z.png +0 -0
  3. package/.playwright-mcp/page-2025-12-09T09-11-41-348Z.png +0 -0
  4. package/dist/assets/css/pages/extension/installed/index.scss +240 -0
  5. package/dist/assets/css/pages/status/index.scss +174 -0
  6. package/dist/assets/css/pages/updates/index.scss +13 -0
  7. package/dist/assets/css/pages/updates/update.scss +46 -0
  8. package/dist/assets/js/pages/extension/index.js +160 -0
  9. package/dist/assets/js/pages/status/index.js +508 -0
  10. package/dist/assets/js/pages/updates/index.js +30 -0
  11. package/dist/assets/js/pages/updates/update.js +34 -0
  12. package/dist/defaults/dist/_includes/core/head.html +9 -0
  13. package/dist/defaults/dist/_layouts/blueprint/extension/index.html +12 -0
  14. package/dist/defaults/dist/_layouts/blueprint/extension/installed.html +13 -0
  15. package/dist/defaults/dist/_layouts/blueprint/status.html +12 -0
  16. package/dist/defaults/dist/_layouts/blueprint/updates/index.html +12 -0
  17. package/dist/defaults/dist/_layouts/blueprint/updates/update.html +15 -0
  18. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/account/index.html +1 -1
  19. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/extension/index.html +434 -0
  20. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/extension/installed.html +188 -0
  21. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/payment/confirmation.html +1 -1
  22. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/status.html +296 -0
  23. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/updates/index.html +128 -0
  24. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/updates/update.html +122 -0
  25. package/dist/defaults/dist/_updates/v0.0.0.md +32 -0
  26. package/dist/defaults/dist/_updates/v0.0.1.md +64 -0
  27. package/dist/defaults/dist/pages/{extension.md → extension/index.html} +2 -2
  28. package/dist/defaults/dist/pages/extension/installed.html +7 -0
  29. package/dist/defaults/dist/pages/status.md +7 -0
  30. package/dist/defaults/dist/pages/updates/index.md +7 -0
  31. package/dist/defaults/dist/sitemap.html +8 -0
  32. package/dist/defaults/dist/sitemap.xml +4 -0
  33. package/dist/defaults/src/_config.yml +8 -0
  34. package/dist/gulp/main.js +4 -0
  35. package/dist/gulp/tasks/serve.js +16 -36
  36. package/firebase-debug.log +98 -0
  37. package/package.json +2 -1
  38. package/dist/defaults/dist/_layouts/blueprint/extension.md +0 -47
@@ -0,0 +1,296 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: themes/[ site.theme.id ]/frontend/core/cover
4
+
5
+ ### PAGE CONFIG ###
6
+ # Hero Section
7
+ hero:
8
+ headline: "{{ site.brand.name }}"
9
+ headline_accent: "status"
10
+ subheadline: "Current status and uptime for all {{ site.brand.name }} services"
11
+
12
+ # Status Section
13
+ status:
14
+ days: 90 # Number of days to show in uptime bars
15
+ overall:
16
+ operational: "All systems operational"
17
+ degraded: "Partial system outage"
18
+ major: "Major system outage"
19
+ maintenance: "Under maintenance"
20
+ services:
21
+ - id: "website"
22
+ name: "Website"
23
+ description: "Main website and landing pages"
24
+ url: null # Optional: Link to the service
25
+ - id: "api"
26
+ name: "API"
27
+ description: "REST API endpoints"
28
+ url: null
29
+ - id: "dashboard"
30
+ name: "Dashboard"
31
+ description: "User dashboard and account management"
32
+ url: null
33
+ - id: "cdn"
34
+ name: "CDN"
35
+ description: "Content delivery network"
36
+ url: null
37
+
38
+ # Updates Section
39
+ updates:
40
+ superheadline:
41
+ icon: "bell"
42
+ text: "Notifications"
43
+ headline: "Get"
44
+ headline_accent: "updates"
45
+ subheadline: "Subscribe to receive status updates via email"
46
+ button:
47
+ text: "Subscribe"
48
+ icon: "envelope"
49
+
50
+ # Maintenance Section
51
+ maintenance:
52
+ headline: "Scheduled maintenance"
53
+ empty_message: "No scheduled maintenance"
54
+
55
+ # Incidents Section
56
+ incidents:
57
+ headline: "Recent incidents"
58
+ empty_message: "No incidents reported"
59
+ show_history_link: "Show incident history"
60
+ history_url: null # Optional: Link to full incident history
61
+ ---
62
+
63
+ <!-- Hero Section with Status Banner -->
64
+ <section class="status-hero py-5">
65
+ <div class="container">
66
+ <div class="row justify-content-center text-center mb-4">
67
+ <div class="col-lg-10" data-lazy="@class animation-slide-up">
68
+ <h1 class="h1 mb-3">
69
+ {{ page.resolved.hero.headline }}
70
+ <span class="text-gradient-rainbow">{{ page.resolved.hero.headline_accent }}</span>
71
+ </h1>
72
+ {% iftruthy page.resolved.hero.subheadline %}
73
+ <p class="fs-5 text-muted mb-0">
74
+ {{ page.resolved.hero.subheadline }}
75
+ </p>
76
+ {% endiftruthy %}
77
+ </div>
78
+ </div>
79
+
80
+ <!-- Overall Status Banner -->
81
+ <div class="row justify-content-center">
82
+ <div class="col-lg-10">
83
+ <div id="status-banner" class="card border-0 shadow-lg status-banner status-operational" data-lazy="@class animation-slide-up">
84
+ <div class="card-body p-4">
85
+ <div class="d-flex align-items-center justify-content-between flex-wrap gap-3">
86
+ <div class="d-flex align-items-center gap-3">
87
+ <div class="avatar avatar-md bg-success bg-opacity-10 rounded-circle d-flex align-items-center justify-content-center status-indicator">
88
+ {% uj_icon "circle-check", "status-icon text-success fs-4" %}
89
+ </div>
90
+ <h2 id="status-text" class="h3 mb-0">{{ page.resolved.status.overall.operational }}</h2>
91
+ </div>
92
+ <div class="d-flex align-items-center gap-2 text-muted small">
93
+ <span class="status-pulse bg-success rounded-circle animation-pulse"></span>
94
+ <span>Refreshed <span id="status-refresh-timer">0</span>s ago</span>
95
+ </div>
96
+ </div>
97
+ </div>
98
+ </div>
99
+ </div>
100
+ </div>
101
+ </div>
102
+ </section>
103
+
104
+ <!-- Services Status Section -->
105
+ <section class="py-5">
106
+ <div class="container">
107
+ <div class="row justify-content-center">
108
+ <div class="col-lg-10">
109
+ <div id="services-list">
110
+ {% for service in page.resolved.status.services %}
111
+ <div class="service-item py-3 border-bottom {% if forloop.last %}border-bottom-0{% endif %}" data-service-id="{{ service.id }}" data-lazy="@class animation-slide-up">
112
+ <div class="d-flex align-items-center justify-content-between mb-2">
113
+ <div class="d-flex align-items-center gap-2">
114
+ <span class="service-status-dot status-operational" data-service-status="{{ service.id }}">
115
+ {% uj_icon "circle-check", "text-success" %}
116
+ </span>
117
+ {% iftruthy service.url %}
118
+ <a href="{{ service.url }}" class="fw-semibold text-body text-decoration-none">{{ service.name }}</a>
119
+ {% endiftruthy %}
120
+ {% iffalsy service.url %}
121
+ <span class="fw-semibold">{{ service.name }}</span>
122
+ {% endiffalsy %}
123
+ {% iftruthy service.description %}
124
+ <span class="text-muted small d-none d-md-inline">— {{ service.description }}</span>
125
+ {% endiftruthy %}
126
+ </div>
127
+ <div class="d-flex align-items-center gap-2">
128
+ <span class="service-uptime fw-semibold" data-service-uptime="{{ service.id }}">100%</span>
129
+ </div>
130
+ </div>
131
+ <div class="uptime-bars d-flex gap-1 cursor-pointer" data-service-bars="{{ service.id }}" title="Uptime history for the last {{ page.resolved.status.days }} days">
132
+ {% for i in (1..90) %}
133
+ <div class="uptime-bar rounded-1 status-operational" data-day="{{ i }}"></div>
134
+ {% endfor %}
135
+ </div>
136
+ </div>
137
+ {% endfor %}
138
+ </div>
139
+
140
+ <!-- Uptime Legend -->
141
+ <div class="mt-4 d-flex align-items-center justify-content-between flex-wrap gap-2 text-muted small" data-lazy="@class animation-slide-up">
142
+ <div class="d-flex align-items-center flex-wrap gap-2 gap-md-4">
143
+ <div class="d-flex align-items-center gap-1">
144
+ <div class="uptime-bar-legend rounded-1 status-operational"></div>
145
+ <span>Operational</span>
146
+ </div>
147
+ <div class="d-flex align-items-center gap-1">
148
+ <div class="uptime-bar-legend rounded-1 status-degraded"></div>
149
+ <span>Degraded</span>
150
+ </div>
151
+ <div class="d-flex align-items-center gap-1">
152
+ <div class="uptime-bar-legend rounded-1 status-major"></div>
153
+ <span>Outage</span>
154
+ </div>
155
+ <div class="d-flex align-items-center gap-1">
156
+ <div class="uptime-bar-legend rounded-1 status-maintenance"></div>
157
+ <span>Maintenance</span>
158
+ </div>
159
+ </div>
160
+ <div>
161
+ <span class="d-none d-lg-inline">{{ page.resolved.status.days }} days ago</span>
162
+ <span class="d-none d-md-inline d-lg-none">60 days ago</span>
163
+ <span class="d-md-none">30 days ago</span>
164
+ <span class="mx-2">—</span>
165
+ <span>Today</span>
166
+ </div>
167
+ </div>
168
+ </div>
169
+ </div>
170
+ </div>
171
+ </section>
172
+
173
+ <!-- Recent Incidents Section -->
174
+ <section class="py-5">
175
+ <div class="container">
176
+ <div class="row justify-content-center">
177
+ <div class="col-lg-10">
178
+ <h2 class="h4 mb-4" data-lazy="@class animation-slide-up">{{ page.resolved.incidents.headline }}</h2>
179
+
180
+ <div id="incidents-list" data-lazy="@class animation-slide-up">
181
+ <!-- Incident items will be populated by JavaScript -->
182
+ <!-- If no incidents, show empty state -->
183
+ <div id="incidents-empty" class="card border-0 bg-body-tertiary">
184
+ <div class="card-body p-4 text-center text-muted">
185
+ {% uj_icon "circle-check", "fs-1 mb-3 text-success opacity-75" %}
186
+ <p class="mb-0">{{ page.resolved.incidents.empty_message }}</p>
187
+ </div>
188
+ </div>
189
+ </div>
190
+
191
+ {% iftruthy page.resolved.incidents.history_url %}
192
+ <div class="mt-4" data-lazy="@class animation-slide-up">
193
+ <a href="{{ page.resolved.incidents.history_url }}" class="text-decoration-none">
194
+ {{ page.resolved.incidents.show_history_link }}
195
+ {% uj_icon "arrow-right", "ms-1" %}
196
+ </a>
197
+ </div>
198
+ {% endiftruthy %}
199
+ </div>
200
+ </div>
201
+ </div>
202
+ </section>
203
+
204
+ <!-- Scheduled Maintenance Section -->
205
+ <section class="py-5">
206
+ <div class="container">
207
+ <div class="row justify-content-center">
208
+ <div class="col-lg-10">
209
+ <h2 class="h4 mb-4" data-lazy="@class animation-slide-up">{{ page.resolved.maintenance.headline }}</h2>
210
+
211
+ <div id="maintenance-list" data-lazy="@class animation-slide-up">
212
+ <!-- Maintenance items will be populated by JavaScript -->
213
+ <!-- If no maintenance scheduled, show empty state -->
214
+ <div id="maintenance-empty" class="card border-0 bg-body-tertiary">
215
+ <div class="card-body p-4 text-center text-muted">
216
+ {% uj_icon "calendar-check", "fs-1 mb-3 opacity-50" %}
217
+ <p class="mb-0">{{ page.resolved.maintenance.empty_message }}</p>
218
+ </div>
219
+ </div>
220
+ </div>
221
+ </div>
222
+ </div>
223
+ </div>
224
+ </section>
225
+
226
+ <!-- Subscribe to Updates Section -->
227
+ <section class="py-5 pb-0">
228
+ <div class="container">
229
+ <div class="row justify-content-center">
230
+ <div class="col-lg-10">
231
+ <div class="card border-0 bg-body-tertiary" data-lazy="@class animation-slide-up">
232
+ <div class="card-body p-4">
233
+ <div class="row align-items-center">
234
+ <div class="col-lg-7 mb-3 mb-lg-0">
235
+ {% iftruthy page.resolved.updates.superheadline.text %}
236
+ <span class="badge bg-primary bg-opacity-10 text-primary p-2 mb-2 fw-semibold small">
237
+ {% iftruthy page.resolved.updates.superheadline.icon %}
238
+ {% uj_icon page.resolved.updates.superheadline.icon, "me-1" %}
239
+ {% endiftruthy %}
240
+ {{ page.resolved.updates.superheadline.text }}
241
+ </span>
242
+ {% endiftruthy %}
243
+ <h3 class="h4 mb-1">
244
+ {{ page.resolved.updates.headline }}
245
+ {% iftruthy page.resolved.updates.headline_accent %}
246
+ <span class="text-accent">{{ page.resolved.updates.headline_accent }}</span>
247
+ {% endiftruthy %}
248
+ </h3>
249
+ {% iftruthy page.resolved.updates.subheadline %}
250
+ <p class="text-muted mb-0">{{ page.resolved.updates.subheadline }}</p>
251
+ {% endiftruthy %}
252
+ </div>
253
+ <div class="col-lg-5">
254
+ <form id="status-subscribe-form" class="d-flex flex-column flex-sm-row gap-2">
255
+ <input
256
+ type="email"
257
+ class="form-control flex-grow-1"
258
+ id="status-email"
259
+ name="email"
260
+ placeholder="your@email.com"
261
+ autocomplete="email"
262
+ required
263
+ >
264
+ <button type="submit" class="btn btn-primary text-nowrap flex-shrink-0">
265
+ {% uj_icon page.resolved.updates.button.icon, "me-2" %}
266
+ {{ page.resolved.updates.button.text }}
267
+ </button>
268
+ </form>
269
+ </div>
270
+ </div>
271
+ </div>
272
+ </div>
273
+ </div>
274
+ </div>
275
+ </div>
276
+ </section>
277
+
278
+ <!-- Footer Links -->
279
+ <section class="py-5 pt-1">
280
+ <div class="container">
281
+ <div class="row justify-content-center">
282
+ <div class="col-lg-10">
283
+ <div class="d-flex justify-content-center align-items-center gap-3 text-muted small flex-wrap" data-lazy="@class animation-slide-up">
284
+ <a href="/updates" class="text-decoration-none">
285
+ {% uj_icon "rocket", "me-1" %}
286
+ View updates
287
+ </a>
288
+ <span>•</span>
289
+ <span>Powered by <a href="{{ site.url }}" class="text-decoration-none fw-semibold">{{ site.brand.name }}</a></span>
290
+ </div>
291
+ </div>
292
+ </div>
293
+ </div>
294
+ </section>
295
+
296
+ {{ content | uj_content_format }}
@@ -0,0 +1,128 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: themes/[ site.theme.id ]/frontend/core/cover
4
+
5
+ ### PAGE CONFIG ###
6
+ # Hero Section
7
+ hero:
8
+ headline: "{{ site.brand.name }}"
9
+ headline_accent: "updates"
10
+ subheadline: "Release notes and version history for {{ site.brand.name }}"
11
+
12
+ # Updates Section
13
+ updates:
14
+ empty_message: "No updates available yet"
15
+ view_details: "View details"
16
+ latest_badge: "Latest"
17
+ ---
18
+
19
+ <!-- Hero Section -->
20
+ <section class="updates-hero py-5">
21
+ <div class="container">
22
+ <div class="row justify-content-center text-center mb-4">
23
+ <div class="col-lg-10" data-lazy="@class animation-slide-up">
24
+ <h1 class="h1 mb-3">
25
+ {{ page.resolved.hero.headline }}
26
+ <span class="text-gradient-rainbow">{{ page.resolved.hero.headline_accent }}</span>
27
+ </h1>
28
+ {% iftruthy page.resolved.hero.subheadline %}
29
+ <p class="fs-5 text-muted mb-0">
30
+ {{ page.resolved.hero.subheadline }}
31
+ </p>
32
+ {% endiftruthy %}
33
+ </div>
34
+ </div>
35
+ </div>
36
+ </section>
37
+
38
+ <!-- Updates List Section -->
39
+ <section class="py-5">
40
+ <div class="container">
41
+ <div class="row justify-content-center">
42
+ <div class="col-lg-10">
43
+ {% if site.updates %}
44
+ {% assign updates = site.updates | sort: 'update.date' | reverse %}
45
+ {% else %}
46
+ {% assign updates = nil %}
47
+ {% endif %}
48
+
49
+ {% if updates and updates.size > 0 %}
50
+ <div id="updates-list">
51
+ {% for item in updates %}
52
+ {% if item.draft and jekyll.environment == 'production' %}
53
+ {% continue %}
54
+ {% endif %}
55
+ <div class="card border-0 bg-body-tertiary mb-3 update-card" data-lazy="@class animation-slide-up">
56
+ <div class="card-body p-4">
57
+ <div class="d-flex justify-content-between align-items-start mb-3 flex-wrap gap-2">
58
+ <div class="d-flex align-items-center gap-3">
59
+ <div class="avatar avatar-md bg-primary bg-opacity-10 rounded-circle d-flex align-items-center justify-content-center">
60
+ {% uj_icon "rocket", "text-primary fs-5" %}
61
+ </div>
62
+ <div>
63
+ <h3 class="h5 fw-semibold mb-0">
64
+ <a href="{{ item.url }}" class="text-body text-decoration-none stretched-link">
65
+ Version {{ item.update.version }}
66
+ </a>
67
+ </h3>
68
+ {% iftruthy item.update.title %}
69
+ <p class="text-muted mb-0 small">{{ item.update.title }}</p>
70
+ {% endiftruthy %}
71
+ </div>
72
+ </div>
73
+ <div class="d-flex align-items-center gap-2">
74
+ {% if forloop.first %}
75
+ <span class="badge bg-success-subtle text-success">{{ page.resolved.updates.latest_badge }}</span>
76
+ {% endif %}
77
+ <span class="text-muted small">{{ item.update.date | date: "%b %d, %Y" }}</span>
78
+ </div>
79
+ </div>
80
+
81
+ {% iftruthy item.update.summary %}
82
+ <p class="text-muted mb-3">{{ item.update.summary }}</p>
83
+ {% endiftruthy %}
84
+
85
+ {% iftruthy item.update.highlights %}
86
+ <div class="d-flex flex-wrap gap-2">
87
+ {% for highlight in item.update.highlights %}
88
+ <span class="badge bg-body-secondary text-body-secondary">
89
+ {% uj_icon highlight.icon, "me-1" %}
90
+ {{ highlight.text }}
91
+ </span>
92
+ {% endfor %}
93
+ </div>
94
+ {% endiftruthy %}
95
+ </div>
96
+ </div>
97
+ {% endfor %}
98
+ </div>
99
+ {% else %}
100
+ <div class="card border-0 bg-body-tertiary" data-lazy="@class animation-slide-up">
101
+ <div class="card-body p-4 text-center text-muted">
102
+ {% uj_icon "box-open", "fs-1 mb-3 opacity-50" %}
103
+ <p class="mb-0">{{ page.resolved.updates.empty_message }}</p>
104
+ </div>
105
+ </div>
106
+ {% endif %}
107
+ </div>
108
+ </div>
109
+ </div>
110
+ </section>
111
+
112
+ <!-- Back to Status Link -->
113
+ <section class="py-5 pt-0">
114
+ <div class="container">
115
+ <div class="row justify-content-center">
116
+ <div class="col-lg-10">
117
+ <div class="text-center" data-lazy="@class animation-slide-up">
118
+ <a href="/status" class="text-decoration-none">
119
+ {% uj_icon "arrow-left", "me-1" %}
120
+ Back to system status
121
+ </a>
122
+ </div>
123
+ </div>
124
+ </div>
125
+ </div>
126
+ </section>
127
+
128
+ {{ content | uj_content_format }}
@@ -0,0 +1,122 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: themes/[ site.theme.id ]/frontend/core/cover
4
+
5
+ ### PAGE CONFIG ###
6
+ # Update Section
7
+ update:
8
+ version: null
9
+ title: null
10
+ date: null
11
+ summary: null
12
+ highlights: []
13
+ type: "release" # release, hotfix, security, maintenance
14
+
15
+ # Navigation
16
+ navigation:
17
+ back_text: "All updates"
18
+ back_url: "/updates"
19
+ ---
20
+
21
+ <!-- Hero Section -->
22
+ <section class="update-hero py-5">
23
+ <div class="container">
24
+ <div class="row justify-content-center">
25
+ <div class="col-lg-10" data-lazy="@class animation-slide-up">
26
+ <!-- Back Link -->
27
+ <div class="mb-4">
28
+ <a href="{{ page.resolved.navigation.back_url }}" class="text-decoration-none text-muted">
29
+ {% uj_icon "arrow-left", "me-1" %}
30
+ {{ page.resolved.navigation.back_text }}
31
+ </a>
32
+ </div>
33
+
34
+ <!-- Update Header -->
35
+ <div class="card border-0 bg-body-tertiary update-header-card">
36
+ <div class="card-body p-4">
37
+ <div class="d-flex align-items-start gap-3 flex-wrap">
38
+ <div class="avatar avatar-lg bg-primary bg-opacity-10 rounded-circle d-flex align-items-center justify-content-center flex-shrink-0">
39
+ {% if page.resolved.update.type == "security" %}
40
+ {% uj_icon "shield-check", "text-danger fs-4" %}
41
+ {% elsif page.resolved.update.type == "hotfix" %}
42
+ {% uj_icon "bug", "text-warning fs-4" %}
43
+ {% elsif page.resolved.update.type == "maintenance" %}
44
+ {% uj_icon "wrench", "text-info fs-4" %}
45
+ {% else %}
46
+ {% uj_icon "rocket", "text-primary fs-4" %}
47
+ {% endif %}
48
+ </div>
49
+ <div class="flex-grow-1">
50
+ <div class="d-flex align-items-center gap-2 mb-1 flex-wrap">
51
+ <h1 class="h2 fw-bold mb-0">Version {{ page.resolved.update.version }}</h1>
52
+ {% if page.resolved.update.type == "security" %}
53
+ <span class="badge bg-danger-subtle text-danger">Security</span>
54
+ {% elsif page.resolved.update.type == "hotfix" %}
55
+ <span class="badge bg-warning-subtle text-warning">Hotfix</span>
56
+ {% elsif page.resolved.update.type == "maintenance" %}
57
+ <span class="badge bg-info-subtle text-info">Maintenance</span>
58
+ {% else %}
59
+ <span class="badge bg-primary-subtle text-primary">Release</span>
60
+ {% endif %}
61
+ </div>
62
+ {% iftruthy page.resolved.update.title %}
63
+ <p class="fs-5 text-muted mb-2">{{ page.resolved.update.title }}</p>
64
+ {% endiftruthy %}
65
+ <div class="text-muted small">
66
+ {% uj_icon "calendar", "me-1" %}
67
+ {{ page.resolved.update.date | date: "%B %d, %Y" }}
68
+ </div>
69
+ </div>
70
+ </div>
71
+
72
+ {% iftruthy page.resolved.update.highlights %}
73
+ <div class="mt-4 pt-3 border-top">
74
+ <div class="d-flex flex-wrap gap-2">
75
+ {% for highlight in page.resolved.update.highlights %}
76
+ <span class="badge bg-body-secondary text-body-secondary">
77
+ {% uj_icon highlight.icon, "me-1" %}
78
+ {{ highlight.text }}
79
+ </span>
80
+ {% endfor %}
81
+ </div>
82
+ </div>
83
+ {% endiftruthy %}
84
+ </div>
85
+ </div>
86
+ </div>
87
+ </div>
88
+ </div>
89
+ </section>
90
+
91
+ <!-- Update Content Section -->
92
+ <section class="py-5">
93
+ <div class="container">
94
+ <div class="row justify-content-center">
95
+ <div class="col-lg-10">
96
+ <div class="update-content" data-lazy="@class animation-slide-up">
97
+ {{ content | uj_content_format }}
98
+ </div>
99
+ </div>
100
+ </div>
101
+ </div>
102
+ </section>
103
+
104
+ <!-- Navigation Section -->
105
+ <section class="py-5 pt-0">
106
+ <div class="container">
107
+ <div class="row justify-content-center">
108
+ <div class="col-lg-10">
109
+ <div class="d-flex justify-content-between align-items-center flex-wrap gap-3" data-lazy="@class animation-slide-up">
110
+ <a href="{{ page.resolved.navigation.back_url }}" class="text-decoration-none">
111
+ {% uj_icon "arrow-left", "me-1" %}
112
+ {{ page.resolved.navigation.back_text }}
113
+ </a>
114
+ <a href="/status" class="text-decoration-none">
115
+ View system status
116
+ {% uj_icon "arrow-right", "ms-1" %}
117
+ </a>
118
+ </div>
119
+ </div>
120
+ </div>
121
+ </div>
122
+ </section>
@@ -0,0 +1,32 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: blueprint/updates/update
4
+
5
+ ### PAGE CONFIG ###
6
+ draft: true # Hide from listing and sitemap (only visible in development)
7
+
8
+ ### UPDATE CONFIG ###
9
+ update:
10
+ version: "0.0.0"
11
+ date: 2025-09-05
12
+ title: "Hotfix for export functionality"
13
+ summary: "Fixes an issue where data exports would fail for large datasets."
14
+ type: "hotfix"
15
+ highlights:
16
+ - icon: "bug"
17
+ text: "Export fix"
18
+ ---
19
+
20
+ ## Hotfix
21
+
22
+ This hotfix addresses an issue where data exports would fail when the dataset exceeded 10,000 records.
23
+
24
+ ### What was fixed
25
+
26
+ - Export functionality now handles large datasets correctly
27
+ - Added progress indicator for long-running exports
28
+ - Improved memory management during export process
29
+
30
+ ### Affected users
31
+
32
+ This issue affected users who attempted to export more than 10,000 records at once. If you experienced failed exports, please try again after updating.
@@ -0,0 +1,64 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: blueprint/updates/update
4
+
5
+ ### UPDATE CONFIG ###
6
+ update:
7
+ version: "0.0.1"
8
+ date: 2025-12-01
9
+ title: "Major redesign with dark mode"
10
+ summary: "A complete visual overhaul with dark mode support, improved performance, and new features."
11
+ type: "release"
12
+ highlights:
13
+ - icon: "moon"
14
+ text: "Dark mode"
15
+ - icon: "bolt"
16
+ text: "2x faster"
17
+ - icon: "paintbrush"
18
+ text: "New UI"
19
+ ---
20
+
21
+ ## What's new
22
+
23
+ We're excited to announce version 2.0.0, our biggest update yet! This release includes a complete visual redesign, dark mode support, and significant performance improvements.
24
+
25
+ ### Dark mode
26
+
27
+ You can now switch between light and dark themes. The app will also respect your system preferences by default.
28
+
29
+ - Automatic theme detection based on system settings
30
+ - Manual toggle in settings
31
+ - Consistent styling across all pages
32
+
33
+ ### Performance improvements
34
+
35
+ We've optimized the entire codebase for speed:
36
+
37
+ - **50% faster** page load times
38
+ - Reduced bundle size by 30%
39
+ - Improved caching strategies
40
+ - Lazy loading for images and components
41
+
42
+ ### New user interface
43
+
44
+ The entire UI has been redesigned with a focus on usability:
45
+
46
+ - Cleaner, more modern design
47
+ - Improved navigation
48
+ - Better mobile responsiveness
49
+ - Accessibility improvements
50
+
51
+ ## Breaking changes
52
+
53
+ - Minimum supported browser versions have been updated
54
+ - Some deprecated API endpoints have been removed
55
+ - Configuration file format has changed (see migration guide)
56
+
57
+ ## Migration guide
58
+
59
+ To upgrade from 1.x to 2.0.0:
60
+
61
+ 1. Back up your configuration files
62
+ 2. Update your dependencies
63
+ 3. Run the migration script: `npm run migrate`
64
+ 4. Review and update any custom themes
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  ### ALL PAGES ###
3
- layout: blueprint/extension
3
+ layout: blueprint/extension/index
4
4
  permalink: /extension
5
5
 
6
6
  ### REGULAR PAGES ###
7
- ---
7
+ ---
@@ -0,0 +1,7 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: blueprint/extension/installed
4
+ permalink: /extension/installed
5
+
6
+ ### REGULAR PAGES ###
7
+ ---
@@ -0,0 +1,7 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: blueprint/status
4
+ permalink: /status
5
+
6
+ ### REGULAR PAGES ###
7
+ ---
@@ -0,0 +1,7 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: blueprint/updates/index
4
+ permalink: /updates
5
+
6
+ ### REGULAR PAGES ###
7
+ ---