Skip to content

feat(events): redesign events list, cards, and detail pages - #20506

Merged
jeffmerrick merged 5 commits into
masterfrom
jeffmerrick/events-page-redesign
Jul 27, 2026
Merged

feat(events): redesign events list, cards, and detail pages#20506
jeffmerrick merged 5 commits into
masterfrom
jeffmerrick/events-page-redesign

Conversation

@jeffmerrick

@jeffmerrick jeffmerrick commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Proposed changes

Redesigns the /events section to match the blog/what-is look and the shared design system (.card/.badge/.btn, shared type scale, icon partial).

Important

Depends on #20502 (shared breadcrumb partial) — merge that first, then rebase.

  • List: condensed hero; blog-style pill tabs (All / On-demand / Upcoming); RSS beside enlarged, scrollable dropdown filters.
  • Cards: text cards with badges, a mono date square, presenter avatars + names, primary Register / ghost Watch CTAs.
  • Countdown: client-side "in X days" / "Today" badge computed in the visitor's timezone.
  • Detail: lighter hairline-separated layout, violet-50 highlight panels ("what you'll learn" + Pulumi Cloud note), mobile scroll-to-form Register button, darker body text.
  • Shared/cleanup: standardize button horizontal padding in _button.scss; enlarge filter-select options; remove dead event-filtering.ts; update Engin Diri's photo.

Related issues (optional)

Depends on #20502.

Screenshot 2026-07-24 at 11 24 40 AM Screenshot 2026-07-24 at 11 24 50 AM

Rework the events section to match the blog/what-is look and the shared
design system (.card/.badge/.btn, shared type scale, icon partial):

- List: condensed what-is-style hero; blog-style pill tabs (All/On-demand/
  Upcoming) with RSS beside the enlarged, scrollable dropdown filters.
- Cards: rebuilt as text cards with badges, mono date square, presenter
  avatars + names, primary Register / ghost Watch CTAs, and a client-side
  'in X days' / 'Today' countdown badge (computed in the visitor's timezone).
- Detail: lighter blog-style layout with hairline separators, violet-50
  highlight panels ('what you'll learn' + Pulumi Cloud note), a mobile
  sticky-to-form Register button, and darker body text.
- Standardize button horizontal padding in shared _button.scss; enlarge
  filter-select option items; drop dead event-filtering.ts.
- Update Engin Diri's author photo.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions github-actions Bot added review:triaging Claude Triage is currently classifying the PR domain:website PR touches marketing, pricing, legal, or competitive landing pages domain:mixed PR touches more than one domain domain:infra PR touches workflows, scripts, infra, Makefile, or build config review:in-progress Claude review is currently running and removed review:triaging Claude Triage is currently classifying the PR labels Jul 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Pre-merge Review — Last updated 2026-07-24T16:21:56Z

Tip

Summary: This is a front-end redesign of the events section — the list page, the event cards, and the single-event detail pages — touching Hugo templates/partials, two SCSS bundles, and the events TypeScript. It rebuilds the event card on the shared design system (.card/.card-hover, .badge, .btn, the shared type scale), swaps the tab-underline filter nav for pill-style buttons that mirror the blog filters, adds client-side "Today"/"in X days" countdown badges (resources.ts) in place of stale build-time labels, retires the old event-filtering.ts, and flattens the speaker/timing/cloud-notice sections to borderless rows. The failure modes that would matter to a reader here are structural rather than factual — a filter that no longer toggles the right groups, a card CTA/countdown that renders wrong, or a broken template — and those are exercised by the separate lint and full-build jobs rather than this content pass. There is no user-facing prose change beyond reordering the filter labels in content/events/_index.md; the five extracted "claims" are all template/TypeScript code, not falsifiable assertions. Frontmatter and style (Vale) sweeps ran clean; the Hugo build preflight was skipped this run.

Review confidence:

Dimension Level Notes
mechanics MEDIUM Hugo build preflight was skipped this run (classified content-only), so the template/partial changes weren't rendered here — link-integrity and build validation come from the separate build job. Frontmatter and Vale sweeps clean.
facts HIGH No user-facing factual claims in the diff; all extracted candidate claims are template/SCSS/TS code (not-a-claim).
Investigation log
  • Cross-sibling reads: not run (not in a templated section)
  • External claim verification: 0 of 5 claims verified (0 unverifiable, 0 contradicted) · 4 specialists (numerical, cross-reference, capability, framing); 0 cross-specialist corroborations · routed: 0 inline, 1 Pass 1, 0 Pass 2, 4 Pass 3 (verified 0, contradicted 0, unverifiable 4).
  • Cited-claim spot-checks: not run (no cited claims)
  • Frontmatter sweep: ran on body
  • Temporal-trigger sweep: ran (recency words present in diff; spot-check in-review)
  • Code execution: not run (no static/programs/ change)
  • Code-examples checks: not run (no fenced code blocks in content files)
  • Editorial-balance pass: not run (not under content/blog/)
🚨 Outstanding ⚠️ Low-confidence 💡 Pre-existing ✅ Resolved
0 0 0 0

🔍 Verification trail

5 claims extracted · 0 verified · 0 unverifiable · 0 contradicted
  • L6 in layouts/partials/events/cloud-notice.html "
    This workshop uses Pulumi Cloud. Sign up to follow along.
    " → ➖ not-a-claim (evidence: This is a UI link in a partial template pointing to the standard Pulumi Cloud signup URL, used identically across dozens of other pulumi org repos and docs pages (e.g. content/confirmation/workshop.md, layouts/page/workshop-signup.html). I…; source: gh_query: search code --owner pulumi "app.pulumi.com/signup")
  • L27 in layouts/partials/events/type-content.html "
    " → ➖ not-a-claim (evidence: This is a CSS snippet implementing the common padding-bottom aspect-ratio hack (56.25% = 9/16 for 16:9 video embeds), not a factual/falsifiable claim.; source: layouts/partials/events/type-content.html L27)
  • L45 in layouts/partials/template-partials/template-event-card.html "<span data-event-countdown data-event-date='{{ .datetime | time.Format '2006-01-02T15:04:05Z07:00' }}' hidden>" → ➖ not-a-claim (evidence: This is a line of Hugo template code (Go template syntax with time.Format layout string) defining an HTML data attribute, not a falsifiable factual assertion about the world.; source: layouts/partials/template-partials/template-event-card.html L45)
  • L70 in layouts/partials/template-partials/template-event-card.html "with {{ range $i, $p := . }}{{ if $i }}, {{ end }}{{ $p.name }}{{ end }}" → ➖ not-a-claim (evidence: This is a Go template code fragment (a range loop rendering presenter names in an event card partial), not a falsifiable numerical or factual assertion. It was likely misclassified by the regex-based extractor.; source: layouts/partials/template-partials/template-event-card.html:L70)
  • L98 in theme/src/ts/resources.ts "el.textContent = diffDays === 1 ? 'in 1 day' : in ${diffDays} days;" → ➖ not-a-claim (evidence: This is a line of TypeScript code implementing pluralization logic (singular "day" vs plural "days") for a date-diff display, not a falsifiable factual assertion. It's a code snippet extracted by regex, not a claim about the world.; source: theme/src/ts/resources.ts L98)

🚨 Outstanding in this PR

No outstanding findings in this PR.

⚠️ Low-confidence

No low-confidence findings.

💡 Pre-existing issues in touched files (optional)

No pre-existing issues in touched files.

✅ Resolved since last review

No items resolved since the last review.

📜 Review history

  • 2026-07-24T16:21:56Z — No blocking issues: events redesign is template/SCSS/TypeScript only, all extracted claims were code (not-a-claim), Hugo build preflight skipped this run. (e0e2659)

Need a re-review? Want to dispute a finding? Mention @claude and include #update-review.
(For ad-hoc questions or fixes, just @claude — no hashtag.)

@github-actions github-actions Bot added review:no-blockers Claude review completed cleanly; outstanding is empty and removed review:in-progress Claude review is currently running labels Jul 24, 2026
@jeffmerrick
jeffmerrick requested a review from cnunciato July 24, 2026 16:24
@pulumi-bot

pulumi-bot commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

Your site preview for commit b49101c is ready! 🎉

http://www-testing-pulumi-docs-origin-pr-20506-b49101c9.s3-website.us-west-2.amazonaws.com

Changed pages:

@pulumi-bot

pulumi-bot commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

Lighthouse Performance Report

Commit: b49101c | Metric definitions

Page Device Score FCP LCP TBT CLS SI
Homepage Mobile 🔴 33 6.0s 13.8s 1449ms 0.074 6.4s
Homepage Desktop 🟡 81 0.8s 1.1s 331ms 0.017 1.6s
Install Pulumi Mobile 🟡 56 6.2s 9.7s 91ms 0.053 8.5s
Install Pulumi Desktop 🟡 79 1.4s 2.0s 0ms 0.015 3.1s
AWS Get Started Mobile 🟡 55 6.0s 9.5s 53ms 0.086 8.4s
AWS Get Started Desktop 🟡 76 1.4s 2.3s 0ms 0.020 3.1s

…page-redesign

# Conflicts:
#	layouts/events/single.html
@github-actions github-actions Bot added review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention and removed review:no-blockers Claude review completed cleanly; outstanding is empty labels Jul 24, 2026

@adamgordonbell adamgordonbell 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.

Looks good!

One thing I'd love for the events page, is to feature the speaker images more prominently.

We create images for Luma, but the speaker is minimized visually on our own page, vs luma or meetup for instance.

https://luma.com/pulumi-s8zc

Increase event detail page speaker photos (48px -> 80px), align the
"Speakers" label to font-overline-sm to match the timing row, and arrange
speakers in a responsive 3-column grid. Also enlarge and restructure the
event card presenter avatars.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@jeffmerrick

Copy link
Copy Markdown
Contributor Author

@adamgordonbell For sure! I increased the image size on both the cards and the detail pages.

…r row order

The filter-select dropdowns beside the events tab pills were rendered with
form-select chrome (inset bottom shadow reading as a gradient, md+ w-48 fixed
width, text-sm on a text-xs base) while the pills next to them are plain
outline buttons. Restyle the toggles to match .btn.btn-sm.btn-outline: h-8,
text-sm, rounded-md, gray-300 border, hover/open border-gray-500 bg-gray-100,
no shadow, width sized to content.

Consolidate the styling into components/_filter-select.scss and drop the
page-scoped override block from _event-list.scss. The component is used only by
the events list in this repo (pulumi/registry vendors its own separate copy of
the theme), so a single unscoped rule set replaces the previous two-layer
arrangement where the page block had to neutralize the component's chrome
property by property.

Spacing: a gap on the <pulumi-filter-select> host has no effect because the
flex container is the component's shadow-DOM div, so space the slotted groups
with ml-3 to match the pills' gap-3, and zero the shadow styles' 0.5em
margin-right via ::part(toggle) so the last dropdown leaves no trailing gap
before the RSS icon.

Also stop reversing the filter row on mobile: flex-col-reverse put the
dropdowns above the tab pills, so use flex-col and move the tools' mobile
margin from mb-3 to mt-3 so the spacing sits between the two rows.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…page-redesign

Two conflicts, both from master's #20487 layout refactor overlapping this
branch's events redesign:

- layouts/partials/events/list-section.html: master renamed
  template-partials/template-event-card.html to events/event-card.html and
  passes an "upcoming" flag. Took master's new partial path with this branch's
  parameter set: the redesigned card derives its CTA from the event's
  youtube_url, and the list only renders events that are upcoming or have a
  recording, so "not on-demand" is equivalent to "upcoming" and the flag is
  redundant.

- theme/src/scss/_templates.scss: kept this branch's font-overline month header
  and dropped master's .template-event-card / .event-card-grid blocks. The
  redesigned card composes .card / .card-hover / .badge / .btn instead, so none
  of those class names are referenced anywhere in the merged tree.

Git resolved the card itself as a rename, carrying this branch's changes onto
master's new path; master's edit there was a pure move with no content change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@jeffmerrick
jeffmerrick enabled auto-merge (squash) July 27, 2026 15:19
@jeffmerrick
jeffmerrick merged commit b69cabf into master Jul 27, 2026
10 checks passed
@jeffmerrick
jeffmerrick deleted the jeffmerrick/events-page-redesign branch July 27, 2026 15:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

domain:infra PR touches workflows, scripts, infra, Makefile, or build config domain:mixed PR touches more than one domain domain:website PR touches marketing, pricing, legal, or competitive landing pages review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants