Update 2026 events calendar#587
Conversation
Signed-off-by: Manvika Tuteja <manvikatuteja16@gmail.com>
📝 WalkthroughWalkthroughChangesThe event catalog adds and updates 2026 event metadata, including event types and date ranges. The calendar now renders multi-day events, escaped metadata, and date-range cards. Meetup / Hackathon entries receive dedicated legend, label, and badge styling. 2026 event catalog
Calendar rendering
Possibly related PRs
Suggested reviewers: 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. Comment |
|
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
tests/events-2026.test.mjs (1)
129-149: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd one regression for the January→February boundary.
Lines 129-149 only check for helper names and literal snippets, so the
laracon-india-2026.mdcross-month case would still pass while the February bucketing is wrong. Given the current string-based approach, add one assertion that the current-month split uses covered months rather than onlye.date.substring(0, 7).🤖 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 `@tests/events-2026.test.mjs` around lines 129 - 149, Add a regression assertion in the events template test to cover the January→February multi-day case, since the current string-snippet checks around eventsTemplate and eventsStyles can miss bad month bucketing. Update the test in tests/events-2026.test.mjs to verify that the month-splitting logic used by the events card/calendar path (the same covered-month behavior referenced by eventMonthKeys/data-months) handles a cross-month event like laracon-india-2026.md, rather than relying on e.date.substring(0, 7) alone.
🤖 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 `@templates/events.html`:
- Around line 214-217: The “this month” split in the events template still uses
e.date.substring(0, 7), which mis-buckets events that span into the visible
month. Update the logic in the events filtering block to base membership on
covered months using eventEndDate(e) and the current month, so month-spanning
items like the laracon-india-2026 event are included when they appear on the
rendered calendar. Keep the existing thisMonthUpcoming and upcoming sorting
behavior, but change the month check to reflect the event’s covered date range
rather than only its start date.
---
Nitpick comments:
In `@tests/events-2026.test.mjs`:
- Around line 129-149: Add a regression assertion in the events template test to
cover the January→February multi-day case, since the current string-snippet
checks around eventsTemplate and eventsStyles can miss bad month bucketing.
Update the test in tests/events-2026.test.mjs to verify that the month-splitting
logic used by the events card/calendar path (the same covered-month behavior
referenced by eventMonthKeys/data-months) handles a cross-month event like
laracon-india-2026.md, rather than relying on e.date.substring(0, 7) alone.
🪄 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: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: e4f766e6-e074-4161-8aa2-121f77e1c83d
📒 Files selected for processing (33)
content/events/all-things-open-2026.mdcontent/events/bay-area-opensearch-valkey-meetup-2026.mdcontent/events/bengaluru-valkey-meetup-2026.mdcontent/events/build-beyond-limits-hyderabad-2026.mdcontent/events/cache-cafe-2026.mdcontent/events/chennai-valkey-meetup-2026.mdcontent/events/delhi-valkey-meetup-2026.mdcontent/events/hack-ncstate-2026.mdcontent/events/kcd-beijing-2026.mdcontent/events/kcd-guadalajara-2026.mdcontent/events/kcd-kuala-lumpur-2026.mdcontent/events/kcd-lima-2026.mdcontent/events/kcd-new-york-2026.mdcontent/events/laracon-india-2026.mdcontent/events/laracon-us-2026.mdcontent/events/mqsummit-2026.mdcontent/events/nerdearla-ar-2026.mdcontent/events/nerdearla-mx-2026.mdcontent/events/ossummit-europe-2026.mdcontent/events/ossummit-india-2026.mdcontent/events/ossummit-korea-2026.mdcontent/events/ossummit-na-2026.mdcontent/events/pybeach-2026.mdcontent/events/pycon-cameroon-2026.mdcontent/events/scale-2026.mdcontent/events/seattle-meetup-april-2026.mdcontent/events/tdc-sao-paulo-2026.mdcontent/events/valkey-react-hyderabad-2026.mdcontent/events/valkey-seattle-systems-meetup-2026.mdcontent/events/valkeyconf-2026.mdsass/_valkey.scsstemplates/events.htmltests/events-2026.test.mjs
|
It feels like the footer takes over too early. The page should be longer? The scroll area is too small |
|
@pnbrown it is not clipping, it is cos of the screenshot. Regarding the scroll area, it is proportionate to the calendar - do you have a recommendation for the proportions?
|
|
Responsive to fit the month? |
|
yes. |
rlunar
left a comment
There was a problem hiding this comment.
I agree with this PR overall; there are some edits suggested by CodeRabbit and Greptile that need to be addressed.
What do we consider a Valkey event? for example we also did CNCF Mexico City Meetup on June 9th, does that count?
Should we have a naming convention? for example KCD's are prefixed properly, but MeetUps are not; should we make ALL events to follow a taxonomy?
Signed-off-by: Manvika Tuteja <manvikatuteja16@gmail.com>
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 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 `@templates/events.html`:
- Around line 188-189: The event label and card rendering in the
templates/events.html snippet still interpolates unsafe values directly, so
update the HTML-building logic around the event label and location link to use
sanitized values for e.url, e.type, and e.locationUrl, similar to how safeTitle
is handled. Locate the code that builds labels and event cards, then escape or
validate those fields before concatenating them into href, class, and other
attributes so no raw event data is rendered into the DOM.
🪄 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: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 7f436a08-3df9-42e7-a17d-8befeef088ee
📒 Files selected for processing (2)
templates/events.htmltests/events-2026.test.mjs
🚧 Files skipped from review as they are similar to previous changes (1)
- tests/events-2026.test.mjs
Addressed the changes suggested by CodeRabbit and Greptile. A CNCF Mexico City Meetup is not a 1P event or a meetup/hackathon if it was not a Valkey meetup but if we had presence there it can qualify as a 3P event (third party) I like that idea, so far it was been Valkey Meetup *City with an additional line for SEO/relevance, which I am not super against. |
|
@valkey-io/content-creators can you please review so we can add events to the website |
|
Sorry @mtuteja-git - it wont let me squash and merge. |
stockholmux
left a comment
There was a problem hiding this comment.
@mtuteja-git No problems with the events content (yay!), but there is some Javascript here that I would question. I've been looking at it for a while and there is places where you format the date, then later pull that formatting apart and reformat it.
The end result is probably not an issue but date objects tend to have corner cases that don't show up until later and/or are interpreted by slightly differently across browsers and locales. We can probably shift most of this up to Zola and know it's repeatable forever.
| return keys; | ||
| } | ||
|
|
||
| function formatDateRange(startKey, endKey) { |
There was a problem hiding this comment.
This function is odd. It assume Month/Day/Year which is only really common in the USA.
You can use .toLocaleDateString() to auto format to whatever the browser is operating in.
There was a problem hiding this comment.
I removed the manual date formatting and am using .toLocaleDateString() for the displayed date labels - please review and let me know if this is what you were expecting.
| @@ -0,0 +1,161 @@ | |||
| import assert from "node:assert/strict"; | |||
There was a problem hiding this comment.
While I generally applaud the use of tests we haven't agreed to this testing framework nor have we described how to do tests anywhere. I think we should drop this bit.
There was a problem hiding this comment.
+1, I don't think we should add tests for things where the real test is verifying the external functionality.
There was a problem hiding this comment.
Thank you, dropped.
|
|
||
| const repoRoot = process.cwd(); | ||
|
|
||
| const expectedEvents = [ |
There was a problem hiding this comment.
I also think this will break when we add events :)
There was a problem hiding this comment.
Yes, removed this test file.
| evts.forEach(function(e) { | ||
| eventDateKeys(e).forEach(function(dayKey) { | ||
| if (dayKey.substring(0, 7) !== key) return; | ||
| var d = Number(dayKey.substring(8, 10)); |
There was a problem hiding this comment.
You're doing a ton of processing of dates in this script. I worry that it might be a little fragile and it's kind of unnecessary considering you can just use Zola to pre-generate all this as part of events for loop.
There was a problem hiding this comment.
Removed the 'eventDateKeys' / 'eventMonthKeys' / 'formatDateRange' helper layer and simplified the calendar logic to use ISO date range checks. The displayed dates now use 'toLocaleDateString()' - please review when you can and let me know if that looks correct to you.
Signed-off-by: Manvika Tuteja <manvikatuteja16@gmail.com>
Signed-off-by: Manvika Tuteja <manvikatuteja16@gmail.com>
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
templates/events.html (1)
44-44: 🔒 Security & Privacy | 🟡 Minor | ⚡ Quick winNormalize
end_datebefore feeding it into the calendar logic
page.extra.end_dateshould be forced toYYYY-MM-DDbefore it reaches therangesOverlapchecks. The current string comparisons rely on zero-padded dates, so a malformed value will break month filtering and event ordering.🤖 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 `@templates/events.html` at line 44, Normalize page.extra.end_date to a zero-padded YYYY-MM-DD value before assigning endDate for the calendar logic, while retaining page.date formatted as YYYY-MM-DD when no end_date is provided. Ensure the value consumed by rangesOverlap and event ordering is consistently normalized.
🧹 Nitpick comments (1)
templates/events.html (1)
59-66: 🔒 Security & Privacy | 🔵 Trivial | 💤 Low valueHand-rolled HTML escaping flagged by static analysis.
The manual
escapeHtmlimplementation is functionally correct (escapes&first, avoiding double-escaping), but consider a vetted encoder for defense-in-depth per the linter hint.🤖 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 `@templates/events.html` around lines 59 - 66, Replace the hand-rolled escaping in escapeHtml with the project’s vetted HTML-encoding utility identified by the static-analysis guidance, preserving string coercion and escaping of all relevant HTML characters. Remove the manual replacement chain while keeping callers’ existing escapeHtml behavior unchanged.Source: Linters/SAST tools
🤖 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 `@templates/events.html`:
- Around line 98-101: Update dateRangeLabel to compact ranges when startKey and
endKey share the same month and year: render the month once, show both day
numbers separated by a hyphen, and append the year once. Preserve the existing
single-date output and verbose formatting for ranges spanning different months
or years.
---
Outside diff comments:
In `@templates/events.html`:
- Line 44: Normalize page.extra.end_date to a zero-padded YYYY-MM-DD value
before assigning endDate for the calendar logic, while retaining page.date
formatted as YYYY-MM-DD when no end_date is provided. Ensure the value consumed
by rangesOverlap and event ordering is consistently normalized.
---
Nitpick comments:
In `@templates/events.html`:
- Around line 59-66: Replace the hand-rolled escaping in escapeHtml with the
project’s vetted HTML-encoding utility identified by the static-analysis
guidance, preserving string coercion and escaping of all relevant HTML
characters. Remove the manual replacement chain while keeping callers’ existing
escapeHtml behavior 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: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 371038ee-2a4e-4363-a29d-0ce60c8c47d4
📒 Files selected for processing (2)
content/events/valkey-contributor-summit-2026.mdtemplates/events.html
| function dateRangeLabel(startKey, endKey) { | ||
| if (startKey === endKey) return displayDate(startKey); | ||
| return displayDate(startKey) + ' - ' + displayDate(endKey); | ||
| } |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
dateRangeLabel doesn't produce the compact format shown in the PR's own screenshots.
This always renders "<Month> <D>, <Year> - <Month> <D>, <Year>" (e.g. "August 11, 2026 - August 12, 2026"), but the PR description's calendar/card screenshots show a compact same-month format ("August 11-12, 2026", "September 22-26, 2026", "July 28-29, 2026"). As written, every multi-day event card will render the verbose form instead of matching the intended design.
🛠️ Proposed fix for same-month/year ranges
function dateRangeLabel(startKey, endKey) {
if (startKey === endKey) return displayDate(startKey);
- return displayDate(startKey) + ' - ' + displayDate(endKey);
+ var start = localDateFromKey(startKey);
+ var end = localDateFromKey(endKey);
+ if (start.getFullYear() === end.getFullYear() && start.getMonth() === end.getMonth()) {
+ return start.toLocaleDateString(undefined, { month: 'long' }) + ' ' + start.getDate() +
+ '-' + end.getDate() + ', ' + end.getFullYear();
+ }
+ return displayDate(startKey) + ' - ' + displayDate(endKey);
}📝 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.
| function dateRangeLabel(startKey, endKey) { | |
| if (startKey === endKey) return displayDate(startKey); | |
| return displayDate(startKey) + ' - ' + displayDate(endKey); | |
| } | |
| function dateRangeLabel(startKey, endKey) { | |
| if (startKey === endKey) return displayDate(startKey); | |
| var start = localDateFromKey(startKey); | |
| var end = localDateFromKey(endKey); | |
| if (start.getFullYear() === end.getFullYear() && start.getMonth() === end.getMonth()) { | |
| return start.toLocaleDateString(undefined, { month: 'long' }) + ' ' + start.getDate() + | |
| '-' + end.getDate() + ', ' + end.getFullYear(); | |
| } | |
| return displayDate(startKey) + ' - ' + displayDate(endKey); | |
| } |
🤖 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 `@templates/events.html` around lines 98 - 101, Update dateRangeLabel to
compact ranges when startKey and endKey share the same month and year: render
the month once, show both day numbers separated by a hyphen, and append the year
once. Preserve the existing single-date output and verbose formatting for ranges
spanning different months or years.
stockholmux
left a comment
There was a problem hiding this comment.
Locale and date stuff is still super weird. parseDateKey was removed and then the same code was added as localDateFromKey - I'm not entirely sure any of it is needed.
| var monthKey = dayKey.substring(0, 7); | ||
| if (keys.indexOf(monthKey) === -1) keys.push(monthKey); | ||
| function displayDate(dateKey) { | ||
| return localDateFromKey(dateKey).toLocaleDateString(undefined, { |
There was a problem hiding this comment.
I think this part is incorrect.
localDateFromKey function is dubious as it's just create a date object in a really weird way. I think just new Date(dateKey) would accomplish the same thing. Then the toLocaleDateString is always create numeric-long-numeric which may not be locale specific at all.
There was a problem hiding this comment.
(Also, see code rabbit later.. it's saying partially the same thing).


Description
Issues Resolved
Check List
--signoffBy submitting this pull request, I confirm that my contribution is made under the terms of the BSD-3-Clause License.