Skip to content

Add recap of HAMi at KubeCon India 2026 with enhanced lightbox functionality#515

Merged
rootsongjc merged 4 commits into
Project-HAMi:masterfrom
rootsongjc:blog/kubecon-india-2026-recap
Jun 29, 2026
Merged

Add recap of HAMi at KubeCon India 2026 with enhanced lightbox functionality#515
rootsongjc merged 4 commits into
Project-HAMi:masterfrom
rootsongjc:blog/kubecon-india-2026-recap

Conversation

@rootsongjc

@rootsongjc rootsongjc commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Include a detailed recap of HAMi's participation at KubeCon India 2026, featuring images and demos. Enhance lightbox functionality to support captions and improve layout for a better user experience.

Summary by CodeRabbit

  • Documentation
    • Added a new recap post about HAMi’s presence at KubeCon + CloudNativeCon India 2026.
    • Added a Chinese version of the same event recap for localized readers.
  • Bug Fixes
    • Improved image lightbox caption behavior so captions show more reliably.
    • Enhanced caption detection by deriving text from nearby figure captions and image metadata.
    • Refined lightbox layout and sizing for smoother viewing, including when captions are absent.

Signed-off-by: Jimmy Song <jimmy@dynamia.ai>
…d layout

Signed-off-by: Jimmy Song <jimmy@dynamia.ai>
@netlify

netlify Bot commented Jun 29, 2026

Copy link
Copy Markdown

Deploy Preview for project-hami ready!

Name Link
🔨 Latest commit ab8c0e1
🔍 Latest deploy log https://app.netlify.com/projects/project-hami/deploys/6a423d37397c05000809c04d
😎 Deploy Preview https://deploy-preview-515--project-hami.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

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

@hami-robot hami-robot Bot added the size/L label Jun 29, 2026
@coderabbitai

coderabbitai Bot commented Jun 29, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 43b2ce0a-f954-4070-8f60-5a0f6d06ffb7

📥 Commits

Reviewing files that changed from the base of the PR and between 75d9269 and ab8c0e1.

⛔ Files ignored due to path filters (4)
  • static/img/kubecon-india-2026-recap/demo-architecture-zh.png is excluded by !**/*.png
  • static/img/kubecon-india-2026-recap/demo-architecture.png is excluded by !**/*.png
  • static/img/kubecon-india-2026-recap/hami-booth.jpg is excluded by !**/*.jpg
  • static/img/kubecon-india-2026-recap/keynote-demo.jpg is excluded by !**/*.jpg
📒 Files selected for processing (2)
  • blog/kubecon-india-2026-recap/index.md
  • i18n/zh/docusaurus-plugin-content-blog/kubecon-india-2026-recap/index.md
✅ Files skipped from review due to trivial changes (2)
  • blog/kubecon-india-2026-recap/index.md
  • i18n/zh/docusaurus-plugin-content-blog/kubecon-india-2026-recap/index.md

📝 Walkthrough

Walkthrough

Adds English and Chinese blog recaps for HAMi’s appearance at KubeCon + CloudNativeCon India 2026. Also updates the image lightbox so captions are derived from image metadata, tracked in state, and reflected in caption-aware CSS layout changes.

Changes

KubeCon India 2026 Blog Post

Layer / File(s) Summary
English recap post
blog/kubecon-india-2026-recap/index.md
New post with front-matter, event overview, keynote GPU sharing demo, two booth demos, booth conversations, acknowledgements, and a closing outlook.
Chinese recap post
i18n/zh/docusaurus-plugin-content-blog/kubecon-india-2026-recap/index.md
Chinese-language version of the same recap with matching sections and structure.

Lightbox Caption Improvements

Layer / File(s) Summary
Caption extraction and rendering logic
src/theme/utils/useImageLightbox.js
Adds caption extraction from figcaption and image attributes, a caption setter that toggles visibility and data-has-caption, and updated image/SVG open and close flows.
Caption-aware CSS layout
src/css/custom.css
Adjusts the lightbox grid rows, reduces image/SVG max-heights, and adds conditional rules for hidden captions and the data-has-caption="false" state.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

