Skip to content

Commit abf6029

Browse files
Mazizovaclaude
andauthored
People: build Event participation automatically from event and webinar pages (#201)
Speakers of DuckDB × MySQL Day (with talk titles from the schedule) and of OurSQL Foundation webinars are matched by profile link; manual events remain for everything else. Duplicate manual items were removed from four profiles. Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
1 parent 9aa9f8e commit abf6029

6 files changed

Lines changed: 67 additions & 39 deletions

File tree

‎content/resources/member-directory/dominic-preuss/index.md‎

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,6 @@ roles:
1313
- Speaker
1414
images:
1515
- photo.jpg
16-
events:
17-
- name: "DuckDB × MySQL Day"
18-
url: "/events/duckdb-mysql-day/"
19-
date: "November 17, 2026"
20-
role: "Speaker"
21-
detail: "Implementing DuckDB inside MySQL as a VillageSQL extension"
2216
---
2317

2418
Dominic Preuss is the founder of [VillageSQL](/resources/software/villagesql/), where he is Village Steward — the CEO. VillageSQL is an open source, drop-in replacement tracking fork of MySQL that adds an extension framework for custom data types and functions. According to the company's team page, Dominic spent the last decade building databases for developers at Google and Amazon.

‎content/resources/member-directory/evgeniy-patlan/index.md‎

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,6 @@ roles:
1212
- Author
1313
images:
1414
- photo.jpg
15-
events:
16-
- name: "DuckDB × MySQL Day"
17-
url: "/events/duckdb-mysql-day/"
18-
date: "November 17, 2026"
19-
role: "Speaker"
20-
detail: "Duck Hunt: An Independent Benchmark of DuckDB-Powered MySQL"
2115
---
2216

2317
Evgeniy Patlan is a build and release engineer at Percona, where he has worked since April 2016. Before Percona he spent more than eight years at PortaOne, moving from support engineer to build/release engineer. On the Percona blog he writes about package repositories and builds, Valkey packages, and benchmarks, including [running DuckDB as a MySQL 9.7 storage engine](https://www.percona.com/blog/running-duckdb-as-a-mysql-9-7-storage-engine/) and [the DuckDB MySQL engine at 500 GB](https://www.percona.com/blog/the-duckdb-mysql-engine-at-500-gb/).

‎content/resources/member-directory/marcelo-altmann/index.md‎

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,6 @@ roles:
1313
images:
1414
- photo.jpg
1515
events:
16-
- name: "OurSQL Foundation webinar: What Happened to the MySQL Query Cache?"
17-
url: "/community/webinars/mysql-query-cache/"
18-
date: "November 18, 2026"
19-
role: "Speaker"
2016
- name: "Percona Live 2026, Amsterdam"
2117
role: "Speaker"
2218
- name: "MySQL conferences and events"

‎content/resources/member-directory/roman-nozdrin/index.md‎

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,6 @@ roles:
1414
images:
1515
- photo.jpg
1616
events:
17-
- name: "DuckDB × MySQL Day"
18-
url: "/events/duckdb-mysql-day/"
19-
date: "November 17, 2026"
20-
role: "Speaker"
21-
detail: "When the Sea Lion Learns to Quack: DuckDB as a MariaDB Storage Engine"
2217
- name: "MariaDB Fest, Brussels"
2318
date: "2025"
2419
role: "Speaker"
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
{{/* Event participation on a People profile. Built automatically from the site's
2+
own event pages — speakers of DuckDB × MySQL Day (the talk title comes from
3+
the page's schedule) and speakers of OurSQL Foundation webinars, matched on
4+
their `profile` link — plus the profile's own `events` front matter list for
5+
everything else (name, optional url, date, role, detail). A manual item is
6+
skipped when an automatic one already points at the same url. Context: the
7+
profile page. */}}
8+
{{ $me := strings.TrimSuffix "/" .RelPermalink }}
9+
{{ $auto := slice }}
10+
11+
{{ with site.GetPage "/events/duckdb-mysql-day" }}
12+
{{ $ev := . }}
13+
{{ range .Params.speakers }}
14+
{{ if and .profile (eq (strings.TrimSuffix "/" .profile) $me) }}
15+
{{ $name := .name }}
16+
{{ $talk := "" }}
17+
{{ range $ev.Params.schedule }}{{ if eq .speaker $name }}{{ $talk = .title }}{{ end }}{{ end }}
18+
{{ $auto = $auto | append (dict "name" $ev.Title "url" $ev.RelPermalink "time" $ev.Date "role" "Speaker" "detail" $talk) }}
19+
{{ end }}
20+
{{ end }}
21+
{{ end }}
22+
23+
{{ with site.GetPage "/community/webinars" }}
24+
{{ range .RegularPages }}
25+
{{ $w := . }}
26+
{{ range .Params.speakers }}
27+
{{ if and .profile (eq (strings.TrimSuffix "/" .profile) $me) }}
28+
{{ $auto = $auto | append (dict "name" (printf "OurSQL Foundation webinar: %s" $w.Title) "url" $w.RelPermalink "time" $w.Date "role" "Speaker" "detail" "") }}
29+
{{ end }}
30+
{{ end }}
31+
{{ end }}
32+
{{ end }}
33+
34+
{{ $auto = sort $auto "time" "desc" }}
35+
{{ $autoURLs := slice }}
36+
{{ range $auto }}{{ $autoURLs = $autoURLs | append .url }}{{ end }}
37+
{{ $manual := slice }}
38+
{{ range .Params.events }}
39+
{{ if not (and .url (in $autoURLs .url)) }}{{ $manual = $manual | append . }}{{ end }}
40+
{{ end }}
41+
42+
{{ if or $auto $manual }}
43+
<section class="person-events" aria-labelledby="person-events-title">
44+
<h2 class="person-events-title" id="person-events-title">Event participation</h2>
45+
<ul class="person-events-list">
46+
{{ range $auto }}
47+
<li class="person-event">
48+
<span class="person-event-name"><a href="{{ .url }}" class="person-meta-link">{{ .name }}</a></span>
49+
<span class="person-event-date">{{ .time.Format "January 2, 2006" }}</span>
50+
<span class="person-event-role">{{ .role }}</span>
51+
{{ with .detail }}<span class="person-event-detail">{{ . }}</span>{{ end }}
52+
</li>
53+
{{ end }}
54+
{{ range $manual }}
55+
<li class="person-event">
56+
<span class="person-event-name">{{ if .url }}<a href="{{ .url }}" class="person-meta-link">{{ .name }}</a>{{ else }}{{ .name }}{{ end }}</span>
57+
{{ with .date }}<span class="person-event-date">{{ . }}</span>{{ end }}
58+
{{ with .role }}<span class="person-event-role">{{ . }}</span>{{ end }}
59+
{{ with .detail }}<span class="person-event-detail">{{ . }}</span>{{ end }}
60+
</li>
61+
{{ end }}
62+
</ul>
63+
</section>
64+
{{ end }}

‎layouts/resources/single.html‎

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -108,24 +108,9 @@ <h1 class="resource-single-title">{{ .Title }}</h1>
108108

109109
{{ with .Content }}<div class="resource-single-content">{{ . }}</div>{{ end }}
110110

111-
{{/* Event participation — People entries. Each item in the `events` front
112-
matter list has a name and optional url, date, role and detail; it
113-
lives there rather than in the bio text. */}}
114-
{{ with .Params.events }}
115-
<section class="person-events" aria-labelledby="person-events-title">
116-
<h2 class="person-events-title" id="person-events-title">Event participation</h2>
117-
<ul class="person-events-list">
118-
{{ range . }}
119-
<li class="person-event">
120-
<span class="person-event-name">{{ if .url }}<a href="{{ .url }}" class="person-meta-link">{{ .name }}</a>{{ else }}{{ .name }}{{ end }}</span>
121-
{{ with .date }}<span class="person-event-date">{{ . }}</span>{{ end }}
122-
{{ with .role }}<span class="person-event-role">{{ . }}</span>{{ end }}
123-
{{ with .detail }}<span class="person-event-detail">{{ . }}</span>{{ end }}
124-
</li>
125-
{{ end }}
126-
</ul>
127-
</section>
128-
{{ end }}
111+
{{/* Event participation — People entries, built from the event pages plus the
112+
profile's own `events` list (see partials/person-events.html). */}}
113+
{{ if in .Params.subcategories "People" }}{{ partial "person-events.html" . }}{{ end }}
129114

130115
{{ with .Params.link }}
131116
<a href="{{ . }}" class="resource-visit-btn resource-visit-btn--large" target="_blank" rel="noopener noreferrer">

0 commit comments

Comments
 (0)