Jun 02, 10-11 AM (19)
Jun 02, 11-12 PM (15)
Jun 02, 12-1 PM (47)
Jun 02, 1-2 PM (66)
Jun 02, 2-3 PM (102)
Jun 02, 3-4 PM (23)
Jun 02, 4-5 PM (17)
Jun 02, 5-6 PM (27)
Jun 02, 6-7 PM (29)
Jun 02, 7-8 PM (18)
Jun 02, 8-9 PM (9)
Jun 02, 9-10 PM (19)
Jun 02, 10-11 PM (33)
Jun 02, 11-12 AM (22)
Jun 03, 12-1 AM (13)
Jun 03, 1-2 AM (31)
Jun 03, 2-3 AM (16)
Jun 03, 3-4 AM (0)
Jun 03, 4-5 AM (7)
Jun 03, 5-6 AM (12)
Jun 03, 6-7 AM (80)
Jun 03, 7-8 AM (16)
Jun 03, 8-9 AM (24)
Jun 03, 9-10 AM (22)
Jun 03, 10-11 AM (39)
Jun 03, 11-12 PM (76)
Jun 03, 12-1 PM (93)
Jun 03, 1-2 PM (28)
Jun 03, 2-3 PM (62)
Jun 03, 3-4 PM (26)
Jun 03, 4-5 PM (24)
Jun 03, 5-6 PM (23)
Jun 03, 6-7 PM (15)
Jun 03, 7-8 PM (17)
Jun 03, 8-9 PM (19)
Jun 03, 9-10 PM (9)
Jun 03, 10-11 PM (31)
Jun 03, 11-12 AM (14)
Jun 04, 12-1 AM (12)
Jun 04, 1-2 AM (4)
Jun 04, 2-3 AM (1)
Jun 04, 3-4 AM (5)
Jun 04, 4-5 AM (1)
Jun 04, 5-6 AM (0)
Jun 04, 6-7 AM (14)
Jun 04, 7-8 AM (10)
Jun 04, 8-9 AM (11)
Jun 04, 9-10 AM (19)
Jun 04, 10-11 AM (11)
Jun 04, 11-12 PM (14)
Jun 04, 12-1 PM (53)
Jun 04, 1-2 PM (39)
Jun 04, 2-3 PM (60)
Jun 04, 3-4 PM (12)
Jun 04, 4-5 PM (4)
Jun 04, 5-6 PM (7)
Jun 04, 6-7 PM (46)
Jun 04, 7-8 PM (27)
Jun 04, 8-9 PM (4)
Jun 04, 9-10 PM (2)
Jun 04, 10-11 PM (24)
Jun 04, 11-12 AM (7)
Jun 05, 12-1 AM (6)
Jun 05, 1-2 AM (8)
Jun 05, 2-3 AM (1)
Jun 05, 3-4 AM (1)
Jun 05, 4-5 AM (1)
Jun 05, 5-6 AM (5)
Jun 05, 6-7 AM (9)
Jun 05, 7-8 AM (12)
Jun 05, 8-9 AM (8)
Jun 05, 9-10 AM (11)
Jun 05, 10-11 AM (12)
Jun 05, 11-12 PM (8)
Jun 05, 12-1 PM (52)
Jun 05, 1-2 PM (61)
Jun 05, 2-3 PM (26)
Jun 05, 3-4 PM (24)
Jun 05, 4-5 PM (17)
Jun 05, 5-6 PM (7)
Jun 05, 6-7 PM (14)
Jun 05, 7-8 PM (12)
Jun 05, 8-9 PM (6)
Jun 05, 9-10 PM (2)
Jun 05, 10-11 PM (20)
Jun 05, 11-12 AM (9)
Jun 06, 12-1 AM (6)
Jun 06, 1-2 AM (0)
Jun 06, 2-3 AM (3)
Jun 06, 3-4 AM (4)
Jun 06, 4-5 AM (0)
Jun 06, 5-6 AM (24)
Jun 06, 6-7 AM (1)
Jun 06, 7-8 AM (2)
Jun 06, 8-9 AM (3)
Jun 06, 9-10 AM (0)
Jun 06, 10-11 AM (3)
Jun 06, 11-12 PM (6)
Jun 06, 12-1 PM (2)
Jun 06, 1-2 PM (2)
Jun 06, 2-3 PM (2)
Jun 06, 3-4 PM (18)
Jun 06, 4-5 PM (1)
Jun 06, 5-6 PM (6)
Jun 06, 6-7 PM (0)
Jun 06, 7-8 PM (6)
Jun 06, 8-9 PM (0)
Jun 06, 9-10 PM (1)
Jun 06, 10-11 PM (27)
Jun 06, 11-12 AM (9)
Jun 07, 12-1 AM (14)
Jun 07, 1-2 AM (2)
Jun 07, 2-3 AM (0)
Jun 07, 3-4 AM (0)
Jun 07, 4-5 AM (1)
Jun 07, 5-6 AM (1)
Jun 07, 6-7 AM (3)
Jun 07, 7-8 AM (0)
Jun 07, 8-9 AM (0)
Jun 07, 9-10 AM (1)
Jun 07, 10-11 AM (2)
Jun 07, 11-12 PM (2)
Jun 07, 12-1 PM (5)
Jun 07, 1-2 PM (35)
Jun 07, 2-3 PM (2)
Jun 07, 3-4 PM (4)
Jun 07, 4-5 PM (2)
Jun 07, 5-6 PM (4)
Jun 07, 6-7 PM (0)
Jun 07, 7-8 PM (0)
Jun 07, 8-9 PM (17)
Jun 07, 9-10 PM (1)
Jun 07, 10-11 PM (21)
Jun 07, 11-12 AM (9)
Jun 08, 12-1 AM (9)
Jun 08, 1-2 AM (5)
Jun 08, 2-3 AM (3)
Jun 08, 3-4 AM (4)
Jun 08, 4-5 AM (2)
Jun 08, 5-6 AM (9)
Jun 08, 6-7 AM (5)
Jun 08, 7-8 AM (25)
Jun 08, 8-9 AM (36)
Jun 08, 9-10 AM (40)
Jun 08, 10-11 AM (24)
Jun 08, 11-12 PM (22)
Jun 08, 12-1 PM (40)
Jun 08, 1-2 PM (46)
Jun 08, 2-3 PM (33)
Jun 08, 3-4 PM (27)
Jun 08, 4-5 PM (12)
Jun 08, 5-6 PM (23)
Jun 08, 6-7 PM (14)
Jun 08, 7-8 PM (3)
Jun 08, 8-9 PM (6)
Jun 08, 9-10 PM (18)
Jun 08, 10-11 PM (29)
Jun 08, 11-12 AM (8)
Jun 09, 12-1 AM (5)
Jun 09, 1-2 AM (3)
Jun 09, 2-3 AM (1)
Jun 09, 3-4 AM (3)
Jun 09, 4-5 AM (26)
Jun 09, 5-6 AM (5)
Jun 09, 6-7 AM (23)
Jun 09, 7-8 AM (46)
Jun 09, 8-9 AM (35)
Jun 09, 9-10 AM (41)
Jun 09, 10-11 AM (5)
2,738 commits this week Jun 02, 2026 - Jun 09, 2026
Add per-proposal Open Graph cards for shared links
Social crawlers don't run the Elm app, so links pre-selecting a proposal
previously shared the generic tool card. The Python server now injects the
proposal title into the OG/Twitter meta tags when a valid proposalId is present.

