@@ -45,13 +53,23 @@
{{ page.title }}

{% for link in site.data.event-links %}
- {% if page[link.key] or link.key == 'ICS' %}{% unless page.location != 'online' and link.key == 'meeting-room' %}{% unless status == 'past' and link.key == 'meeting-room' %}{% unless status == 'past' and link.key == 'ICS' %}{% assign info_counter = info_counter | plus:1 %}{% endunless %}{% endunless %}{% endunless %}{% endif %}
+ {% if page[link.key] or link.key == 'ICS' %}
+ {% unless page.location != 'online' and link.key == 'meeting-room' %}
+ {% unless status == 'past' and link.key == 'meeting-room' %}
+ {% unless link.key == 'ICS' and page.recurring != true and page.uid == nil %}
+ {% unless status == 'past' and link.key == 'ICS' %}
+ {% assign info_counter = info_counter | plus:1 %}
+ {% endunless %}
+ {% endunless %}
+ {% endunless %}
+ {% endunless %}
+ {% endif %}
{% endfor %}
{% assign info_counter = info_counter | minus:1 %}
{% for link in site.data.event-links %}
{%- if page[link.key] or link.key == 'ICS' -%}
- {% unless page[link.key] == 'online' %}{% unless page.location != 'online' and link.key == 'meeting-room' %}{% unless status == 'past' and link.key == 'meeting-room' %}{% unless status == 'past' and link.key == 'ICS' %}
+ {% unless page[link.key] == 'online' %}{% unless page.location != 'online' and link.key == 'meeting-room' %}{% unless status == 'past' and link.key == 'meeting-room' %}{% unless link.key == 'ICS' and page.recurring != true and page.uid == nil %}{% unless status == 'past' and link.key == 'ICS' %}
{%- assign link-index = forloop.index0 %}
{% if status == 'past' %}{% assign link-index = link-index | minus: 1 %}{% endif %}
{% if info_counter > 3 %}
@@ -60,13 +78,13 @@
{{ page.title }}
{% assign link-index = link-index | modulo: 3 %}
{% endif %}
- {% endunless %}{% endunless %}{% endunless %}{% endunless %}
+ {% endunless %}{% endunless %}{% endunless %}{% endunless %}{% endunless %}
{%- endif -%}
{% endfor %}
@@ -86,4 +104,4 @@
{{ page.title }}
-{% include ICS-modal.html %}
+{% include ICS-modal.html recurring=page.recurring ics=page.uid event_subscription_url=event_subscription_url event_ics_url=event_ics_url calendar_subscription_url=calendar_subscription_url %}
diff --git a/assets/js/copy-url.js b/assets/js/copy-url.js
index 373183631..ab342802d 100644
--- a/assets/js/copy-url.js
+++ b/assets/js/copy-url.js
@@ -1,9 +1,9 @@
-function copyUrl() {
- let url = (event.target.value ==null) ? document.location.href:event.target.value;
+function copyUrl(event) {
+ event?.preventDefault();
+ const url = event?.currentTarget?.getAttribute('data-copy-url')
+ ?? event?.currentTarget?.getAttribute('value')
+ ?? event?.currentTarget?.value
+ ?? document.location.href;
- navigator.clipboard.writeText(url).then(function() {
- console.log('Copied!');
- }, function() {
- console.log('Copy error')
- });
-};
+ navigator.clipboard.writeText(url);
+}
diff --git a/events-with-RDATE.ics b/events-with-RDATE.ics
deleted file mode 100644
index cc95f5fdd..000000000
--- a/events-with-RDATE.ics
+++ /dev/null
@@ -1,102 +0,0 @@
----
-layout: null
----
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-VERSION:2.0
-PRODID:-//AntennaPod//Website events section 0.1//EN
-LAST-MODIFIED:{{ 'now' | date: "%Y%m%dT%H%M00Z"}}
-NAME:AntennaPod
-
-{%- assign recurringevents = site.events | sort: 'datetime-start' | reverse | where:"recurring", true %}
-{%- assign normalevents = site.events | sort: 'datetime-start' | reverse | where:"recurring", false %}
-{%- assign events = recurringevents | concat: normalevents %}
-
-{%- for event in events -%}{% if event.unlisted != true %}
-BEGIN:VEVENT
-DTSTAMP:{{ event.datetime-start | date: "%Y%m%dT%H%M00Z" }}{% if event.sequence %}
-SEQUENCE:{{ event.sequence }}{% endif %}
-UID:{{ event.uid | upcase }}
-DTSTART
-{%- if event.timezone -%};TZID={{ event.timezone }}{% endif %}:
-{{- event.datetime-start | date: "%Y%m%dT%H%M00" }}{% unless event.timezone %}Z{% endunless %}
-DTEND
-{%- if event.timezone -%};TZID={{ event.timezone }}{% endif %}:
-{{- event.datetime-end | date: "%Y%m%dT%H%M00" }}{% unless event.timezone %}Z{% endunless %}
-STATUS:CONFIRMED
-SUMMARY:{{ event.title }}
-
-{%- capture description %}
-DESCRIPTION:
-{{- event.content | remove_last: '' | replace: '','\n\n' | strip_html | replace:',','\,' | replace:':','\:' | replace:';','\;' | strip_newlines }}
-{%- if event.location == 'online' %}{% if event.location-label %}\n\n{{ event.meeting-room }}{% endif %}{% endif %}
-{%- endcapture %}
-{%- assign description = description | replace: '\n\n\n\n','\n\n' %}
-
-{%- assign descriptionChars = description.size %}
-{%- assign descriptionTotalRows = descriptionChars | divided_by: 74.00 | ceil %}
-{%- assign descriptionChars = descriptionChars | plus: descriptionTotalRows %}
-{%- assign descriptionTotalRows = descriptionChars | divided_by: 74.00 | ceil %}
-{%- assign descriptionChars = descriptionChars | minus: descriptionTotalRows %}
-{%- assign start = 0 %}
-{%- assign separator = '\||/' %}
-{%- assign descriptionWorker = '' %}
-
-{%- for rowToBe in (1..descriptionTotalRows) %}
- {%- if descriptionChars <= 74 %}
- {%- assign descriptionWorker = description %}
- {%- break %}
- {%- else %}
- {%- assign descriptionRow = description | slice: start, 73 | prepend: ' ' | append: separator %}
- {%- assign descriptionWorker = descriptionWorker | append: descriptionRow %}
- {%- assign start = start | plus: 73 %}
- {%- endif %}
-{%- endfor %}
-
-{%- if descriptionChars > 74 %}
- {%- assign descriptionWorker = descriptionWorker | lstrip %}
- {%- assign lastChar = descriptionWorker.size | minus: separator.size %}
- {%- assign descriptionWorker = descriptionWorker | slice: 0, lastChar %}
- {%- assign descriptionArray = descriptionWorker | split: separator %}
-{%- endif %}
-
-{%- for descriptionLine in descriptionArray %}
-{{ descriptionLine }}
-{%- endfor %}
-LOCATION:{% if event.location-label %}{{ event.location-label }}
-{%- elsif event.location == 'online' %}{{ event.meeting-room }}
-{%- else %}{{ site.data.event-links[location].url }}{{ event.location }}
-{%- endif %}{% if event.location == 'online' %}
-URL:{{ event.meeting-room }}
-CONFERENCE:{{ event.meeting-room }}
-{%- endif %}{% if event.recurring == true %}
-RRULE:{{ event.recurrence-rule -}}
-{%- endif %}{% if event.recurrence-exceptions %}
-EXDATE
-{%- if event.timezone -%};TZID={{ event.timezone }}{% endif %}:
-{%- for exception in event.recurrence-exceptions %}
-{{- exception | date: "%Y%m%d" }}T{{ event.datetime-start | date: "%H%M00" }}{% unless event.timezone %}Z{% endunless %}
-{%- unless forloop.last %},{% endunless %}
-{%- endfor -%}
-{%- endif %}{% if event.recurrence-additions %}
-RDATE;VALUE=PERIOD
-{%- if event.timezone -%};TZID={{ event.timezone }}{% endif %}:
-{%- for extra-occurrence in event.recurrence-additions %}
-{{- extra-occurrence.start | date: "%Y%m%dT%H%M00" }}{% unless event.timezone %}Z{% endunless %}/
-{{- extra-occurrence.end | date: "%Y%m%dT%H%M00" }}{% unless event.timezone %}Z{% endunless %}
-{%- unless forloop.last %},{% endunless %}
-{%- endfor -%}
-{%- endif %}
-END:VEVENT
-{%- endif %}
-{%- endfor %}{%- for timezone in site.data.ics-timezones %}
-BEGIN:VTIMEZONE
-TZID:{{ timezone[0] }}
-{%- comment %} Following is unfortunately necessary to ensure that CRLF is used for EOL, as Jekyll uses LF when printing an array value in build process on Unix machine {% endcomment %}
-{%- assign timezoneDefinitionArray = timezone[1] | split: ' ' %}
-{%- for definitionLine in timezoneDefinitionArray %}
-{{ definitionLine }}
-{%- endfor %}
-END:VTIMEZONE
-{%- endfor %}
-END:VCALENDAR
diff --git a/events.ics b/events.ics
deleted file mode 100644
index a4ee19f88..000000000
--- a/events.ics
+++ /dev/null
@@ -1,94 +0,0 @@
----
-layout: null
----
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-VERSION:2.0
-PRODID:-//AntennaPod//Website events section 0.1//EN
-LAST-MODIFIED:{{ 'now' | date: "%Y%m%dT%H%M00Z"}}
-NAME:AntennaPod
-
-{%- assign recurringevents = site.events | sort: 'datetime-start' | reverse | where:"recurring", true %}
-{%- assign normalevents = site.events | sort: 'datetime-start' | reverse | where:"recurring", false %}
-{%- assign events = recurringevents | concat: normalevents %}
-
-{%- for event in events -%}{% if event.unlisted != true %}
-BEGIN:VEVENT
-DTSTAMP:{{ event.datetime-start | date: "%Y%m%dT%H%M00Z" }}{% if event.sequence %}
-SEQUENCE:{{ event.sequence }}{% endif %}
-UID:{{ event.uid | upcase }}
-DTSTART
-{%- if event.timezone -%};TZID={{ event.timezone }}{% endif %}:
-{{- event.datetime-start | date: "%Y%m%dT%H%M00" }}{% unless event.timezone %}Z{% endunless %}
-DTEND
-{%- if event.timezone -%};TZID={{ event.timezone }}{% endif %}:
-{{- event.datetime-end | date: "%Y%m%dT%H%M00" }}{% unless event.timezone %}Z{% endunless %}
-STATUS:CONFIRMED
-SUMMARY:{{ event.title }}
-
-{%- capture description %}
-DESCRIPTION:
-{{- event.content | remove_last: '' | replace: '','\n\n' | strip_html | replace:',','\,' | replace:':','\:' | replace:';','\;' | strip_newlines }}
-{%- if event.location == 'online' %}{% if event.location-label %}\n\n{{ event.meeting-room }}{% endif %}{% endif %}
-{%- endcapture %}
-{%- assign description = description | replace: '\n\n\n\n','\n\n' %}
-
-{%- assign descriptionChars = description.size %}
-{%- assign descriptionTotalRows = descriptionChars | divided_by: 74.00 | ceil %}
-{%- assign descriptionChars = descriptionChars | plus: descriptionTotalRows %}
-{%- assign descriptionTotalRows = descriptionChars | divided_by: 74.00 | ceil %}
-{%- assign descriptionChars = descriptionChars | minus: descriptionTotalRows %}
-{%- assign start = 0 %}
-{%- assign separator = '\||/' %}
-{%- assign descriptionWorker = '' %}
-
-{%- for rowToBe in (1..descriptionTotalRows) %}
- {%- if descriptionChars <= 74 %}
- {%- assign descriptionWorker = description %}
- {%- break %}
- {%- else %}
- {%- assign descriptionRow = description | slice: start, 73 | prepend: ' ' | append: separator %}
- {%- assign descriptionWorker = descriptionWorker | append: descriptionRow %}
- {%- assign start = start | plus: 73 %}
- {%- endif %}
-{%- endfor %}
-
-{%- if descriptionChars > 74 %}
- {%- assign descriptionWorker = descriptionWorker | lstrip %}
- {%- assign lastChar = descriptionWorker.size | minus: separator.size %}
- {%- assign descriptionWorker = descriptionWorker | slice: 0, lastChar %}
- {%- assign descriptionArray = descriptionWorker | split: separator %}
-{%- endif %}
-
-{%- for descriptionLine in descriptionArray %}
-{{ descriptionLine }}
-{%- endfor %}
-LOCATION:{% if event.location-label %}{{ event.location-label }}
-{%- elsif event.location == 'online' %}{{ event.meeting-room }}
-{%- else %}{{ site.data.event-links[location].url }}{{ event.location }}
-{%- endif %}{% if event.location == 'online' %}
-URL:{{ event.meeting-room }}
-CONFERENCE:{{ event.meeting-room }}
-{%- endif %}{% if event.recurring == true %}
-RRULE:{{ event.recurrence-rule -}}
-{%- endif %}{% if event.recurrence-exceptions %}
-EXDATE
-{%- if event.timezone -%};TZID={{ event.timezone }}{% endif %}:
-{%- for exception in event.recurrence-exceptions %}
-{{- exception | date: "%Y%m%d" }}T{{ event.datetime-start | date: "%H%M00" }}{% unless event.timezone %}Z{% endunless %}
-{%- unless forloop.last %},{% endunless %}
-{%- endfor -%}
-{%- endif %}
-END:VEVENT
-{%- endif %}
-{%- endfor %}{%- for timezone in site.data.ics-timezones %}
-BEGIN:VTIMEZONE
-TZID:{{ timezone[0] }}
-{%- comment %} Following is unfortunately necessary to ensure that CRLF is used for EOL, as Jekyll uses LF when printing an array value in build process on Unix machine {% endcomment %}
-{%- assign timezoneDefinitionArray = timezone[1] | split: ' ' %}
-{%- for definitionLine in timezoneDefinitionArray %}
-{{ definitionLine }}
-{%- endfor %}
-END:VTIMEZONE
-{%- endfor %}
-END:VCALENDAR
From 3b79b9cf7a15ee8af21ecd13225fbfb21ad0101e Mon Sep 17 00:00:00 2001
From: Keunes <11229646+keunes@users.noreply.github.com>
Date: Sun, 10 May 2026 23:52:47 +0200
Subject: [PATCH 02/15] Cleanup and fixes
---
_data/event-links.yml | 2 +-
_i18n/en.yml | 2 +-
.../{ICS-modal.html => add-to-calendar-modal.html} | 14 +++++++-------
_layouts/event.html | 14 +++++++-------
events/index.html | 2 +-
5 files changed, 17 insertions(+), 17 deletions(-)
rename _includes/{ICS-modal.html => add-to-calendar-modal.html} (58%)
diff --git a/_data/event-links.yml b/_data/event-links.yml
index fe298c0fb..ffdc58b10 100644
--- a/_data/event-links.yml
+++ b/_data/event-links.yml
@@ -1,5 +1,5 @@
# used for event layout
-- key: ICS
+- key: add-to-calendar
icon: calendar-plus
text: events.links.add-calendar
- key: more-information
diff --git a/_i18n/en.yml b/_i18n/en.yml
index b0491c312..0d8472de5 100644
--- a/_i18n/en.yml
+++ b/_i18n/en.yml
@@ -294,7 +294,7 @@ events:
download-ics: "Download ICS file"
subscribe-event: "Copy event URL"
subscribe-all: "Copy URL for all events"
- announce-add-calendar: "Always want to have the latest events and update community call information at hand? Then subscribe to our calendar in your favorite app via the 'Add to calendar' link!"
+ announce-add-calendar: "Always want to have the most up-to-date event information at hand? Subscribe to our calendar in your favorite app via the 'Add to calendar' link!"
links:
add-calendar: "Add to calendar"
more-information: "More information"
diff --git a/_includes/ICS-modal.html b/_includes/add-to-calendar-modal.html
similarity index 58%
rename from _includes/ICS-modal.html
rename to _includes/add-to-calendar-modal.html
index 29ee627f0..faf2b8b22 100644
--- a/_includes/ICS-modal.html
+++ b/_includes/add-to-calendar-modal.html
@@ -1,19 +1,19 @@
-
+
{% tf general/events-add-calendar-modal.md %}
diff --git a/_layouts/event.html b/_layouts/event.html
index 5e7abd086..cf6cebecc 100644
--- a/_layouts/event.html
+++ b/_layouts/event.html
@@ -53,11 +53,11 @@
{{ page.title }}

