jekyll-theme-zer0 0.20.2 → 0.20.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 19c84811dcc56b5cb437c118f6a66ce6895db10702f4011be545003bc9d6f134
4
- data.tar.gz: 61f3707a93a6ac230276cb64fb007c7e2531fa23e940f9039db05fab061b99ee
3
+ metadata.gz: 9a016d0fb4fa27f203571798256f468d7a19a71100ad551bd69e799c6b9797f3
4
+ data.tar.gz: 458cc17ae4e8ea22eea496b213d4e4e6c496c128600ce1010d9f0d2f26bd9c45
5
5
  SHA512:
6
- metadata.gz: 87b0384c193e4f0ae8c75268e7a784f3c0bb90e99fdfdb4113edee8425682eb59cb9888ad8d1c28d77e4ec62c6d00e81e1f3f01d9a0e1dce278011f48cd6dfbb
7
- data.tar.gz: f5bff135bbf740f16cbc0eb487568d633bffe37e5cdd5b23e33626cba98f091784c10036eababf6428f516c2618ee3956b677d8b9fde944b608d1d91947a3123
6
+ metadata.gz: 0f36f8cb07f2d8d426d6b8e9f441c38e8dbe82a07b502f1117f52ed97a9affc180e135c5df47b0c3e23f06fa8f3489395c84d30dc94882d3b9f735dd1645e952
7
+ data.tar.gz: 0ef53bfa08a6fbc498c25e6d4776fed5b343e2a49e9d8d70cfea2361f1a62dc62fa052dc6ccf27bd06356a8bdd7d06896223cfdd4a9aa3795ecfa80fe84b664d
data/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.20.3] - 2026-02-01
4
+
5
+ ### Added
6
+ - **Notes Collection**: 5 new developer reference notes
7
+ - `bash-shortcuts.md` - Essential terminal keyboard shortcuts
8
+ - `docker-commands.md` - Docker and Docker Compose command reference
9
+ - `git-cheatsheet.md` - Git commands quick reference
10
+ - `jekyll-front-matter.md` - Jekyll front matter variables guide
11
+ - `markdown-tips.md` - Advanced Markdown formatting tricks
12
+ - **Python Statistics Notebook**: New `python-statistics.ipynb` Jupyter notebook with scipy, pandas, and statistical analysis examples
13
+ - **Enhanced Notes page**: Added tag filtering and improved card-based layout
14
+ - **Enhanced Notebooks page**: Added difficulty filtering and improved card-based layout with download links
15
+
16
+ ### Changed
17
+ - **Layout Standardization**: Updated all posts from `layout: journals` to `layout: article` for consistency
18
+ - **Section Index Pages**: Updated category index pages to use `layout: section` with proper section_style settings
19
+ - **News URL Structure**: Changed permalinks from `/posts/` to `/news/` across all news sections
20
+ - **Removed**: Deleted unused `pages/blog.md` page
21
+
22
+ ### Fixed
23
+ - **Layout consistency**: Standardized layouts across Business, Development, Science, Technology, Tutorial, and World news sections
24
+
3
25
  ## [0.20.2] - 2026-01-30
4
26
 
5
27
  ### Added
@@ -14,17 +14,49 @@
14
14
  - title: GitHub Setup
15
15
  url: /quickstart/github-setup/
16
16
 
17
- - title: Blog
18
- icon: bi-journal-text
19
- url: /blog/
17
+ - title: News
18
+ icon: bi-newspaper
19
+ url: /news/
20
20
  children:
21
- - title: All Posts
22
- url: /posts/
21
+ - title: All News
22
+ url: /news/
23
23
  - title: Categories
24
24
  url: /categories/
25
25
  - title: Tags
26
26
  url: /tags/
27
27
 
28
+ - title: Notes
29
+ icon: bi-journal-text
30
+ url: /notes/
31
+ children:
32
+ - title: All Notes
33
+ url: /notes/
34
+ - title: Git Cheatsheet
35
+ url: /notes/git-cheatsheet/
36
+ - title: Docker Commands
37
+ url: /notes/docker-commands/
38
+ - title: Jekyll Front Matter
39
+ url: /notes/jekyll-front-matter/
40
+ - title: Markdown Tips
41
+ url: /notes/markdown-tips/
42
+ - title: Bash Shortcuts
43
+ url: /notes/bash-shortcuts/
44
+
45
+ - title: Notebooks
46
+ icon: bi-journal-code
47
+ url: /notebooks/
48
+ children:
49
+ - title: All Notebooks
50
+ url: /notebooks/
51
+ - title: Pandas Data Analysis
52
+ url: /notebooks/pandas-data-analysis/
53
+ - title: Matplotlib Visualization
54
+ url: /notebooks/matplotlib-visualization/
55
+ - title: Python Statistics
56
+ url: /notebooks/python-statistics/
57
+ - title: API Requests
58
+ url: /notebooks/api-requests/
59
+
28
60
  - title: Docs
29
61
  icon: bi-journal-bookmark
30
62
  url: /docs/
@@ -1,34 +1,34 @@
1
- # Posts/Blog Category Navigation Configuration
2
- # Used by: Blog layout, category pages, and post navigation
3
- # Purpose: Category-based navigation for blog posts
4
- # Note: Categories match folders in pages/_posts/
1
+ # News Section Navigation Configuration
2
+ # Used by: News layout, section pages, and article navigation
3
+ # Purpose: Section-based navigation for news content
4
+ # Note: Sections match folders in pages/_posts/
5
5
 
6
6
  - title: Development
7
7
  icon: bi-code-slash
8
- url: /posts/development/
8
+ url: /news/development/
9
9
  description: "Software development, coding practices, and programming tutorials"
10
10
 
11
11
  - title: Technology
12
12
  icon: bi-cpu
13
- url: /posts/technology/
13
+ url: /news/technology/
14
14
  description: "Tech news, tools, and emerging technologies"
15
15
 
16
16
  - title: Tutorial
17
17
  icon: bi-journal-code
18
- url: /posts/tutorial/
18
+ url: /news/tutorial/
19
19
  description: "Step-by-step guides and how-to articles"
20
20
 
21
21
  - title: World
22
22
  icon: bi-globe
23
- url: /posts/world/
23
+ url: /news/world/
24
24
  description: "Global trends, remote work, and industry insights"
25
25
 
26
26
  - title: Business
27
27
  icon: bi-briefcase
28
- url: /posts/business/
28
+ url: /news/business/
29
29
  description: "Business strategies, startups, and entrepreneurship"
30
30
 
31
31
  - title: Science
32
32
  icon: bi-mortarboard
33
- url: /posts/science/
33
+ url: /news/science/
34
34
  description: "Scientific discoveries, research, and innovation"
@@ -5,7 +5,7 @@
5
5
 
6
6
  File: post-card.html
7
7
  Path: _includes/components/post-card.html
8
- Purpose: Consistent post card display across blog, category, and archive pages
8
+ Purpose: Consistent post card display across news, section, and archive pages
9
9
 
10
10
  Parameters:
11
11
  - post (required): The post object to display
@@ -13,6 +13,7 @@
13
13
  - show_excerpt (optional): Show post excerpt (default: true)
14
14
  - show_author (optional): Show author name (default: true)
15
15
  - show_reading_time (optional): Show reading time (default: true)
16
+ - show_post_type (optional): Show post_type badge (default: true)
16
17
  - card_class (optional): Additional CSS classes for the card
17
18
 
18
19
  Usage:
@@ -23,6 +24,7 @@
23
24
  Features:
24
25
  - Breaking news badge (red, top-left)
25
26
  - Featured badge (gold star, top-right)
27
+ - Post type badge (contextual colors)
26
28
  - Preview image with fallback
27
29
  - Category badge
28
30
  - Reading time calculation
@@ -33,6 +35,8 @@
33
35
  Dependencies:
34
36
  - Bootstrap 5 card components
35
37
  - Bootstrap Icons
38
+ - components/post-type-badge.html
39
+ - components/preview-image.html
36
40
  - site.public_folder for image paths
37
41
  - site.teaser for fallback image
38
42
  ===================================================================