🐇 I hopped through Mumbai’s bright recap glow,
And captions learned just where to go.
One post in English, one in zh,
Lightbox hugs each image just so!
Shared GPUs twinkled in the night—
A bunny grins: “That’s website delight.”

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the two main changes: a KubeCon India 2026 recap and lightbox improvements.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/css/custom.css`:
- Around line 463-465: The no-caption override for the lightbox is only updating
max-height, so `.hami-lightbox__svg` still inherits the smaller height set
earlier and won’t actually grow; update the
`.hami-lightbox[data-has-caption="false"] .hami-lightbox__svg` rule to override
the height-based sizing used by `.hami-lightbox__svg` while keeping the image
rule on max-height. Make the change in the shared no-caption block that targets
`.hami-lightbox__image` and `.hami-lightbox__svg` so captionless SVG dialogs
expand consistently with the image variant.

In `@src/theme/utils/useImageLightbox.js`:
- Around line 137-145: The getImageCaption helper currently treats a
whitespace-only figcaption as a valid caption and stops the aria-label/title/alt
fallback chain. Update getImageCaption to trim the figcaption text before
deciding whether to return it, so empty or whitespace-only captions fall through
to the existing metadata fallbacks while keeping the setCaption flow unchanged.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 39963803-d72d-4e24-8c34-abb42721b7c0

📥 Commits

Reviewing files that changed from the base of the PR and between f69f3bf and 75d9269.

⛔ Files ignored due to path filters (6)
  • blog/kubecon-india-2026-recap/demo-architecture.png is excluded by !**/*.png
  • blog/kubecon-india-2026-recap/hami-booth.jpg is excluded by !**/*.jpg
  • blog/kubecon-india-2026-recap/keynote-demo.jpg is excluded by !**/*.jpg
  • i18n/zh/docusaurus-plugin-content-blog/kubecon-india-2026-recap/demo-architecture.png is excluded by !**/*.png
  • i18n/zh/docusaurus-plugin-content-blog/kubecon-india-2026-recap/hami-booth.jpg is excluded by !**/*.jpg
  • i18n/zh/docusaurus-plugin-content-blog/kubecon-india-2026-recap/keynote-demo.jpg is excluded by !**/*.jpg
📒 Files selected for processing (4)
  • blog/kubecon-india-2026-recap/index.md
  • i18n/zh/docusaurus-plugin-content-blog/kubecon-india-2026-recap/index.md
  • src/css/custom.css
  • src/theme/utils/useImageLightbox.js

Comment thread src/css/custom.css
Comment on lines +463 to +465
.hami-lightbox[data-has-caption="false"] .hami-lightbox__image,
.hami-lightbox[data-has-caption="false"] .hami-lightbox__svg {
max-height: min(90vh, 1100px);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Use height for the SVG no-caption override.

.hami-lightbox__svg is sized with height at Line 406, so changing only max-height here does not enlarge captionless SVG dialogs. They will stay at 82vh while images grow to 90vh.

Suggested fix
-.hami-lightbox[data-has-caption="false"] .hami-lightbox__image,
-.hami-lightbox[data-has-caption="false"] .hami-lightbox__svg {
+.hami-lightbox[data-has-caption="false"] .hami-lightbox__image {
   max-height: min(90vh, 1100px);
 }
+
+.hami-lightbox[data-has-caption="false"] .hami-lightbox__svg {
+  height: min(90vh, 1100px);
+}
📝 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
.hami-lightbox[data-has-caption="false"] .hami-lightbox__image,
.hami-lightbox[data-has-caption="false"] .hami-lightbox__svg {
max-height: min(90vh, 1100px);
.hami-lightbox[data-has-caption="false"] .hami-lightbox__image {
max-height: min(90vh, 1100px);
}
.hami-lightbox[data-has-caption="false"] .hami-lightbox__svg {
height: min(90vh, 1100px);
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/css/custom.css` around lines 463 - 465, The no-caption override for the
lightbox is only updating max-height, so `.hami-lightbox__svg` still inherits
the smaller height set earlier and won’t actually grow; update the
`.hami-lightbox[data-has-caption="false"] .hami-lightbox__svg` rule to override
the height-based sizing used by `.hami-lightbox__svg` while keeping the image
rule on max-height. Make the change in the shared no-caption block that targets
`.hami-lightbox__image` and `.hami-lightbox__svg` so captionless SVG dialogs
expand consistently with the image variant.

Comment on lines +137 to +145
function getImageCaption(image) {
const figureCaption = image.closest("figure")?.querySelector("figcaption")?.textContent;

return (
figureCaption ||
image.getAttribute("aria-label") ||
image.getAttribute("title") ||
image.getAttribute("alt") ||
""

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Trim the figcaption before fallback selection.

At Line 138, a whitespace-only figcaption short-circuits the aria-label/title/alt fallback chain. setCaption() trims later, so the dialog can open with no visible caption even though usable metadata exists.

Suggested fix
 function getImageCaption(image) {
-  const figureCaption = image.closest("figure")?.querySelector("figcaption")?.textContent;
+  const figureCaption = image
+    .closest("figure")
+    ?.querySelector("figcaption")
+    ?.textContent?.trim();

   return (
     figureCaption ||
     image.getAttribute("aria-label") ||
     image.getAttribute("title") ||
📝 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
function getImageCaption(image) {
const figureCaption = image.closest("figure")?.querySelector("figcaption")?.textContent;
return (
figureCaption ||
image.getAttribute("aria-label") ||
image.getAttribute("title") ||
image.getAttribute("alt") ||
""
function getImageCaption(image) {
const figureCaption = image
.closest("figure")
?.querySelector("figcaption")
?.textContent?.trim();
return (
figureCaption ||
image.getAttribute("aria-label") ||
image.getAttribute("title") ||
image.getAttribute("alt") ||
""
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/theme/utils/useImageLightbox.js` around lines 137 - 145, The
getImageCaption helper currently treats a whitespace-only figcaption as a valid
caption and stops the aria-label/title/alt fallback chain. Update
getImageCaption to trim the figcaption text before deciding whether to return
it, so empty or whitespace-only captions fall through to the existing metadata
fallbacks while keeping the setCaption flow unchanged.

@shivaylamba shivaylamba left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

looks good!

  1. Pending commit by Reza regarding the setup

@hami-robot

hami-robot Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: rootsongjc, shivaylamba
Once this PR has been reviewed and has the lgtm label, please assign archlitchi for approval. For more information see the Kubernetes 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

@mesutoezdil

mesutoezdil commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

existing kubecon recap stores images under /static/img/ with absolute paths. this pr uses blog co-location (./keynote-demo.jpg). both work in docusaurus, flagging for consistency.

coderabbit's points are also important

Signed-off-by: Jimmy Song <jimmy@dynamia.ai>
@rootsongjc

Copy link
Copy Markdown
Contributor Author

existing kubecon recap stores images under /static/img/ with absolute paths. this pr uses blog co-location (./keynote-demo.jpg). both work in docusaurus, flagging for consistency.

coderabbit's points are also important

you're right, I will remove the duplicated images and use the absolute path.

…6 recap

Signed-off-by: Jimmy Song <jimmy@dynamia.ai>
@mesutoezdil

Copy link
Copy Markdown
Contributor

/lgtm

@saiyam1814

Copy link
Copy Markdown
Contributor

/lgtm

@rootsongjc rootsongjc merged commit 189e685 into Project-HAMi:master Jun 29, 2026
11 of 12 checks passed
@rootsongjc rootsongjc deleted the blog/kubecon-india-2026-recap branch June 29, 2026 10:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants