Skip to content

Add event landing page component, and Kubecon Japan event - #642

Merged
rootsongjc merged 14 commits into
Project-HAMi:masterfrom
fishman:event-landing-pages
Jul 23, 2026
Merged

Add event landing page component, and Kubecon Japan event#642
rootsongjc merged 14 commits into
Project-HAMi:masterfrom
fishman:event-landing-pages

Conversation

@fishman

@fishman fishman commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

jpeg and pdfs are currently missing and will be added once git-lfs is merged

What type of PR is this?

/kind feature

What this PR does / why we need it:

I want a centralized place where we can track event conversions and a link that we can give out will data people going to the event may want.

Summary by CodeRabbit

  • New Features
    • Added a localized “Event Landing” page for HAMi at KubeCon Japan 2026, including locale-aware dates, location, and description.
    • Introduced optional banner, “Related Case Study,” “Event Resources,” and a Discord/GitHub CTA section.
    • Added support for both single-date and date-range formatting, plus English/Chinese content.
    • Implemented UTM-tagged external links for case study, resources, and CTAs.
    • Added the underlying event content dataset and a new landing page route to render the event.

Copilot AI review requested due to automatic review settings July 22, 2026 13:24
@hami-robot

hami-robot Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

@fishman: The label(s) kind/feature cannot be applied, because the repository doesn't have them.

Details

In response to this:

jpeg and pdfs are currently missing and will be added once git-lfs is merged

What type of PR is this?

/kind feature

What this PR does / why we need it:

I want a centralized place where we can track event conversions and a link that we can give out will data people going to the event may want.

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

netlify Bot commented Jul 22, 2026

Copy link
Copy Markdown

Deploy Preview for project-hami ready!

Name Link
🔨 Latest commit 9d83561
🔍 Latest deploy log https://app.netlify.com/projects/project-hami/deploys/6a6107b3a28d7c00082ae167
😎 Deploy Preview https://deploy-preview-642--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.

Copilot AI left a comment

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.

Pull request overview

This PR introduces a reusable “event landing page” pattern for the HAMi Docusaurus site and adds the first event page (KubeCon Japan 2026) backed by centralized event metadata.

Changes:

  • Add a new EventLanding React component + CSS module for event-focused landing pages.
  • Add a centralized src/data/events.js registry with KubeCon Japan 2026 event metadata.
  • Add a new route page at /landing/kubecon-japan that renders the event landing component from the registry.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 6 comments.

File Description
src/pages/landing/kubecon-japan.js Adds the KubeCon Japan landing page that selects an event by slug and renders the shared landing component.
src/data/events.js Introduces an events registry with KubeCon Japan 2026 metadata (title/description/dates/location/resources/CTA).
src/components/EventLanding.module.css Adds styling for the shared event landing page layout (hero, case study, resources, CTA).
src/components/EventLanding.js Adds the shared landing component that renders event metadata with locale-aware strings and resource links.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/pages/landing/kubecon-japan.js
Comment thread src/components/EventLanding.js Outdated
Comment thread src/components/EventLanding.js Outdated
Comment thread src/data/events.js Outdated
Comment thread src/data/events.js Outdated
Comment thread src/components/EventLanding.module.css
@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@mesutoezdil, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 12 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: feef04c8-f972-4d2b-a1a2-eee47388f0bc

📥 Commits

Reviewing files that changed from the base of the PR and between 1c2cea2 and 9d83561.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (2)
  • src/components/EventLanding.js
  • src/pages/landing/kubecon-japan.js
📝 Walkthrough

Walkthrough

Adds a localized KubeCon Japan 2026 landing page backed by shared event data, with formatted dates, case-study content, optional resources, tracked links, CTAs, and responsive styling.

Changes

Event landing flow

Layer / File(s) Summary
Event data and landing route
src/data/events.js, src/pages/landing/kubecon-japan.js
Defines the KubeCon Japan event record and renders it through a locale-aware Docusaurus landing page.
Localized event content and actions
src/components/EventLanding.js
Renders localized hero content, date ranges, case studies, available resources, UTM-tracked links, and configurable or default CTAs.
Landing page presentation
src/components/EventLanding.module.css
Styles the hero, case study, resources, and responsive CTA sections.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Browser
  participant KubeConJapan
  participant events
  participant EventLanding
  Browser->>KubeConJapan: request landing page
  KubeConJapan->>events: find kubecon-japan event
  KubeConJapan->>EventLanding: pass localized event
  EventLanding-->>Browser: render event landing page
Loading

Suggested labels: enhancement

Suggested reviewers: rootsongjc, copilot

Poem

A rabbit hops through dates and cheer,
With banners bright for guests to hear.
Case studies bloom, links neatly gleam,
CTAs guide the curious dream.
“KubeCon Japan!” we softly sing.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: a new event landing page component and the KubeCon Japan event page/data.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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

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.

Comment thread src/components/EventLanding.js Outdated
@mesutoezdil

Copy link
Copy Markdown
Contributor

dco is red, pls solve it

and pls check the outputs of bots, and resolve of if needed

Comment thread src/components/EventLanding.js Outdated
Comment thread src/components/EventLanding.js Outdated
Comment thread src/data/events.js Outdated
Copilot AI review requested due to automatic review settings July 22, 2026 14:20
@fishman
fishman force-pushed the event-landing-pages branch from 054f89f to 8912887 Compare July 22, 2026 14:21
jpeg and pdfs are currently missing and will be added once git-lfs is merged

Signed-off-by: Reza Jelveh <fishmangit@dynamia.ai>

Copilot AI left a comment

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.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.

Comments suppressed due to low confidence (3)