@@ -43,6 +47,7 @@
43
47
  {% assign show_excerpt = include.show_excerpt | default: true %}
44
48
  {% assign show_author = include.show_author | default: true %}
45
49
  {% assign show_reading_time = include.show_reading_time | default: true %}
50
+ {% assign show_post_type = include.show_post_type | default: true %}
46
51
  {% assign card_class = include.card_class | default: "" %}
47
52
 
48
53
  {% comment %}
@@ -76,6 +81,13 @@
76
81
  </span>
77
82
  {% endif %}
78
83
 
84
+ <!-- Post Type Badge -->
85
+ {% if show_post_type and include.post.post_type and include.post.post_type != "standard" and include.post.post_type != "featured" and include.post.post_type != "breaking" %}
86
+ <span class="position-absolute bottom-0 start-0 m-2 z-1">
87
+ {% include components/post-type-badge.html post_type=include.post.post_type %}
88
+ </span>
89
+ {% endif %}
90
+
79
91
  <!-- Preview Image -->
80
92
  <a href="{{ include.post.url | relative_url }}" class="text-decoration-none">
81
93
  {% assign card_img = include.post.preview | default: site.teaser %}
@@ -92,7 +104,7 @@
92
104
  {% if show_category and include.post.categories.size > 0 %}
93
105
  <div class="mb-2">
94
106
  {% assign primary_category = include.post.categories | first %}
95
- <a href="{{ site.baseurl }}/posts/{{ primary_category | slugify }}/"
107
+ <a href="{{ site.baseurl }}/news/{{ primary_category | slugify }}/"
96
108
  class="badge bg-primary text-decoration-none">
97
109
  {{ primary_category }}
98
110
  </a>
@@ -0,0 +1,74 @@
1
+ <!--
2
+ ===================================================================
3
+ POST TYPE BADGE COMPONENT - Visual indicator for article types
4
+ ===================================================================
5
+
6
+ File: post-type-badge.html
7
+ Path: _includes/components/post-type-badge.html
8
+ Purpose: Display Bootstrap badge based on post_type front matter
9
+
10
+ Parameters:
11
+ - post_type (required): The type of post to display badge for
12
+
13
+ Supported post_type values:
14
+ - standard: No badge (default behavior)
15
+ - featured: Gold star badge (bg-warning)
16
+ - breaking: Red urgent badge (bg-danger)
17
+ - opinion: Gray editorial badge (bg-secondary)
18
+ - review: Blue review badge (bg-info)
19
+ - tutorial: Green learning badge (bg-success)
20
+ - listicle: Primary list badge (bg-primary)
21
+ - interview: Dark Q&A badge (bg-dark)
22
+
23
+ Usage:
24
+ {% include components/post-type-badge.html post_type=page.post_type %}
25
+ {% include components/post-type-badge.html post_type=post.post_type %}
26
+
27
+ Dependencies:
28
+ - Bootstrap 5 badge component
29
+ - Bootstrap Icons
30
+ ===================================================================
31
+ -->
32
+
33
+ {% assign type = include.post_type | default: "standard" %}
34
+
35
+ {% case type %}
36
+ {% when "featured" %}
37
+ <span class="badge bg-warning text-dark">
38
+ <i class="bi bi-star-fill me-1"></i>Featured
39
+ </span>
40
+
41
+ {% when "breaking" %}
42
+ <span class="badge bg-danger">
43
+ <i class="bi bi-lightning-fill me-1"></i>Breaking
44
+ </span>
45
+
46
+ {% when "opinion" %}
47
+ <span class="badge bg-secondary">
48
+ <i class="bi bi-pencil-square me-1"></i>Opinion
49
+ </span>
50
+
51
+ {% when "review" %}
52
+ <span class="badge bg-info text-dark">
53
+ <i class="bi bi-star-half me-1"></i>Review
54
+ </span>
55
+
56
+ {% when "tutorial" %}
57
+ <span class="badge bg-success">
58
+ <i class="bi bi-book me-1"></i>Tutorial
59
+ </span>
60
+
61
+ {% when "listicle" %}
62
+ <span class="badge bg-primary">
63
+ <i class="bi bi-list-ol me-1"></i>Listicle
64
+ </span>
65
+
66
+ {% when "interview" %}
67
+ <span class="badge bg-dark">
68
+ <i class="bi bi-mic me-1"></i>Interview
69
+ </span>
70
+
71
+ {% when "standard" %}
72
+ {% comment %} No badge for standard posts {% endcomment %}
73
+
74
+ {% endcase %}
@@ -0,0 +1,242 @@
1
+ <!--
2
+ ===================================================================
3
+ SECTION SIDEBAR - Fixed Topic Navigation
4
+ ===================================================================
5
+
6
+ File: section-sidebar.html
7
+ Path: _includes/navigation/section-sidebar.html
8
+ Purpose: Fixed sticky sidebar for section/topic navigation
9
+
10
+ Parameters:
11
+ - section_posts: Array of posts in the current section
12
+ - sub_categories: Array of unique tags/topics from section posts
13
+ - page_title: Title of the current section
14
+ - sidebar_id: Unique ID for the sidebar (default: "sectionSidebar")
15
+
16
+ Features:
17
+ - Desktop: Fixed sticky sidebar on the left
18
+ - Mobile: Offcanvas drawer
19
+ - Topic navigation with article counts
20
+ - Section statistics
21
+ - Smooth scroll to sections
22
+
23
+ Dependencies:
24
+ - Bootstrap 5 offcanvas component
25
+ - Bootstrap Icons
26
+ ===================================================================
27
+ -->
28
+
29
+ {% assign sidebar_id = include.sidebar_id | default: "sectionSidebar" %}
30
+ {% assign section_posts = include.section_posts %}
31
+ {% assign sub_categories = include.sub_categories %}
32
+ {% assign page_title = include.page_title | default: page.title %}
33
+
34
+ <!-- ================================ -->
35
+ <!-- DESKTOP SIDEBAR (Fixed Sticky) -->
36
+ <!-- ================================ -->
37
+ <aside class="section-sidebar-desktop d-none d-lg-block">
38
+ <div class="position-sticky" style="top: 80px;">
39
+
40
+ <!-- Topics Card -->
41
+ <div class="card border-0 shadow-sm">
42
+ <div class="card-header bg-primary text-white d-flex justify-content-between align-items-center">
43
+ <h5 class="mb-0">
44
+ <i class="bi bi-bookmark me-2"></i>Topics
45
+ </h5>
46
+ <span class="badge bg-light text-primary">{{ sub_categories.size }}</span>
47
+ </div>
48
+ <div class="card-body p-0">
49
+ <nav class="nav flex-column sidebar-nav">
50
+ <a class="nav-link active" href="#all-posts" data-section="all-posts">
51
+ <i class="bi bi-grid me-2"></i>
52
+ <span class="nav-text">All Articles</span>
53
+ <span class="badge bg-secondary ms-auto">{{ section_posts.size }}</span>
54
+ </a>
55
+ {% for subcat in sub_categories limit: 15 %}
56
+ {% assign subcat_posts = section_posts | where_exp: "post", "post.tags contains subcat" %}
57
+ {% if subcat_posts.size > 0 %}
58
+ <a class="nav-link" href="#{{ subcat | slugify }}" data-section="{{ subcat | slugify }}">
59
+ <i class="bi bi-tag me-2"></i>
60
+ <span class="nav-text">{{ subcat | capitalize }}</span>
61
+ <span class="badge bg-light text-dark ms-auto">{{ subcat_posts.size }}</span>
62
+ </a>
63
+ {% endif %}
64
+ {% endfor %}
65
+ </nav>
66
+ </div>
67
+ {% if sub_categories.size > 15 %}
68
+ <div class="card-footer bg-transparent">
69
+ <a href="{{ site.baseurl }}/tags/" class="btn btn-sm btn-outline-secondary w-100">
70
+ View All Tags <i class="bi bi-arrow-right ms-1"></i>
71
+ </a>
72
+ </div>
73
+ {% endif %}
74
+ </div>
75
+
76
+ <!-- Section Stats -->
77
+ <div class="card border-0 shadow-sm mt-3">
78
+ <div class="card-body">
79
+ <h6 class="text-muted mb-3">
80
+ <i class="bi bi-graph-up me-2"></i>Section Stats
81
+ </h6>
82
+ <div class="d-flex justify-content-between mb-2">
83
+ <small class="text-muted">Total Articles</small>
84
+ <strong>{{ section_posts.size }}</strong>
85
+ </div>
86
+ <div class="d-flex justify-content-between mb-2">
87
+ <small class="text-muted">Topics</small>
88
+ <strong>{{ sub_categories.size }}</strong>
89
+ </div>
90
+ {% assign featured_count = section_posts | where: "featured", true | size %}
91
+ <div class="d-flex justify-content-between">
92
+ <small class="text-muted">Featured</small>
93
+ <strong>{{ featured_count }}</strong>
94
+ </div>
95
+ </div>
96
+ </div>
97
+ </div>
98
+ </aside>
99
+
100
+ <!-- ================================ -->
101
+ <!-- MOBILE OFFCANVAS SIDEBAR -->
102
+ <!-- ================================ -->
103
+ <div class="offcanvas offcanvas-start" tabindex="-1" id="{{ sidebar_id }}" aria-labelledby="{{ sidebar_id }}Label">
104
+ <div class="offcanvas-header bg-primary text-white">
105
+ <h5 class="offcanvas-title" id="{{ sidebar_id }}Label">
106
+ <i class="bi bi-bookmark me-2"></i>{{ page_title }} Topics
107
+ </h5>
108
+ <button type="button" class="btn-close btn-close-white" data-bs-dismiss="offcanvas" aria-label="Close"></button>
109
+ </div>
110
+ <div class="offcanvas-body p-0">
111
+ <nav class="nav flex-column">
112
+ <a class="nav-link active bg-light py-3 border-bottom" href="#all-posts" data-bs-dismiss="offcanvas">
113
+ <i class="bi bi-grid me-2"></i>All Articles
114
+ <span class="badge bg-secondary float-end">{{ section_posts.size }}</span>
115
+ </a>
116
+ {% for subcat in sub_categories %}
117
+ {% assign subcat_posts = section_posts | where_exp: "post", "post.tags contains subcat" %}
118
+ {% if subcat_posts.size > 0 %}
119
+ <a class="nav-link text-body-secondary py-3 border-bottom" href="#{{ subcat | slugify }}" data-bs-dismiss="offcanvas">
120
+ <i class="bi bi-tag me-2"></i>{{ subcat | capitalize }}
121
+ <span class="badge bg-light text-dark float-end">{{ subcat_posts.size }}</span>
122
+ </a>
123
+ {% endif %}
124
+ {% endfor %}
125
+ </nav>
126
+ <div class="p-3">
127
+ <a href="{{ site.baseurl }}/tags/" class="btn btn-outline-primary w-100">
128
+ <i class="bi bi-tags me-2"></i>Browse All Tags
129
+ </a>
130
+ </div>
131
+ </div>
132
+ </div>
133
+
134
+ <!-- ================================ -->
135
+ <!-- SIDEBAR STYLES -->
136
+ <!-- ================================ -->
137
+ <style>
138
+ /* Sidebar Navigation */
139
+ .sidebar-nav .nav-link {
140
+ padding: 0.75rem 1rem;
141
+ border-left: 3px solid transparent;
142
+ transition: all 0.2s ease;
143
+ display: flex;
144
+ align-items: center;
145
+ color: var(--bs-body-color);
146
+ }
147
+
148
+ .sidebar-nav .nav-link:hover {
149
+ background-color: rgba(var(--bs-primary-rgb), 0.1);
150
+ border-left-color: var(--bs-primary);
151
+ }
152
+
153
+ .sidebar-nav .nav-link.active {
154
+ background-color: rgba(var(--bs-primary-rgb), 0.1);
155
+ border-left-color: var(--bs-primary);
156
+ font-weight: 500;
157
+ }
158
+
159
+ .sidebar-nav .nav-text {
160
+ flex-grow: 1;
161
+ white-space: nowrap;
162
+ overflow: hidden;
163
+ text-overflow: ellipsis;
164
+ }
165
+
166
+ /* Offcanvas mobile styling */
167
+ .offcanvas .nav-link {
168
+ display: flex;
169
+ align-items: center;
170
+ justify-content: space-between;
171
+ }
172
+ </style>
173
+
174
+ <!-- ================================ -->
175
+ <!-- SIDEBAR JAVASCRIPT -->
176
+ <!-- ================================ -->
177
+ <script>
178
+ (function() {
179
+ // Smooth scroll for sidebar links
180
+ function setupSmoothScroll() {
181
+ document.querySelectorAll('.sidebar-nav a[href^="#"], .offcanvas a[href^="#"]').forEach(anchor => {
182
+ anchor.addEventListener('click', function(e) {
183
+ const href = this.getAttribute('href');
184
+ if (href.length > 1) {
185
+ e.preventDefault();
186
+ const target = document.querySelector(href);
187
+ if (target) {
188
+ target.scrollIntoView({ behavior: 'smooth' });
189
+
190
+ // Update active state in sidebar
191
+ document.querySelectorAll('.sidebar-nav .nav-link').forEach(link => {
192
+ link.classList.remove('active');
193
+ });
194
+
195
+ // Find and activate the corresponding link in desktop sidebar
196
+ const desktopLink = document.querySelector(`.sidebar-nav a[href="${href}"]`);
197
+ if (desktopLink) {
198
+ desktopLink.classList.add('active');
199
+ }
200
+ }
201
+ }
202
+ });
203
+ });
204
+ }
205
+
206
+ // Intersection Observer for active section highlighting
207
+ function setupScrollSpy() {
208
+ const sections = document.querySelectorAll('section[id]');
209
+
210
+ if (sections.length === 0) return;
211
+
212
+ const observer = new IntersectionObserver((entries) => {
213
+ entries.forEach(entry => {
214
+ if (entry.isIntersecting) {
215
+ const id = entry.target.getAttribute('id');
216
+ document.querySelectorAll('.sidebar-nav .nav-link').forEach(link => {
217
+ link.classList.remove('active');
218
+ if (link.getAttribute('href') === `#${id}`) {
219
+ link.classList.add('active');
220
+ }
221
+ });
222
+ }
223
+ });
224
+ }, {
225
+ rootMargin: '-20% 0px -80% 0px'
226
+ });
227
+
228
+ sections.forEach(section => observer.observe(section));
229
+ }
230
+
231
+ // Initialize when DOM is ready
232
+ if (document.readyState === 'loading') {
233
+ document.addEventListener('DOMContentLoaded', function() {
234
+ setupSmoothScroll();
235
+ setupScrollSpy();
236
+ });
237
+ } else {
238
+ setupSmoothScroll();
239
+ setupScrollSpy();
240
+ }
241
+ })();
242
+ </script>
data/_layouts/README.md CHANGED
@@ -9,11 +9,12 @@ structure, and usage patterns.
9
9
  ```text
10
10
  root.html (base template)
11
11
  ├── default.html (sidebar layout)
12
- │ ├── journals.html (blog posts)
12
+ │ ├── article.html (single articles/posts)
13
+ │ ├── section.html (section index pages)
13
14
  │ ├── collection.html (collection pages)
14
15
  │ └── javascript.html (JavaScript demos)
15
16
  ├── home.html (homepage)
16
- ├── blog.html (blog homepage)
17
+ ├── news.html (news homepage - magazine/grid/list styles)
17
18
  ├── landing.html (landing pages)
18
19
  ├── stats.html (statistics dashboard)
19
20
  └── index.html (search pages)
@@ -34,17 +35,37 @@ root.html (base template)
34
35
 
35
36
  - **Purpose**: Standard content layout with sidebars
36
37
  - **Features**: Three-column responsive layout, navigation, table of contents
38
+ - **Features (Updated)**: Sidebar toggle via `page.sidebar: false` front matter
37
39
  - **Dependencies**: sidebar-left.html, intro.html, sidebar-right.html
38
40
  - **Usage**: Documentation pages, standard content
39
41
 
40
- ### 📝 Content Layouts
42
+ ### 📰 News & Article Layouts
41
43
 
42
- #### `journals.html`
44
+ #### `news.html`
43
45
 
44
- - **Purpose**: Blog post and article display
45
- - **Features**: Article structure, post navigation, comment system
46
- - **Dependencies**: giscus.html for comments
47
- - **Usage**: Individual blog posts and articles
46
+ - **Purpose**: News homepage with multiple display styles
47
+ - **Features**: Magazine, grid, and list layouts via `section_style` front matter
48
+ - **Front Matter**: `section_style: magazine|grid|list` (required)
49
+ - **Dependencies**: post-card.html, post-type-badge.html
50
+ - **Usage**: Main news index at /news/
51
+
52
+ #### `article.html`
53
+
54
+ - **Purpose**: Single article display with post_type variations
55
+ - **Features**: Conditional rendering based on `post_type` front matter
56
+ - **Post Types**: standard, featured, breaking, opinion, review, tutorial, listicle, interview
57
+ - **Dependencies**: post-type-badge.html, giscus.html for comments
58
+ - **Usage**: Individual news articles and blog posts
59
+
60
+ #### `section.html`
61
+
62
+ - **Purpose**: Section index pages for content categories
63
+ - **Features**: Path-based article discovery, multiple display styles
64
+ - **Front Matter**: `section_style: magazine|grid|list` (required)
65
+ - **Dependencies**: post-card.html, post-type-badge.html
66
+ - **Usage**: Section landing pages (e.g., /news/technology/, /news/business/)
67
+
68
+ ### 📝 Collection Layouts
48
69
 
49
70
  #### `collection.html`
50
71
 
@@ -53,13 +74,6 @@ root.html (base template)
53
74
  - **Dependencies**: Bootstrap card components
54
75
  - **Usage**: Portfolio, projects, grouped content
55
76
 
56
- #### `blog.html`
57
-
58
- - **Purpose**: Magazine-style blog homepage
59
- - **Features**: Featured posts, sidebar, responsive design
60
- - **Dependencies**: sidebar-categories.html, navigation data
61
- - **Usage**: Blog index and homepage
62
-
63
77
  ### 🎯 Specialized Layouts
64
78
 
65
79
  #### `home.html`
@@ -97,6 +111,45 @@ root.html (base template)
97
111
  - **Dependencies**: Custom JavaScript functions
98
112
  - **Usage**: Tutorials, interactive demos
99
113
 
114
+ ## Front Matter Reference
115
+
116
+ ### Article Layout (`article.html`)
117
+
118
+ ```yaml
119
+ layout: article
120
+ post_type: standard|featured|breaking|opinion|review|tutorial|listicle|interview
121
+ sidebar: true|false # Optional, defaults to true (false for featured/breaking)
122
+ ```
123
+
124
+ ### Section/News Layouts (`section.html`, `news.html`)
125
+
126
+ ```yaml
127
+ layout: section|news
128
+ section_style: magazine|grid|list # Required - no default
129
+ index: true # Marks page as index (excluded from listings)
130
+ ```
131
+
132
+ ### Display Styles
133
+
134
+ | Style | Description |
135
+ |-------|-------------|
136
+ | `magazine` | Hero article + grid of remaining posts |
137
+ | `grid` | 3-column card grid layout |
138
+ | `list` | Horizontal row layout with thumbnails |
139
+
140
+ ### Post Types with Badge Colors
141
+
142
+ | Type | Badge Color | Description |
143
+ |------|-------------|-------------|
144
+ | `featured` | Yellow (warning) | Featured/highlighted content |
145
+ | `breaking` | Red (danger) | Breaking news |
146
+ | `opinion` | Purple | Opinion/editorial pieces |
147
+ | `review` | Cyan (info) | Product/service reviews |
148
+ | `tutorial` | Green (success) | How-to guides |
149
+ | `listicle` | Secondary | List-style articles |
150
+ | `interview` | Dark | Interview content |
151
+ | `standard` | Light | Default article type |
152
+
100
153
  ## Comment Organization Standards
101
154
 
102
155
  Each layout file now includes: