Skip to content

Added additional blog improvements#912

Open
n-boshnakov wants to merge 2 commits intogardener:masterfrom
n-boshnakov:additional-blog-improvements
Open

Added additional blog improvements#912
n-boshnakov wants to merge 2 commits intogardener:masterfrom
n-boshnakov:additional-blog-improvements

Conversation

@n-boshnakov
Copy link
Copy Markdown
Contributor

@n-boshnakov n-boshnakov commented Mar 26, 2026

How to categorize this PR?

/kind documentation

What this PR does / why we need it:
This PR implements additional improvements to the blogs:

  • Added missing tags to new blog posts
  • Added an additional tag for year
  • Made the entire blog preview clickable
  • Added padding to each tag button to make them easier to click
  • Removed the "Read post" button from the blog preview, as it will be no longer needed
  • Cleaned up the Blogs main page by removing the left side navigation
  • Hovering over tags highlights them
  • On the blog page, moved the tags and author to the right side navbar
  • Removed the "Next page" from the blogs preview page

Which issue(s) this PR fixes:
Fixes #907

Special notes for your reviewer:
Main Blogs page:
image

Individual Blogs:
image

Summary by CodeRabbit

  • New Features

    • Added author and year filtering to blog pages in addition to existing tag filters
    • Added interactive author and year filter buttons for refined post browsing
  • Style

    • Refined blog post metadata display layout and spacing
    • Enhanced blog index page design with improved visual presentation

@n-boshnakov n-boshnakov requested a review from a team as a code owner March 26, 2026 14:07
@gardener-prow
Copy link
Copy Markdown

gardener-prow bot commented Mar 26, 2026

@n-boshnakov: The label(s) kind/documentation cannot be applied, because the repository doesn't have them.

Details

In response to this:

How to categorize this PR?

/kind documentation

What this PR does / why we need it:
This PR implements additional improvements to the blogs:

  • Added missing tags to new blog posts
  • Added an additional tag for year
  • Made the entire blog preview clickable
  • Added padding to each tag button to make them easier to click
  • Removed the "Read post" button from the blog preview, as it will be no longer needed
  • Hovering over tags highlights them
  • On the blog page, moved the tags and author to the right side navbar
  • Removed the "Next page" from the blogs preview page

Which issue(s) this PR fixes:
Fixes #907

Special notes for your reviewer:

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@netlify
Copy link
Copy Markdown

netlify bot commented Mar 26, 2026

Deploy Preview for gardener-docs ready!

Name Link
🔨 Latest commit b8c691d
🔍 Latest deploy log https://app.netlify.com/projects/gardener-docs/deploys/69c6591f2ebbba0008a95fd8
😎 Deploy Preview https://deploy-preview-912--gardener-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
1 paths audited
Performance: 66 (no change from production)
Accessibility: 97 (no change from production)
Best Practices: 92 (no change from production)
SEO: 98 (no change from production)
PWA: 90 (no change from production)
View the detailed breakdown and full score reports

To edit notification comments on pull requests, go to your Netlify project configuration.

@gardener-prow gardener-prow bot added do-not-merge/needs-kind Indicates a PR lacks a `kind/foo` label and requires one. size/L Denotes a PR that changes 100-499 lines, ignoring generated files. labels Mar 26, 2026
@gardener-prow
Copy link
Copy Markdown

gardener-prow bot commented Mar 26, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign msohn for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@gardener-prow gardener-prow bot added the cla: yes Indicates the PR's author has signed the cla-assistant.io CLA. label Mar 26, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 26, 2026

📝 Walkthrough

Walkthrough

Adds multi-parameter blog filtering (tags, authors, years), moves blog meta into an aside slot, adjusts blog meta styling, disables outlines for blog pages, and updates blog index/post frontmatter and index aggregation.

Changes

Cohort / File(s) Summary
VitePress config
\.vitepress/config.mts
Set pageData.frontmatter.outline = false early for pages with relativePath starting with blog/ when frontmatter.outline is undefined.
Blog index UI & filtering
\.vitepress/theme/components/BlogIndex.vue
Replaced tag-only filtering with unified multi-parameter filters: parses tag/tags, author, and year query params (multi-value, trimming, normalization, 4-digit year validation); adds visibleAuthors/year per-post derivation; updates filteredPosts to require selected tags/authors/years; adds author and year toggle buttons; makes entire card clickable via absolute overlay link; updates filter sync and summary UI; styling/layout adjustments.
Blog post meta styling
\.vitepress/theme/components/BlogPostMeta.vue
Reworked spacing and layout: vertical column alignment, adjusted margins/padding/gap, border/background and reduced date font size.
Theme slot layout
\.vitepress/theme/index.ts
Moved BlogPostMeta from doc-before to a new aside-top slot; retained TaxonomyIndex in doc-before.
Blog content & indexes
website/blog/index.md, website/blog/2026/03/_index.md, website/blog/2026/03/03-18-say-goodbye-to-provider-extensions-introducing-the-new-remote-setup.md
Updated frontmatter: disabled sidebar/navigation on main blog index; added blog-list layout and aggregate: true for March index; added tags: [feature-announcement, extensions] to the post.

Sequence Diagram(s)

sequenceDiagram
    participant User as User
    participant BI as BlogIndex Component
    participant URL as URL / Query State
    participant DS as Post Data Source

    User->>BI: Open blog page / interact (click author/year/tag)
    BI->>URL: Read query params (`tag`/`tags`,`author`,`year`)
    URL-->>BI: Return parsed filter values
    BI->>DS: Derive post fields (visibleAuthors, year) and request filter
    DS-->>BI: Return filtered post list
    BI->>URL: Sync selected filters back to query params
    BI->>User: Render filtered posts and updated UI
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested labels

kind/enhancement

Suggested reviewers

  • oliver-goetz

Poem

🐰
I hopped through tags, then years and names,
Made cards that glow and filters tame.
Meta moved to the sidebar light,
Click the card — the whole post's in sight! 🥕

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The title 'Added additional blog improvements' is related to the changes but is overly vague and generic. It lacks specificity about the main improvements made. Consider using a more specific title that highlights the primary changes, such as 'Enhance blog UX with multi-parameter filtering, clickable cards, and sidebar reorganization' or similar.
✅ Passed checks (4 passed)
Check name Status Explanation
Description check ✅ Passed The PR description adequately covers the main changes and includes the required /kind categorization, clear explanation of improvements, issue reference, and visual examples. All essential template sections are completed.
Linked Issues check ✅ Passed The PR implements all major requirements from issue #907: multi-parameter filtering (tags/authors/years), clickable card previews, tag button improvements, removed 'Read post' button, author filtering, and sidebar reorganization. Left sidebar removal and metadata relocation to right navbar are demonstrated in provided screenshots.
Out of Scope Changes check ✅ Passed All changes are directly aligned with issue #907 objectives: BlogIndex.vue implements multi-filter logic, BlogPostMeta.vue adjusts post metadata layout, theme changes relocate components, blog frontmatter adds required fields and tags, and config sets outline flags for blog pages.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.vitepress/theme/components/BlogIndex.vue (1)

687-701: ⚠️ Potential issue | 🟠 Major

Use a theme token for the author chip background.

These pills still inherit theme text colors, so hard-coding #ffffff makes the inactive state unreadable in dark mode. Use a theme surface token here instead so the default state follows both palettes.

🎨 Proposed fix
 .author-filter {
   display: flex;
   align-items: center;
   gap: 0.4rem;
   height: 100%;
   color: var(--vp-c-text-1);
   box-sizing: border-box;
   border: 1px solid var(--vp-c-divider);
   border-radius: 999px;
-  background: `#ffffff`;
+  background: var(--vp-c-bg);
   padding: 0.2rem 0.6rem 0.2rem 0.2rem;
   font-family: inherit;
   position: relative;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.vitepress/theme/components/BlogIndex.vue around lines 687 - 701, The
.author-filter CSS uses a hard-coded white background (`#ffffff`) which breaks
dark theme readability; replace that literal with the theme surface token (e.g.
use var(--vp-c-surface) or the project's equivalent) in the .author-filter rule
so the chip follows light/dark palettes, keeping the rest of the properties
(color, border, etc.) unchanged and ensuring the inactive state remains readable
in dark mode.
🧹 Nitpick comments (1)
.vitepress/config.mts (1)

24-26: Prefer a default here instead of a hard override.

This makes any explicit outline setting on a blog page unreachable. If a specific page needs an outline later, transformPageData will still force it off.

♻️ Proposed refactor
-    if (pageData.relativePath.startsWith('blog/')) {
+    if (pageData.relativePath.startsWith('blog/') && pageData.frontmatter.outline === undefined) {
       pageData.frontmatter.outline = false
     }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.vitepress/config.mts around lines 24 - 26, The blog pages block in
transformPageData currently hard-overwrites pageData.frontmatter.outline
unconditionally; update it so you only set a default when no explicit
frontmatter outline was provided: check that pageData.frontmatter exists and
that pageData.frontmatter.outline is undefined (or absent) before assigning
false for pages where pageData.relativePath.startsWith('blog/'), leaving any
explicit outline values intact.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.vitepress/theme/components/BlogPostMeta.vue:
- Around line 150-161: The .blog-post-meta CSS rule causes the element to exceed
its container because padding and border are added to width: 100% under the
default content-box model; update the .blog-post-meta rule to use box-sizing:
border-box so padding and border are included in the declared width (add
box-sizing: border-box to the .blog-post-meta selector).

In `@website/blog/2026/03/_index.md`:
- Around line 1-5: The monthly archive frontmatter is missing the navigation
flags used on the main blog index, causing docs navigation chrome to appear;
update the frontmatter block in website/blog/2026/03/_index.md to include the
same navigation-related flags used in website/blog/index.md (copy the
navigation/hide/sidebar/pager flags from that file) so the archive uses the same
blog-list rendering without the docs sidebar/pager UI.

---

Outside diff comments:
In @.vitepress/theme/components/BlogIndex.vue:
- Around line 687-701: The .author-filter CSS uses a hard-coded white background
(`#ffffff`) which breaks dark theme readability; replace that literal with the
theme surface token (e.g. use var(--vp-c-surface) or the project's equivalent)
in the .author-filter rule so the chip follows light/dark palettes, keeping the
rest of the properties (color, border, etc.) unchanged and ensuring the inactive
state remains readable in dark mode.

---

Nitpick comments:
In @.vitepress/config.mts:
- Around line 24-26: The blog pages block in transformPageData currently
hard-overwrites pageData.frontmatter.outline unconditionally; update it so you
only set a default when no explicit frontmatter outline was provided: check that
pageData.frontmatter exists and that pageData.frontmatter.outline is undefined
(or absent) before assigning false for pages where
pageData.relativePath.startsWith('blog/'), leaving any explicit outline values
intact.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 877329f9-c13f-4b1f-9faa-feff5dd5995a

📥 Commits

Reviewing files that changed from the base of the PR and between 1d55eac and 33f4da7.

📒 Files selected for processing (7)
  • .vitepress/config.mts
  • .vitepress/theme/components/BlogIndex.vue
  • .vitepress/theme/components/BlogPostMeta.vue
  • .vitepress/theme/index.ts
  • website/blog/2026/03/03-18-say-goodbye-to-provider-extensions-introducing-the-new-remote-setup.md
  • website/blog/2026/03/_index.md
  • website/blog/index.md

Comment on lines +1 to +5
---
title: March
layout: blog-list
aggregate: true
--- No newline at end of file
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Mirror the preview-page navigation flags on archive indexes.

This page uses the same blog-list layout as website/blog/index.md, but without the same frontmatter flags it will still render docs navigation chrome on the monthly archive. That brings back the sidebar / pager UI this PR is trying to remove from blog listing pages.

🧭 Proposed fix
 ---
 title: March
 layout: blog-list
 aggregate: true
+sidebar: false
+prev: false
+next: false
 ---
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
---
title: March
layout: blog-list
aggregate: true
---
---
title: March
layout: blog-list
aggregate: true
sidebar: false
prev: false
next: false
---
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@website/blog/2026/03/_index.md` around lines 1 - 5, The monthly archive
frontmatter is missing the navigation flags used on the main blog index, causing
docs navigation chrome to appear; update the frontmatter block in
website/blog/2026/03/_index.md to include the same navigation-related flags used
in website/blog/index.md (copy the navigation/hide/sidebar/pager flags from that
file) so the archive uses the same blog-list rendering without the docs
sidebar/pager UI.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
.vitepress/theme/components/BlogIndex.vue (1)

206-210: Verify the multi-author filter semantics.

every(selectedAuthor => ...) means picking two authors only keeps posts that list both authors. If this facet is supposed to behave like a standard same-group filter, this should be some(...) instead. Please confirm the intended UX before shipping.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.vitepress/theme/components/BlogIndex.vue around lines 206 - 210, The
multi-author filter currently uses normalizedSelectedAuthors.value.every(...) in
matchesSelectedAuthors, which requires a post to contain all selected authors;
change the predicate to normalizedSelectedAuthors.value.some(...) if the
intended UX is to include posts that match any selected author (i.e.,
same-group/OR semantics). Update the logic around matchesSelectedAuthors and
keep references to normalizedSelectedAuthors, selectedAuthor, and
post.visibleAuthors consistent; if AND semantics were intended, add a comment
clarifying that behavior instead of changing the code.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.vitepress/theme/components/BlogIndex.vue:
- Around line 171-176: The year is computed via extractPostYear(post.date) but
is not included in the tag data structures or matching logic, so typing or
linking to a year won't match posts; update the code that builds post tag info
(the .map that sets visibleTags and visibleAuthors) to fold the computed year
into the tag list (e.g., include post.year in visibleTags and in the source
array used for datalist options), and also update the tag-filtering/matching
logic that currently only checks post.tags to also check post.year (or the
augmented tag array) so both the UI pill and tag search/filtering use the same
unified tag set (refer to visibleTags, extractPostYear, and the
tag-matching/filtering function).
- Around line 541-544: The .card-link focus ring is being clipped by
.blog-card's overflow:hidden and border-radius on small viewports; update the
focus treatment for .card-link (or move it to the non-clipped ancestor
.blog-card) to avoid clipping by using an inset visual (e.g., a box-shadow focus
style or negative outline-offset) or apply the focus styling to .blog-card
instead of .card-link so the visible focus is not clipped; ensure you change the
CSS selectors referencing .card-link:focus-visible and/or .blog-card to
implement the inset box-shadow (or move the focusable attribute) so keyboard
users retain a full visible focus state on mobile.

---

Nitpick comments:
In @.vitepress/theme/components/BlogIndex.vue:
- Around line 206-210: The multi-author filter currently uses
normalizedSelectedAuthors.value.every(...) in matchesSelectedAuthors, which
requires a post to contain all selected authors; change the predicate to
normalizedSelectedAuthors.value.some(...) if the intended UX is to include posts
that match any selected author (i.e., same-group/OR semantics). Update the logic
around matchesSelectedAuthors and keep references to normalizedSelectedAuthors,
selectedAuthor, and post.visibleAuthors consistent; if AND semantics were
intended, add a comment clarifying that behavior instead of changing the code.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c3aa1a33-5ee9-4820-9d1d-fc2bdb418c3e

📥 Commits

Reviewing files that changed from the base of the PR and between 33f4da7 and b8c691d.

📒 Files selected for processing (3)
  • .vitepress/config.mts
  • .vitepress/theme/components/BlogIndex.vue
  • .vitepress/theme/components/BlogPostMeta.vue
🚧 Files skipped from review as they are similar to previous changes (2)
  • .vitepress/config.mts
  • .vitepress/theme/components/BlogPostMeta.vue

Comment on lines 171 to 176
.map(post => ({
...post,
visibleTags: visibleTags(post.tags)
visibleTags: visibleTags(post.tags),
visibleAuthors: post.authors.map(toVisibleAuthor),
year: extractPostYear(post.date)
}))
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Year looks like a tag, but the tag filter never matches it.

The new year pill is rendered in the same tag list, yet visibleTags, the datalist options, and the tag-matching logic only look at post.tags. Typing 2026 into the tag box or linking to ?tag=2026 therefore won't find these posts even though the UI presents the year as a tag. Either fold post.year into the tag facet or surface it as a clearly separate filter.

Also applies to: 179-192, 198-215

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.vitepress/theme/components/BlogIndex.vue around lines 171 - 176, The year
is computed via extractPostYear(post.date) but is not included in the tag data
structures or matching logic, so typing or linking to a year won't match posts;
update the code that builds post tag info (the .map that sets visibleTags and
visibleAuthors) to fold the computed year into the tag list (e.g., include
post.year in visibleTags and in the source array used for datalist options), and
also update the tag-filtering/matching logic that currently only checks
post.tags to also check post.year (or the augmented tag array) so both the UI
pill and tag search/filtering use the same unified tag set (refer to
visibleTags, extractPostYear, and the tag-matching/filtering function).

Comment on lines +541 to +544
.card-link:focus-visible {
outline: 2px solid var(--vp-c-brand-1);
outline-offset: 3px;
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, let's locate and inspect the BlogIndex.vue file
fd "BlogIndex.vue" --type f

Repository: gardener/documentation

Length of output: 48


🏁 Script executed:

# Check if the file exists and read its content
ls -la .vitepress/theme/components/ 2>/dev/null | head -20

Repository: gardener/documentation

Length of output: 842


🏁 Script executed:

# Read the BlogIndex.vue file around lines 541-544 with context
sed -n '530,560p' .vitepress/theme/components/BlogIndex.vue | cat -n

Repository: gardener/documentation

Length of output: 850


🏁 Script executed:

# Search for .blog-card styles in the file
sed -n '1,600p' .vitepress/theme/components/BlogIndex.vue | grep -n -A 10 "\.blog-card\s*{" | head -50

Repository: gardener/documentation

Length of output: 367


🏁 Script executed:

# Get full .blog-card rule
sed -n '518,550p' .vitepress/theme/components/BlogIndex.vue | cat -n

Repository: gardener/documentation

Length of output: 1001


🏁 Script executed:

# Search for overflow in the entire BlogIndex.vue file
grep -n "overflow" .vitepress/theme/components/BlogIndex.vue

Repository: gardener/documentation

Length of output: 228


🏁 Script executed:

# Check the context around line 802
sed -n '795,810p' .vitepress/theme/components/BlogIndex.vue | cat -n

Repository: gardener/documentation

Length of output: 402


🏁 Script executed:

# Search backwards for the media query
sed -n '780,805p' .vitepress/theme/components/BlogIndex.vue | cat -n

Repository: gardener/documentation

Length of output: 652


🏁 Script executed:

# Search for all focus-related styles in the file
grep -n "focus" .vitepress/theme/components/BlogIndex.vue

Repository: gardener/documentation

Length of output: 236


The card-link focus ring is clipped on mobile viewports.

On screens ≤640px, .blog-card has overflow: hidden, which clips the outline with outline-offset: 3px. Keyboard users will lose the visible focus state on the primary link. The border-radius also contributes to clipping. Use an inset focus treatment (box-shadow, negative outline-offset, or outline-width only), or move focus styling to a non-clipped ancestor.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.vitepress/theme/components/BlogIndex.vue around lines 541 - 544, The
.card-link focus ring is being clipped by .blog-card's overflow:hidden and
border-radius on small viewports; update the focus treatment for .card-link (or
move it to the non-clipped ancestor .blog-card) to avoid clipping by using an
inset visual (e.g., a box-shadow focus style or negative outline-offset) or
apply the focus styling to .blog-card instead of .card-link so the visible focus
is not clipped; ensure you change the CSS selectors referencing
.card-link:focus-visible and/or .blog-card to implement the inset box-shadow (or
move the focusable attribute) so keyboard users retain a full visible focus
state on mobile.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla: yes Indicates the PR's author has signed the cla-assistant.io CLA. do-not-merge/needs-kind Indicates a PR lacks a `kind/foo` label and requires one. size/L Denotes a PR that changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Further Blog Improvements

1 participant