- index.html: OG title/description/image become Jinja2 variables (generic defaults)
- /page route: resolve the proposal title from Koios (meta_json.body.title),
picking the network from the request's networkId param
- validate the bech32 gov_action id before any network call
- cache lookups in-memory (1h on success, 60s on failure) with a size cap
- short timeout + generic fallback so a slow/erroring Koios never blocks a crawler

Signed-off-by: Matthieu Pizenberg <[email protected]>
feat: revamp the /ambassadors page with interactive map, impact overview, directory and milestones (#665)
* feat: revamp /ambassadors with interactive world map, impact overview, milestones, directory and stories

* chore: simplify /ambassadors — drop dead featured-card CSS and dedupe avatarColor util

* feat: replace ambassador milestones with dated top achievements and source links

* fix: show governance apps on /governance#tools and prioritize maintainer picks

* feat: adopt new ambassador data schema with SOON placeholder fallbacks

* feat: align /ambassadors with mockup — featured card, contribution filter, banner CTA

* chore: simplify /ambassadors — share AmbassadorAvatar + Flag, dedupe present helper

* feat: split ambassador achievements into own file with evidence array

* style: drop red title accent and switch hero eyebrow to 'Since 2018'

* style: swap 'translating' for 'moderating' in hero lede

* feat: use multiavatar for ambassador avatar fallback

* chore: drop dead letter-bubble CSS now that avatars are SVG images

* feat: rebuild 'What Ambassadors Do' to mockup — 7-tile row with intro column

* i18n: unify 'Ambassador' capitalization across user-facing strings

* feat: backfill 2018-2020 Ambassador milestones and reframe section as handpicked selection

* style: drop em dashes from 2018 milestone body

* feat: add 2021/2023/2024 Cardano Summit community-event milestones

* feat: add Cardano Effect podcast, Cardano on the Rocks and SPO Scripts milestones

* feat: add 2025 Berlin Ambassador Retreat milestone

* feat: rebuild Impact Overview to mockup with intro column + metrics row

* style: drop section divider labels to match mockup layout

* style: align Impact Overview copy to mockup, drop view-all CTA, normal-link Learn-more

* feat: wire Impact Overview to real CRM data and drop placeholder sparklines

* feat: restore Sparkline with realistic cumulative trends ending at CRM values

* style: vary Impact trends per category to avoid linear look

* feat: 2-col Achievements section with aligned grid and fixed timeline

* chore: drop 'First Ambassador cohort announced' milestone

* fix: anchor timeline line to scroll content so it stays aligned with all dots

* style: reverse Achievements timeline so newest entries appear first

* style: align Achievement timeline dots above year labels

* feat: fold Translations tile into Content Creation in What Ambassadors Do

* feat: random bio-preferred FeaturedCard that follows pin with connector line

* fix: tighten featured-card clamp and brighten connector line for narrow viewports

* fix: align connector line endpoint with card top so the dash stays visible

* style: drop arrow from FeaturedCard 'View profile' link

* feat: deep-link ambassador cards from FeaturedCard and map tooltip

* chore: simplify ambassador slug helpers, memoize map and avatars

* fix: drop Cardano Effect milestone and pin Catalyst Reviewers to 2021

* feat: refresh Ambassador impact data with real stories and images

* feat: add Reddit-badge fallback to impact stories and drop read-more arrow

* feat: relink Ambassador CTA buttons to forum hub and roles thread

* chore: simplify impact stories, reuse Flag and shrink thumbnails

* feat: update ambassador data with enriched taglines and socials

* chore: remove program intro and benefits sections from ambassadors page

* chore: simplify impact overview to current-value cards

* chore: remove unused ambassador overview and roles sections

* feat: add 12-month period label to impact overview

* fix: drop dead clio link from Cardano on the Rocks achievement