src/components/EventLanding.js:34

  • For zh, the same-month date-range output mixes locales/punctuation (e.g. 7月28日 – 30, 2026). It should stay consistently in Chinese and include the proper suffix/year formatting.
function formatDateRange(startStr, endStr, locale) {
  const s = dayjs(startStr);
  const e = dayjs(endStr);
  if (s.year() === e.year()) {
    if (s.month() === e.month()) {

src/components/EventLanding.js:80

  • styles.caseStudyBody is referenced, but there is no .caseStudyBody class in EventLanding.module.css, so the className evaluates to undefined. Either add the missing style or remove the unused reference to avoid confusion.
              <div className={styles.caseStudyBody}>

src/pages/landing/kubecon-japan.js:10

  • If the event slug is missing/misspelled in src/data/events.js, event becomes undefined and this page will crash when accessing event.title/event.description. Adding a guard makes the failure mode explicit and easier to debug during builds.
const event = events.find((e) => e.slug === "kubecon-japan");

export default function KubeConJapan() {
  const { i18n } = useDocusaurusContext();
  const isZh = i18n.currentLocale === "zh";

Comment thread src/theme/BlogPostItem/Header/index.js Outdated
Comment thread src/components/EventLanding.js Outdated
Comment thread src/data/events.js Outdated
Copilot AI review requested due to automatic review settings July 22, 2026 14:25

Copilot AI left a comment

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.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (3)

src/components/EventLanding.js:37

  • formatDateRange() builds the “same month” range using ${e.date()}, ${e.year()} which produces mixed/incorrect output for Chinese locale (e.g. 7月28日 – 30, 2026). The end date and year should be formatted with Chinese suffixes/punctuation when locale === "zh".
  if (s.year() === e.year()) {
    if (s.month() === e.month()) {
      return `${fmtShort(startStr, locale)} – ${e.date()}, ${e.year()}`;
    }
    return `${fmtShort(startStr, locale)} – ${fmtShort(endStr, locale)}, ${e.year()}`;

src/components/EventLanding.js:106

  • event.resources is an empty object in src/data/events.js, which is truthy, so this section renders with a heading but no links. Gate rendering on there being at least one resource URL to avoid an empty “Event Resources” block.
      {event.resources && Object.values(event.resources).some((r) => r?.url) && (

src/theme/BlogPostItem/Header/index.js:3

  • dayjs is now imported directly, but it is not declared in package.json dependencies (only present in package-lock.json). Relying on a transitive/hoisted dependency can break installs when the dependency graph changes; please add dayjs as a direct dependency (or avoid importing it directly).
import dayjs from "dayjs";

Copilot AI review requested due to automatic review settings July 22, 2026 14:32
@fishman
fishman force-pushed the event-landing-pages branch from 00a20da to 19f25e8 Compare July 22, 2026 14:34
Copilot AI review requested due to automatic review settings July 22, 2026 17:23
Make utm() safe for relative URLs by returning them unchanged and
preserving hash fragments through the URL API. Apply UTM tags to
event-provided CTA links too, not only the defaults. Add a
formatRange fallback for browsers without Intl formatRange, use
noopener noreferrer consistently on external links, and guard the
KubeCon Japan page against a failed slug lookup.

Signed-off-by: mesutoezdil <mesudozdil@gmail.com>

Copilot AI left a comment

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.

Pull request overview

Copilot reviewed 4 out of 5 changed files in this pull request and generated 1 comment.

Comments suppressed due to low confidence (1)

src/components/EventLanding.js:45

  • new Date("YYYY-MM-DD") parses as a UTC date, which can render as the previous/next day when formatted in a user’s local timezone (common off-by-one issue for date-only strings). For event dates, parse the date-only string into a local Date (or format in a fixed timezone) before passing to Intl.DateTimeFormat / formatRange.
function formatDate(dateStr, locale) {
  return dateFmt(locale).format(new Date(dateStr));
}

Comment thread src/pages/landing/kubecon-japan.js Outdated
The fallback heading was localized but the Layout title stayed
English, so zh users got an English tab title.

Signed-off-by: mesutoezdil <mesudozdil@gmail.com>
Copilot AI review requested due to automatic review settings July 22, 2026 17:38

Copilot AI left a comment

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.

Pull request overview

Copilot reviewed 4 out of 5 changed files in this pull request and generated 5 comments.

Comment thread src/components/EventLanding.js
Comment thread src/components/EventLanding.js
Comment thread src/components/EventLanding.js
Comment thread src/pages/landing/kubecon-japan.js Outdated
Comment thread src/components/EventLanding.js Outdated
Format event dates in UTC so YYYY-MM-DD strings do not shift a day
in negative offsets, match Chinese locale variants by prefix
instead of exact zh, and key case study highlights by content
instead of array index.

Signed-off-by: mesutoezdil <mesudozdil@gmail.com>
Copilot AI review requested due to automatic review settings July 22, 2026 18:10

Copilot AI left a comment

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.

Pull request overview

Copilot reviewed 4 out of 5 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

src/components/EventLanding.js:52

  • new Date(dateStr) with a date-only string (YYYY-MM-DD) is parsed inconsistently across browsers (notably Safari historically treats it as local time). Because you then format in timeZone: "UTC", this can shift the displayed date by -1 day for some users. Parse the date string as an explicit UTC midnight timestamp before formatting (and reuse the same parsing in the range formatter).
function formatDate(dateStr, locale) {
  return dateFmt(locale).format(new Date(dateStr));
}

function formatDateRange(startStr, endStr, locale) {

@mesutoezdil

Copy link
Copy Markdown
Contributor

/lgtm

@windsonsea

Copy link
Copy Markdown
Member

/approve

@hami-robot

hami-robot Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: fishman, windsonsea

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

The pull request process is described 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

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.

5 participants