From 9eac07d231a626438dfa2f8a8e42f962fa8a58fc Mon Sep 17 00:00:00 2001
From: Claude
Date: Tue, 12 May 2026 14:42:18 +0000
Subject: [PATCH 1/2] feat: add filtered newsletter.xml feed for Buttondown
Adds /newsletter.xml that filters conferences to those whose CFP closes
in the next 14 days, with pubDate set to build time so Buttondown's
RSS-to-email picks items up (the existing /feed.xml uses future-dated
CFP deadlines as pubDate, which Buttondown skips).
https://claude.ai/code/session_01BKQ3qcHaToNZyecwyYGoBW
---
newsletter.xml | 44 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
create mode 100644 newsletter.xml
diff --git a/newsletter.xml b/newsletter.xml
new file mode 100644
index 00000000000..a729e10ea5a
--- /dev/null
+++ b/newsletter.xml
@@ -0,0 +1,44 @@
+---
+permalink: /newsletter.xml
+---
+
+
+
+ {{ site.title | xml_escape }} Newsletter
+ Python conference CFP deadlines coming up in the next 14 days
+ {{ site.url }}
+
+ en-US
+ {{ site.time | date_to_rfc822 }}
+ Jekyll v{{ jekyll.version }}
+{%- assign today = site.time | date: "%s" | plus: 0 -%}
+{%- assign horizon = site.time | date: "%s" | plus: 1209600 -%}
+{%- for conf in site.data.conferences -%}
+ {%- if conf.cfp_ext -%}
+ {%- assign cfp = conf.cfp_ext -%}
+ {%- else -%}
+ {%- assign cfp = conf.cfp -%}
+ {%- endif -%}
+ {%- if cfp != "TBA" and cfp != "Cancelled" and cfp != "None" -%}
+ {%- assign cfp_epoch = cfp | date: "%s" | plus: 0 -%}
+ {%- if cfp_epoch >= today and cfp_epoch <= horizon %}
+ -
+ {{ conf.conference | xml_escape }} {{ conf.year }} — CFP closes {{ cfp | date: "%b %-d" }}
+ {{ site.url }}{{ site.baseurl }}/conference/{{ conf.conference | slugify: "latin" }}-{{ conf.year }}/
+ {{ conf.conference | slugify: "latin" }}-{{ conf.year }}
+ {{ site.time | date_to_rfc822 }}
+ {{ site.title | xml_escape }}
+ {{ conf.sub }}
+ 📍 {{ conf.place | xml_escape }} · 📅 {% translate_file dates/pretty_dates.html start=conf.start end=conf.end %}
+📝 CfP deadline: {% translate_file dates/pretty_dates.html start=cfp end=cfp %}
+{% if conf.cfp_link %}Submit your proposal →
{% endif %}]]>
+
+ {%- endif -%}
+ {%- endif -%}
+{%- endfor %}
+
+
From 59a14452ec1f2cd3a07deb5bcffc146feb71cd31 Mon Sep 17 00:00:00 2001
From: Claude
Date: Tue, 12 May 2026 15:36:58 +0000
Subject: [PATCH 2/2] feat: add dynamic urgency pill to newsletter items
Computes days_until from CFP deadline and emits a colored pill at the
top of each item's description, tiered by urgency:
- Last day! (red)
- 1 day left (orange)
- 2-3 days left (amber)
- 4-7 days left (yellow)
- 8-14 days (blue)
Uses midnight-UTC rounding for accurate calendar-day counts. Pairs with
the existing taglines for at-a-glance urgency plus community flavor.
https://claude.ai/code/session_01BKQ3qcHaToNZyecwyYGoBW
---
newsletter.xml | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/newsletter.xml b/newsletter.xml
index d7f07dfd7a9..092af529912 100644
--- a/newsletter.xml
+++ b/newsletter.xml
@@ -30,7 +30,9 @@ permalink: /newsletter.xml
{%- assign cfp_epoch = cfp | date: "%s" | plus: 0 -%}
{%- if cfp_epoch >= today and cfp_epoch <= horizon -%}
{%- assign idx = emitted | modulo: shuffled.size -%}
- {%- assign tagline = shuffled[idx] %}
+ {%- assign tagline = shuffled[idx] -%}
+ {%- assign today_midnight = site.time | date: "%Y-%m-%d" | date: "%s" | plus: 0 -%}
+ {%- assign days_until = cfp_epoch | minus: today_midnight | divided_by: 86400 %}
-
{{ conf.conference | xml_escape }} {{ conf.year }}
{{ site.url }}{{ site.baseurl }}/conference/{{ conf.conference | slugify: "latin" }}-{{ conf.year }}/
@@ -38,7 +40,15 @@ permalink: /newsletter.xml
{{ site.time | date_to_rfc822 }}
{{ site.title | xml_escape }}
{{ conf.sub }}
- 📍 {{ conf.place | xml_escape }} · 📅 {% translate_file dates/pretty_dates.html start=conf.start end=conf.end %}
+
+{%- if days_until <= 0 -%}🚨 Last day!
+{%- elsif days_until == 1 -%}🔥 1 day left
+{%- elsif days_until <= 3 -%}⏰ {{ days_until }} days left
+{%- elsif days_until <= 7 -%}⏳ {{ days_until }} days left
+{%- else -%}📅 {{ days_until }} days
+{%- endif -%}
+
+
📍 {{ conf.place | xml_escape }} · 📅 {% translate_file dates/pretty_dates.html start=conf.start end=conf.end %}
✍ CfP closes {% translate_file dates/pretty_dates.html start=cfp end=cfp %} — {{ tagline }}
]]>
{%- assign emitted = emitted | plus: 1 -%}