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.
- package/.playwright-mcp/page-2025-12-09T08-57-21-148Z.png +0 -0
- package/.playwright-mcp/page-2025-12-09T09-11-17-887Z.png +0 -0
- package/.playwright-mcp/page-2025-12-09T09-11-41-348Z.png +0 -0
- package/dist/assets/css/pages/extension/installed/index.scss +240 -0
- package/dist/assets/css/pages/status/index.scss +174 -0
- package/dist/assets/css/pages/updates/index.scss +13 -0
- package/dist/assets/css/pages/updates/update.scss +46 -0
- package/dist/assets/js/pages/extension/index.js +160 -0
- package/dist/assets/js/pages/status/index.js +508 -0
- package/dist/assets/js/pages/updates/index.js +30 -0
- package/dist/assets/js/pages/updates/update.js +34 -0
- package/dist/defaults/dist/_includes/core/head.html +9 -0
- package/dist/defaults/dist/_layouts/blueprint/extension/index.html +12 -0
- package/dist/defaults/dist/_layouts/blueprint/extension/installed.html +13 -0
- package/dist/defaults/dist/_layouts/blueprint/status.html +12 -0
- package/dist/defaults/dist/_layouts/blueprint/updates/index.html +12 -0
- package/dist/defaults/dist/_layouts/blueprint/updates/update.html +15 -0
- package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/account/index.html +1 -1
- package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/extension/index.html +434 -0
- package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/extension/installed.html +188 -0
- package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/payment/confirmation.html +1 -1
- package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/status.html +296 -0
- package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/updates/index.html +128 -0
- package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/updates/update.html +122 -0
- package/dist/defaults/dist/_updates/v0.0.0.md +32 -0
- package/dist/defaults/dist/_updates/v0.0.1.md +64 -0
- package/dist/defaults/dist/pages/{extension.md → extension/index.html} +2 -2
- package/dist/defaults/dist/pages/extension/installed.html +7 -0
- package/dist/defaults/dist/pages/status.md +7 -0
- package/dist/defaults/dist/pages/updates/index.md +7 -0
- package/dist/defaults/dist/sitemap.html +8 -0
- package/dist/defaults/dist/sitemap.xml +4 -0
- package/dist/defaults/src/_config.yml +8 -0
- package/dist/gulp/main.js +4 -0
- package/dist/gulp/tasks/serve.js +16 -36
- package/firebase-debug.log +98 -0
- package/package.json +2 -1
- 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
|