{% for link in site.data.event-links %}
- {% if page[link.key] or link.key == 'ICS' %}
+ {% if page[link.key] or link.key == 'add-to-calendar' %}
{% unless page.location != 'online' and link.key == 'meeting-room' %}
{% unless status == 'past' and link.key == 'meeting-room' %}
- {% unless link.key == 'ICS' and page.recurring != true and page.uid == nil %}
- {% unless status == 'past' and link.key == 'ICS' %}
+ {% unless link.key == 'add-to-calendar' and page.recurring != true and page.uid == nil %}
+ {% unless status == 'past' and link.key == 'add-to-calendar' %}
{% assign info_counter = info_counter | plus:1 %}
{% endunless %}
{% endunless %}
@@ -68,8 +68,8 @@
{{ page.title }}
{% assign info_counter = info_counter | minus:1 %}
{% for link in site.data.event-links %}
- {%- if page[link.key] or link.key == 'ICS' -%}
- {% unless page[link.key] == 'online' %}{% unless page.location != 'online' and link.key == 'meeting-room' %}{% unless status == 'past' and link.key == 'meeting-room' %}{% unless link.key == 'ICS' and page.recurring != true and page.uid == nil %}{% unless status == 'past' and link.key == 'ICS' %}
+ {%- if page[link.key] or link.key == 'add-to-calendar' -%}
+ {% unless page[link.key] == 'online' %}{% unless page.location != 'online' and link.key == 'meeting-room' %}{% unless status == 'past' and link.key == 'meeting-room' %}{% unless link.key == 'add-to-calendar' and page.recurring != true and page.uid == nil %}{% unless status == 'past' and link.key == 'add-to-calendar' %}
{%- assign link-index = forloop.index0 %}
{% if status == 'past' %}{% assign link-index = link-index | minus: 1 %}{% endif %}
{% if info_counter > 3 %}
@@ -80,7 +80,7 @@
{{ page.title }}
@@ -104,4 +104,4 @@
{{ page.title }}
-{% include ICS-modal.html recurring=page.recurring ics=page.uid event_subscription_url=event_subscription_url event_ics_url=event_ics_url calendar_subscription_url=calendar_subscription_url %}
+{% include add-to-calendar-modal.html %}
diff --git a/events/index.html b/events/index.html
index 5dd30af1d..952acc21c 100644
--- a/events/index.html
+++ b/events/index.html
@@ -89,4 +89,4 @@
-{% include ICS-modal.html %}
+{% include add-to-calendar-modal.html %}
\ No newline at end of file
From 5af8639d800870139249b698d6087d45321ef5b8 Mon Sep 17 00:00:00 2001
From: Keunes <11229646+keunes@users.noreply.github.com>
Date: Wed, 20 May 2026 16:36:34 +0200
Subject: [PATCH 03/15] Fix location links in events
---
_data/event-links.yml | 2 +-
_events/0_A meeting template.md | 2 +-
_events/2026-01-31-fosdem.md | 1 +
3 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/_data/event-links.yml b/_data/event-links.yml
index ffdc58b10..d3363258b 100644
--- a/_data/event-links.yml
+++ b/_data/event-links.yml
@@ -21,4 +21,4 @@
- key: location
icon: map
text: events.links.open-map
- url: https://www.openstreetmap.org/relation/
+ url: https://www.openstreetmap.org/
diff --git a/_events/0_A meeting template.md b/_events/0_A meeting template.md
index e37bf6c1a..a959fa533 100644
--- a/_events/0_A meeting template.md
+++ b/_events/0_A meeting template.md
@@ -16,7 +16,7 @@ summary:
image:
# Optional. Displayed on Events overview page and the event detail page.
location:
-# Required. Must be an osm.org relation ID or the text 'online'.
+# Required. Must be an osm.org type + ID (e.g. node/13473395006) or the text 'online'.
# Links on the events page:
meeting-room:
diff --git a/_events/2026-01-31-fosdem.md b/_events/2026-01-31-fosdem.md
index 6842d983e..340472722 100644
--- a/_events/2026-01-31-fosdem.md
+++ b/_events/2026-01-31-fosdem.md
@@ -8,6 +8,7 @@ recurring: no
more-information: https://forum.antennapod.org/t/antennapod-fosdem-2026/7923
image: brussels.jpg
blog-post: 2026/02/fosdem
+location: node/13473395006
---
Some core AntennaPod contributors plan to join the [FOSDEM](https://fosdem.org/2026/) conference in Brussels from the 31th of January to the 1st of February. We plan to grab some drinks together on Saturday at 19:30. To join, please leave a post on [our forum](https://forum.antennapod.org/t/antennapod-fosdem-2026/7923).
From 0c101148c308e9b49cf010c0a991f887a408009d Mon Sep 17 00:00:00 2001
From: Keunes <11229646+keunes@users.noreply.github.com>
Date: Wed, 20 May 2026 16:38:08 +0200
Subject: [PATCH 04/15] Make 'Add to calendar' link copyable
---
_data/event-links.yml | 3 ++-
_layouts/event.html | 17 ++++++++---------
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/_data/event-links.yml b/_data/event-links.yml
index d3363258b..cbf840308 100644
--- a/_data/event-links.yml
+++ b/_data/event-links.yml
@@ -1,7 +1,8 @@
# used for event layout
-- key: add-to-calendar
+- key: calendar-path
icon: calendar-plus
text: events.links.add-calendar
+ url: https://calendar.antennapod.org/
- key: more-information
icon: external-link-square-alt
text: events.links.more-information
diff --git a/_layouts/event.html b/_layouts/event.html
index cf6cebecc..a816b8431 100644
--- a/_layouts/event.html
+++ b/_layouts/event.html
@@ -5,9 +5,8 @@
{%- capture nowunix %}{{ 'now' | date: '%s' }}{% endcapture %}
{%- capture posttime %}{{ page.datetime-start | date: '%s' }}{% endcapture %}
{%- assign calendar_subscription_url = site.calendar_base_url | append: '/all-events' %}
-{%- assign page_calendar_path = page['calendar-path'] | default: page.calendar_path %}
-{%- if page_calendar_path %}
- {% assign event_subscription_url = site.calendar_base_url | append: '/' | append: page_calendar_path %}
+{%- if page['calendar-path'] %}
+ {% assign event_subscription_url = site.calendar_base_url | append: '/' | append: page['calendar-path'] %}
{%- endif %}
{%- if page.uid %}
{% assign event_ics_url = site.calendar_base_url | append: '/dav/calendars/team/antennapod/' | append: page.uid | append: '.ics' %}
@@ -53,11 +52,11 @@
{{ page.title }}

{% for link in site.data.event-links %}
- {% if page[link.key] or link.key == 'add-to-calendar' %}
+ {% if page[link.key] or link.key == 'calendar-path' %}
{% unless page.location != 'online' and link.key == 'meeting-room' %}
{% unless status == 'past' and link.key == 'meeting-room' %}
- {% unless link.key == 'add-to-calendar' and page.recurring != true and page.uid == nil %}
- {% unless status == 'past' and link.key == 'add-to-calendar' %}
+ {% unless link.key == 'calendar-path' and page.recurring != true and page.uid == nil %}
+ {% unless status == 'past' and link.key == 'calendar-path' %}
{% assign info_counter = info_counter | plus:1 %}
{% endunless %}
{% endunless %}
@@ -68,8 +67,8 @@
{{ page.title }}
{% assign info_counter = info_counter | minus:1 %}
{% for link in site.data.event-links %}
- {%- if page[link.key] or link.key == 'add-to-calendar' -%}
- {% unless page[link.key] == 'online' %}{% unless page.location != 'online' and link.key == 'meeting-room' %}{% unless status == 'past' and link.key == 'meeting-room' %}{% unless link.key == 'add-to-calendar' and page.recurring != true and page.uid == nil %}{% unless status == 'past' and link.key == 'add-to-calendar' %}
+ {%- if page[link.key] or link.key == 'calendar-path' -%}
+ {% unless page[link.key] == 'online' %}{% unless page.location != 'online' and link.key == 'meeting-room' %}{% unless status == 'past' and link.key == 'meeting-room' %}{% unless link.key == 'calendar-path' and page.recurring != true and page.uid == nil %}{% unless status == 'past' and link.key == 'calendar-path' %}
{%- assign link-index = forloop.index0 %}
{% if status == 'past' %}{% assign link-index = link-index | minus: 1 %}{% endif %}
{% if info_counter > 3 %}
@@ -80,7 +79,7 @@
{{ page.title }}
From 9125a81bec85687d2e903e23ffcb4a135bad4fc9 Mon Sep 17 00:00:00 2001
From: Keunes <11229646+keunes@users.noreply.github.com>
Date: Wed, 20 May 2026 17:08:01 +0200
Subject: [PATCH 05/15] Set permalink of recurring events automatically on
build
---
_events/0_A meeting template.md | 2 --
_events/community-meeting.md | 1 -
_events/needs-decision.md | 1 -
_plugins/recurring_events_permalink.rb | 17 +++++++++++++++++
4 files changed, 17 insertions(+), 4 deletions(-)
create mode 100644 _plugins/recurring_events_permalink.rb
diff --git a/_events/0_A meeting template.md b/_events/0_A meeting template.md
index a959fa533..528808343 100644
--- a/_events/0_A meeting template.md
+++ b/_events/0_A meeting template.md
@@ -1,8 +1,6 @@
---
title: Awesome get-together on topic X π
# Required. Displayed on the event detail page.
-permalink:
-# Optional. "/events/:slug" recommended for recurring events, to avoid a date-based URL.
recurring:
# Optional. Can be "yes"
recurrence-text:
diff --git a/_events/community-meeting.md b/_events/community-meeting.md
index a1cbd7434..95c4d06b1 100644
--- a/_events/community-meeting.md
+++ b/_events/community-meeting.md
@@ -1,7 +1,6 @@
---
title: Monthly community meeting β π
summary: Our monthly meeting to discuss anything AntennaPod. Join us!
-permalink: /events/:slug
calendar-path: community-call
timezone: Europe/Brussels
datetime-start: 2022-04-09 18:00
diff --git a/_events/needs-decision.md b/_events/needs-decision.md
index 29c88bef5..861d2bdd7 100644
--- a/_events/needs-decision.md
+++ b/_events/needs-decision.md
@@ -1,7 +1,6 @@
---
title: "Needs: Decision - AntennaPod UX discussions"
summary: A bi-weekly meeting where core contributors discuss feature requests & make tough choices.
-permalink: /events/:slug
calendar-path: needs-decision
timezone: Europe/Brussels
datetime-start: 2024-02-14 20:30
diff --git a/_plugins/recurring_events_permalink.rb b/_plugins/recurring_events_permalink.rb
new file mode 100644
index 000000000..367cedd8a
--- /dev/null
+++ b/_plugins/recurring_events_permalink.rb
@@ -0,0 +1,17 @@
+module Jekyll
+ class RecurringEventsPermalinkGenerator < Generator
+ safe true
+ priority :highest
+
+ def generate(site)
+ events = site.collections['events']
+ return unless events
+
+ events.docs.each do |event|
+ if event.data['recurring'] && !event.data['permalink']
+ event.data['permalink'] = '/events/:slug'
+ end
+ end
+ end
+ end
+end
\ No newline at end of file
From f5297091602d2fa7049887ce75a6f3bb7944b4a5 Mon Sep 17 00:00:00 2001
From: Keunes <11229646+keunes@users.noreply.github.com>
Date: Wed, 20 May 2026 22:53:02 +0200
Subject: [PATCH 06/15] Rename community meeting to call
---
_events/{community-meeting.md => community-call.md} | 5 ++---
_i18n/en/events/community-call.md | 3 +++
_i18n/en/events/community-meeting.md | 3 ---
3 files changed, 5 insertions(+), 6 deletions(-)
rename _events/{community-meeting.md => community-call.md} (68%)
create mode 100644 _i18n/en/events/community-call.md
delete mode 100644 _i18n/en/events/community-meeting.md
diff --git a/_events/community-meeting.md b/_events/community-call.md
similarity index 68%
rename from _events/community-meeting.md
rename to _events/community-call.md
index 95c4d06b1..85c746aef 100644
--- a/_events/community-meeting.md
+++ b/_events/community-call.md
@@ -1,13 +1,12 @@
---
-title: Monthly community meeting β π
-summary: Our monthly meeting to discuss anything AntennaPod. Join us!
+title: Monthly community call β π
+summary: Our monthly call to discuss anything AntennaPod (and beyond). Join us!
calendar-path: community-call
timezone: Europe/Brussels
datetime-start: 2022-04-09 18:00
recurring: yes
recurrence-text: every-2nd-saturday
location: online
-location-label: AntennaPod's Jitsi Meet
more-information: https://forum.antennapod.org/t/monthly-community-call/1869
meeting-room: https://meet.antennapod.org/CommunityCall
---
diff --git a/_i18n/en/events/community-call.md b/_i18n/en/events/community-call.md
new file mode 100644
index 000000000..c285950b7
--- /dev/null
+++ b/_i18n/en/events/community-call.md
@@ -0,0 +1,3 @@
+Every month we meet to discuss anything related to AntennaPod. From feature and enhancement suggestions by contributors, via usability questions and donation expense proposals, to branding updates.
+
+Weβll discuss and announce the next topics, and report back on what we discussed on the forum.
\ No newline at end of file
diff --git a/_i18n/en/events/community-meeting.md b/_i18n/en/events/community-meeting.md
deleted file mode 100644
index 5095ed2a4..000000000
--- a/_i18n/en/events/community-meeting.md
+++ /dev/null
@@ -1,3 +0,0 @@
-Every month we meet to discuss anything related to AntennaPod. From feature and enhancement suggestions by contributors, via usability questions and donation expense proposals, to branding updates.
-
-Weβll discuss and announce the next topics, and report back on what we discussed on the forum. Do you want to receive a notification every now and then about the community calls? Then join the ['community callers' group on the forum](https://forum.antennapod.org/g/community-callers). The group will be tagged before and after the meetings, so you'll get a ping at each relevant update.
From fc4fcbaf5c4cfe38aad791bd8c21bb81c37c3557 Mon Sep 17 00:00:00 2001
From: Keunes <11229646+keunes@users.noreply.github.com>
Date: Wed, 20 May 2026 23:55:03 +0200
Subject: [PATCH 07/15] Apply correct UIDs and align meeting room URLs
---
_events/2022-07-22-10 year anniversary.md | 1 -
_events/2026-01-31-fosdem.md | 3 +--
_events/community-call.md | 3 ++-
_events/needs-decision.md | 3 ++-
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/_events/2022-07-22-10 year anniversary.md b/_events/2022-07-22-10 year anniversary.md
index 776e3e983..83432a577 100644
--- a/_events/2022-07-22-10 year anniversary.md
+++ b/_events/2022-07-22-10 year anniversary.md
@@ -1,6 +1,5 @@
---
title: 10 Year anniversary π
-uid: c9c773d2-8106-4075-89b6-e071a1daedeb
timezone: Europe/Brussels
datetime-start: 2022-07-22 18:00
datetime-end: 2022-07-22 19:00
diff --git a/_events/2026-01-31-fosdem.md b/_events/2026-01-31-fosdem.md
index 340472722..ee301373b 100644
--- a/_events/2026-01-31-fosdem.md
+++ b/_events/2026-01-31-fosdem.md
@@ -1,9 +1,8 @@
---
title: FOSDEM meetup
-uid: d9342ce0-e029-4fe4-805a-50fda92d2f4f
+uid: 9223c695-e382-4ad5-9340-856388138ab3
timezone: Europe/Brussels
datetime-start: 2026-01-31 19:30
-datetime-end: 2026-01-31 21:30
recurring: no
more-information: https://forum.antennapod.org/t/antennapod-fosdem-2026/7923
image: brussels.jpg
diff --git a/_events/community-call.md b/_events/community-call.md
index 85c746aef..4ccca3462 100644
--- a/_events/community-call.md
+++ b/_events/community-call.md
@@ -1,6 +1,7 @@
---
title: Monthly community call β π
summary: Our monthly call to discuss anything AntennaPod (and beyond). Join us!
+uid: 0718779a-5b92-48df-87e3-801e02154c06
calendar-path: community-call
timezone: Europe/Brussels
datetime-start: 2022-04-09 18:00
@@ -8,7 +9,7 @@ recurring: yes
recurrence-text: every-2nd-saturday
location: online
more-information: https://forum.antennapod.org/t/monthly-community-call/1869
-meeting-room: https://meet.antennapod.org/CommunityCall
+meeting-room: https://meet.antennapod.org/community-call
---
{% tf "events/{{ page.slug }}.md" %}
diff --git a/_events/needs-decision.md b/_events/needs-decision.md
index 861d2bdd7..a593b30d4 100644
--- a/_events/needs-decision.md
+++ b/_events/needs-decision.md
@@ -1,6 +1,7 @@
---
title: "Needs: Decision - AntennaPod UX discussions"
summary: A bi-weekly meeting where core contributors discuss feature requests & make tough choices.
+uid: dcb8867b-32a2-493f-8a43-60ff885028ed
calendar-path: needs-decision
timezone: Europe/Brussels
datetime-start: 2024-02-14 20:30
@@ -8,7 +9,7 @@ recurring: yes
recurrence-text: 2nd-4th-wednesday
location: online
more-information: https://github.com/AntennaPod/AntennaPod/issues?q=state%3Aopen%20label%3A%22Needs%3A%20Decision%22
-meeting-room: https://meet.antennapod.org/needsdecision
+meeting-room: https://meet.antennapod.org/needs-decision
---
We are very careful about AntennaPod's User Experience (UX). The [project's goal](/about) here is to balance simplicity with feature-richness. Sometimes that requires some hard thinking on how to implement a feature request.
From 7d7790b87dc94d03687a621a816cec5f9a2207ff Mon Sep 17 00:00:00 2001
From: Keunes <11229646+keunes@users.noreply.github.com>
Date: Thu, 21 May 2026 08:13:18 +0200
Subject: [PATCH 08/15] Move event links border logic to CSS
---
_layouts/event.html | 11 ++---------
_sass/_custom.scss | 12 ++++++++++++
2 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/_layouts/event.html b/_layouts/event.html
index a816b8431..33add2626 100644
--- a/_layouts/event.html
+++ b/_layouts/event.html
@@ -65,18 +65,11 @@
{{ page.title }}
{% endif %}
{% endfor %}
{% assign info_counter = info_counter | minus:1 %}
-
+
{% for link in site.data.event-links %}
{%- if page[link.key] or link.key == 'calendar-path' -%}
{% unless page[link.key] == 'online' %}{% unless page.location != 'online' and link.key == 'meeting-room' %}{% unless status == 'past' and link.key == 'meeting-room' %}{% unless link.key == 'calendar-path' and page.recurring != true and page.uid == nil %}{% unless status == 'past' and link.key == 'calendar-path' %}
- {%- assign link-index = forloop.index0 %}
- {% if status == 'past' %}{% assign link-index = link-index | minus: 1 %}{% endif %}
- {% if info_counter > 3 %}
- {% assign link-index = link-index | modulo: 2 %}
- {% else %}
- {% assign link-index = link-index | modulo: 3 %}
- {% endif %}
-
+
diff --git a/_sass/_custom.scss b/_sass/_custom.scss
index c86868199..2cd739cb9 100644
--- a/_sass/_custom.scss
+++ b/_sass/_custom.scss
@@ -624,6 +624,18 @@ blockquote {
padding-right: 1rem;
}
+.event-links-grid > .event-link-item {
+ border-left: 0;
+}
+
+.event-links-grid > .event-link-item + .event-link-item {
+ border-left: $border-width solid var(--bs-border-color);
+}
+
+.event-links-grid.row-cols-2 > .event-link-item:nth-child(2n + 1) {
+ border-left: 0;
+}
+
// Boxes and Cards - Use Bootstrap's .card-img-top for images
.project-card {
background: var(--bs-tertiary-bg);
From 5c2234f65c05c2eb587fbf0f3e75df7a6b50b0cf Mon Sep 17 00:00:00 2001
From: Keunes <11229646+keunes@users.noreply.github.com>
Date: Thu, 21 May 2026 08:52:40 +0200
Subject: [PATCH 09/15] Fix link counter logic
---
_layouts/event.html | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/_layouts/event.html b/_layouts/event.html
index 33add2626..9d14b4e2d 100644
--- a/_layouts/event.html
+++ b/_layouts/event.html
@@ -51,24 +51,26 @@ {{ page.title }}

+ {% assign info_counter = 0 %}
{% for link in site.data.event-links %}
{% if page[link.key] or link.key == 'calendar-path' %}
- {% unless page.location != 'online' and link.key == 'meeting-room' %}
- {% unless status == 'past' and link.key == 'meeting-room' %}
- {% unless link.key == 'calendar-path' and page.recurring != true and page.uid == nil %}
- {% unless status == 'past' and link.key == 'calendar-path' %}
- {% assign info_counter = info_counter | plus:1 %}
+ {% unless page.location == 'online' and link.key == 'location' %}
+ {% unless page.location != 'online' and link.key == 'meeting-room' %}
+ {% unless status == 'past' and link.key == 'meeting-room' %}
+ {% unless link.key == 'calendar-path' and page.recurring != true and page.uid == nil %}
+ {% unless status == 'past' and link.key == 'calendar-path' %}
+ {% assign info_counter = info_counter | plus: 1 %}
+ {% endunless %}
{% endunless %}
{% endunless %}
{% endunless %}
{% endunless %}
{% endif %}
{% endfor %}
- {% assign info_counter = info_counter | minus:1 %}
{% for link in site.data.event-links %}
{%- if page[link.key] or link.key == 'calendar-path' -%}
- {% unless page[link.key] == 'online' %}{% unless page.location != 'online' and link.key == 'meeting-room' %}{% unless status == 'past' and link.key == 'meeting-room' %}{% unless link.key == 'calendar-path' and page.recurring != true and page.uid == nil %}{% unless status == 'past' and link.key == 'calendar-path' %}
+ {% unless page.location == 'online' and link.key == 'location' %}{% unless page.location != 'online' and link.key == 'meeting-room' %}{% unless status == 'past' and link.key == 'meeting-room' %}{% unless link.key == 'calendar-path' and page.recurring != true and page.uid == nil %}{% unless status == 'past' and link.key == 'calendar-path' %}
From 6d3e020ae1bb85a2f39933f172df5174ab9a9ff5 Mon Sep 17 00:00:00 2001
From: Keunes <11229646+keunes@users.noreply.github.com>
Date: Thu, 21 May 2026 09:33:53 +0200
Subject: [PATCH 11/15] Add back old/incorrect event uid to satisfy guids PR
check
---
_events/2022-07-22-10 year anniversary.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/_events/2022-07-22-10 year anniversary.md b/_events/2022-07-22-10 year anniversary.md
index 83432a577..14262054e 100644
--- a/_events/2022-07-22-10 year anniversary.md
+++ b/_events/2022-07-22-10 year anniversary.md
@@ -7,6 +7,7 @@ recurring: no
location: online
more-information: https://forum.antennapod.org/t/antennapod-10-years-anniversary-call-friday-at-18-00-6-pm-cest/2184
meeting-room: https://meet.antennapod.org/10YearsAnniversary
+uid: c9c773d2-8106-4075-89b6-e071a1daedeb
---
AntennaPodβs very first release was on 2012-07-22. This is also when the app was first uploaded to Google Play. AntennaPod is turning a decade old!
From d4a5bef3e2d48ba1887f7dd3552aa0ff350cb81d Mon Sep 17 00:00:00 2001
From: Keunes <11229646+keunes@users.noreply.github.com>
Date: Thu, 21 May 2026 10:00:21 +0200
Subject: [PATCH 12/15] Add meeting rome base link to link data
---
_data/event-links.yml | 2 +-
_events/2022-07-22-10 year anniversary.md | 2 +-
_events/community-call.md | 2 +-
_events/needs-decision.md | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/_data/event-links.yml b/_data/event-links.yml
index cbf840308..63cf4f226 100644
--- a/_data/event-links.yml
+++ b/_data/event-links.yml
@@ -10,7 +10,7 @@
- key: meeting-room
icon: headset
text: events.links.open-meeting
- url:
+ url: https://meet.antennapod.org/
- key: blog-post
icon: newspaper
text: events.links.open-blog
diff --git a/_events/2022-07-22-10 year anniversary.md b/_events/2022-07-22-10 year anniversary.md
index 14262054e..afc4e6c54 100644
--- a/_events/2022-07-22-10 year anniversary.md
+++ b/_events/2022-07-22-10 year anniversary.md
@@ -6,7 +6,7 @@ datetime-end: 2022-07-22 19:00
recurring: no
location: online
more-information: https://forum.antennapod.org/t/antennapod-10-years-anniversary-call-friday-at-18-00-6-pm-cest/2184
-meeting-room: https://meet.antennapod.org/10YearsAnniversary
+meeting-room: 10YearsAnniversary
uid: c9c773d2-8106-4075-89b6-e071a1daedeb
---
diff --git a/_events/community-call.md b/_events/community-call.md
index 4ccca3462..684a6130c 100644
--- a/_events/community-call.md
+++ b/_events/community-call.md
@@ -9,7 +9,7 @@ recurring: yes
recurrence-text: every-2nd-saturday
location: online
more-information: https://forum.antennapod.org/t/monthly-community-call/1869
-meeting-room: https://meet.antennapod.org/community-call
+meeting-room: community-call
---
{% tf "events/{{ page.slug }}.md" %}
diff --git a/_events/needs-decision.md b/_events/needs-decision.md
index a593b30d4..aaf1169e5 100644
--- a/_events/needs-decision.md
+++ b/_events/needs-decision.md
@@ -9,7 +9,7 @@ recurring: yes
recurrence-text: 2nd-4th-wednesday
location: online
more-information: https://github.com/AntennaPod/AntennaPod/issues?q=state%3Aopen%20label%3A%22Needs%3A%20Decision%22
-meeting-room: https://meet.antennapod.org/needs-decision
+meeting-room: needs-decision
---
We are very careful about AntennaPod's User Experience (UX). The [project's goal](/about) here is to balance simplicity with feature-richness. Sometimes that requires some hard thinking on how to implement a feature request.
From af50c8589440cc47bae04dd6f87ce3e92881ed98 Mon Sep 17 00:00:00 2001
From: Keunes <11229646+keunes@users.noreply.github.com>
Date: Fri, 22 May 2026 08:39:00 +0200
Subject: [PATCH 13/15] Temporarily disable recurring event subscription links
---
_includes/add-to-calendar-modal.html | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/_includes/add-to-calendar-modal.html b/_includes/add-to-calendar-modal.html
index faf2b8b22..2142c778f 100644
--- a/_includes/add-to-calendar-modal.html
+++ b/_includes/add-to-calendar-modal.html
@@ -10,11 +10,16 @@
{% t events.links.add-calen
From 347a24960e70a9c5e12f7d50195fa37a322695d0 Mon Sep 17 00:00:00 2001
From: Keunes <11229646+keunes@users.noreply.github.com>
Date: Sat, 23 May 2026 16:19:02 +0200
Subject: [PATCH 14/15] Address Copilot review comments
---
_config.yml | 1 -
_i18n/en/general/event-sidebar.md | 3 ++-
_i18n/en/general/events-add-calendar-modal.md | 2 +-
_layouts/event.html | 7 ++++---
events/index.html | 4 +---
5 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/_config.yml b/_config.yml
index 829b2e3b1..992dad4ec 100644
--- a/_config.yml
+++ b/_config.yml
@@ -10,7 +10,6 @@ mastodon_username: AntennaPod
# Mastodon server: do not include protocol, domain only
mastodon_server: fosstodon.org
bluesky_username: AntennaPod.org
-calendar_base_url: "https://calendar.antennapod.org"
# Build settings
future: true
diff --git a/_i18n/en/general/event-sidebar.md b/_i18n/en/general/event-sidebar.md
index 4ecdbfbeb..9689ad89e 100644
--- a/_i18n/en/general/event-sidebar.md
+++ b/_i18n/en/general/event-sidebar.md
@@ -6,4 +6,5 @@ Do you know of an event in your neighbourhood and would love to meet up with Ant
[Propose a meet-up](https://forum.antennapod.org)
-
Add our events to your calendar
\ No newline at end of file
+{% assign calendar_base_url = site.data.event-links | where: 'key', 'calendar-path' | map: 'url' | first %}
+
Add our events to your calendar
\ No newline at end of file
diff --git a/_i18n/en/general/events-add-calendar-modal.md b/_i18n/en/general/events-add-calendar-modal.md
index 336bd8c18..23d96117e 100644
--- a/_i18n/en/general/events-add-calendar-modal.md
+++ b/_i18n/en/general/events-add-calendar-modal.md
@@ -1 +1 @@
-Want to subscribe to just this gathering, or all our calls and meetings?
\ No newline at end of file
+Want to download the calendar file of this gathering, or subscribe to all our calls and meetings?
\ No newline at end of file
diff --git a/_layouts/event.html b/_layouts/event.html
index a8332cd5f..2f913184d 100644
--- a/_layouts/event.html
+++ b/_layouts/event.html
@@ -4,12 +4,13 @@
{%- capture nowunix %}{{ 'now' | date: '%s' }}{% endcapture %}
{%- capture posttime %}{{ page.datetime-start | date: '%s' }}{% endcapture %}
-{%- assign calendar_subscription_url = site.calendar_base_url | append: '/all-events' %}
+{%- assign calendar_base_url = site.data.event-links | where: 'key', 'calendar-path' | map: 'url' | first %}
+{%- assign calendar_subscription_url = calendar_base_url | append: 'all-events' %}
{%- if page['calendar-path'] %}
- {% assign event_subscription_url = site.calendar_base_url | append: '/' | append: page['calendar-path'] %}
+ {% assign event_subscription_url = calendar_base_url | append: page['calendar-path'] %}
{%- endif %}
{%- if page.uid %}
- {% assign event_ics_url = site.calendar_base_url | append: '/dav/calendars/team/antennapod/' | append: page.uid | append: '.ics' %}
+ {% assign event_ics_url = calendar_base_url | append: 'dav/calendars/team/antennapod/' | append: page.uid | append: '.ics' %}
{%- endif %}
{%- if page.recurring != true %}
{% if posttime > nowunix %}
diff --git a/events/index.html b/events/index.html
index 952acc21c..a9991e9f0 100644
--- a/events/index.html
+++ b/events/index.html
@@ -87,6 +87,4 @@
-
-
-{% include add-to-calendar-modal.html %}
\ No newline at end of file
+
\ No newline at end of file
From af713516c7ba4705143f3711a726f328c3615805 Mon Sep 17 00:00:00 2001
From: Keunes <11229646+keunes@users.noreply.github.com>
Date: Sat, 23 May 2026 16:19:38 +0200
Subject: [PATCH 15/15] Address Copilot feedback on copy-url.js robustness
---
_i18n/en/general/event-sidebar.md | 2 +-
_includes/add-to-calendar-modal.html | 4 ++--
_includes/share.html | 2 +-
assets/js/copy-url.js | 16 +++++++++++++++-
4 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/_i18n/en/general/event-sidebar.md b/_i18n/en/general/event-sidebar.md
index 9689ad89e..123d3ccd0 100644
--- a/_i18n/en/general/event-sidebar.md
+++ b/_i18n/en/general/event-sidebar.md
@@ -7,4 +7,4 @@ Do you know of an event in your neighbourhood and would love to meet up with Ant
[Propose a meet-up](https://forum.antennapod.org)
{% assign calendar_base_url = site.data.event-links | where: 'key', 'calendar-path' | map: 'url' | first %}
-
Add our events to your calendar
\ No newline at end of file
+
Add our events to your calendar
\ No newline at end of file
diff --git a/_includes/add-to-calendar-modal.html b/_includes/add-to-calendar-modal.html
index 2142c778f..d287af691 100644
--- a/_includes/add-to-calendar-modal.html
+++ b/_includes/add-to-calendar-modal.html
@@ -9,12 +9,12 @@
{% t events.links.add-calen
{% tf general/events-add-calendar-modal.md %}