jekyll-theme-zer0 1.1.0 → 1.2.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +67 -0
- data/README.md +68 -20
- data/_includes/components/cookie-consent.html +5 -1
- data/_includes/components/dev-shortcuts.html +13 -0
- data/_includes/components/info-section.html +18 -2
- data/_includes/components/setup-banner.html +1 -1
- data/_includes/components/setup-check.html +31 -0
- data/_includes/core/footer.html +35 -9
- data/_layouts/welcome.html +337 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 492ac103c8adea1b4edaf2cf925f5a5e02d661e522907dec95cbf08ec0ab0ef6
|
|
4
|
+
data.tar.gz: 5efc803b2288fb9036165becc816e2b1f78cfa2e5aa62368049463e4eb7891c4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 015f1f284b8129ae2788be7be74386818bdcd965b84d24aa4ba600fde13a91e4de2c211c068a28a69a959d30b18946b39cd4677fc21b1e8b2a44f59adf061edb
|
|
7
|
+
data.tar.gz: 06525dbbc0bea7d545293865e69b7c2f95352e213b3eee20db2a966f81f217d2ad88b02587f15f48b8e3d6f7a0adafb57978c5455638fd1a29fe79b980ca15ce
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.2.1] - 2026-04-22
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
- Version bump: patch release
|
|
7
|
+
|
|
8
|
+
### Commits in this release
|
|
9
|
+
- 5c04e62 fix(footer,welcome,info): eliminate broken links on bare-minimum sites
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## [1.2.0] - 2026-04-22
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
- Version bump: minor release
|
|
16
|
+
|
|
17
|
+
### Commits in this release
|
|
18
|
+
- 4bd3e36 feat(welcome): add bare-minimum 3-file remote-theme starter
|
|
19
|
+
|
|
20
|
+
|
|
3
21
|
## [1.1.0] - 2026-04-21
|
|
4
22
|
|
|
5
23
|
### Changed
|
|
@@ -12,7 +30,56 @@
|
|
|
12
30
|
|
|
13
31
|
## [Unreleased]
|
|
14
32
|
|
|
33
|
+
### Added
|
|
34
|
+
- **Bare-minimum 3-file remote-theme starter.** Consumers can now publish a
|
|
35
|
+
fully styled site to GitHub Pages with only `_config.yml`, `Gemfile`, and
|
|
36
|
+
`index.md` — no installer required. The new `_layouts/welcome.html` shipped
|
|
37
|
+
by the theme detects unconfigured sites and renders an onboarding screen
|
|
38
|
+
with a hero checklist, a 3-step starter accordion, and the embedded
|
|
39
|
+
`_includes/setup/wizard.html` that generates a personalised `_config.yml`
|
|
40
|
+
on the fly. README gained a "Bare-Minimum Starter" section documenting the
|
|
41
|
+
pattern.
|
|
42
|
+
- **Smarter setup detection** in `_includes/components/setup-check.html`.
|
|
43
|
+
When `site_configured` is not set, the heuristic now flags a site as
|
|
44
|
+
unconfigured if it has no owner (`founder`/`author`/`email`) or its title
|
|
45
|
+
matches a known placeholder (`zer0-mistakes`, `zer0-pages-remote`,
|
|
46
|
+
`Your Site Title`, `My Awesome Site`, `Welcome`, `Untitled`, or empty).
|
|
47
|
+
|
|
15
48
|
### Fixed
|
|
49
|
+
- **Footer Quick Links no longer 404 on bare-minimum sites.**
|
|
50
|
+
`_includes/core/footer.html` previously hard-coded links to
|
|
51
|
+
`/about/`, `/services/`, `/news/`, `/contact/`, `/privacy-policy`, and
|
|
52
|
+
`/terms-of-service` — none of which exist in a 3-file remote-theme
|
|
53
|
+
consumer. Quick Links are now resolved in this order:
|
|
54
|
+
1. `site.footer_quick_links` (array of `{label, url}`) — explicit override
|
|
55
|
+
2. Auto-detection: each candidate link only renders if the target page
|
|
56
|
+
exists in `site.html_pages`
|
|
57
|
+
3. Fallback to `Home` + `Sitemap (XML)` only.
|
|
58
|
+
Privacy Policy / Terms of Service links use the same existence check and
|
|
59
|
+
optionally read from `site.privacy_policy_url` / `site.terms_of_service_url`.
|
|
60
|
+
- **Welcome layout external links now point to existing README anchors.**
|
|
61
|
+
The "Next steps" cards in `_layouts/welcome.html` linked to
|
|
62
|
+
`#content-creation` and `#customisation`, which don't exist in the theme
|
|
63
|
+
README. They now point to `README.md#-quick-start` and
|
|
64
|
+
`README.md#-key-features` respectively.
|
|
65
|
+
- **Theme info admin links are conditional.**
|
|
66
|
+
`_includes/components/info-section.html` previously rendered Admin
|
|
67
|
+
Dashboard links to `/about/config/`, `/about/settings/theme/`,
|
|
68
|
+
`/about/settings/navigation/`, and `/about/settings/environment/`
|
|
69
|
+
unconditionally — guaranteed 404s on bare-minimum sites. The links and
|
|
70
|
+
surrounding section now only render when the corresponding page exists.
|
|
71
|
+
- **Source Code shortcuts skip GitHub buttons when repository is unknown.**
|
|
72
|
+
`_includes/components/dev-shortcuts.html` rendered `https://github.com//blob//`
|
|
73
|
+
URLs when `site.repository` and `site.branch` were empty (typical on bare
|
|
74
|
+
consumer sites). It now hides the GitHub-based buttons and shows a hint
|
|
75
|
+
to set `repository: USER/REPO` in `_config.yml`.
|
|
76
|
+
- **Cookie-consent privacy link is conditional.** The "Learn more in our
|
|
77
|
+
Privacy Policy" anchor in `_includes/components/cookie-consent.html` only
|
|
78
|
+
renders if a `/privacy-policy/` page exists or `site.privacy_policy_url` is
|
|
79
|
+
configured.
|
|
80
|
+
- **Setup banner link.** `_includes/components/setup-banner.html` no longer
|
|
81
|
+
points at the non-existent `/404.html`; it now links to
|
|
82
|
+
`/#setup-wizard`, which is provided by the new welcome layout.
|
|
16
83
|
- **Version-bump workflow no longer crashes on bash 5.x runners.** `scripts/utils/analyze-commits` (and `scripts/lib/changelog.sh`, `scripts/lib/migrate.sh`) used the `((var++))` post-increment idiom. On bash 5.x, when `var` is 0 the expression evaluates to 0 → exit code 1 → `set -euo pipefail` terminates the script silently. macOS bash 3.2 was more forgiving, so the bug only surfaced in CI. Replaced all release-path sites with `var=$((var + 1))`, which always returns 0. Added a static regression check to the unit tests so the pattern can't return.
|
|
17
84
|
|
|
18
85
|
## [1.0.0] - 2026-04-20
|
data/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
title: zer0-mistakes
|
|
3
3
|
sub-title: AI-Native Jekyll Theme
|
|
4
4
|
description: AI-native Jekyll theme for GitHub Pages — Docker-first development, AI-powered installation, multi-agent integration (Copilot, Codex, Cursor, Claude), AI preview-image generation, and AIEO content optimization with Bootstrap 5.3.
|
|
5
|
-
version: 1.1
|
|
5
|
+
version: 1.2.1
|
|
6
6
|
layout: landing
|
|
7
7
|
tags:
|
|
8
8
|
- jekyll
|
|
@@ -20,7 +20,7 @@ categories:
|
|
|
20
20
|
- bootstrap
|
|
21
21
|
- ai-tooling
|
|
22
22
|
created: 2024-02-10T23:51:11.480Z
|
|
23
|
-
lastmod: 2026-04-
|
|
23
|
+
lastmod: 2026-04-22T03:05:26.000Z
|
|
24
24
|
draft: false
|
|
25
25
|
permalink: /
|
|
26
26
|
slug: zer0
|
|
@@ -158,25 +158,73 @@ docker-compose up
|
|
|
158
158
|
# 🌐 Open http://localhost:4000
|
|
159
159
|
```
|
|
160
160
|
|
|
161
|
+
### Bare-Minimum Starter (3 files, zero install)
|
|
162
|
+
|
|
163
|
+
Don't want to run the installer? You can publish a working site to GitHub
|
|
164
|
+
Pages with **just three files** in your repo. The remote theme provides every
|
|
165
|
+
layout, style, and even an in-browser configuration wizard.
|
|
166
|
+
|
|
167
|
+
```text
|
|
168
|
+
my-site/
|
|
169
|
+
├── _config.yml ← site configuration (remote_theme: bamr87/zer0-mistakes)
|
|
170
|
+
├── Gemfile ← github-pages + jekyll-remote-theme
|
|
171
|
+
└── index.md ← layout: welcome
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
`_config.yml`:
|
|
175
|
+
|
|
176
|
+
```yaml
|
|
177
|
+
title: "My Site"
|
|
178
|
+
description: "A site rendered by the zer0-mistakes remote theme."
|
|
179
|
+
remote_theme: bamr87/zer0-mistakes
|
|
180
|
+
plugins:
|
|
181
|
+
- jekyll-remote-theme
|
|
182
|
+
- jekyll-feed
|
|
183
|
+
- jekyll-sitemap
|
|
184
|
+
- jekyll-seo-tag
|
|
185
|
+
site_configured: false # show the welcome wizard until you flip this to true
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
`Gemfile`:
|
|
189
|
+
|
|
190
|
+
```ruby
|
|
191
|
+
source "https://rubygems.org"
|
|
192
|
+
gem "github-pages", group: :jekyll_plugins
|
|
193
|
+
gem "jekyll-remote-theme"
|
|
194
|
+
gem "webrick", "~> 1.7"
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
`index.md`:
|
|
198
|
+
|
|
199
|
+
```markdown
|
|
200
|
+
---
|
|
201
|
+
layout: welcome
|
|
202
|
+
title: Home
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
# Welcome to my site
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Push to a GitHub Pages–enabled repository and visit your site. Until you set
|
|
209
|
+
`site_configured: true`, the home page renders the **welcome layout** —
|
|
210
|
+
a hero card listing your three files, a 3-step starter accordion, and a full
|
|
211
|
+
in-browser wizard that generates a personalised `_config.yml` you can
|
|
212
|
+
download. Once you flip the flag (or fill in `title`/`founder`/`email`), the
|
|
213
|
+
welcome screen is replaced by your own content.
|
|
214
|
+
|
|
161
215
|
```mermaid
|
|
162
216
|
sequenceDiagram
|
|
163
217
|
participant You
|
|
164
|
-
participant
|
|
165
|
-
participant
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
You->>Docker: docker-compose up
|
|
175
|
-
Docker->>Docker: Build Jekyll container
|
|
176
|
-
Docker->>Docker: Install dependencies
|
|
177
|
-
Docker-->>Browser: Serve on :4000
|
|
178
|
-
|
|
179
|
-
Browser-->>You: 🎉 Live site
|
|
218
|
+
participant GitHubPages as GitHub Pages
|
|
219
|
+
participant RemoteTheme as bamr87/zer0-mistakes
|
|
220
|
+
|
|
221
|
+
You->>GitHubPages: push 3 files
|
|
222
|
+
GitHubPages->>RemoteTheme: fetch layouts/includes/assets
|
|
223
|
+
RemoteTheme-->>GitHubPages: welcome.html + setup wizard
|
|
224
|
+
GitHubPages-->>You: 🎉 onboarding screen at /
|
|
225
|
+
You->>You: use wizard to generate _config.yml
|
|
226
|
+
You->>GitHubPages: replace _config.yml + set site_configured: true
|
|
227
|
+
GitHubPages-->>You: 🚀 your customised site
|
|
180
228
|
```
|
|
181
229
|
|
|
182
230
|
---
|
|
@@ -1066,7 +1114,7 @@ git push origin feature/awesome-feature
|
|
|
1066
1114
|
|
|
1067
1115
|
| Metric | Value |
|
|
1068
1116
|
|--------|-------|
|
|
1069
|
-
| **Current Version** | 1.1
|
|
1117
|
+
| **Current Version** | 1.2.1 ([RubyGems](https://rubygems.org/gems/jekyll-theme-zer0), [CHANGELOG](/CHANGELOG)) |
|
|
1070
1118
|
| **Documented Features** | 43 ([Feature Registry](https://github.com/bamr87/zer0-mistakes/blob/main/_data/features.yml)) |
|
|
1071
1119
|
| **Setup Time** | 2-5 minutes ([install.sh benchmarks](https://github.com/bamr87/zer0-mistakes/blob/main/install.sh)) |
|
|
1072
1120
|
| **Documentation Pages** | 70+ ([browse docs](/pages/)) |
|
|
@@ -1117,6 +1165,6 @@ And these AI partners that make zer0-mistakes truly AI-native:
|
|
|
1117
1165
|
|
|
1118
1166
|
**Built with ❤️ — and a little help from our AI partners — for the Jekyll community**
|
|
1119
1167
|
|
|
1120
|
-
**v1.1
|
|
1168
|
+
**v1.2.1** • [Changelog](CHANGELOG.md) • [License](LICENSE) • [Contributing](CONTRIBUTING.md) • [AI Agent Guide](AGENTS.md)
|
|
1121
1169
|
|
|
1122
1170
|
|
|
@@ -59,7 +59,11 @@ Configuration: Uses site.posthog settings from _config.yml
|
|
|
59
59
|
</p>
|
|
60
60
|
<p class="mb-2 mb-lg-0 small text-white-50">
|
|
61
61
|
This website uses cookies and similar technologies to enhance your browsing experience, analyze traffic, and provide personalized content.
|
|
62
|
-
|
|
62
|
+
{% assign _pp = site.html_pages | where: "url", "/privacy-policy/" | first %}
|
|
63
|
+
{% unless _pp %}{% assign _pp = site.html_pages | where: "url", "/privacy-policy" | first %}{% endunless %}
|
|
64
|
+
{% if _pp or site.privacy_policy_url %}
|
|
65
|
+
<a href="{{ site.privacy_policy_url | default: '/privacy-policy/' | relative_url }}" class="text-white text-decoration-underline">Learn more in our Privacy Policy</a>.
|
|
66
|
+
{% endif %}
|
|
63
67
|
</p>
|
|
64
68
|
</div>
|
|
65
69
|
<div class="col-12 col-lg-4">
|
|
@@ -33,6 +33,11 @@
|
|
|
33
33
|
<div class="dev-shortcuts">
|
|
34
34
|
<div class="d-flex flex-column gap-2">
|
|
35
35
|
|
|
36
|
+
{% comment %} Skip all GitHub-based shortcuts on bare/unconfigured sites where
|
|
37
|
+
site.repository or site.branch are empty (otherwise we render
|
|
38
|
+
https://github.com//blob//path → 404). {% endcomment %}
|
|
39
|
+
{% if site.repository and site.branch %}
|
|
40
|
+
|
|
36
41
|
<!-- Button Group (section title is the parent h6 in info-section.html) -->
|
|
37
42
|
<div class="btn-group-vertical" role="group" aria-label="Source code shortcuts">
|
|
38
43
|
|
|
@@ -109,5 +114,13 @@
|
|
|
109
114
|
|
|
110
115
|
</div>
|
|
111
116
|
|
|
117
|
+
{% else %}
|
|
118
|
+
<p class="small text-body-secondary mb-0">
|
|
119
|
+
<i class="bi bi-info-circle me-1"></i>
|
|
120
|
+
Set <code>repository: USER/REPO</code> in your <code>_config.yml</code>
|
|
121
|
+
to enable source-code shortcuts.
|
|
122
|
+
</p>
|
|
123
|
+
{% endif %}
|
|
124
|
+
|
|
112
125
|
</div>
|
|
113
126
|
</div>
|
|
@@ -108,35 +108,51 @@
|
|
|
108
108
|
</div>
|
|
109
109
|
</div>
|
|
110
110
|
|
|
111
|
-
<!-- Admin Quick Links
|
|
111
|
+
<!-- Admin Quick Links — only render links to pages that actually exist
|
|
112
|
+
in the build (prevents 404s on bare-minimum / remote-theme sites
|
|
113
|
+
that haven't created the admin pages). -->
|
|
114
|
+
{% assign _cfg_page = site.html_pages | where: "url", "/about/config/" | first %}
|
|
115
|
+
{% assign _theme_page = site.html_pages | where: "url", "/about/settings/theme/" | first %}
|
|
116
|
+
{% assign _nav_page = site.html_pages | where: "url", "/about/settings/navigation/" | first %}
|
|
117
|
+
{% if _cfg_page or _theme_page or _nav_page %}
|
|
112
118
|
<div class="mb-3">
|
|
113
119
|
<h6 class="text-body-secondary small text-uppercase fw-semibold mb-2">
|
|
114
120
|
<i class="bi bi-speedometer2 me-1"></i>Admin Dashboard
|
|
115
121
|
</h6>
|
|
116
122
|
<div class="list-group list-group-flush small">
|
|
123
|
+
{% if _cfg_page %}
|
|
117
124
|
<a href="{{ '/about/config/' | relative_url }}" class="list-group-item list-group-item-action d-flex align-items-center px-0">
|
|
118
125
|
<i class="bi bi-gear me-2 text-body-secondary"></i>Configuration
|
|
119
126
|
</a>
|
|
127
|
+
{% endif %}
|
|
128
|
+
{% if _theme_page %}
|
|
120
129
|
<a href="{{ '/about/settings/theme/' | relative_url }}" class="list-group-item list-group-item-action d-flex align-items-center px-0">
|
|
121
130
|
<i class="bi bi-palette me-2 text-body-secondary"></i>Theme Customizer
|
|
122
131
|
</a>
|
|
132
|
+
{% endif %}
|
|
133
|
+
{% if _nav_page %}
|
|
123
134
|
<a href="{{ '/about/settings/navigation/' | relative_url }}" class="list-group-item list-group-item-action d-flex align-items-center px-0">
|
|
124
135
|
<i class="bi bi-signpost-2 me-2 text-body-secondary"></i>Navigation Editor
|
|
125
136
|
</a>
|
|
137
|
+
{% endif %}
|
|
126
138
|
</div>
|
|
127
139
|
</div>
|
|
140
|
+
{% endif %}
|
|
128
141
|
</div>
|
|
129
142
|
|
|
130
143
|
<!-- Environment Tab -->
|
|
131
144
|
<div class="tab-pane fade" id="environment-pane" role="tabpanel" aria-labelledby="environment-tab" tabindex="0">
|
|
132
145
|
{% include components/env-switcher.html %}
|
|
133
146
|
|
|
134
|
-
<!-- Admin Link -->
|
|
147
|
+
<!-- Admin Link — only when target page exists -->
|
|
148
|
+
{% assign _env_page = site.html_pages | where: "url", "/about/settings/environment/" | first %}
|
|
149
|
+
{% if _env_page %}
|
|
135
150
|
<div class="mt-4 pt-3 border-top">
|
|
136
151
|
<a href="{{ '/about/settings/environment/' | relative_url }}" class="btn btn-outline-secondary btn-sm w-100">
|
|
137
152
|
<i class="bi bi-box-arrow-up-right me-1"></i>Full Environment & Build Info
|
|
138
153
|
</a>
|
|
139
154
|
</div>
|
|
155
|
+
{% endif %}
|
|
140
156
|
</div>
|
|
141
157
|
|
|
142
158
|
<!-- Developer Tab -->
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
<i class="bi bi-gear-wide-connected me-1"></i>
|
|
23
23
|
<strong>Almost there!</strong>
|
|
24
24
|
Your site is running with default settings.
|
|
25
|
-
<a href="{{ '/
|
|
25
|
+
<a href="{{ '/' | relative_url }}#setup-wizard" class="alert-link">Complete setup →</a>
|
|
26
26
|
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
|
27
27
|
</div>
|
|
28
28
|
{% endif %}
|
|
@@ -48,6 +48,37 @@
|
|
|
48
48
|
{% endcomment %}
|
|
49
49
|
{% assign site_needs_setup = false %}
|
|
50
50
|
|
|
51
|
+
{% comment %} Explicit opt-out (configured sites set this to true). {% endcomment %}
|
|
51
52
|
{% if site.site_configured == false %}
|
|
52
53
|
{% assign site_needs_setup = true %}
|
|
53
54
|
{% endif %}
|
|
55
|
+
|
|
56
|
+
{% comment %}
|
|
57
|
+
── Heuristic detection (when site_configured is not set explicitly) ──
|
|
58
|
+
Treat the site as "needs setup" if any of these are true:
|
|
59
|
+
• No founder/author/email configured
|
|
60
|
+
• Title is empty or matches a known placeholder
|
|
61
|
+
• The site has no content collections beyond the defaults
|
|
62
|
+
{% endcomment %}
|
|
63
|
+
{% unless site.site_configured %}
|
|
64
|
+
{% assign _has_owner = false %}
|
|
65
|
+
{% if site.founder or site.author or site.email %}
|
|
66
|
+
{% assign _has_owner = true %}
|
|
67
|
+
{% endif %}
|
|
68
|
+
|
|
69
|
+
{% assign _placeholder_titles = "zer0-mistakes,zer0-pages-remote,Your Site Title,My Awesome Site,Welcome,Untitled" | split: "," %}
|
|
70
|
+
{% assign _title_is_placeholder = false %}
|
|
71
|
+
{% if site.title == nil or site.title == "" %}
|
|
72
|
+
{% assign _title_is_placeholder = true %}
|
|
73
|
+
{% else %}
|
|
74
|
+
{% for _t in _placeholder_titles %}
|
|
75
|
+
{% if site.title == _t %}
|
|
76
|
+
{% assign _title_is_placeholder = true %}
|
|
77
|
+
{% endif %}
|
|
78
|
+
{% endfor %}
|
|
79
|
+
{% endif %}
|
|
80
|
+
|
|
81
|
+
{% if _has_owner == false or _title_is_placeholder %}
|
|
82
|
+
{% assign site_needs_setup = true %}
|
|
83
|
+
{% endif %}
|
|
84
|
+
{% endunless %}
|
data/_includes/core/footer.html
CHANGED
|
@@ -80,16 +80,33 @@
|
|
|
80
80
|
{% if site.email %}<p class="mb-0"><a href="mailto:{{ site.email }}" class="text-light text-decoration-none">{{ site.email }}</a></p>{% endif %}
|
|
81
81
|
</div>
|
|
82
82
|
|
|
83
|
-
<!-- Quick Links
|
|
83
|
+
<!-- Quick Links
|
|
84
|
+
Resolution order:
|
|
85
|
+
1. site.footer_quick_links (array of {label, url}) — explicit override
|
|
86
|
+
2. Auto-detection: only render links whose target pages
|
|
87
|
+
actually exist in the build. Prevents 404s on bare-minimum
|
|
88
|
+
sites that haven't created /about/, /services/, etc. -->
|
|
84
89
|
<div class="col-12 col-md-6 col-lg-3 mb-3">
|
|
85
90
|
<h5 class="text-uppercase mb-3">Quick Links</h5>
|
|
86
91
|
<ul class="list-unstyled" aria-label="Footer quick links">
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
92
|
+
{% if site.footer_quick_links %}
|
|
93
|
+
{% for link in site.footer_quick_links %}
|
|
94
|
+
<li><a href="{{ link.url | relative_url }}" class="text-light text-decoration-none">{{ link.label }}</a></li>
|
|
95
|
+
{% endfor %}
|
|
96
|
+
{% else %}
|
|
97
|
+
<li><a href="{{ '/' | relative_url }}" class="text-light text-decoration-none">Home</a></li>
|
|
98
|
+
{% assign _candidate_links = "About,/about/|Services,/services/|News,/news/|Contact,/contact/" | split: "|" %}
|
|
99
|
+
{% for entry in _candidate_links %}
|
|
100
|
+
{% assign _parts = entry | split: "," %}
|
|
101
|
+
{% assign _label = _parts[0] %}
|
|
102
|
+
{% assign _url = _parts[1] %}
|
|
103
|
+
{% assign _page = site.html_pages | where: "url", _url | first %}
|
|
104
|
+
{% if _page %}
|
|
105
|
+
<li><a href="{{ _url | relative_url }}" class="text-light text-decoration-none">{{ _label }}</a></li>
|
|
106
|
+
{% endif %}
|
|
107
|
+
{% endfor %}
|
|
108
|
+
<li><a href="{{ '/sitemap.xml' | relative_url }}" class="text-light text-decoration-none">Sitemap (XML)</a></li>
|
|
109
|
+
{% endif %}
|
|
93
110
|
</ul>
|
|
94
111
|
</div>
|
|
95
112
|
|
|
@@ -151,8 +168,17 @@
|
|
|
151
168
|
</div>
|
|
152
169
|
<div class="col-md-4 text-md-end">
|
|
153
170
|
<ul class="list-inline mb-0">
|
|
154
|
-
|
|
155
|
-
|
|
171
|
+
{% comment %} Only render policy links whose pages exist (or that are explicitly configured). {% endcomment %}
|
|
172
|
+
{% assign _privacy = site.html_pages | where: "url", "/privacy-policy/" | first %}
|
|
173
|
+
{% unless _privacy %}{% assign _privacy = site.html_pages | where: "url", "/privacy-policy" | first %}{% endunless %}
|
|
174
|
+
{% if _privacy or site.privacy_policy_url %}
|
|
175
|
+
<li class="list-inline-item"><a href="{{ site.privacy_policy_url | default: '/privacy-policy' | relative_url }}" class="text-light text-decoration-none">Privacy Policy</a></li>
|
|
176
|
+
{% endif %}
|
|
177
|
+
{% assign _terms = site.html_pages | where: "url", "/terms-of-service/" | first %}
|
|
178
|
+
{% unless _terms %}{% assign _terms = site.html_pages | where: "url", "/terms-of-service" | first %}{% endunless %}
|
|
179
|
+
{% if _terms or site.terms_of_service_url %}
|
|
180
|
+
<li class="list-inline-item"><a href="{{ site.terms_of_service_url | default: '/terms-of-service' | relative_url }}" class="text-light text-decoration-none">Terms of Service</a></li>
|
|
181
|
+
{% endif %}
|
|
156
182
|
<li class="list-inline-item">
|
|
157
183
|
<a href="#" class="text-light text-decoration-none" data-bs-toggle="modal" data-bs-target="#cookieSettingsModal">
|
|
158
184
|
Cookie Preferences
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: root
|
|
3
|
+
---
|
|
4
|
+
<!--
|
|
5
|
+
===================================================================
|
|
6
|
+
WELCOME LAYOUT — Onboarding landing page for new sites
|
|
7
|
+
===================================================================
|
|
8
|
+
|
|
9
|
+
File: welcome.html
|
|
10
|
+
Path: _layouts/welcome.html
|
|
11
|
+
Inherits: root.html
|
|
12
|
+
Purpose: First-run experience for sites that have just installed the
|
|
13
|
+
bamr87/zer0-mistakes remote theme but haven't configured
|
|
14
|
+
anything yet. Shows the configuration wizard, the minimal
|
|
15
|
+
starter checklist, and links to docs.
|
|
16
|
+
|
|
17
|
+
Behaviour:
|
|
18
|
+
• If the site is unconfigured (see components/setup-check.html),
|
|
19
|
+
the wizard + instructions REPLACE the page content.
|
|
20
|
+
• Once site.site_configured == true (or the heuristic passes),
|
|
21
|
+
the page renders the user's content normally.
|
|
22
|
+
|
|
23
|
+
Recommended usage in a brand-new repo:
|
|
24
|
+
|
|
25
|
+
# index.md (one of the only three files you need)
|
|
26
|
+
---
|
|
27
|
+
layout: welcome
|
|
28
|
+
title: Home
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
Welcome to my new site! ← shown after configuration is complete
|
|
32
|
+
|
|
33
|
+
Companion files in a minimal starter:
|
|
34
|
+
_config.yml (just `remote_theme: bamr87/zer0-mistakes`)
|
|
35
|
+
Gemfile (github-pages + jekyll-remote-theme)
|
|
36
|
+
index.md (this layout)
|
|
37
|
+
===================================================================
|
|
38
|
+
-->
|
|
39
|
+
|
|
40
|
+
{% include components/setup-check.html %}
|
|
41
|
+
|
|
42
|
+
{% if site_needs_setup %}
|
|
43
|
+
|
|
44
|
+
<!-- ============================================================ -->
|
|
45
|
+
<!-- HERO -->
|
|
46
|
+
<!-- ============================================================ -->
|
|
47
|
+
<section class="bg-body-tertiary border-bottom">
|
|
48
|
+
<div class="container-lg py-5">
|
|
49
|
+
<div class="row align-items-center g-4">
|
|
50
|
+
<div class="col-lg-7">
|
|
51
|
+
<span class="badge text-bg-primary mb-2">
|
|
52
|
+
<i class="bi bi-stars"></i> zer0-mistakes remote theme
|
|
53
|
+
</span>
|
|
54
|
+
<h1 class="display-5 fw-bold mb-3">
|
|
55
|
+
Welcome — your site is live!
|
|
56
|
+
</h1>
|
|
57
|
+
<p class="lead mb-3">
|
|
58
|
+
GitHub Pages built this page from <strong>just three files</strong>
|
|
59
|
+
in your repository. The layout, styles, and this entire onboarding
|
|
60
|
+
screen are served by the remote theme.
|
|
61
|
+
</p>
|
|
62
|
+
<p class="text-body-secondary mb-4">
|
|
63
|
+
Use the wizard below to generate a personalised
|
|
64
|
+
<code>_config.yml</code>, drop it into your repo, and your site
|
|
65
|
+
will look like <em>your</em> site instead of this welcome page.
|
|
66
|
+
</p>
|
|
67
|
+
<div class="d-flex flex-wrap gap-2">
|
|
68
|
+
<a href="#setup-wizard" class="btn btn-primary btn-lg">
|
|
69
|
+
<i class="bi bi-magic"></i> Start the wizard
|
|
70
|
+
</a>
|
|
71
|
+
<a href="#minimal-starter" class="btn btn-outline-secondary btn-lg">
|
|
72
|
+
<i class="bi bi-list-check"></i> Minimal starter
|
|
73
|
+
</a>
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
<div class="col-lg-5">
|
|
77
|
+
<div class="card shadow-sm">
|
|
78
|
+
<div class="card-header bg-body">
|
|
79
|
+
<i class="bi bi-folder2-open"></i>
|
|
80
|
+
<strong>Your repository right now</strong>
|
|
81
|
+
</div>
|
|
82
|
+
<div class="card-body p-0">
|
|
83
|
+
<ul class="list-group list-group-flush small mb-0">
|
|
84
|
+
<li class="list-group-item d-flex justify-content-between align-items-center">
|
|
85
|
+
<span><i class="bi bi-file-earmark-text"></i> <code>_config.yml</code></span>
|
|
86
|
+
<span class="badge text-bg-success rounded-pill">required</span>
|
|
87
|
+
</li>
|
|
88
|
+
<li class="list-group-item d-flex justify-content-between align-items-center">
|
|
89
|
+
<span><i class="bi bi-gem"></i> <code>Gemfile</code></span>
|
|
90
|
+
<span class="badge text-bg-success rounded-pill">required</span>
|
|
91
|
+
</li>
|
|
92
|
+
<li class="list-group-item d-flex justify-content-between align-items-center">
|
|
93
|
+
<span><i class="bi bi-house-door"></i> <code>index.md</code></span>
|
|
94
|
+
<span class="badge text-bg-success rounded-pill">required</span>
|
|
95
|
+
</li>
|
|
96
|
+
<li class="list-group-item d-flex justify-content-between align-items-center text-body-secondary">
|
|
97
|
+
<span><i class="bi bi-folder"></i> <code>pages/</code></span>
|
|
98
|
+
<span class="badge text-bg-secondary rounded-pill">optional</span>
|
|
99
|
+
</li>
|
|
100
|
+
<li class="list-group-item d-flex justify-content-between align-items-center text-body-secondary">
|
|
101
|
+
<span><i class="bi bi-folder"></i> <code>assets/</code></span>
|
|
102
|
+
<span class="badge text-bg-secondary rounded-pill">optional</span>
|
|
103
|
+
</li>
|
|
104
|
+
</ul>
|
|
105
|
+
</div>
|
|
106
|
+
<div class="card-footer text-body-secondary small">
|
|
107
|
+
Everything else — layouts, styles, navigation, search —
|
|
108
|
+
is provided by the remote theme.
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
|
114
|
+
</section>
|
|
115
|
+
|
|
116
|
+
<!-- ============================================================ -->
|
|
117
|
+
<!-- MINIMAL STARTER INSTRUCTIONS -->
|
|
118
|
+
<!-- ============================================================ -->
|
|
119
|
+
<section id="minimal-starter" class="container-lg py-5">
|
|
120
|
+
<div class="row justify-content-center">
|
|
121
|
+
<div class="col-lg-10">
|
|
122
|
+
<h2 class="mb-3"><i class="bi bi-list-check"></i> The 3-file starter</h2>
|
|
123
|
+
<p class="text-body-secondary">
|
|
124
|
+
The only files you need in your repository for GitHub Pages to
|
|
125
|
+
render a full site through the <code>bamr87/zer0-mistakes</code>
|
|
126
|
+
remote theme.
|
|
127
|
+
</p>
|
|
128
|
+
|
|
129
|
+
<div class="accordion mt-4" id="starterAccordion">
|
|
130
|
+
|
|
131
|
+
<!-- _config.yml -->
|
|
132
|
+
<div class="accordion-item">
|
|
133
|
+
<h3 class="accordion-header">
|
|
134
|
+
<button class="accordion-button" type="button"
|
|
135
|
+
data-bs-toggle="collapse" data-bs-target="#starter-config">
|
|
136
|
+
<i class="bi bi-1-circle me-2"></i>
|
|
137
|
+
<code>_config.yml</code>
|
|
138
|
+
<span class="text-body-secondary ms-2">— site configuration</span>
|
|
139
|
+
</button>
|
|
140
|
+
</h3>
|
|
141
|
+
<div id="starter-config" class="accordion-collapse collapse show"
|
|
142
|
+
data-bs-parent="#starterAccordion">
|
|
143
|
+
<div class="accordion-body">
|
|
144
|
+
<p>The minimum viable configuration:</p>
|
|
145
|
+
{% highlight yaml %}
|
|
146
|
+
# _config.yml
|
|
147
|
+
title: "My Site"
|
|
148
|
+
description: "A site rendered by the zer0-mistakes remote theme."
|
|
149
|
+
url: ""
|
|
150
|
+
baseurl: ""
|
|
151
|
+
|
|
152
|
+
# Pull layouts/includes/assets from the published theme
|
|
153
|
+
remote_theme: bamr87/zer0-mistakes
|
|
154
|
+
|
|
155
|
+
# GitHub Pages whitelisted plugins
|
|
156
|
+
plugins:
|
|
157
|
+
- jekyll-remote-theme
|
|
158
|
+
- jekyll-feed
|
|
159
|
+
- jekyll-sitemap
|
|
160
|
+
- jekyll-seo-tag
|
|
161
|
+
|
|
162
|
+
# Hide this welcome screen once you're configured
|
|
163
|
+
site_configured: true
|
|
164
|
+
{% endhighlight %}
|
|
165
|
+
<p class="small text-body-secondary mb-0">
|
|
166
|
+
Use the wizard below to generate a richer file with
|
|
167
|
+
collections, analytics, and social links.
|
|
168
|
+
</p>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
</div>
|
|
172
|
+
|
|
173
|
+
<!-- Gemfile -->
|
|
174
|
+
<div class="accordion-item">
|
|
175
|
+
<h3 class="accordion-header">
|
|
176
|
+
<button class="accordion-button collapsed" type="button"
|
|
177
|
+
data-bs-toggle="collapse" data-bs-target="#starter-gemfile">
|
|
178
|
+
<i class="bi bi-2-circle me-2"></i>
|
|
179
|
+
<code>Gemfile</code>
|
|
180
|
+
<span class="text-body-secondary ms-2">— Ruby dependencies</span>
|
|
181
|
+
</button>
|
|
182
|
+
</h3>
|
|
183
|
+
<div id="starter-gemfile" class="accordion-collapse collapse"
|
|
184
|
+
data-bs-parent="#starterAccordion">
|
|
185
|
+
<div class="accordion-body">
|
|
186
|
+
<p>Required when building locally; GitHub Pages installs these for you in CI.</p>
|
|
187
|
+
{% highlight ruby %}
|
|
188
|
+
# Gemfile
|
|
189
|
+
source "https://rubygems.org"
|
|
190
|
+
|
|
191
|
+
gem "github-pages", group: :jekyll_plugins
|
|
192
|
+
gem "jekyll-remote-theme"
|
|
193
|
+
gem "webrick", "~> 1.7"
|
|
194
|
+
{% endhighlight %}
|
|
195
|
+
</div>
|
|
196
|
+
</div>
|
|
197
|
+
</div>
|
|
198
|
+
|
|
199
|
+
<!-- index.md -->
|
|
200
|
+
<div class="accordion-item">
|
|
201
|
+
<h3 class="accordion-header">
|
|
202
|
+
<button class="accordion-button collapsed" type="button"
|
|
203
|
+
data-bs-toggle="collapse" data-bs-target="#starter-index">
|
|
204
|
+
<i class="bi bi-3-circle me-2"></i>
|
|
205
|
+
<code>index.md</code>
|
|
206
|
+
<span class="text-body-secondary ms-2">— your home page</span>
|
|
207
|
+
</button>
|
|
208
|
+
</h3>
|
|
209
|
+
<div id="starter-index" class="accordion-collapse collapse"
|
|
210
|
+
data-bs-parent="#starterAccordion">
|
|
211
|
+
<div class="accordion-body">
|
|
212
|
+
<p>
|
|
213
|
+
While the site is unconfigured, <code>layout: welcome</code>
|
|
214
|
+
shows this onboarding screen. Once you set
|
|
215
|
+
<code>site_configured: true</code> in <code>_config.yml</code>,
|
|
216
|
+
the same file renders your own home-page content.
|
|
217
|
+
</p>
|
|
218
|
+
{% highlight markdown %}
|
|
219
|
+
---
|
|
220
|
+
layout: welcome
|
|
221
|
+
title: Home
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
# Welcome to my site
|
|
225
|
+
|
|
226
|
+
Replace this with your own content. The setup wizard
|
|
227
|
+
will disappear automatically once `site_configured: true`
|
|
228
|
+
is set in `_config.yml`.
|
|
229
|
+
{% endhighlight %}
|
|
230
|
+
</div>
|
|
231
|
+
</div>
|
|
232
|
+
</div>
|
|
233
|
+
|
|
234
|
+
</div><!-- /accordion -->
|
|
235
|
+
|
|
236
|
+
<div class="alert alert-info d-flex align-items-start mt-4" role="alert">
|
|
237
|
+
<i class="bi bi-info-circle-fill me-2 mt-1"></i>
|
|
238
|
+
<div>
|
|
239
|
+
<strong>Local development?</strong>
|
|
240
|
+
Run <code>bundle install && bundle exec jekyll serve</code>
|
|
241
|
+
(or <code>docker compose up</code> if you have a
|
|
242
|
+
<code>docker-compose.yml</code>). Browse to
|
|
243
|
+
<a href="http://localhost:4000/">http://localhost:4000/</a>.
|
|
244
|
+
</div>
|
|
245
|
+
</div>
|
|
246
|
+
</div>
|
|
247
|
+
</div>
|
|
248
|
+
</section>
|
|
249
|
+
|
|
250
|
+
<!-- ============================================================ -->
|
|
251
|
+
<!-- SETUP WIZARD -->
|
|
252
|
+
<!-- ============================================================ -->
|
|
253
|
+
<section id="setup-wizard" class="bg-body-tertiary border-top py-5">
|
|
254
|
+
{% include setup/wizard.html %}
|
|
255
|
+
</section>
|
|
256
|
+
|
|
257
|
+
<!-- ============================================================ -->
|
|
258
|
+
<!-- NEXT STEPS / RESOURCES -->
|
|
259
|
+
<!-- ============================================================ -->
|
|
260
|
+
<section class="container-lg py-5">
|
|
261
|
+
<h2 class="mb-4"><i class="bi bi-signpost-2"></i> Next steps</h2>
|
|
262
|
+
<div class="row g-3">
|
|
263
|
+
<div class="col-md-4">
|
|
264
|
+
<div class="card h-100">
|
|
265
|
+
<div class="card-body">
|
|
266
|
+
<h5 class="card-title">
|
|
267
|
+
<i class="bi bi-pencil-square text-primary"></i> Add content
|
|
268
|
+
</h5>
|
|
269
|
+
<p class="card-text small">
|
|
270
|
+
Create a <code>pages/</code> folder with collections like
|
|
271
|
+
<code>_posts/</code>, <code>_docs/</code>, or
|
|
272
|
+
<code>_about/</code>. Enable them in <code>_config.yml</code>.
|
|
273
|
+
</p>
|
|
274
|
+
<a class="btn btn-sm btn-outline-primary"
|
|
275
|
+
href="https://github.com/bamr87/zer0-mistakes/blob/main/README.md#-quick-start"
|
|
276
|
+
target="_blank" rel="noopener">
|
|
277
|
+
Content guide <i class="bi bi-box-arrow-up-right"></i>
|
|
278
|
+
</a>
|
|
279
|
+
</div>
|
|
280
|
+
</div>
|
|
281
|
+
</div>
|
|
282
|
+
<div class="col-md-4">
|
|
283
|
+
<div class="card h-100">
|
|
284
|
+
<div class="card-body">
|
|
285
|
+
<h5 class="card-title">
|
|
286
|
+
<i class="bi bi-palette text-success"></i> Customise styles
|
|
287
|
+
</h5>
|
|
288
|
+
<p class="card-text small">
|
|
289
|
+
Drop an <code>assets/css/user-overrides.css</code> file in
|
|
290
|
+
your repo to override theme styles without forking.
|
|
291
|
+
</p>
|
|
292
|
+
<a class="btn btn-sm btn-outline-success"
|
|
293
|
+
href="https://github.com/bamr87/zer0-mistakes/blob/main/README.md#-key-features"
|
|
294
|
+
target="_blank" rel="noopener">
|
|
295
|
+
Customisation <i class="bi bi-box-arrow-up-right"></i>
|
|
296
|
+
</a>
|
|
297
|
+
</div>
|
|
298
|
+
</div>
|
|
299
|
+
</div>
|
|
300
|
+
<div class="col-md-4">
|
|
301
|
+
<div class="card h-100">
|
|
302
|
+
<div class="card-body">
|
|
303
|
+
<h5 class="card-title">
|
|
304
|
+
<i class="bi bi-github text-body"></i> Source & issues
|
|
305
|
+
</h5>
|
|
306
|
+
<p class="card-text small">
|
|
307
|
+
File issues, submit PRs, or fork the theme on GitHub.
|
|
308
|
+
Contributions welcome.
|
|
309
|
+
</p>
|
|
310
|
+
<a class="btn btn-sm btn-outline-dark"
|
|
311
|
+
href="https://github.com/bamr87/zer0-mistakes"
|
|
312
|
+
target="_blank" rel="noopener">
|
|
313
|
+
Repository <i class="bi bi-box-arrow-up-right"></i>
|
|
314
|
+
</a>
|
|
315
|
+
</div>
|
|
316
|
+
</div>
|
|
317
|
+
</div>
|
|
318
|
+
</div>
|
|
319
|
+
</section>
|
|
320
|
+
|
|
321
|
+
{% else %}
|
|
322
|
+
|
|
323
|
+
<!-- ============================================================ -->
|
|
324
|
+
<!-- CONFIGURED SITE — render the user's content -->
|
|
325
|
+
<!-- ============================================================ -->
|
|
326
|
+
<div class="container-lg py-4">
|
|
327
|
+
<div class="row justify-content-center">
|
|
328
|
+
<div class="col-lg-10">
|
|
329
|
+
{% if page.title %}
|
|
330
|
+
<h1 class="mb-3">{{ page.title }}</h1>
|
|
331
|
+
{% endif %}
|
|
332
|
+
{{ content }}
|
|
333
|
+
</div>
|
|
334
|
+
</div>
|
|
335
|
+
</div>
|
|
336
|
+
|
|
337
|
+
{% endif %}
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jekyll-theme-zer0
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.1
|
|
4
|
+
version: 1.2.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Amr Abdel
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-04-
|
|
11
|
+
date: 2026-04-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: jekyll
|
|
@@ -193,6 +193,7 @@ files:
|
|
|
193
193
|
- _layouts/sitemap-collection.html
|
|
194
194
|
- _layouts/stats.html
|
|
195
195
|
- _layouts/tag.html
|
|
196
|
+
- _layouts/welcome.html
|
|
196
197
|
- _plugins/preview_image_generator.rb
|
|
197
198
|
- _plugins/theme_version.rb
|
|
198
199
|
- _sass/core/_docs-layout.scss
|