You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@conferences.apache.org by gi...@apache.org on 2026/07/13 20:14:31 UTC
(conferences-cc-website) branch asf-site updated: Commit build products
This is an automated email from the ASF dual-hosted git repository.
github-actions[bot] pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/conferences-cc-website.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 3b5337f Commit build products
3b5337f is described below
commit 3b5337fd92daf24910ae49ff6e5371c71a78f94e
Author: Build Pelican (action) <pr...@infra.apache.org>
AuthorDate: Mon Jul 13 20:14:26 2026 +0000
Commit build products
---
output/404.ezmd | 14 -
output/404.html | 127 +++
output/_pagefind/fragment/en_1d88c4c.pf_fragment | Bin 0 -> 1458 bytes
output/_pagefind/fragment/en_21fc97f.pf_fragment | Bin 0 -> 429 bytes
output/_pagefind/fragment/en_29a9c67.pf_fragment | Bin 0 -> 415 bytes
output/_pagefind/fragment/en_2fb2ac2.pf_fragment | Bin 0 -> 1026 bytes
output/_pagefind/fragment/en_35d4c49.pf_fragment | Bin 0 -> 585 bytes
output/_pagefind/fragment/en_45272c8.pf_fragment | Bin 0 -> 875 bytes
output/_pagefind/fragment/en_47a10d3.pf_fragment | Bin 0 -> 1028 bytes
output/_pagefind/fragment/en_542856c.pf_fragment | Bin 0 -> 896 bytes
output/_pagefind/fragment/en_5cce211.pf_fragment | Bin 0 -> 1173 bytes
output/_pagefind/fragment/en_63ed485.pf_fragment | Bin 0 -> 833 bytes
output/_pagefind/fragment/en_6995b79.pf_fragment | Bin 0 -> 1166 bytes
output/_pagefind/fragment/en_7659ae9.pf_fragment | Bin 0 -> 1221 bytes
output/_pagefind/fragment/en_7b2bfde.pf_fragment | Bin 0 -> 371 bytes
output/_pagefind/fragment/en_7c11a6b.pf_fragment | Bin 0 -> 333 bytes
output/_pagefind/fragment/en_8b2eae2.pf_fragment | Bin 0 -> 506 bytes
output/_pagefind/fragment/en_a979f39.pf_fragment | Bin 0 -> 1187 bytes
output/_pagefind/fragment/en_ab8f462.pf_fragment | Bin 0 -> 635 bytes
output/_pagefind/fragment/en_af8917d.pf_fragment | Bin 0 -> 429 bytes
output/_pagefind/fragment/en_b6857fb.pf_fragment | Bin 0 -> 413 bytes
output/_pagefind/fragment/en_beb56d1.pf_fragment | Bin 0 -> 1326 bytes
output/_pagefind/fragment/en_c3db1fd.pf_fragment | Bin 0 -> 425 bytes
output/_pagefind/fragment/en_c5b2982.pf_fragment | Bin 0 -> 735 bytes
output/_pagefind/fragment/en_c73783a.pf_fragment | Bin 0 -> 416 bytes
output/_pagefind/fragment/en_c940f54.pf_fragment | Bin 0 -> 2163 bytes
output/_pagefind/fragment/en_c9437f3.pf_fragment | Bin 0 -> 432 bytes
output/_pagefind/fragment/en_cac49ef.pf_fragment | Bin 0 -> 263 bytes
output/_pagefind/fragment/en_d1548cc.pf_fragment | Bin 0 -> 367 bytes
output/_pagefind/fragment/en_de8475b.pf_fragment | Bin 0 -> 673 bytes
output/_pagefind/fragment/en_e8ed161.pf_fragment | Bin 0 -> 404 bytes
output/_pagefind/fragment/en_ee4e266.pf_fragment | Bin 0 -> 2596 bytes
output/_pagefind/fragment/en_f35e241.pf_fragment | Bin 0 -> 418 bytes
output/_pagefind/fragment/en_f3e5a41.pf_fragment | Bin 0 -> 2985 bytes
output/_pagefind/fragment/en_fad3359.pf_fragment | Bin 0 -> 411 bytes
output/_pagefind/fragment/en_fb80135.pf_fragment | Bin 0 -> 427 bytes
output/_pagefind/index/en_3ae24a8.pf_index | Bin 0 -> 25370 bytes
output/_pagefind/pagefind-entry.json | 1 +
output/_pagefind/pagefind-highlight.js | 1069 ++++++++++++++++++++
output/_pagefind/pagefind-modular-ui.css | 214 ++++
output/_pagefind/pagefind-modular-ui.js | 8 +
output/_pagefind/pagefind-ui.css | 1 +
output/_pagefind/pagefind-ui.js | 2 +
output/_pagefind/pagefind.en_e53d2b1f27.pf_meta | Bin 0 -> 338 bytes
output/_pagefind/pagefind.js | 9 +
output/_pagefind/wasm.en.pagefind | Bin 0 -> 70873 bytes
output/_pagefind/wasm.unknown.pagefind | Bin 0 -> 67202 bytes
output/about/index.ezmd | 284 ------
output/about/index.html | 385 +++++++
output/code-of-conduct.ezmd | 20 -
output/code-of-conduct.html | 126 +++
output/css/styles.css | 1 +
output/events/apache-bigdata-eu-2015.ezmd | 25 -
output/events/apache-bigdata-eu-2015.html | 198 ++++
output/events/apache-bigdata-eu-2016.ezmd | 25 -
output/events/apache-bigdata-eu-2016.html | 198 ++++
output/events/apache-bigdata-na-2016.ezmd | 25 -
output/events/apache-bigdata-na-2016.html | 198 ++++
output/events/apache-bigdata-na-2017.ezmd | 30 -
output/events/apache-bigdata-na-2017.html | 201 ++++
output/events/apachecon-1998.ezmd | 66 --
output/events/apachecon-1998.html | 222 ++++
output/events/apachecon-eu-2014.ezmd | 25 -
output/events/apachecon-eu-2014.html | 198 ++++
output/events/apachecon-eu-2015.ezmd | 25 -
output/events/apachecon-eu-2015.html | 198 ++++
output/events/apachecon-eu-2016.ezmd | 25 -
output/events/apachecon-eu-2016.html | 198 ++++
output/events/apachecon-na-2014.ezmd | 35 -
output/events/apachecon-na-2014.html | 204 ++++
output/events/apachecon-na-2015.ezmd | 35 -
output/events/apachecon-na-2015.html | 204 ++++
output/events/apachecon-na-2016.ezmd | 30 -
output/events/apachecon-na-2016.html | 201 ++++
output/events/apachecon-na-2017.ezmd | 30 -
output/events/apachecon-na-2017.html | 201 ++++
output/events/asia-2026/index.ezmd | 32 -
output/events/asia-2026/index.html | 201 ++++
output/events/asia-2026/tracks/agentic-coding.ezmd | 12 -
output/events/asia-2026/tracks/agentic-coding.html | 201 ++++
output/events/asia-2026/tracks/ai-infra.ezmd | 15 -
output/events/asia-2026/tracks/ai-infra.html | 205 ++++
output/events/asia-2026/tracks/index.ezmd | 29 -
output/events/asia-2026/tracks/index.html | 282 ++++++
output/events/denver-2024.ezmd | 22 -
output/events/denver-2024.html | 201 ++++
.../glasgow-2026/call-for-presentations.ezmd | 59 --
.../glasgow-2026/call-for-presentations.html | 279 +++++
output/events/glasgow-2026/index.ezmd | 41 -
output/events/glasgow-2026/index.html | 504 +++++++++
.../events/glasgow-2026/lakehouse-day-glasgow.ezmd | 69 --
.../events/glasgow-2026/lakehouse-day-glasgow.html | 299 ++++++
output/events/glasgow-2026/register.ezmd | 42 -
output/events/glasgow-2026/register.html | 264 +++++
output/events/glasgow-2026/schedule.ezmd | 33 -
output/events/glasgow-2026/schedule.html | 250 +++++
output/events/glasgow-2026/sponsorship.ezmd | 11 -
output/events/glasgow-2026/sponsorship.html | 216 ++++
output/events/glasgow-2026/travel.ezmd | 56 -
output/events/glasgow-2026/travel.html | 274 +++++
output/events/glasgow-2026/why-attend.ezmd | 36 -
output/events/glasgow-2026/why-attend.html | 228 +++++
output/events/index.ezmd | 45 -
output/events/index.html | 795 +++++++++++++++
output/events/minneapolis-2025.ezmd | 22 -
output/events/minneapolis-2025.html | 201 ++++
output/index.ezmd | 161 ---
output/index.html | 285 ++++++
output/schedule.ezmd | 8 -
output/schedule.html | 121 +++
output/sponsors.ezmd | 9 -
output/sponsors.html | 120 +++
112 files changed, 9290 insertions(+), 1396 deletions(-)
diff --git a/output/404.ezmd b/output/404.ezmd
deleted file mode 100644
index 36eada4..0000000
--- a/output/404.ezmd
+++ /dev/null
@@ -1,14 +0,0 @@
-title: 404
-bodytag: id="404"
-
-<section data-pagefind-ignore="all">
- <div class="inner py-xl text-center">
- <h1>404</h1>
- <p><strong>That page can't be found.</strong></p>
- <p>Try searching Apache.org</p>
- <div class="col-sm-3"></div>
- <div class="col-sm-6 text-left">
- <div id="page-404-search" class="input-group" style="width: 100%; padding: 0 5px;"></div>
- </div>
- </div>
-</section>
diff --git a/output/404.html b/output/404.html
new file mode 100644
index 0000000..42c2d20
--- /dev/null
+++ b/output/404.html
@@ -0,0 +1,127 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>404 | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body id="404" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/about/">About</a></li>
+ <li><a href="/sponsors/">Sponsors</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ </ul>
+</nav> </header>
+
+ <div class="hero hero--defaults relative">
+ <div class="inner py-xl relative z1">
+ <div class="hero-content text-center">
+ <h1 class="hero-title">404</h1>
+ </div>
+ </div>
+ </div>
+ <section class="maincontent">
+ <div class="inner py-xl">
+ <section data-pagefind-ignore="all">
+<div class="inner py-xl text-center">
+<h1 id="404">404</h1>
+<p><strong>That page can't be found.</strong></p>
+<p>Try searching Apache.org</p>
+<div class="col-sm-3"></div>
+<div class="col-sm-6 text-left">
+<div class="input-group" id="page-404-search" style="width: 100%; padding: 0 5px;"></div>
+</div>
+</div>
+</section>
+
+ </div>
+ </section>
+
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/_pagefind/fragment/en_1d88c4c.pf_fragment b/output/_pagefind/fragment/en_1d88c4c.pf_fragment
new file mode 100644
index 0000000..2957740
Binary files /dev/null and b/output/_pagefind/fragment/en_1d88c4c.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_21fc97f.pf_fragment b/output/_pagefind/fragment/en_21fc97f.pf_fragment
new file mode 100644
index 0000000..2839ac4
Binary files /dev/null and b/output/_pagefind/fragment/en_21fc97f.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_29a9c67.pf_fragment b/output/_pagefind/fragment/en_29a9c67.pf_fragment
new file mode 100644
index 0000000..b8f80a6
Binary files /dev/null and b/output/_pagefind/fragment/en_29a9c67.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_2fb2ac2.pf_fragment b/output/_pagefind/fragment/en_2fb2ac2.pf_fragment
new file mode 100644
index 0000000..3859a5a
Binary files /dev/null and b/output/_pagefind/fragment/en_2fb2ac2.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_35d4c49.pf_fragment b/output/_pagefind/fragment/en_35d4c49.pf_fragment
new file mode 100644
index 0000000..8ea6b54
Binary files /dev/null and b/output/_pagefind/fragment/en_35d4c49.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_45272c8.pf_fragment b/output/_pagefind/fragment/en_45272c8.pf_fragment
new file mode 100644
index 0000000..ef97071
Binary files /dev/null and b/output/_pagefind/fragment/en_45272c8.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_47a10d3.pf_fragment b/output/_pagefind/fragment/en_47a10d3.pf_fragment
new file mode 100644
index 0000000..2a8af1b
Binary files /dev/null and b/output/_pagefind/fragment/en_47a10d3.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_542856c.pf_fragment b/output/_pagefind/fragment/en_542856c.pf_fragment
new file mode 100644
index 0000000..d7d4545
Binary files /dev/null and b/output/_pagefind/fragment/en_542856c.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_5cce211.pf_fragment b/output/_pagefind/fragment/en_5cce211.pf_fragment
new file mode 100644
index 0000000..acee01b
Binary files /dev/null and b/output/_pagefind/fragment/en_5cce211.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_63ed485.pf_fragment b/output/_pagefind/fragment/en_63ed485.pf_fragment
new file mode 100644
index 0000000..8ab2270
Binary files /dev/null and b/output/_pagefind/fragment/en_63ed485.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_6995b79.pf_fragment b/output/_pagefind/fragment/en_6995b79.pf_fragment
new file mode 100644
index 0000000..9a9f11f
Binary files /dev/null and b/output/_pagefind/fragment/en_6995b79.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_7659ae9.pf_fragment b/output/_pagefind/fragment/en_7659ae9.pf_fragment
new file mode 100644
index 0000000..da25010
Binary files /dev/null and b/output/_pagefind/fragment/en_7659ae9.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_7b2bfde.pf_fragment b/output/_pagefind/fragment/en_7b2bfde.pf_fragment
new file mode 100644
index 0000000..19e2457
Binary files /dev/null and b/output/_pagefind/fragment/en_7b2bfde.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_7c11a6b.pf_fragment b/output/_pagefind/fragment/en_7c11a6b.pf_fragment
new file mode 100644
index 0000000..80ce5f5
Binary files /dev/null and b/output/_pagefind/fragment/en_7c11a6b.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_8b2eae2.pf_fragment b/output/_pagefind/fragment/en_8b2eae2.pf_fragment
new file mode 100644
index 0000000..de7b4da
Binary files /dev/null and b/output/_pagefind/fragment/en_8b2eae2.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_a979f39.pf_fragment b/output/_pagefind/fragment/en_a979f39.pf_fragment
new file mode 100644
index 0000000..bb4dd88
Binary files /dev/null and b/output/_pagefind/fragment/en_a979f39.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_ab8f462.pf_fragment b/output/_pagefind/fragment/en_ab8f462.pf_fragment
new file mode 100644
index 0000000..4da8488
Binary files /dev/null and b/output/_pagefind/fragment/en_ab8f462.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_af8917d.pf_fragment b/output/_pagefind/fragment/en_af8917d.pf_fragment
new file mode 100644
index 0000000..2ace375
Binary files /dev/null and b/output/_pagefind/fragment/en_af8917d.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_b6857fb.pf_fragment b/output/_pagefind/fragment/en_b6857fb.pf_fragment
new file mode 100644
index 0000000..22ae55d
Binary files /dev/null and b/output/_pagefind/fragment/en_b6857fb.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_beb56d1.pf_fragment b/output/_pagefind/fragment/en_beb56d1.pf_fragment
new file mode 100644
index 0000000..000c863
Binary files /dev/null and b/output/_pagefind/fragment/en_beb56d1.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_c3db1fd.pf_fragment b/output/_pagefind/fragment/en_c3db1fd.pf_fragment
new file mode 100644
index 0000000..7822f2e
Binary files /dev/null and b/output/_pagefind/fragment/en_c3db1fd.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_c5b2982.pf_fragment b/output/_pagefind/fragment/en_c5b2982.pf_fragment
new file mode 100644
index 0000000..55037b0
Binary files /dev/null and b/output/_pagefind/fragment/en_c5b2982.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_c73783a.pf_fragment b/output/_pagefind/fragment/en_c73783a.pf_fragment
new file mode 100644
index 0000000..6746192
Binary files /dev/null and b/output/_pagefind/fragment/en_c73783a.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_c940f54.pf_fragment b/output/_pagefind/fragment/en_c940f54.pf_fragment
new file mode 100644
index 0000000..4b83c51
Binary files /dev/null and b/output/_pagefind/fragment/en_c940f54.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_c9437f3.pf_fragment b/output/_pagefind/fragment/en_c9437f3.pf_fragment
new file mode 100644
index 0000000..a4d959c
Binary files /dev/null and b/output/_pagefind/fragment/en_c9437f3.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_cac49ef.pf_fragment b/output/_pagefind/fragment/en_cac49ef.pf_fragment
new file mode 100644
index 0000000..aa372b0
Binary files /dev/null and b/output/_pagefind/fragment/en_cac49ef.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_d1548cc.pf_fragment b/output/_pagefind/fragment/en_d1548cc.pf_fragment
new file mode 100644
index 0000000..0eaedb6
Binary files /dev/null and b/output/_pagefind/fragment/en_d1548cc.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_de8475b.pf_fragment b/output/_pagefind/fragment/en_de8475b.pf_fragment
new file mode 100644
index 0000000..1c8f7e2
Binary files /dev/null and b/output/_pagefind/fragment/en_de8475b.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_e8ed161.pf_fragment b/output/_pagefind/fragment/en_e8ed161.pf_fragment
new file mode 100644
index 0000000..192cde5
Binary files /dev/null and b/output/_pagefind/fragment/en_e8ed161.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_ee4e266.pf_fragment b/output/_pagefind/fragment/en_ee4e266.pf_fragment
new file mode 100644
index 0000000..b4aa751
Binary files /dev/null and b/output/_pagefind/fragment/en_ee4e266.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_f35e241.pf_fragment b/output/_pagefind/fragment/en_f35e241.pf_fragment
new file mode 100644
index 0000000..44c9100
Binary files /dev/null and b/output/_pagefind/fragment/en_f35e241.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_f3e5a41.pf_fragment b/output/_pagefind/fragment/en_f3e5a41.pf_fragment
new file mode 100644
index 0000000..5ac26bd
Binary files /dev/null and b/output/_pagefind/fragment/en_f3e5a41.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_fad3359.pf_fragment b/output/_pagefind/fragment/en_fad3359.pf_fragment
new file mode 100644
index 0000000..209e558
Binary files /dev/null and b/output/_pagefind/fragment/en_fad3359.pf_fragment differ
diff --git a/output/_pagefind/fragment/en_fb80135.pf_fragment b/output/_pagefind/fragment/en_fb80135.pf_fragment
new file mode 100644
index 0000000..38699a7
Binary files /dev/null and b/output/_pagefind/fragment/en_fb80135.pf_fragment differ
diff --git a/output/_pagefind/index/en_3ae24a8.pf_index b/output/_pagefind/index/en_3ae24a8.pf_index
new file mode 100644
index 0000000..66c39c8
Binary files /dev/null and b/output/_pagefind/index/en_3ae24a8.pf_index differ
diff --git a/output/_pagefind/pagefind-entry.json b/output/_pagefind/pagefind-entry.json
new file mode 100644
index 0000000..b2e8c0d
--- /dev/null
+++ b/output/_pagefind/pagefind-entry.json
@@ -0,0 +1 @@
+{"version":"1.3.0","languages":{"en":{"hash":"en_e53d2b1f27","wasm":"en","page_count":34}}}
\ No newline at end of file
diff --git a/output/_pagefind/pagefind-highlight.js b/output/_pagefind/pagefind-highlight.js
new file mode 100644
index 0000000..c823fbf
--- /dev/null
+++ b/output/_pagefind/pagefind-highlight.js
@@ -0,0 +1,1069 @@
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __commonJS = (cb, mod) => function __require() {
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+var __copyProps = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))
+ if (!__hasOwnProp.call(to, key) && key !== except)
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ }
+ return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+ // If the importer is in node compatibility mode or this is not an ESM
+ // file that has been converted to a CommonJS file using a Babel-
+ // compatible transform (i.e. "__esModule" has not been set), then set
+ // "default" to the CommonJS "module.exports" for node compatibility.
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+ mod
+));
+
+// node_modules/mark.js/dist/mark.js
+var require_mark = __commonJS({
+ "node_modules/mark.js/dist/mark.js"(exports, module) {
+ (function(global, factory) {
+ typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.Mark = factory();
+ })(exports, function() {
+ "use strict";
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) {
+ return typeof obj;
+ } : function(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ var classCallCheck = function(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ };
+ var createClass = function() {
+ function defineProperties(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor)
+ descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ return function(Constructor, protoProps, staticProps) {
+ if (protoProps)
+ defineProperties(Constructor.prototype, protoProps);
+ if (staticProps)
+ defineProperties(Constructor, staticProps);
+ return Constructor;
+ };
+ }();
+ var _extends = Object.assign || function(target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+ return target;
+ };
+ var DOMIterator = function() {
+ function DOMIterator2(ctx) {
+ var iframes = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
+ var exclude = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [];
+ var iframesTimeout = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 5e3;
+ classCallCheck(this, DOMIterator2);
+ this.ctx = ctx;
+ this.iframes = iframes;
+ this.exclude = exclude;
+ this.iframesTimeout = iframesTimeout;
+ }
+ createClass(DOMIterator2, [{
+ key: "getContexts",
+ value: function getContexts() {
+ var ctx = void 0, filteredCtx = [];
+ if (typeof this.ctx === "undefined" || !this.ctx) {
+ ctx = [];
+ } else if (NodeList.prototype.isPrototypeOf(this.ctx)) {
+ ctx = Array.prototype.slice.call(this.ctx);
+ } else if (Array.isArray(this.ctx)) {
+ ctx = this.ctx;
+ } else if (typeof this.ctx === "string") {
+ ctx = Array.prototype.slice.call(document.querySelectorAll(this.ctx));
+ } else {
+ ctx = [this.ctx];
+ }
+ ctx.forEach(function(ctx2) {
+ var isDescendant = filteredCtx.filter(function(contexts) {
+ return contexts.contains(ctx2);
+ }).length > 0;
+ if (filteredCtx.indexOf(ctx2) === -1 && !isDescendant) {
+ filteredCtx.push(ctx2);
+ }
+ });
+ return filteredCtx;
+ }
+ }, {
+ key: "getIframeContents",
+ value: function getIframeContents(ifr, successFn) {
+ var errorFn = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : function() {
+ };
+ var doc = void 0;
+ try {
+ var ifrWin = ifr.contentWindow;
+ doc = ifrWin.document;
+ if (!ifrWin || !doc) {
+ throw new Error("iframe inaccessible");
+ }
+ } catch (e) {
+ errorFn();
+ }
+ if (doc) {
+ successFn(doc);
+ }
+ }
+ }, {
+ key: "isIframeBlank",
+ value: function isIframeBlank(ifr) {
+ var bl = "about:blank", src = ifr.getAttribute("src").trim(), href = ifr.contentWindow.location.href;
+ return href === bl && src !== bl && src;
+ }
+ }, {
+ key: "observeIframeLoad",
+ value: function observeIframeLoad(ifr, successFn, errorFn) {
+ var _this = this;
+ var called = false, tout = null;
+ var listener = function listener2() {
+ if (called) {
+ return;
+ }
+ called = true;
+ clearTimeout(tout);
+ try {
+ if (!_this.isIframeBlank(ifr)) {
+ ifr.removeEventListener("load", listener2);
+ _this.getIframeContents(ifr, successFn, errorFn);
+ }
+ } catch (e) {
+ errorFn();
+ }
+ };
+ ifr.addEventListener("load", listener);
+ tout = setTimeout(listener, this.iframesTimeout);
+ }
+ }, {
+ key: "onIframeReady",
+ value: function onIframeReady(ifr, successFn, errorFn) {
+ try {
+ if (ifr.contentWindow.document.readyState === "complete") {
+ if (this.isIframeBlank(ifr)) {
+ this.observeIframeLoad(ifr, successFn, errorFn);
+ } else {
+ this.getIframeContents(ifr, successFn, errorFn);
+ }
+ } else {
+ this.observeIframeLoad(ifr, successFn, errorFn);
+ }
+ } catch (e) {
+ errorFn();
+ }
+ }
+ }, {
+ key: "waitForIframes",
+ value: function waitForIframes(ctx, done) {
+ var _this2 = this;
+ var eachCalled = 0;
+ this.forEachIframe(ctx, function() {
+ return true;
+ }, function(ifr) {
+ eachCalled++;
+ _this2.waitForIframes(ifr.querySelector("html"), function() {
+ if (!--eachCalled) {
+ done();
+ }
+ });
+ }, function(handled) {
+ if (!handled) {
+ done();
+ }
+ });
+ }
+ }, {
+ key: "forEachIframe",
+ value: function forEachIframe(ctx, filter, each) {
+ var _this3 = this;
+ var end = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : function() {
+ };
+ var ifr = ctx.querySelectorAll("iframe"), open = ifr.length, handled = 0;
+ ifr = Array.prototype.slice.call(ifr);
+ var checkEnd = function checkEnd2() {
+ if (--open <= 0) {
+ end(handled);
+ }
+ };
+ if (!open) {
+ checkEnd();
+ }
+ ifr.forEach(function(ifr2) {
+ if (DOMIterator2.matches(ifr2, _this3.exclude)) {
+ checkEnd();
+ } else {
+ _this3.onIframeReady(ifr2, function(con) {
+ if (filter(ifr2)) {
+ handled++;
+ each(con);
+ }
+ checkEnd();
+ }, checkEnd);
+ }
+ });
+ }
+ }, {
+ key: "createIterator",
+ value: function createIterator(ctx, whatToShow, filter) {
+ return document.createNodeIterator(ctx, whatToShow, filter, false);
+ }
+ }, {
+ key: "createInstanceOnIframe",
+ value: function createInstanceOnIframe(contents) {
+ return new DOMIterator2(contents.querySelector("html"), this.iframes);
+ }
+ }, {
+ key: "compareNodeIframe",
+ value: function compareNodeIframe(node, prevNode, ifr) {
+ var compCurr = node.compareDocumentPosition(ifr), prev = Node.DOCUMENT_POSITION_PRECEDING;
+ if (compCurr & prev) {
+ if (prevNode !== null) {
+ var compPrev = prevNode.compareDocumentPosition(ifr), after = Node.DOCUMENT_POSITION_FOLLOWING;
+ if (compPrev & after) {
+ return true;
+ }
+ } else {
+ return true;
+ }
+ }
+ return false;
+ }
+ }, {
+ key: "getIteratorNode",
+ value: function getIteratorNode(itr) {
+ var prevNode = itr.previousNode();
+ var node = void 0;
+ if (prevNode === null) {
+ node = itr.nextNode();
+ } else {
+ node = itr.nextNode() && itr.nextNode();
+ }
+ return {
+ prevNode,
+ node
+ };
+ }
+ }, {
+ key: "checkIframeFilter",
+ value: function checkIframeFilter(node, prevNode, currIfr, ifr) {
+ var key = false, handled = false;
+ ifr.forEach(function(ifrDict, i) {
+ if (ifrDict.val === currIfr) {
+ key = i;
+ handled = ifrDict.handled;
+ }
+ });
+ if (this.compareNodeIframe(node, prevNode, currIfr)) {
+ if (key === false && !handled) {
+ ifr.push({
+ val: currIfr,
+ handled: true
+ });
+ } else if (key !== false && !handled) {
+ ifr[key].handled = true;
+ }
+ return true;
+ }
+ if (key === false) {
+ ifr.push({
+ val: currIfr,
+ handled: false
+ });
+ }
+ return false;
+ }
+ }, {
+ key: "handleOpenIframes",
+ value: function handleOpenIframes(ifr, whatToShow, eCb, fCb) {
+ var _this4 = this;
+ ifr.forEach(function(ifrDict) {
+ if (!ifrDict.handled) {
+ _this4.getIframeContents(ifrDict.val, function(con) {
+ _this4.createInstanceOnIframe(con).forEachNode(whatToShow, eCb, fCb);
+ });
+ }
+ });
+ }
+ }, {
+ key: "iterateThroughNodes",
+ value: function iterateThroughNodes(whatToShow, ctx, eachCb, filterCb, doneCb) {
+ var _this5 = this;
+ var itr = this.createIterator(ctx, whatToShow, filterCb);
+ var ifr = [], elements = [], node = void 0, prevNode = void 0, retrieveNodes = function retrieveNodes2() {
+ var _getIteratorNode = _this5.getIteratorNode(itr);
+ prevNode = _getIteratorNode.prevNode;
+ node = _getIteratorNode.node;
+ return node;
+ };
+ while (retrieveNodes()) {
+ if (this.iframes) {
+ this.forEachIframe(ctx, function(currIfr) {
+ return _this5.checkIframeFilter(node, prevNode, currIfr, ifr);
+ }, function(con) {
+ _this5.createInstanceOnIframe(con).forEachNode(whatToShow, function(ifrNode) {
+ return elements.push(ifrNode);
+ }, filterCb);
+ });
+ }
+ elements.push(node);
+ }
+ elements.forEach(function(node2) {
+ eachCb(node2);
+ });
+ if (this.iframes) {
+ this.handleOpenIframes(ifr, whatToShow, eachCb, filterCb);
+ }
+ doneCb();
+ }
+ }, {
+ key: "forEachNode",
+ value: function forEachNode(whatToShow, each, filter) {
+ var _this6 = this;
+ var done = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : function() {
+ };
+ var contexts = this.getContexts();
+ var open = contexts.length;
+ if (!open) {
+ done();
+ }
+ contexts.forEach(function(ctx) {
+ var ready = function ready2() {
+ _this6.iterateThroughNodes(whatToShow, ctx, each, filter, function() {
+ if (--open <= 0) {
+ done();
+ }
+ });
+ };
+ if (_this6.iframes) {
+ _this6.waitForIframes(ctx, ready);
+ } else {
+ ready();
+ }
+ });
+ }
+ }], [{
+ key: "matches",
+ value: function matches(element, selector) {
+ var selectors = typeof selector === "string" ? [selector] : selector, fn = element.matches || element.matchesSelector || element.msMatchesSelector || element.mozMatchesSelector || element.oMatchesSelector || element.webkitMatchesSelector;
+ if (fn) {
+ var match = false;
+ selectors.every(function(sel) {
+ if (fn.call(element, sel)) {
+ match = true;
+ return false;
+ }
+ return true;
+ });
+ return match;
+ } else {
+ return false;
+ }
+ }
+ }]);
+ return DOMIterator2;
+ }();
+ var Mark$1 = function() {
+ function Mark3(ctx) {
+ classCallCheck(this, Mark3);
+ this.ctx = ctx;
+ this.ie = false;
+ var ua = window.navigator.userAgent;
+ if (ua.indexOf("MSIE") > -1 || ua.indexOf("Trident") > -1) {
+ this.ie = true;
+ }
+ }
+ createClass(Mark3, [{
+ key: "log",
+ value: function log(msg) {
+ var level = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "debug";
+ var log2 = this.opt.log;
+ if (!this.opt.debug) {
+ return;
+ }
+ if ((typeof log2 === "undefined" ? "undefined" : _typeof(log2)) === "object" && typeof log2[level] === "function") {
+ log2[level]("mark.js: " + msg);
+ }
+ }
+ }, {
+ key: "escapeStr",
+ value: function escapeStr(str) {
+ return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
+ }
+ }, {
+ key: "createRegExp",
+ value: function createRegExp(str) {
+ if (this.opt.wildcards !== "disabled") {
+ str = this.setupWildcardsRegExp(str);
+ }
+ str = this.escapeStr(str);
+ if (Object.keys(this.opt.synonyms).length) {
+ str = this.createSynonymsRegExp(str);
+ }
+ if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) {
+ str = this.setupIgnoreJoinersRegExp(str);
+ }
+ if (this.opt.diacritics) {
+ str = this.createDiacriticsRegExp(str);
+ }
+ str = this.createMergedBlanksRegExp(str);
+ if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) {
+ str = this.createJoinersRegExp(str);
+ }
+ if (this.opt.wildcards !== "disabled") {
+ str = this.createWildcardsRegExp(str);
+ }
+ str = this.createAccuracyRegExp(str);
+ return str;
+ }
+ }, {
+ key: "createSynonymsRegExp",
+ value: function createSynonymsRegExp(str) {
+ var syn = this.opt.synonyms, sens = this.opt.caseSensitive ? "" : "i", joinerPlaceholder = this.opt.ignoreJoiners || this.opt.ignorePunctuation.length ? "\0" : "";
+ for (var index in syn) {
+ if (syn.hasOwnProperty(index)) {
+ var value = syn[index], k1 = this.opt.wildcards !== "disabled" ? this.setupWildcardsRegExp(index) : this.escapeStr(index), k2 = this.opt.wildcards !== "disabled" ? this.setupWildcardsRegExp(value) : this.escapeStr(value);
+ if (k1 !== "" && k2 !== "") {
+ str = str.replace(new RegExp("(" + this.escapeStr(k1) + "|" + this.escapeStr(k2) + ")", "gm" + sens), joinerPlaceholder + ("(" + this.processSynomyms(k1) + "|") + (this.processSynomyms(k2) + ")") + joinerPlaceholder);
+ }
+ }
+ }
+ return str;
+ }
+ }, {
+ key: "processSynomyms",
+ value: function processSynomyms(str) {
+ if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) {
+ str = this.setupIgnoreJoinersRegExp(str);
+ }
+ return str;
+ }
+ }, {
+ key: "setupWildcardsRegExp",
+ value: function setupWildcardsRegExp(str) {
+ str = str.replace(/(?:\\)*\?/g, function(val) {
+ return val.charAt(0) === "\\" ? "?" : "";
+ });
+ return str.replace(/(?:\\)*\*/g, function(val) {
+ return val.charAt(0) === "\\" ? "*" : "";
+ });
+ }
+ }, {
+ key: "createWildcardsRegExp",
+ value: function createWildcardsRegExp(str) {
+ var spaces = this.opt.wildcards === "withSpaces";
+ return str.replace(/\u0001/g, spaces ? "[\\S\\s]?" : "\\S?").replace(/\u0002/g, spaces ? "[\\S\\s]*?" : "\\S*");
+ }
+ }, {
+ key: "setupIgnoreJoinersRegExp",
+ value: function setupIgnoreJoinersRegExp(str) {
+ return str.replace(/[^(|)\\]/g, function(val, indx, original) {
+ var nextChar = original.charAt(indx + 1);
+ if (/[(|)\\]/.test(nextChar) || nextChar === "") {
+ return val;
+ } else {
+ return val + "\0";
+ }
+ });
+ }
+ }, {
+ key: "createJoinersRegExp",
+ value: function createJoinersRegExp(str) {
+ var joiner = [];
+ var ignorePunctuation = this.opt.ignorePunctuation;
+ if (Array.isArray(ignorePunctuation) && ignorePunctuation.length) {
+ joiner.push(this.escapeStr(ignorePunctuation.join("")));
+ }
+ if (this.opt.ignoreJoiners) {
+ joiner.push("\\u00ad\\u200b\\u200c\\u200d");
+ }
+ return joiner.length ? str.split(/\u0000+/).join("[" + joiner.join("") + "]*") : str;
+ }
+ }, {
+ key: "createDiacriticsRegExp",
+ value: function createDiacriticsRegExp(str) {
+ var sens = this.opt.caseSensitive ? "" : "i", dct = this.opt.caseSensitive ? ["a\xE0\xE1\u1EA3\xE3\u1EA1\u0103\u1EB1\u1EAF\u1EB3\u1EB5\u1EB7\xE2\u1EA7\u1EA5\u1EA9\u1EAB\u1EAD\xE4\xE5\u0101\u0105", "A\xC0\xC1\u1EA2\xC3\u1EA0\u0102\u1EB0\u1EAE\u1EB2\u1EB4\u1EB6\xC2\u1EA6\u1EA4\u1EA8\u1EAA\u1EAC\xC4\xC5\u0100\u0104", "c\xE7\u0107\u010D", "C\xC7\u0106\u010C", "d\u0111\u010F", "D\u0110\u010E", "e\xE8\xE9\u1EBB\u1EBD\u1EB9\xEA\u1EC1\u1EBF\u1EC3\u1EC5\u1EC7\xEB\u011B\u0113\u0119", " [...]
+ var handled = [];
+ str.split("").forEach(function(ch) {
+ dct.every(function(dct2) {
+ if (dct2.indexOf(ch) !== -1) {
+ if (handled.indexOf(dct2) > -1) {
+ return false;
+ }
+ str = str.replace(new RegExp("[" + dct2 + "]", "gm" + sens), "[" + dct2 + "]");
+ handled.push(dct2);
+ }
+ return true;
+ });
+ });
+ return str;
+ }
+ }, {
+ key: "createMergedBlanksRegExp",
+ value: function createMergedBlanksRegExp(str) {
+ return str.replace(/[\s]+/gmi, "[\\s]+");
+ }
+ }, {
+ key: "createAccuracyRegExp",
+ value: function createAccuracyRegExp(str) {
+ var _this = this;
+ var chars = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xA1\xBF";
+ var acc = this.opt.accuracy, val = typeof acc === "string" ? acc : acc.value, ls = typeof acc === "string" ? [] : acc.limiters, lsJoin = "";
+ ls.forEach(function(limiter) {
+ lsJoin += "|" + _this.escapeStr(limiter);
+ });
+ switch (val) {
+ case "partially":
+ default:
+ return "()(" + str + ")";
+ case "complementary":
+ lsJoin = "\\s" + (lsJoin ? lsJoin : this.escapeStr(chars));
+ return "()([^" + lsJoin + "]*" + str + "[^" + lsJoin + "]*)";
+ case "exactly":
+ return "(^|\\s" + lsJoin + ")(" + str + ")(?=$|\\s" + lsJoin + ")";
+ }
+ }
+ }, {
+ key: "getSeparatedKeywords",
+ value: function getSeparatedKeywords(sv) {
+ var _this2 = this;
+ var stack = [];
+ sv.forEach(function(kw) {
+ if (!_this2.opt.separateWordSearch) {
+ if (kw.trim() && stack.indexOf(kw) === -1) {
+ stack.push(kw);
+ }
+ } else {
+ kw.split(" ").forEach(function(kwSplitted) {
+ if (kwSplitted.trim() && stack.indexOf(kwSplitted) === -1) {
+ stack.push(kwSplitted);
+ }
+ });
+ }
+ });
+ return {
+ "keywords": stack.sort(function(a, b) {
+ return b.length - a.length;
+ }),
+ "length": stack.length
+ };
+ }
+ }, {
+ key: "isNumeric",
+ value: function isNumeric(value) {
+ return Number(parseFloat(value)) == value;
+ }
+ }, {
+ key: "checkRanges",
+ value: function checkRanges(array) {
+ var _this3 = this;
+ if (!Array.isArray(array) || Object.prototype.toString.call(array[0]) !== "[object Object]") {
+ this.log("markRanges() will only accept an array of objects");
+ this.opt.noMatch(array);
+ return [];
+ }
+ var stack = [];
+ var last = 0;
+ array.sort(function(a, b) {
+ return a.start - b.start;
+ }).forEach(function(item) {
+ var _callNoMatchOnInvalid = _this3.callNoMatchOnInvalidRanges(item, last), start = _callNoMatchOnInvalid.start, end = _callNoMatchOnInvalid.end, valid = _callNoMatchOnInvalid.valid;
+ if (valid) {
+ item.start = start;
+ item.length = end - start;
+ stack.push(item);
+ last = end;
+ }
+ });
+ return stack;
+ }
+ }, {
+ key: "callNoMatchOnInvalidRanges",
+ value: function callNoMatchOnInvalidRanges(range, last) {
+ var start = void 0, end = void 0, valid = false;
+ if (range && typeof range.start !== "undefined") {
+ start = parseInt(range.start, 10);
+ end = start + parseInt(range.length, 10);
+ if (this.isNumeric(range.start) && this.isNumeric(range.length) && end - last > 0 && end - start > 0) {
+ valid = true;
+ } else {
+ this.log("Ignoring invalid or overlapping range: " + ("" + JSON.stringify(range)));
+ this.opt.noMatch(range);
+ }
+ } else {
+ this.log("Ignoring invalid range: " + JSON.stringify(range));
+ this.opt.noMatch(range);
+ }
+ return {
+ start,
+ end,
+ valid
+ };
+ }
+ }, {
+ key: "checkWhitespaceRanges",
+ value: function checkWhitespaceRanges(range, originalLength, string) {
+ var end = void 0, valid = true, max = string.length, offset = originalLength - max, start = parseInt(range.start, 10) - offset;
+ start = start > max ? max : start;
+ end = start + parseInt(range.length, 10);
+ if (end > max) {
+ end = max;
+ this.log("End range automatically set to the max value of " + max);
+ }
+ if (start < 0 || end - start < 0 || start > max || end > max) {
+ valid = false;
+ this.log("Invalid range: " + JSON.stringify(range));
+ this.opt.noMatch(range);
+ } else if (string.substring(start, end).replace(/\s+/g, "") === "") {
+ valid = false;
+ this.log("Skipping whitespace only range: " + JSON.stringify(range));
+ this.opt.noMatch(range);
+ }
+ return {
+ start,
+ end,
+ valid
+ };
+ }
+ }, {
+ key: "getTextNodes",
+ value: function getTextNodes(cb) {
+ var _this4 = this;
+ var val = "", nodes = [];
+ this.iterator.forEachNode(NodeFilter.SHOW_TEXT, function(node) {
+ nodes.push({
+ start: val.length,
+ end: (val += node.textContent).length,
+ node
+ });
+ }, function(node) {
+ if (_this4.matchesExclude(node.parentNode)) {
+ return NodeFilter.FILTER_REJECT;
+ } else {
+ return NodeFilter.FILTER_ACCEPT;
+ }
+ }, function() {
+ cb({
+ value: val,
+ nodes
+ });
+ });
+ }
+ }, {
+ key: "matchesExclude",
+ value: function matchesExclude(el) {
+ return DOMIterator.matches(el, this.opt.exclude.concat(["script", "style", "title", "head", "html"]));
+ }
+ }, {
+ key: "wrapRangeInTextNode",
+ value: function wrapRangeInTextNode(node, start, end) {
+ var hEl = !this.opt.element ? "mark" : this.opt.element, startNode = node.splitText(start), ret = startNode.splitText(end - start);
+ var repl = document.createElement(hEl);
+ repl.setAttribute("data-markjs", "true");
+ if (this.opt.className) {
+ repl.setAttribute("class", this.opt.className);
+ }
+ repl.textContent = startNode.textContent;
+ startNode.parentNode.replaceChild(repl, startNode);
+ return ret;
+ }
+ }, {
+ key: "wrapRangeInMappedTextNode",
+ value: function wrapRangeInMappedTextNode(dict, start, end, filterCb, eachCb) {
+ var _this5 = this;
+ dict.nodes.every(function(n, i) {
+ var sibl = dict.nodes[i + 1];
+ if (typeof sibl === "undefined" || sibl.start > start) {
+ if (!filterCb(n.node)) {
+ return false;
+ }
+ var s = start - n.start, e = (end > n.end ? n.end : end) - n.start, startStr = dict.value.substr(0, n.start), endStr = dict.value.substr(e + n.start);
+ n.node = _this5.wrapRangeInTextNode(n.node, s, e);
+ dict.value = startStr + endStr;
+ dict.nodes.forEach(function(k, j) {
+ if (j >= i) {
+ if (dict.nodes[j].start > 0 && j !== i) {
+ dict.nodes[j].start -= e;
+ }
+ dict.nodes[j].end -= e;
+ }
+ });
+ end -= e;
+ eachCb(n.node.previousSibling, n.start);
+ if (end > n.end) {
+ start = n.end;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ });
+ }
+ }, {
+ key: "wrapMatches",
+ value: function wrapMatches(regex, ignoreGroups, filterCb, eachCb, endCb) {
+ var _this6 = this;
+ var matchIdx = ignoreGroups === 0 ? 0 : ignoreGroups + 1;
+ this.getTextNodes(function(dict) {
+ dict.nodes.forEach(function(node) {
+ node = node.node;
+ var match = void 0;
+ while ((match = regex.exec(node.textContent)) !== null && match[matchIdx] !== "") {
+ if (!filterCb(match[matchIdx], node)) {
+ continue;
+ }
+ var pos = match.index;
+ if (matchIdx !== 0) {
+ for (var i = 1; i < matchIdx; i++) {
+ pos += match[i].length;
+ }
+ }
+ node = _this6.wrapRangeInTextNode(node, pos, pos + match[matchIdx].length);
+ eachCb(node.previousSibling);
+ regex.lastIndex = 0;
+ }
+ });
+ endCb();
+ });
+ }
+ }, {
+ key: "wrapMatchesAcrossElements",
+ value: function wrapMatchesAcrossElements(regex, ignoreGroups, filterCb, eachCb, endCb) {
+ var _this7 = this;
+ var matchIdx = ignoreGroups === 0 ? 0 : ignoreGroups + 1;
+ this.getTextNodes(function(dict) {
+ var match = void 0;
+ while ((match = regex.exec(dict.value)) !== null && match[matchIdx] !== "") {
+ var start = match.index;
+ if (matchIdx !== 0) {
+ for (var i = 1; i < matchIdx; i++) {
+ start += match[i].length;
+ }
+ }
+ var end = start + match[matchIdx].length;
+ _this7.wrapRangeInMappedTextNode(dict, start, end, function(node) {
+ return filterCb(match[matchIdx], node);
+ }, function(node, lastIndex) {
+ regex.lastIndex = lastIndex;
+ eachCb(node);
+ });
+ }
+ endCb();
+ });
+ }
+ }, {
+ key: "wrapRangeFromIndex",
+ value: function wrapRangeFromIndex(ranges, filterCb, eachCb, endCb) {
+ var _this8 = this;
+ this.getTextNodes(function(dict) {
+ var originalLength = dict.value.length;
+ ranges.forEach(function(range, counter) {
+ var _checkWhitespaceRange = _this8.checkWhitespaceRanges(range, originalLength, dict.value), start = _checkWhitespaceRange.start, end = _checkWhitespaceRange.end, valid = _checkWhitespaceRange.valid;
+ if (valid) {
+ _this8.wrapRangeInMappedTextNode(dict, start, end, function(node) {
+ return filterCb(node, range, dict.value.substring(start, end), counter);
+ }, function(node) {
+ eachCb(node, range);
+ });
+ }
+ });
+ endCb();
+ });
+ }
+ }, {
+ key: "unwrapMatches",
+ value: function unwrapMatches(node) {
+ var parent = node.parentNode;
+ var docFrag = document.createDocumentFragment();
+ while (node.firstChild) {
+ docFrag.appendChild(node.removeChild(node.firstChild));
+ }
+ parent.replaceChild(docFrag, node);
+ if (!this.ie) {
+ parent.normalize();
+ } else {
+ this.normalizeTextNode(parent);
+ }
+ }
+ }, {
+ key: "normalizeTextNode",
+ value: function normalizeTextNode(node) {
+ if (!node) {
+ return;
+ }
+ if (node.nodeType === 3) {
+ while (node.nextSibling && node.nextSibling.nodeType === 3) {
+ node.nodeValue += node.nextSibling.nodeValue;
+ node.parentNode.removeChild(node.nextSibling);
+ }
+ } else {
+ this.normalizeTextNode(node.firstChild);
+ }
+ this.normalizeTextNode(node.nextSibling);
+ }
+ }, {
+ key: "markRegExp",
+ value: function markRegExp(regexp, opt) {
+ var _this9 = this;
+ this.opt = opt;
+ this.log('Searching with expression "' + regexp + '"');
+ var totalMatches = 0, fn = "wrapMatches";
+ var eachCb = function eachCb2(element) {
+ totalMatches++;
+ _this9.opt.each(element);
+ };
+ if (this.opt.acrossElements) {
+ fn = "wrapMatchesAcrossElements";
+ }
+ this[fn](regexp, this.opt.ignoreGroups, function(match, node) {
+ return _this9.opt.filter(node, match, totalMatches);
+ }, eachCb, function() {
+ if (totalMatches === 0) {
+ _this9.opt.noMatch(regexp);
+ }
+ _this9.opt.done(totalMatches);
+ });
+ }
+ }, {
+ key: "mark",
+ value: function mark(sv, opt) {
+ var _this10 = this;
+ this.opt = opt;
+ var totalMatches = 0, fn = "wrapMatches";
+ var _getSeparatedKeywords = this.getSeparatedKeywords(typeof sv === "string" ? [sv] : sv), kwArr = _getSeparatedKeywords.keywords, kwArrLen = _getSeparatedKeywords.length, sens = this.opt.caseSensitive ? "" : "i", handler = function handler2(kw) {
+ var regex = new RegExp(_this10.createRegExp(kw), "gm" + sens), matches = 0;
+ _this10.log('Searching with expression "' + regex + '"');
+ _this10[fn](regex, 1, function(term, node) {
+ return _this10.opt.filter(node, kw, totalMatches, matches);
+ }, function(element) {
+ matches++;
+ totalMatches++;
+ _this10.opt.each(element);
+ }, function() {
+ if (matches === 0) {
+ _this10.opt.noMatch(kw);
+ }
+ if (kwArr[kwArrLen - 1] === kw) {
+ _this10.opt.done(totalMatches);
+ } else {
+ handler2(kwArr[kwArr.indexOf(kw) + 1]);
+ }
+ });
+ };
+ if (this.opt.acrossElements) {
+ fn = "wrapMatchesAcrossElements";
+ }
+ if (kwArrLen === 0) {
+ this.opt.done(totalMatches);
+ } else {
+ handler(kwArr[0]);
+ }
+ }
+ }, {
+ key: "markRanges",
+ value: function markRanges(rawRanges, opt) {
+ var _this11 = this;
+ this.opt = opt;
+ var totalMatches = 0, ranges = this.checkRanges(rawRanges);
+ if (ranges && ranges.length) {
+ this.log("Starting to mark with the following ranges: " + JSON.stringify(ranges));
+ this.wrapRangeFromIndex(ranges, function(node, range, match, counter) {
+ return _this11.opt.filter(node, range, match, counter);
+ }, function(element, range) {
+ totalMatches++;
+ _this11.opt.each(element, range);
+ }, function() {
+ _this11.opt.done(totalMatches);
+ });
+ } else {
+ this.opt.done(totalMatches);
+ }
+ }
+ }, {
+ key: "unmark",
+ value: function unmark(opt) {
+ var _this12 = this;
+ this.opt = opt;
+ var sel = this.opt.element ? this.opt.element : "*";
+ sel += "[data-markjs]";
+ if (this.opt.className) {
+ sel += "." + this.opt.className;
+ }
+ this.log('Removal selector "' + sel + '"');
+ this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT, function(node) {
+ _this12.unwrapMatches(node);
+ }, function(node) {
+ var matchesSel = DOMIterator.matches(node, sel), matchesExclude = _this12.matchesExclude(node);
+ if (!matchesSel || matchesExclude) {
+ return NodeFilter.FILTER_REJECT;
+ } else {
+ return NodeFilter.FILTER_ACCEPT;
+ }
+ }, this.opt.done);
+ }
+ }, {
+ key: "opt",
+ set: function set$$1(val) {
+ this._opt = _extends({}, {
+ "element": "",
+ "className": "",
+ "exclude": [],
+ "iframes": false,
+ "iframesTimeout": 5e3,
+ "separateWordSearch": true,
+ "diacritics": true,
+ "synonyms": {},
+ "accuracy": "partially",
+ "acrossElements": false,
+ "caseSensitive": false,
+ "ignoreJoiners": false,
+ "ignoreGroups": 0,
+ "ignorePunctuation": [],
+ "wildcards": "disabled",
+ "each": function each() {
+ },
+ "noMatch": function noMatch() {
+ },
+ "filter": function filter() {
+ return true;
+ },
+ "done": function done() {
+ },
+ "debug": false,
+ "log": window.console
+ }, val);
+ },
+ get: function get$$1() {
+ return this._opt;
+ }
+ }, {
+ key: "iterator",
+ get: function get$$1() {
+ return new DOMIterator(this.ctx, this.opt.iframes, this.opt.exclude, this.opt.iframesTimeout);
+ }
+ }]);
+ return Mark3;
+ }();
+ function Mark2(ctx) {
+ var _this = this;
+ var instance = new Mark$1(ctx);
+ this.mark = function(sv, opt) {
+ instance.mark(sv, opt);
+ return _this;
+ };
+ this.markRegExp = function(sv, opt) {
+ instance.markRegExp(sv, opt);
+ return _this;
+ };
+ this.markRanges = function(sv, opt) {
+ instance.markRanges(sv, opt);
+ return _this;
+ };
+ this.unmark = function(opt) {
+ instance.unmark(opt);
+ return _this;
+ };
+ return this;
+ }
+ return Mark2;
+ });
+ }
+});
+
+// lib/highlight.ts
+var import_mark = __toESM(require_mark(), 1);
+var PagefindHighlight = class {
+ constructor(options = {
+ markContext: null,
+ highlightParam: "pagefind-highlight",
+ markOptions: {
+ className: "pagefind-highlight",
+ exclude: ["[data-pagefind-ignore]", "[data-pagefind-ignore] *"]
+ },
+ addStyles: true
+ }) {
+ var _a, _b;
+ const { highlightParam, markContext, markOptions, addStyles } = options;
+ this.highlightParam = highlightParam ?? "pagefind-highlight";
+ this.addStyles = addStyles ?? true;
+ this.markContext = markContext !== void 0 ? markContext : null;
+ this.markOptions = markOptions !== void 0 ? markOptions : {
+ className: "pagefind-highlight",
+ exclude: ["[data-pagefind-ignore]", "[data-pagefind-ignore] *"]
+ };
+ (_a = this.markOptions).className ?? (_a.className = "pagefind__highlight");
+ (_b = this.markOptions).exclude ?? (_b.exclude = [
+ "[data-pagefind-ignore]",
+ "[data-pagefind-ignore] *"
+ ]);
+ this.markOptions.separateWordSearch = false;
+ this.highlight();
+ }
+ getHighlightParams(paramName) {
+ const urlParams = new URLSearchParams(window.location.search);
+ return urlParams.getAll(paramName);
+ }
+ // Inline styles might be too hard to override
+ addHighlightStyles(className) {
+ if (!className)
+ return;
+ const styleElement = document.createElement("style");
+ styleElement.innerText = `:where(.${className}) { background-color: yellow; color: black; }`;
+ document.head.appendChild(styleElement);
+ }
+ createMarkInstance() {
+ if (this.markContext) {
+ return new import_mark.default(this.markContext);
+ }
+ const pagefindBody = document.querySelectorAll("[data-pagefind-body]");
+ if (pagefindBody.length !== 0) {
+ return new import_mark.default(pagefindBody);
+ } else {
+ return new import_mark.default(document.body);
+ }
+ }
+ markText(instance, text) {
+ instance.mark(text, this.markOptions);
+ }
+ highlight() {
+ const params = this.getHighlightParams(this.highlightParam);
+ if (!params || params.length === 0)
+ return;
+ this.addStyles && this.addHighlightStyles(this.markOptions.className);
+ const markInstance = this.createMarkInstance();
+ this.markText(markInstance, params);
+ }
+};
+window.PagefindHighlight = PagefindHighlight;
+export {
+ PagefindHighlight as default
+};
+/*! Bundled license information:
+
+mark.js/dist/mark.js:
+ (*!***************************************************
+ * mark.js v8.11.1
+ * https://markjs.io/
+ * Copyright (c) 2014–2018, Julian Kühnel
+ * Released under the MIT license https://git.io/vwTVl
+ *****************************************************)
+*/
diff --git a/output/_pagefind/pagefind-modular-ui.css b/output/_pagefind/pagefind-modular-ui.css
new file mode 100644
index 0000000..9c6793e
--- /dev/null
+++ b/output/_pagefind/pagefind-modular-ui.css
@@ -0,0 +1,214 @@
+:root {
+ --pagefind-ui-scale: 0.8;
+ --pagefind-ui-primary: #034AD8;
+ --pagefind-ui-fade: #707070;
+ --pagefind-ui-text: #393939;
+ --pagefind-ui-background: #ffffff;
+ --pagefind-ui-border: #eeeeee;
+ --pagefind-ui-tag: #eeeeee;
+ --pagefind-ui-border-width: 2px;
+ --pagefind-ui-border-radius: 8px;
+ --pagefind-ui-image-border-radius: 8px;
+ --pagefind-ui-image-box-ratio: 3 / 2;
+ --pagefind-ui-font: system, -apple-system, ".SFNSText-Regular",
+ "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue",
+ "Lucida Grande", sans-serif;
+}
+
+[data-pfmod-hidden] {
+ display: none !important;
+}
+
+[data-pfmod-suppressed] {
+ opacity: 0 !important;
+ pointer-events: none !important;
+}
+
+[data-pfmod-sr-hidden] {
+ -webkit-clip: rect(0 0 0 0) !important;
+ clip: rect(0 0 0 0) !important;
+ -webkit-clip-path: inset(100%) !important;
+ clip-path: inset(100%) !important;
+ height: 1px !important;
+ overflow: hidden !important;
+ overflow: clip !important;
+ position: absolute !important;
+ white-space: nowrap !important;
+ width: 1px !important;
+}
+
+[data-pfmod-loading] {
+ color: var(--pagefind-ui-text);
+ background-color: var(--pagefind-ui-text);
+ border-radius: var(--pagefind-ui-border-radius);
+ opacity: 0.1;
+ pointer-events: none;
+}
+
+/* Input */
+
+.pagefind-modular-input-wrapper {
+ position: relative;
+}
+
+.pagefind-modular-input-wrapper::before {
+ background-color: var(--pagefind-ui-text);
+ width: calc(18px * var(--pagefind-ui-scale));
+ height: calc(18px * var(--pagefind-ui-scale));
+ top: calc(23px * var(--pagefind-ui-scale));
+ left: calc(20px * var(--pagefind-ui-scale));
+ content: "";
+ position: absolute;
+ display: block;
+ opacity: 0.7;
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255Z [...]
+ mask-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 [...]
+ -webkit-mask-size: 100%;
+ mask-size: 100%;
+ z-index: 9;
+ pointer-events: none;
+}
+
+.pagefind-modular-input {
+ height: calc(64px * var(--pagefind-ui-scale));
+ padding: 0 calc(70px * var(--pagefind-ui-scale)) 0 calc(54px * var(--pagefind-ui-scale));
+ background-color: var(--pagefind-ui-background);
+ border: var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);
+ border-radius: var(--pagefind-ui-border-radius);
+ font-size: calc(21px * var(--pagefind-ui-scale));
+ position: relative;
+ appearance: none;
+ -webkit-appearance: none;
+ display: flex;
+ width: 100%;
+ box-sizing: border-box;
+ font-weight: 700;
+}
+
+.pagefind-modular-input::placeholder {
+ opacity: 0.2;
+}
+
+.pagefind-modular-input-clear {
+ position: absolute;
+ top: calc(2px * var(--pagefind-ui-scale));
+ right: calc(2px * var(--pagefind-ui-scale));
+ height: calc(60px * var(--pagefind-ui-scale));
+ border-radius: var(--pagefind-ui-border-radius);
+ padding: 0 calc(15px * var(--pagefind-ui-scale)) 0 calc(2px * var(--pagefind-ui-scale));
+ color: var(--pagefind-ui-text);
+ font-size: calc(14px * var(--pagefind-ui-scale));
+ cursor: pointer;
+ background-color: var(--pagefind-ui-background);
+ border: none;
+ appearance: none;
+}
+
+/* ResultList */
+
+.pagefind-modular-list-result {
+ list-style-type: none;
+ display: flex;
+ align-items: flex-start;
+ gap: min(calc(40px * var(--pagefind-ui-scale)), 3%);
+ padding: calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale));
+ border-top: solid var(--pagefind-ui-border-width) var(--pagefind-ui-border);
+}
+
+.pagefind-modular-list-result:last-of-type {
+ border-bottom: solid var(--pagefind-ui-border-width) var(--pagefind-ui-border);
+}
+
+.pagefind-modular-list-thumb {
+ width: min(30%,
+ calc((30% - (100px * var(--pagefind-ui-scale))) * 100000));
+ max-width: calc(120px * var(--pagefind-ui-scale));
+ margin-top: calc(10px * var(--pagefind-ui-scale));
+ aspect-ratio: var(--pagefind-ui-image-box-ratio);
+ position: relative;
+}
+
+.pagefind-modular-list-image {
+ display: block;
+ position: absolute;
+ left: 50%;
+ transform: translateX(-50%);
+ font-size: 0;
+ width: auto;
+ height: auto;
+ max-width: 100%;
+ max-height: 100%;
+ border-radius: var(--pagefind-ui-image-border-radius);
+}
+
+.pagefind-modular-list-inner {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ margin-top: calc(10px * var(--pagefind-ui-scale));
+}
+
+.pagefind-modular-list-title {
+ display: inline-block;
+ font-weight: 700;
+ font-size: calc(21px * var(--pagefind-ui-scale));
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.pagefind-modular-list-link {
+ color: var(--pagefind-ui-text);
+ text-decoration: none;
+}
+
+.pagefind-modular-list-link:hover {
+ text-decoration: underline;
+}
+
+.pagefind-modular-list-excerpt {
+ display: inline-block;
+ font-weight: 400;
+ font-size: calc(16px * var(--pagefind-ui-scale));
+ margin-top: calc(4px * var(--pagefind-ui-scale));
+ margin-bottom: 0;
+ min-width: calc(250px * var(--pagefind-ui-scale));
+}
+
+/* FilterPills */
+
+.pagefind-modular-filter-pills-wrapper {
+ overflow-x: scroll;
+ padding: 15px 0;
+}
+
+.pagefind-modular-filter-pills {
+ display: flex;
+ gap: 6px;
+}
+
+.pagefind-modular-filter-pill {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border: none;
+ appearance: none;
+ padding: 0 calc(24px * var(--pagefind-ui-scale));
+ background-color: var(--pagefind-ui-background);
+ color: var(--pagefind-ui-fade);
+ border: var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);
+ border-radius: calc(25px * var(--pagefind-ui-scale));
+ font-size: calc(18px * var(--pagefind-ui-scale));
+ height: calc(50px * var(--pagefind-ui-scale));
+ cursor: pointer;
+ white-space: nowrap;
+}
+
+.pagefind-modular-filter-pill:hover {
+ border-color: var(--pagefind-ui-primary);
+}
+
+.pagefind-modular-filter-pill[aria-pressed="true"] {
+ border-color: var(--pagefind-ui-primary);
+ color: var(--pagefind-ui-primary);
+}
\ No newline at end of file
diff --git a/output/_pagefind/pagefind-modular-ui.js b/output/_pagefind/pagefind-modular-ui.js
new file mode 100644
index 0000000..43f738f
--- /dev/null
+++ b/output/_pagefind/pagefind-modular-ui.js
@@ -0,0 +1,8 @@
+(()=>{var b=Object.defineProperty;var w=(i,e)=>{for(var t in e)b(i,t,{get:e[t],enumerable:!0})};var f={};w(f,{FilterPills:()=>h,Input:()=>l,Instance:()=>p,ResultList:()=>a,Summary:()=>o});var r=class i{constructor(e){this.element=document.createElement(e)}id(e){return this.element.id=e,this}class(e){return this.element.classList.add(e),this}attrs(e){for(let[t,s]of Object.entries(e))this.element.setAttribute(t,s);return this}text(e){return this.element.innerText=e,this}html(e){return this [...]
+ <div class="pagefind-modular-list-thumb" data-pfmod-loading></div>
+ <div class="pagefind-modular-list-inner">
+ <p class="pagefind-modular-list-title" data-pfmod-loading>${i(30)}</p>
+ <p class="pagefind-modular-list-excerpt" data-pfmod-loading>${i(40)}</p>
+ </div>
+</li>`},y=i=>{let e=new r("li").class("pagefind-modular-list-result"),t=new r("div").class("pagefind-modular-list-thumb").addTo(e);i?.meta?.image&&new r("img").class("pagefind-modular-list-image").attrs({src:i.meta.image,alt:i.meta.image_alt||i.meta.title}).addTo(t);let s=new r("div").class("pagefind-modular-list-inner").addTo(e),n=new r("p").class("pagefind-modular-list-title").addTo(s);return new r("a").class("pagefind-modular-list-link").text(i.meta?.title).attrs({href:i.meta?.url||i. [...]
+`)),document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?console.error(`[DEBUG: Loaded from ${document.currentScript?.src??"bad script location"}]`):console.error("no known script location")}await e.options(this.pagefindOptions||{});for(let t of this.options.mergeIndex){if(!t.bundlePath)throw new Error("mergeIndex requires a bundlePath parameter");let s=t.bundlePath;delete t.bundlePath,await e.mergeIndex(s,t)}this.__pagefind__=e}this.availableFilters=await thi [...]
diff --git a/output/_pagefind/pagefind-ui.css b/output/_pagefind/pagefind-ui.css
new file mode 100644
index 0000000..d7984a9
--- /dev/null
+++ b/output/_pagefind/pagefind-ui.css
@@ -0,0 +1 @@
+.pagefind-ui__result.svelte-j9e30.svelte-j9e30{list-style-type:none;display:flex;align-items:flex-start;gap:min(calc(40px * var(--pagefind-ui-scale)),3%);padding:calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale));border-top:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result.svelte-j9e30.svelte-j9e30:last-of-type{border-bottom:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result-thumb.svelte-j9e30 [...]
diff --git a/output/_pagefind/pagefind-ui.js b/output/_pagefind/pagefind-ui.js
new file mode 100644
index 0000000..d88ad59
--- /dev/null
+++ b/output/_pagefind/pagefind-ui.js
@@ -0,0 +1,2 @@
+(()=>{var Ms=Object.defineProperty;var y=(n,e)=>{for(var t in e)Ms(n,t,{get:e[t],enumerable:!0})};function z(){}function mt(n){return n()}function gn(){return Object.create(null)}function G(n){n.forEach(mt)}function nt(n){return typeof n=="function"}function K(n,e){return n!=n?e==e:n!==e||n&&typeof n=="object"||typeof n=="function"}var et;function ie(n,e){return et||(et=document.createElement("a")),et.href=e,n===et.href}function En(n){return Object.keys(n).length===0}var Rn=typeof window [...]
+`)),document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?console.error(`[DEBUG: Loaded from ${document.currentScript.src??"bad script location"}]`):console.error("no known script location")}u||t(24,u=f?12:30);let F={...d||{},excerptLength:u};await E.options(F);for(let j of T){if(!j.bundlePath)throw new Error("mergeIndex requires a bundlePath parameter");let L=j.bundlePath;delete j.bundlePath,await E.mergeIndex(L,j)}H=E,hs()}},hs=async()=>{H&&(dn=await H.filter [...]
diff --git a/output/_pagefind/pagefind.en_e53d2b1f27.pf_meta b/output/_pagefind/pagefind.en_e53d2b1f27.pf_meta
new file mode 100644
index 0000000..178ebcd
Binary files /dev/null and b/output/_pagefind/pagefind.en_e53d2b1f27.pf_meta differ
diff --git a/output/_pagefind/pagefind.js b/output/_pagefind/pagefind.js
new file mode 100644
index 0000000..035a438
--- /dev/null
+++ b/output/_pagefind/pagefind.js
@@ -0,0 +1,9 @@
+const pagefind_version="1.3.0";let wasm_bindgen;(function(){const __exports={};let script_src;if(typeof document!=='undefined'&&document.currentScript!==null){script_src=new URL("UNHANDLED",location.href).toString()}let wasm=undefined;let cachedUint8Memory0=null;function getUint8Memory0(){if(cachedUint8Memory0===null||cachedUint8Memory0.byteLength===0){cachedUint8Memory0=new Uint8Array(wasm.memory.buffer)}return cachedUint8Memory0}let WASM_VECTOR_LEN=0;function passArray8ToWasm0(arg,mall [...]
+${e?.toString()}`);throw new Error("Failed to load Pagefind metadata")}}findIndex(language){if(this.languages){let index=this.languages[language];if(index)return index;index=this.languages[language.split("-")[0]];if(index)return index;let topLang=Object.values(this.languages).sort((a,b)=>b.page_count-a.page_count);if(topLang[0])return topLang[0]}throw new Error("Pagefind Error: No language indexes found.")}async loadMeta(index){try{let compressed_resp=await fetch(`${this.basePath}pagefin [...]
+${e?.toString()}`)}}async loadWasm(language){try{const wasm_url=`${this.basePath}wasm.${language}.pagefind`;let compressed_resp=await fetch(wasm_url);let compressed_wasm=await compressed_resp.arrayBuffer();const final_wasm=this.decompress(new Uint8Array(compressed_wasm),"Pagefind WebAssembly");if(!final_wasm){throw new Error("No WASM after decompression")}this.wasm=await this.backend(final_wasm)}catch(e){console.error(`Failed to load the Pagefind WASM:
+${e?.toString()}`);throw new Error(`Failed to load the Pagefind WASM:
+${e?.toString()}`)}}async _loadGenericChunk(url,method){try{let compressed_resp=await fetch(url);let compressed_chunk=await compressed_resp.arrayBuffer();let chunk=this.decompress(new Uint8Array(compressed_chunk),url);let ptr=await this.getPtr();this.raw_ptr=this.backend[method](ptr,chunk)}catch(e){console.error(`Failed to load the index chunk ${url}:
+${e?.toString()}`)}}async loadChunk(hash){if(!this.loaded_chunks[hash]){const url=`${this.basePath}index/${hash}.pf_index`;this.loaded_chunks[hash]=this._loadGenericChunk(url,"load_index_chunk")}return await this.loaded_chunks[hash]}async loadFilterChunk(hash){if(!this.loaded_filters[hash]){const url=`${this.basePath}filter/${hash}.pf_filter`;this.loaded_filters[hash]=this._loadGenericChunk(url,"load_filter_chunk")}return await this.loaded_filters[hash]}async _loadFragment(hash){let comp [...]
+ hash:${hash}
+ score:${score}
+ locations:${all_locations}`);let weighted_locations=all_locations.length?all_locations.split(",").map((l)=>{let[weight,balanced_score,location]=l.split(">");return{weight:parseInt(weight)/24,balanced_score:parseFloat(balanced_score),location:parseInt(location)}}):[];let locations=weighted_locations.map((l)=>l.location);return{id:hash,score:parseFloat(score)*this.indexWeight,words:locations,data:async()=>await this.loadFragment(hash,weighted_locations,term)}});const searchTime=Date.now( [...]
\ No newline at end of file
diff --git a/output/_pagefind/wasm.en.pagefind b/output/_pagefind/wasm.en.pagefind
new file mode 100644
index 0000000..6a6c03e
Binary files /dev/null and b/output/_pagefind/wasm.en.pagefind differ
diff --git a/output/_pagefind/wasm.unknown.pagefind b/output/_pagefind/wasm.unknown.pagefind
new file mode 100644
index 0000000..c9b1460
Binary files /dev/null and b/output/_pagefind/wasm.unknown.pagefind differ
diff --git a/output/about/index.ezmd b/output/about/index.ezmd
deleted file mode 100644
index 77c20b6..0000000
--- a/output/about/index.ezmd
+++ /dev/null
@@ -1,284 +0,0 @@
-title: About
-description: Community Over Code is the official Apache Software Foundation conference featuring technical tracks, Apache project deep dives, governance discussions, and real-world open source use cases.
-bodytag: id="about-page"
-template: page-full-width
-
-<section class="hero hero--mosaic overflow-hidden relative">
- <div class="inner flex relative z1 flex-gap-50 flex-col-800">
- <div class="hero__content flex-1 py-xl">
- <h1 class="hero__title">About Community Over Code</h1>
- <p>Community Over Code (formerly ApacheCon) is the official open source conference of The Apache Software Foundation (The ASF). It brings together the global communities behind Apache open source projects for technical sessions, project-specific tracks, hands-on workshops, and discussions about governance and sustainable open source development.</p>
- <p>Designed to foster direct collaboration, the event connects users, developers, contributors, committers, Project Management Committee members, and ASF leadership in a vendor-neutral environment grounded in the Apache model of open participation and consensus-driven decision-making.</p>
- </div>
- <div class="hero__collage flex-1 relative">
- <div id="about-collage" class="collage">
- <div class="image__wrapper">
- <img src="./images/about-6.webp" loading="lazy" width="267" height="445" alt="ASF Events">
- </div>
- <div class="image__wrapper">
- <img src="./images/about-2.webp" loading="lazy" width="267" height="445" alt="ASF Events">
- </div>
- <div class="image__wrapper">
- <img src="./images/about-3.webp" loading="lazy" width="267" height="445" alt="ASF Events">
- </div>
- <div class="image__wrapper">
- <img src="./images/about-4.webp" loading="lazy" width="267" height="445" alt="ASF Events">
- </div>
- <div class="image__wrapper">
- <img src="./images/about-5.webp" loading="lazy" width="267" height="445" alt="ASF Events">
- </div>
- <div class="image__wrapper">
- <img src="./images/about-1.webp" loading="lazy" width="267" height="445" alt="ASF Events">
- </div>
- <div class="image__wrapper">
- <img src="./images/about-7.webp" loading="lazy" width="267" height="445" alt="ASF Events">
- </div>
- <div class="image__wrapper">
- <img src="./images/about-8.webp" loading="lazy" width="267" height="445" alt="ASF Events">
- </div>
- </div>
- </div>
- </div>
-</section>
-<section class="our-vistion">
- <div class="inner py-xl">
- <h2 class="text-center">Our Vision for Community Over Code</h2>
- <div class="text-col text-center mb-xl">
- <p>The Community Over Code conference strives to achieve the following goals, positioning itself as a premier, open source, and highly technical collaborative event.</p>
- </div>
- <div class="card">
- <div class="card-inner vision-items grid grid-2-cols flex-gap-50 pa-medium">
- <div class="vision-item">
- <h3>Technical Depth and Breadth</h3>
- <p>Offer a wide range of sessions that provide both deep technical insights and broad overviews across the diverse ecosystem of Apache projects.</p>
- </div>
- <div class="vision-item">
- <h3>Community Building</h3>
- <p>Foster connections and collaboration among contributors, committers, users, and ASF leadership to strengthen the global Apache community.</p>
- </div>
- <div class="vision-item">
- <h3>Vendor-Neutral Environment</h3>
- <p>Maintain a vendor-neutral space focused on open source principles, free from commercial promotion, where the community can share knowledge and collaborate openly.</p>
- </div>
- <div class="vision-item">
- <h3>Governance and Sustainability Focus</h3>
- <p>Provide a platform for discussions about open source governance, project sustainability, and the health of the Apache ecosystem.</p>
- </div>
- </div>
- </div>
- </div>
-</section>
-<section class="timeline-section py-xl">
- <div class="inner cf pb-large text-center">
- <h2>History of Community Over Code</h2>
- </div>
- <div class="inner cf py-xl inner--timeline relative">
- <div class="timeline-bar"></div>
- <div class="cf">
- <div class="float50 sticky-image pr-large">
- <div class="timeline-image-wrapper">
- <img id="timeline-image-1" class="timeline-image shown" src="images/history-1.jpg" alt="ASF Events">
- <img id="timeline-image-2" class="timeline-image" src="images/1999.jpg" alt="ASF Events">
- <img id="timeline-image-3" class="timeline-image" src="images/2000.webp" alt="ASF Events">
- <img id="timeline-image-4" class="timeline-image shown" src="images/2001-2002.webp" alt="ASF Events">
- <img id="timeline-image-5" class="timeline-image" src="images/mid-2000s.webp" alt="ASF Events">
- <img id="timeline-image-6" class="timeline-image" src="images/2010s.webp" alt="ASF Events">
- <img id="timeline-image-7" class="timeline-image shown" src="images/2020-2.webp" alt="ASF Events">
- <img id="timeline-image-8" class="timeline-image" src="images/2023.webp" alt="ASF Events">
- <img id="timeline-image-9" class="timeline-image" src="images/today.webp" alt="ASF Events">
- </div>
- </div>
- <div class="float50 pl-large timeline-content-wrapper">
- <div id="timeline-content-1" class="timeline-content card mb-xl">
- <div class="card-inner">
- <h2>1998</h2>
- <p>The first ApacheCon was held in San Francisco, bringing together developers and users of the Apache HTTP Server at a time when the project powered a majority of the web. The event marked one of the earliest dedicated gatherings focused on open source infrastructure software.</p>
- </div>
- </div>
- <div id="timeline-content-2" class="timeline-content card mb-xl">
- <div class="card-inner">
- <h2>1999</h2>
- <p>As The Apache Software Foundation (The ASF) was established as a 501(c)(3), ApacheCon began reflecting a broader mission beyond the web server, supporting a growing ecosystem of Apache projects and contributors.</p>
- </div>
- </div>
- <div id="timeline-content-3" class="timeline-content card mb-xl">
- <div class="card-inner">
- <h2>2000</h2>
- <p>ApacheCon expanded internationally, demonstrating the global reach of the Apache community and the increasing adoption of Apache software in enterprise environments.</p>
- </div>
- </div>
- <div id="timeline-content-4" class="timeline-content card mb-xl">
- <div class="card-inner">
- <h2>2001 - 2002</h2>
- <p>The conference evolved alongside The ASF’s governance model, highlighting meritocratic contribution, open decision-making, and the foundation’s expanding portfolio of projects.
-</p>
- </div>
- </div>
- <div id="timeline-content-5" class="timeline-content card mb-xl">
- <div class="card-inner">
- <h2>Mid 2000s</h2>
- <p>ApacheCon featured technical deep dives across new Apache projects in areas such as Java, XML, data systems, and infrastructure tooling, reflecting the ASF’s growth beyond web technologies.</p>
- </div>
- </div>
- <div id="timeline-content-6" class="timeline-content card mb-xl">
- <div class="card-inner">
- <h2>2010s</h2>
- <p>With the rise of distributed systems and large-scale data platforms, ApacheCon hosted dedicated tracks for major projects, production case studies, and sessions on open source sustainability and governance.</p>
- </div>
- </div>
- <div id="timeline-content-7" class="timeline-content card mb-xl">
- <div class="card-inner">
- <h2>2020 - 2021</h2>
- <p>The conference adapted to global circumstances with virtual formats, maintaining continuity for the Apache community while expanding remote participation worldwide.</p>
- </div>
- </div>
- <div id="timeline-content-8" class="timeline-content card mb-xl">
- <div class="card-inner">
- <h2>2023</h2>
- <p>The event was renamed Community Over Code, reflecting a long-standing Apache principle that healthy communities are the foundation of sustainable open source projects.</p>
- </div>
- </div>
- <div id="timeline-content-9" class="timeline-content card mb-xl">
- <div class="card-inner">
- <h2>Today</h2>
- <p>Community Over Code continues as the official conference of The Apache Software Foundation, bringing together contributors, committers, users, and open source leaders for technical collaboration and governance discussions.</p>
- </div>
- </div>
- </div>
- </div>
-</section>
-<section class="faq-section">
- <div class="inner py-xl">
- <h2 class="text-center text-heading-light">FAQs</h2>
- <div class="faqs">
- <div class="faq card">
- <div class="faq-question">
- <h3>What is Community Over Code?</h3>
- </div>
- <div class="faq-answer">
- <p>Community Over Code is the official annual conference of the Apache Software Foundation (The ASF). It brings together contributors, committers, developers, and users of Apache open source projects for technical sessions and discussions about open source governance and sustainability.</p>
- </div>
- </div>
- <div class="faq card">
- <div class="faq-question">
- <h3>Is Community Over Code the official Apache conference?</h3>
- </div>
- <div class="faq-answer">
- <p>Yes. Community Over Code is the official conference of The Apache Software Foundation (The ASF) and was formerly known as ApacheCon.</p>
- </div>
- </div>
- <div class="faq card">
- <div class="faq-question">
- <h3>What Apache projects are discussed?</h3>
- </div>
- <div class="faq-answer">
- <p>Community Over Code features sessions and tracks dedicated to a wide range of Apache projects, with topics varying each year based on community participation and project activity.</p>
- </div>
- </div>
- <div class="faq card">
- <div class="faq-question">
- <h3>Can non-committers attend?</h3>
- </div>
- <div class="faq-answer">
- <p>Yes. Community Over Code is open to developers, users, contributors, and anyone interested in Apache open source projects.</p>
- </div>
- </div>
- <div class="faq card">
- <div class="faq-question">
- <h3>How is Community Over Code different from vendor conferences?</h3>
- </div>
- <div class="faq-answer">
- <p>Community Over Code is community-led and vendor-neutral, focusing on Apache projects, governance, and technical collaboration rather than product marketing or commercial promotion.</p>
- </div>
- </div>
- <div class="faq card">
- <div class="faq-question">
- <h3>Where is Community Over Code held?</h3>
- </div>
- <div class="faq-answer">
- <p>The event locations vary each year and may include in-person and hybrid participation options.</p>
- </div>
- </div>
- <div class="faq card">
- <div class="faq-question">
- <h3>Can I submit a talk?</h3>
- </div>
- <div class="faq-answer">
- <p>Yes. The conference includes an open call for proposals (CFP) where community members can submit technical and governance-focused sessions.</p>
- </div>
- </div>
- <div class="faq card">
- <div class="faq-question">
- <h3>What topics are typically covered?</h3>
- </div>
- <div class="faq-answer">
- <p>Sessions include project deep dives, production use cases, release processes, security practices, governance, incubation, and open source sustainability.</p>
- </div>
- </div>
- <div class="faq card">
- <div class="faq-question">
- <h3>Is there a discount for students?</h3>
- </div>
- <div class="faq-answer">
- <p>Yes. Discounted registration options are typically available for students; details are provided on the registration page each year.</p>
- </div>
- </div>
- <div class="faq card">
- <div class="faq-question">
- <h3>Why the name “Community Over Code?”</h3>
- </div>
- <div class="faq-answer">
- <p>The name reflects a core Apache principle: sustainable open source depends on healthy, collaborative communities. Strong communities can improve code over time; great code cannot survive without strong community governance.</p>
- </div>
- </div>
- </div>
- </div>
-</section>
-<section id="contact-section" class="contact-section">
- <div class="inner py-xl relative z1">
- <div class="text-center mb-large">
- <h2 class="text-white">Contact Us</h2>
- <p class="text-white">If you want to stay up-to-date on all ASF events, join the read-only mailing list.</p>
- </div>
- <div class="flex flex-gap-50 flex-col-800">
- <div class="card flex-1">
- <div class="card-inner flex flex-gap-20 flex-column text-center">
- <div class="contact-icon">
- <img src="/images/slack-icon.png" width="75" height="75" alt="Slack Icon">
- </div>
- <h3>Slack</h3>
- <p>Attendees, the best place for getting your questions answered is to join the Community Over Code Slack (aka Apachecon Slack).</p>
- <p><a href="https://forms.gle/9Zz5mL7n1Z1Z1Z1Z" class="btn">Join Now </a></p>
- </div>
- </div>
- <div class="card flex-1">
- <div class="card-inner flex flex-gap-20 flex-column text-center">
- <div class="contact-icon">
- <img src="/images/email.svg" width="75" height="75" alt="Mailing List Icon">
- </div>
- <h3>Mailing List</h3>
- <p>To stay updated on all ASF events, join the read-only mailing list.</p>
- <p><a href="mailto:announce@apachecon.com" class="btn">Join List</a></p>
- <h4>Subscription address:</h4>
- <p><a href="mailto:announce-subscribe@apachecon.com" class="btn">Subscribe</a></p>
- <h4>Web archives</h4>
- <p><a href="https://lists.apache.org/list.html?announce@apachecon.com" class="btn">View Archives</a></p>
- </div>
- </div>
- <div class="card flex-1">
- <div class="card-inner flex flex-gap-20 flex-column text-center">
- <div class="contact-icon">
- <img src="/images/email.svg" width="75" height="75" alt="Email Icon">
- </div>
- <h3>Email</h3>
- <p>For specific questions about the conference, please contact the planning team.</p>
- <p><a href="mailto:planners@apachecon.com" class="btn">Send Email</a></p>
- </div>
- </div>
- </div>
- </div>
-</section>
-<div>
- <script src="../js/timeline-js.js"></script>
-</div>
-
diff --git a/output/about/index.html b/output/about/index.html
new file mode 100644
index 0000000..e86f8f2
--- /dev/null
+++ b/output/about/index.html
@@ -0,0 +1,385 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="description" content="Community Over Code is the official Apache Software Foundation conference featuring technical tracks, Apache project deep dives, governance discussions, and real-world open source use cases.">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>About | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body id="about-page" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/about/">About</a></li>
+ <li><a href="/sponsors/">Sponsors</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ </ul>
+</nav> </header>
+
+ <div class="full-width">
+ <section class="hero hero--mosaic overflow-hidden relative">
+<div class="inner flex relative z1 flex-gap-50 flex-col-800">
+<div class="hero__content flex-1 py-xl">
+<h1 class="hero__title" id="about-community-over-code">About Community Over Code</h1>
+<p>Community Over Code (formerly ApacheCon) is the official open source conference of The Apache Software Foundation (The ASF). It brings together the global communities behind Apache open source projects for technical sessions, project-specific tracks, hands-on workshops, and discussions about governance and sustainable open source development.</p>
+<p>Designed to foster direct collaboration, the event connects users, developers, contributors, committers, Project Management Committee members, and ASF leadership in a vendor-neutral environment grounded in the Apache model of open participation and consensus-driven decision-making.</p>
+</div>
+<div class="hero__collage flex-1 relative">
+<div class="collage" id="about-collage">
+<div class="image__wrapper">
+<img alt="ASF Events" height="445" loading="lazy" src="./images/about-6.webp" width="267"/>
+</div>
+<div class="image__wrapper">
+<img alt="ASF Events" height="445" loading="lazy" src="./images/about-2.webp" width="267"/>
+</div>
+<div class="image__wrapper">
+<img alt="ASF Events" height="445" loading="lazy" src="./images/about-3.webp" width="267"/>
+</div>
+<div class="image__wrapper">
+<img alt="ASF Events" height="445" loading="lazy" src="./images/about-4.webp" width="267"/>
+</div>
+<div class="image__wrapper">
+<img alt="ASF Events" height="445" loading="lazy" src="./images/about-5.webp" width="267"/>
+</div>
+<div class="image__wrapper">
+<img alt="ASF Events" height="445" loading="lazy" src="./images/about-1.webp" width="267"/>
+</div>
+<div class="image__wrapper">
+<img alt="ASF Events" height="445" loading="lazy" src="./images/about-7.webp" width="267"/>
+</div>
+<div class="image__wrapper">
+<img alt="ASF Events" height="445" loading="lazy" src="./images/about-8.webp" width="267"/>
+</div>
+</div>
+</div>
+</div>
+</section>
+<section class="our-vistion">
+<div class="inner py-xl">
+<h2 class="text-center">Our Vision for Community Over Code</h2>
+<div class="text-col text-center mb-xl">
+<p>The Community Over Code conference strives to achieve the following goals, positioning itself as a premier, open source, and highly technical collaborative event.</p>
+</div>
+<div class="card">
+<div class="card-inner vision-items grid grid-2-cols flex-gap-50 pa-medium">
+<div class="vision-item">
+<h3>Technical Depth and Breadth</h3>
+<p>Offer a wide range of sessions that provide both deep technical insights and broad overviews across the diverse ecosystem of Apache projects.</p>
+</div>
+<div class="vision-item">
+<h3>Community Building</h3>
+<p>Foster connections and collaboration among contributors, committers, users, and ASF leadership to strengthen the global Apache community.</p>
+</div>
+<div class="vision-item">
+<h3>Vendor-Neutral Environment</h3>
+<p>Maintain a vendor-neutral space focused on open source principles, free from commercial promotion, where the community can share knowledge and collaborate openly.</p>
+</div>
+<div class="vision-item">
+<h3>Governance and Sustainability Focus</h3>
+<p>Provide a platform for discussions about open source governance, project sustainability, and the health of the Apache ecosystem.</p>
+</div>
+</div>
+</div>
+</div>
+</section>
+<section class="timeline-section py-xl">
+<div class="inner cf pb-large text-center">
+<h2>History of Community Over Code</h2>
+</div>
+<div class="inner cf py-xl inner--timeline relative">
+<div class="timeline-bar"></div>
+<div class="cf">
+<div class="float50 sticky-image pr-large">
+<div class="timeline-image-wrapper">
+<img alt="ASF Events" class="timeline-image shown" id="timeline-image-1" src="images/history-1.jpg"/>
+<img alt="ASF Events" class="timeline-image" id="timeline-image-2" src="images/1999.jpg"/>
+<img alt="ASF Events" class="timeline-image" id="timeline-image-3" src="images/2000.webp"/>
+<img alt="ASF Events" class="timeline-image shown" id="timeline-image-4" src="images/2001-2002.webp"/>
+<img alt="ASF Events" class="timeline-image" id="timeline-image-5" src="images/mid-2000s.webp"/>
+<img alt="ASF Events" class="timeline-image" id="timeline-image-6" src="images/2010s.webp"/>
+<img alt="ASF Events" class="timeline-image shown" id="timeline-image-7" src="images/2020-2.webp"/>
+<img alt="ASF Events" class="timeline-image" id="timeline-image-8" src="images/2023.webp"/>
+<img alt="ASF Events" class="timeline-image" id="timeline-image-9" src="images/today.webp"/>
+</div>
+</div>
+<div class="float50 pl-large timeline-content-wrapper">
+<div class="timeline-content card mb-xl" id="timeline-content-1">
+<div class="card-inner">
+<h2>1998</h2>
+<p>The first ApacheCon was held in San Francisco, bringing together developers and users of the Apache HTTP Server at a time when the project powered a majority of the web. The event marked one of the earliest dedicated gatherings focused on open source infrastructure software.</p>
+</div>
+</div>
+<div class="timeline-content card mb-xl" id="timeline-content-2">
+<div class="card-inner">
+<h2>1999</h2>
+<p>As The Apache Software Foundation (The ASF) was established as a 501(c)(3), ApacheCon began reflecting a broader mission beyond the web server, supporting a growing ecosystem of Apache projects and contributors.</p>
+</div>
+</div>
+<div class="timeline-content card mb-xl" id="timeline-content-3">
+<div class="card-inner">
+<h2>2000</h2>
+<p>ApacheCon expanded internationally, demonstrating the global reach of the Apache community and the increasing adoption of Apache software in enterprise environments.</p>
+</div>
+</div>
+<div class="timeline-content card mb-xl" id="timeline-content-4">
+<div class="card-inner">
+<h2>2001 - 2002</h2>
+<p>The conference evolved alongside The ASF’s governance model, highlighting meritocratic contribution, open decision-making, and the foundation’s expanding portfolio of projects.
+</p>
+</div>
+</div>
+<div class="timeline-content card mb-xl" id="timeline-content-5">
+<div class="card-inner">
+<h2>Mid 2000s</h2>
+<p>ApacheCon featured technical deep dives across new Apache projects in areas such as Java, XML, data systems, and infrastructure tooling, reflecting the ASF’s growth beyond web technologies.</p>
+</div>
+</div>
+<div class="timeline-content card mb-xl" id="timeline-content-6">
+<div class="card-inner">
+<h2>2010s</h2>
+<p>With the rise of distributed systems and large-scale data platforms, ApacheCon hosted dedicated tracks for major projects, production case studies, and sessions on open source sustainability and governance.</p>
+</div>
+</div>
+<div class="timeline-content card mb-xl" id="timeline-content-7">
+<div class="card-inner">
+<h2>2020 - 2021</h2>
+<p>The conference adapted to global circumstances with virtual formats, maintaining continuity for the Apache community while expanding remote participation worldwide.</p>
+</div>
+</div>
+<div class="timeline-content card mb-xl" id="timeline-content-8">
+<div class="card-inner">
+<h2>2023</h2>
+<p>The event was renamed Community Over Code, reflecting a long-standing Apache principle that healthy communities are the foundation of sustainable open source projects.</p>
+</div>
+</div>
+<div class="timeline-content card mb-xl" id="timeline-content-9">
+<div class="card-inner">
+<h2>Today</h2>
+<p>Community Over Code continues as the official conference of The Apache Software Foundation, bringing together contributors, committers, users, and open source leaders for technical collaboration and governance discussions.</p>
+</div>
+</div>
+</div>
+</div>
+</div></section>
+<section class="faq-section">
+<div class="inner py-xl">
+<h2 class="text-center text-heading-light">FAQs</h2>
+<div class="faqs">
+<div class="faq card">
+<div class="faq-question">
+<h3>What is Community Over Code?</h3>
+</div>
+<div class="faq-answer">
+<p>Community Over Code is the official annual conference of the Apache Software Foundation (The ASF). It brings together contributors, committers, developers, and users of Apache open source projects for technical sessions and discussions about open source governance and sustainability.</p>
+</div>
+</div>
+<div class="faq card">
+<div class="faq-question">
+<h3>Is Community Over Code the official Apache conference?</h3>
+</div>
+<div class="faq-answer">
+<p>Yes. Community Over Code is the official conference of The Apache Software Foundation (The ASF) and was formerly known as ApacheCon.</p>
+</div>
+</div>
+<div class="faq card">
+<div class="faq-question">
+<h3>What Apache projects are discussed?</h3>
+</div>
+<div class="faq-answer">
+<p>Community Over Code features sessions and tracks dedicated to a wide range of Apache projects, with topics varying each year based on community participation and project activity.</p>
+</div>
+</div>
+<div class="faq card">
+<div class="faq-question">
+<h3>Can non-committers attend?</h3>
+</div>
+<div class="faq-answer">
+<p>Yes. Community Over Code is open to developers, users, contributors, and anyone interested in Apache open source projects.</p>
+</div>
+</div>
+<div class="faq card">
+<div class="faq-question">
+<h3>How is Community Over Code different from vendor conferences?</h3>
+</div>
+<div class="faq-answer">
+<p>Community Over Code is community-led and vendor-neutral, focusing on Apache projects, governance, and technical collaboration rather than product marketing or commercial promotion.</p>
+</div>
+</div>
+<div class="faq card">
+<div class="faq-question">
+<h3>Where is Community Over Code held?</h3>
+</div>
+<div class="faq-answer">
+<p>The event locations vary each year and may include in-person and hybrid participation options.</p>
+</div>
+</div>
+<div class="faq card">
+<div class="faq-question">
+<h3>Can I submit a talk?</h3>
+</div>
+<div class="faq-answer">
+<p>Yes. The conference includes an open call for proposals (CFP) where community members can submit technical and governance-focused sessions.</p>
+</div>
+</div>
+<div class="faq card">
+<div class="faq-question">
+<h3>What topics are typically covered?</h3>
+</div>
+<div class="faq-answer">
+<p>Sessions include project deep dives, production use cases, release processes, security practices, governance, incubation, and open source sustainability.</p>
+</div>
+</div>
+<div class="faq card">
+<div class="faq-question">
+<h3>Is there a discount for students?</h3>
+</div>
+<div class="faq-answer">
+<p>Yes. Discounted registration options are typically available for students; details are provided on the registration page each year.</p>
+</div>
+</div>
+<div class="faq card">
+<div class="faq-question">
+<h3>Why the name “Community Over Code?”</h3>
+</div>
+<div class="faq-answer">
+<p>The name reflects a core Apache principle: sustainable open source depends on healthy, collaborative communities. Strong communities can improve code over time; great code cannot survive without strong community governance.</p>
+</div>
+</div>
+</div>
+</div>
+</section>
+<section class="contact-section" id="contact-section">
+<div class="inner py-xl relative z1">
+<div class="text-center mb-large">
+<h2 class="text-white">Contact Us</h2>
+<p class="text-white">If you want to stay up-to-date on all ASF events, join the read-only mailing list.</p>
+</div>
+<div class="flex flex-gap-50 flex-col-800">
+<div class="card flex-1">
+<div class="card-inner flex flex-gap-20 flex-column text-center">
+<div class="contact-icon">
+<img alt="Slack Icon" height="75" src="/images/slack-icon.png" width="75"/>
+</div>
+<h3>Slack</h3>
+<p>Attendees, the best place for getting your questions answered is to join the Community Over Code Slack (aka Apachecon Slack).</p>
+<p><a class="btn" href="https://forms.gle/9Zz5mL7n1Z1Z1Z1Z">Join Now </a></p>
+</div>
+</div>
+<div class="card flex-1">
+<div class="card-inner flex flex-gap-20 flex-column text-center">
+<div class="contact-icon">
+<img alt="Mailing List Icon" height="75" src="/images/email.svg" width="75"/>
+</div>
+<h3>Mailing List</h3>
+<p>To stay updated on all ASF events, join the read-only mailing list.</p>
+<p><a class="btn" href="mailto:announce@apachecon.com">Join List</a></p>
+<h4>Subscription address:</h4>
+<p><a class="btn" href="mailto:announce-subscribe@apachecon.com">Subscribe</a></p>
+<h4>Web archives</h4>
+<p><a class="btn" href="https://lists.apache.org/list.html?announce@apachecon.com">View Archives</a></p>
+</div>
+</div>
+<div class="card flex-1">
+<div class="card-inner flex flex-gap-20 flex-column text-center">
+<div class="contact-icon">
+<img alt="Email Icon" height="75" src="/images/email.svg" width="75"/>
+</div>
+<h3>Email</h3>
+<p>For specific questions about the conference, please contact the planning team.</p>
+<p><a class="btn" href="mailto:planners@apachecon.com">Send Email</a></p>
+</div>
+</div>
+</div>
+</div>
+</section>
+<div>
+<script src="../js/timeline-js.js"></script>
+</div>
+
+ </div>
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/code-of-conduct.ezmd b/output/code-of-conduct.ezmd
deleted file mode 100644
index 9765b45..0000000
--- a/output/code-of-conduct.ezmd
+++ /dev/null
@@ -1,20 +0,0 @@
-title: Code of Conduct
-description: The Apache Software Foundation (ASF) is committed to providing a welcoming and inclusive environment for all members of our community. This Code of Conduct outlines our expectations for behavior and the consequences for unacceptable behavior.
-
-At the ASF, all online interactions are governed by the ASF Code of Conduct, while in-person events are subject to the Anti-Harassment Policy.
-
-ASF events are dedicated to providing a harassment-free experience for everyone. We do not tolerate harassment of participants in any form. Participants violating these rules may be sanctioned or expelled without a refund, at the discretion of the event organizers.
-
-Harassment includes offensive verbal comments, deliberate intimidation, stalking, following, unwanted photography or recording, sustained disruption of talks or other events, inappropriate physical contact, and unwelcome sexual attention. Participants asked to stop any harassing behavior are expected to comply immediately.
-
-Sexual language and imagery will not be tolerated in any event venue, including talks. Exhibitors should also refrain from using sexualised images, activities, or other material. Booth staff (including volunteers) should not use sexualised clothing/uniforms/costumes, or otherwise create a sexualised environment.
-
-If a participant engages in harassing behaviour, the organizers may take any action they deem appropriate, including warning the offender or expulsion from the event without a refund. We expect participants to follow these rules at all event venues and related social events.
-
-If you are being harassed, notice that someone else is being harassed, or have any other concerns, please contact a member of the event team immediately. The team can be found at the registration desk.
-
-The event team will be happy to help participants contact hotel/venue security (as available) or local law enforcement, provide escorts to walk you to/from your room/car/taxi/etc, or otherwise assist those experiencing harassment to feel safe for the duration of the event. We value your attendance.
-
-You can contact the event team via email at [[]planners@apachecon.com](mailto:planners@apachecon.com)
-
-You can find the event team on the day at the registration desk.
\ No newline at end of file
diff --git a/output/code-of-conduct.html b/output/code-of-conduct.html
new file mode 100644
index 0000000..4a5bf06
--- /dev/null
+++ b/output/code-of-conduct.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="description" content="The Apache Software Foundation (ASF) is committed to providing a welcoming and inclusive environment for all members of our community. This Code of Conduct outlines our expectations for behavior and the consequences for unacceptable behavior.">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>Code of Conduct | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/about/">About</a></li>
+ <li><a href="/sponsors/">Sponsors</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ </ul>
+</nav> </header>
+
+ <div class="hero hero--defaults relative">
+ <div class="inner py-xl relative z1">
+ <div class="hero-content text-center">
+ <h1 class="hero-title">Code of Conduct</h1>
+ </div>
+ </div>
+ </div>
+ <section class="maincontent">
+ <div class="inner py-xl">
+ <p>At the ASF, all online interactions are governed by the ASF Code of Conduct, while in-person events are subject to the Anti-Harassment Policy.</p>
+<p>ASF events are dedicated to providing a harassment-free experience for everyone. We do not tolerate harassment of participants in any form. Participants violating these rules may be sanctioned or expelled without a refund, at the discretion of the event organizers.</p>
+<p>Harassment includes offensive verbal comments, deliberate intimidation, stalking, following, unwanted photography or recording, sustained disruption of talks or other events, inappropriate physical contact, and unwelcome sexual attention. Participants asked to stop any harassing behavior are expected to comply immediately.</p>
+<p>Sexual language and imagery will not be tolerated in any event venue, including talks. Exhibitors should also refrain from using sexualised images, activities, or other material. Booth staff (including volunteers) should not use sexualised clothing/uniforms/costumes, or otherwise create a sexualised environment.</p>
+<p>If a participant engages in harassing behaviour, the organizers may take any action they deem appropriate, including warning the offender or expulsion from the event without a refund. We expect participants to follow these rules at all event venues and related social events.</p>
+<p>If you are being harassed, notice that someone else is being harassed, or have any other concerns, please contact a member of the event team immediately. The team can be found at the registration desk.</p>
+<p>The event team will be happy to help participants contact hotel/venue security (as available) or local law enforcement, provide escorts to walk you to/from your room/car/taxi/etc, or otherwise assist those experiencing harassment to feel safe for the duration of the event. We value your attendance.</p>
+<p>You can contact the event team via email at <a href="mailto:planners@apachecon.com">planners@apachecon.com</a></p>
+<p>You can find the event team on the day at the registration desk.</p>
+
+ </div>
+ </section>
+
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/css/styles.css b/output/css/styles.css
index da3d9fb..39e3f7f 100644
--- a/output/css/styles.css
+++ b/output/css/styles.css
@@ -21,6 +21,7 @@
--val-baseline: 20px;
}
+
/* CSS reset. Why? Because browser makers make the www difficult to style. Enough with that. */
/* Modern CSS reset by: https://piccalil.li/blog/a-modern-css-reset/ */
*,*::before,*::after{box-sizing:border-box}body,h1,h2,h3,h4,p,figure,blockquote,dl,dd{margin:0}ul[role='list'],ol[role='list']{list-style:none}html:focus-within{scroll-behavior:smooth}body{min-height:100vh;text-rendering:optimizeSpeed;line-height:1.5}a:not([class]){text-decoration-skip-ink:auto}img,picture{max-width:100%;display:block}input,button,textarea,select{font:inherit}@media (prefers-reduced-motion: reduce){html:focus-within{scroll-behavior:auto}*,*::before,*::after{animation-dur [...]
diff --git a/output/events/apache-bigdata-eu-2015.ezmd b/output/events/apache-bigdata-eu-2015.ezmd
deleted file mode 100644
index 71580fa..0000000
--- a/output/events/apache-bigdata-eu-2015.ezmd
+++ /dev/null
@@ -1,25 +0,0 @@
-title: Apache BigData EU 2015
-template: page-event-landing
-ref: apache-bigdata-eu-2015
-
-## Event Info
-
-<a class="btn" target="_blank" href="http://events.linuxfoundation.org/events/archive/2015/apache-big-data-europe">Press Release</a>
-
----
-
-## Schedules
-<a class="btn" target="_blank" href="https://apachebigdata2015.sched.com/">Schedule</a>
-
----
-
-## Slides
-<a class="btn" target="_blank" href="http://events.linuxfoundation.org/events/archive/2015/apache-big-data-europe/program/slides">Slides</a>
-
----
-
-## Pictures
-<a class="btn" target="_blank" href="https://www.flickr.com/photos/linuxfoundation/albums/72157658784463958">Flickr Album</a>
-
----
-
diff --git a/output/events/apache-bigdata-eu-2015.html b/output/events/apache-bigdata-eu-2015.html
new file mode 100644
index 0000000..6b09d2c
--- /dev/null
+++ b/output/events/apache-bigdata-eu-2015.html
@@ -0,0 +1,198 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>Apache BigData EU 2015 | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-apache-bigdata-eu-2015" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/about/">About</a></li>
+ <li><a href="/sponsors/">Sponsors</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ </ul>
+</nav> </header>
+
+
+ <div class="hero hero--event-home relative" style="background-image: url('');">
+ <div class="inner flex py-xl relative flex-vert-center z1 flex-col-reverse-800 flex-gap-50">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Community Over Code
+ <span class="hero__subtitle">Budapest, Hungary</span>
+ </h1>
+ <div class="hero-event-dates text-white">September 28-30, 2015</div>
+ <div class="hero-ctas flex flex-gap-20 flex-wrap">
+ </div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/CoC-logo-white.webp" alt="Community Over Code logo" class="hero__logo-image">
+ </div>
+ </div>
+ <script>
+ // Countdown timer script
+ let countdownInterval;
+
+ function updateCountdown() {
+ const countdownWrapper = document.getElementById('countdown-wrapper');
+ const targetDate = new Date(countdownWrapper.getAttribute('data-date')).getTime();
+ const now = new Date().getTime();
+ const distance = targetDate - now;
+ if(distance > 0) {
+ countdownWrapper.classList.add('show');
+ } else {
+ clearInterval(countdownInterval); // Stop the interval
+ // remove countdown from the dom
+ countdownWrapper.remove();
+ return;
+ }
+
+ const days = Math.floor(distance / (1000 * 60 * 60 * 24));
+ const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
+ const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
+ const seconds = Math.floor((distance % (1000 * 60)) / 1000);
+
+ document.getElementById('cd-days').textContent = String(days).padStart(2, '0');
+ document.getElementById('cd-hours').textContent = String(hours).padStart(2, '0');
+ document.getElementById('cd-minutes').textContent = String(minutes).padStart(2, '0');
+ document.getElementById('cd-seconds').textContent = String(seconds).padStart(2, '0');
+ }
+
+ countdownInterval = setInterval(updateCountdown, 1000);
+ updateCountdown(); // Initial call to set values immediately
+ </script>
+ <div id="countdown-wrapper" class="countdown" data-date="2015-09-28">
+ <div class="countdown__box card">
+ <span id="cd-days" class="countdown__number">00</span>
+ <span class="countdown__label">Days</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-hours" class="countdown__number">00</span>
+ <span class="countdown__label">Hours</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-minutes" class="countdown__number">00</span>
+ <span class="countdown__label">Minutes</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-seconds" class="countdown__number">00</span>
+ <span class="countdown__label">Seconds</span>
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner flex-col-800 flex pt-xl">
+ <div class="flex-1"></div>
+ <div class="flex-2">
+ <h2>Event Info</h2>
+<p><a class="btn" href="http://events.linuxfoundation.org/events/archive/2015/apache-big-data-europe" target="_blank">Press Release</a></p>
+<hr/>
+<h2>Schedules</h2>
+<p><a class="btn" href="https://apachebigdata2015.sched.com/" target="_blank">Schedule</a></p>
+<hr/>
+<h2>Slides</h2>
+<p><a class="btn" href="http://events.linuxfoundation.org/events/archive/2015/apache-big-data-europe/program/slides" target="_blank">Slides</a></p>
+<hr/>
+<h2>Pictures</h2>
+<p><a class="btn" href="https://www.flickr.com/photos/linuxfoundation/albums/72157658784463958" target="_blank">Flickr Album</a></p>
+<hr/>
+
+ </div>
+ </div>
+ </section>
+ <!--
+ NOTE: For this section to work, to update the sponsors.json file in the event directory.
+ - Add all of your sponsors to the appropriate category (diamond, gold, silver).
+ - Make sure to include the sponsor's name, logo URL, and link URL in the JSON file.
+ - update the asfdata.yaml file to include the path to your sponsors.json file under the sponsors key, using a unique key for your event (e.g., glasgow-2026).
+ - in the event landing page meta data, set the sponsorskey to match the key you used in asfdata.yaml (e.g., glasgow-2026)
+ -->
+
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/apache-bigdata-eu-2016.ezmd b/output/events/apache-bigdata-eu-2016.ezmd
deleted file mode 100644
index c6d3eb5..0000000
--- a/output/events/apache-bigdata-eu-2016.ezmd
+++ /dev/null
@@ -1,25 +0,0 @@
-title: Apache BigData EU 2016
-template: page-event-landing
-ref: apache-bigdata-eu-2016
-
-## Event Info
-
-<a class="btn" target="_blank" href="http://events.linuxfoundation.org/events/apache-big-data-europe">Press Release</a>
-
----
-
-## Schedules
-<a class="btn" target="_blank" href="https://apachebigdataeu2016.sched.com/">Schedule</a>
-
----
-
-## Feathercast
-<a class="btn" target="_blank" href="https://feathercast.apache.org/tag/seville/">Feathercast Playlist</a>
-
----
-
-## Pictures
-<a class="btn" target="_blank" href="https://www.flickr.com/photos/rbowen/albums/72157676659083335">Flickr Album</a>
-
----
-
diff --git a/output/events/apache-bigdata-eu-2016.html b/output/events/apache-bigdata-eu-2016.html
new file mode 100644
index 0000000..57ad4d5
--- /dev/null
+++ b/output/events/apache-bigdata-eu-2016.html
@@ -0,0 +1,198 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>Apache BigData EU 2016 | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-apache-bigdata-eu-2016" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/about/">About</a></li>
+ <li><a href="/sponsors/">Sponsors</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ </ul>
+</nav> </header>
+
+
+ <div class="hero hero--event-home relative" style="background-image: url('');">
+ <div class="inner flex py-xl relative flex-vert-center z1 flex-col-reverse-800 flex-gap-50">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Community Over Code
+ <span class="hero__subtitle">Seville, Spain</span>
+ </h1>
+ <div class="hero-event-dates text-white">November 14-16, 2016</div>
+ <div class="hero-ctas flex flex-gap-20 flex-wrap">
+ </div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/CoC-logo-white.webp" alt="Community Over Code logo" class="hero__logo-image">
+ </div>
+ </div>
+ <script>
+ // Countdown timer script
+ let countdownInterval;
+
+ function updateCountdown() {
+ const countdownWrapper = document.getElementById('countdown-wrapper');
+ const targetDate = new Date(countdownWrapper.getAttribute('data-date')).getTime();
+ const now = new Date().getTime();
+ const distance = targetDate - now;
+ if(distance > 0) {
+ countdownWrapper.classList.add('show');
+ } else {
+ clearInterval(countdownInterval); // Stop the interval
+ // remove countdown from the dom
+ countdownWrapper.remove();
+ return;
+ }
+
+ const days = Math.floor(distance / (1000 * 60 * 60 * 24));
+ const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
+ const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
+ const seconds = Math.floor((distance % (1000 * 60)) / 1000);
+
+ document.getElementById('cd-days').textContent = String(days).padStart(2, '0');
+ document.getElementById('cd-hours').textContent = String(hours).padStart(2, '0');
+ document.getElementById('cd-minutes').textContent = String(minutes).padStart(2, '0');
+ document.getElementById('cd-seconds').textContent = String(seconds).padStart(2, '0');
+ }
+
+ countdownInterval = setInterval(updateCountdown, 1000);
+ updateCountdown(); // Initial call to set values immediately
+ </script>
+ <div id="countdown-wrapper" class="countdown" data-date="2016-11-14">
+ <div class="countdown__box card">
+ <span id="cd-days" class="countdown__number">00</span>
+ <span class="countdown__label">Days</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-hours" class="countdown__number">00</span>
+ <span class="countdown__label">Hours</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-minutes" class="countdown__number">00</span>
+ <span class="countdown__label">Minutes</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-seconds" class="countdown__number">00</span>
+ <span class="countdown__label">Seconds</span>
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner flex-col-800 flex pt-xl">
+ <div class="flex-1"></div>
+ <div class="flex-2">
+ <h2>Event Info</h2>
+<p><a class="btn" href="http://events.linuxfoundation.org/events/apache-big-data-europe" target="_blank">Press Release</a></p>
+<hr/>
+<h2>Schedules</h2>
+<p><a class="btn" href="https://apachebigdataeu2016.sched.com/" target="_blank">Schedule</a></p>
+<hr/>
+<h2>Feathercast</h2>
+<p><a class="btn" href="https://feathercast.apache.org/tag/seville/" target="_blank">Feathercast Playlist</a></p>
+<hr/>
+<h2>Pictures</h2>
+<p><a class="btn" href="https://www.flickr.com/photos/rbowen/albums/72157676659083335" target="_blank">Flickr Album</a></p>
+<hr/>
+
+ </div>
+ </div>
+ </section>
+ <!--
+ NOTE: For this section to work, to update the sponsors.json file in the event directory.
+ - Add all of your sponsors to the appropriate category (diamond, gold, silver).
+ - Make sure to include the sponsor's name, logo URL, and link URL in the JSON file.
+ - update the asfdata.yaml file to include the path to your sponsors.json file under the sponsors key, using a unique key for your event (e.g., glasgow-2026).
+ - in the event landing page meta data, set the sponsorskey to match the key you used in asfdata.yaml (e.g., glasgow-2026)
+ -->
+
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/apache-bigdata-na-2016.ezmd b/output/events/apache-bigdata-na-2016.ezmd
deleted file mode 100644
index 1dd8789..0000000
--- a/output/events/apache-bigdata-na-2016.ezmd
+++ /dev/null
@@ -1,25 +0,0 @@
-title: Apache BigData NA 2016
-template: page-event-landing
-ref: apache-bigdata-na-2016
-
-## Event Info
-
-<a class="btn" target="_blank" href="http://events.linuxfoundation.org/events/archive/2016/apache-big-data-north-america">Press Release</a>
-
----
-
-## Schedules
-<a class="btn" target="_blank" href="https://apachebigdata2016.sched.com/">Schedule</a>
-
----
-
-## Feathercast
-<a class="btn" target="_blank" href="https://feathercast.apache.org/tag/apachebigdatana2016/">Feathercast Playlist</a>
-
----
-
-## Pictures
-<a class="btn" target="_blank" href="https://www.flickr.com/photos/linuxfoundation/albums/72157667921417972">Flickr Album</a>
-
----
-
diff --git a/output/events/apache-bigdata-na-2016.html b/output/events/apache-bigdata-na-2016.html
new file mode 100644
index 0000000..6246eb7
--- /dev/null
+++ b/output/events/apache-bigdata-na-2016.html
@@ -0,0 +1,198 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>Apache BigData NA 2016 | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-apache-bigdata-na-2016" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/about/">About</a></li>
+ <li><a href="/sponsors/">Sponsors</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ </ul>
+</nav> </header>
+
+
+ <div class="hero hero--event-home relative" style="background-image: url('');">
+ <div class="inner flex py-xl relative flex-vert-center z1 flex-col-reverse-800 flex-gap-50">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Community Over Code
+ <span class="hero__subtitle">Vancouver, BC</span>
+ </h1>
+ <div class="hero-event-dates text-white">May 9-12, 2016</div>
+ <div class="hero-ctas flex flex-gap-20 flex-wrap">
+ </div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/CoC-logo-white.webp" alt="Community Over Code logo" class="hero__logo-image">
+ </div>
+ </div>
+ <script>
+ // Countdown timer script
+ let countdownInterval;
+
+ function updateCountdown() {
+ const countdownWrapper = document.getElementById('countdown-wrapper');
+ const targetDate = new Date(countdownWrapper.getAttribute('data-date')).getTime();
+ const now = new Date().getTime();
+ const distance = targetDate - now;
+ if(distance > 0) {
+ countdownWrapper.classList.add('show');
+ } else {
+ clearInterval(countdownInterval); // Stop the interval
+ // remove countdown from the dom
+ countdownWrapper.remove();
+ return;
+ }
+
+ const days = Math.floor(distance / (1000 * 60 * 60 * 24));
+ const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
+ const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
+ const seconds = Math.floor((distance % (1000 * 60)) / 1000);
+
+ document.getElementById('cd-days').textContent = String(days).padStart(2, '0');
+ document.getElementById('cd-hours').textContent = String(hours).padStart(2, '0');
+ document.getElementById('cd-minutes').textContent = String(minutes).padStart(2, '0');
+ document.getElementById('cd-seconds').textContent = String(seconds).padStart(2, '0');
+ }
+
+ countdownInterval = setInterval(updateCountdown, 1000);
+ updateCountdown(); // Initial call to set values immediately
+ </script>
+ <div id="countdown-wrapper" class="countdown" data-date="2016-05-09">
+ <div class="countdown__box card">
+ <span id="cd-days" class="countdown__number">00</span>
+ <span class="countdown__label">Days</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-hours" class="countdown__number">00</span>
+ <span class="countdown__label">Hours</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-minutes" class="countdown__number">00</span>
+ <span class="countdown__label">Minutes</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-seconds" class="countdown__number">00</span>
+ <span class="countdown__label">Seconds</span>
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner flex-col-800 flex pt-xl">
+ <div class="flex-1"></div>
+ <div class="flex-2">
+ <h2>Event Info</h2>
+<p><a class="btn" href="http://events.linuxfoundation.org/events/archive/2016/apache-big-data-north-america" target="_blank">Press Release</a></p>
+<hr/>
+<h2>Schedules</h2>
+<p><a class="btn" href="https://apachebigdata2016.sched.com/" target="_blank">Schedule</a></p>
+<hr/>
+<h2>Feathercast</h2>
+<p><a class="btn" href="https://feathercast.apache.org/tag/apachebigdatana2016/" target="_blank">Feathercast Playlist</a></p>
+<hr/>
+<h2>Pictures</h2>
+<p><a class="btn" href="https://www.flickr.com/photos/linuxfoundation/albums/72157667921417972" target="_blank">Flickr Album</a></p>
+<hr/>
+
+ </div>
+ </div>
+ </section>
+ <!--
+ NOTE: For this section to work, to update the sponsors.json file in the event directory.
+ - Add all of your sponsors to the appropriate category (diamond, gold, silver).
+ - Make sure to include the sponsor's name, logo URL, and link URL in the JSON file.
+ - update the asfdata.yaml file to include the path to your sponsors.json file under the sponsors key, using a unique key for your event (e.g., glasgow-2026).
+ - in the event landing page meta data, set the sponsorskey to match the key you used in asfdata.yaml (e.g., glasgow-2026)
+ -->
+
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/apache-bigdata-na-2017.ezmd b/output/events/apache-bigdata-na-2017.ezmd
deleted file mode 100644
index f1558d1..0000000
--- a/output/events/apache-bigdata-na-2017.ezmd
+++ /dev/null
@@ -1,30 +0,0 @@
-title: Apache BigData NA 2017
-template: page-event-landing
-ref: apache-bigdata-na-2017
-
-## Event Info
-
-<a class="btn" target="_blank" href="https://www.linuxfoundation.org/press-release/apachecon-apache-big-data-2017-to-feature-unparalleled-educational-content-plus-co-located-events-networking-activities-and-more/">Press Release</a>
-
----
-
-## Schedules
-<a class="btn" target="_blank" href="https://apachebigdata2017.sched.com/">Schedule</a>
-
----
-
-## YouTube Videos
-<a class="btn" target="_blank" href="https://www.youtube.com/playlist?list=PLbzoR-pLrL6pLDCyPxByWQwYTL-JrF5Rp/">YouTube Playlist</a>
-
----
-
-## Feathercast
-<a class="btn" target="_blank" href="https://feathercast.apache.org/tag/apachebigdata-na-2017/">Feathercast Playlist</a>
-
----
-
-## Pictures
-<a class="btn" target="_blank" href="https://www.flickr.com/photos/linuxfoundation/albums/72157681981485090">Flickr Album</a>
-
----
-
diff --git a/output/events/apache-bigdata-na-2017.html b/output/events/apache-bigdata-na-2017.html
new file mode 100644
index 0000000..420c919
--- /dev/null
+++ b/output/events/apache-bigdata-na-2017.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>Apache BigData NA 2017 | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-apache-bigdata-na-2017" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/about/">About</a></li>
+ <li><a href="/sponsors/">Sponsors</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ </ul>
+</nav> </header>
+
+
+ <div class="hero hero--event-home relative" style="background-image: url('');">
+ <div class="inner flex py-xl relative flex-vert-center z1 flex-col-reverse-800 flex-gap-50">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Community Over Code
+ <span class="hero__subtitle">Miami, FL</span>
+ </h1>
+ <div class="hero-event-dates text-white">May 16-18, 2017</div>
+ <div class="hero-ctas flex flex-gap-20 flex-wrap">
+ </div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/CoC-logo-white.webp" alt="Community Over Code logo" class="hero__logo-image">
+ </div>
+ </div>
+ <script>
+ // Countdown timer script
+ let countdownInterval;
+
+ function updateCountdown() {
+ const countdownWrapper = document.getElementById('countdown-wrapper');
+ const targetDate = new Date(countdownWrapper.getAttribute('data-date')).getTime();
+ const now = new Date().getTime();
+ const distance = targetDate - now;
+ if(distance > 0) {
+ countdownWrapper.classList.add('show');
+ } else {
+ clearInterval(countdownInterval); // Stop the interval
+ // remove countdown from the dom
+ countdownWrapper.remove();
+ return;
+ }
+
+ const days = Math.floor(distance / (1000 * 60 * 60 * 24));
+ const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
+ const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
+ const seconds = Math.floor((distance % (1000 * 60)) / 1000);
+
+ document.getElementById('cd-days').textContent = String(days).padStart(2, '0');
+ document.getElementById('cd-hours').textContent = String(hours).padStart(2, '0');
+ document.getElementById('cd-minutes').textContent = String(minutes).padStart(2, '0');
+ document.getElementById('cd-seconds').textContent = String(seconds).padStart(2, '0');
+ }
+
+ countdownInterval = setInterval(updateCountdown, 1000);
+ updateCountdown(); // Initial call to set values immediately
+ </script>
+ <div id="countdown-wrapper" class="countdown" data-date="2017-05-16">
+ <div class="countdown__box card">
+ <span id="cd-days" class="countdown__number">00</span>
+ <span class="countdown__label">Days</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-hours" class="countdown__number">00</span>
+ <span class="countdown__label">Hours</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-minutes" class="countdown__number">00</span>
+ <span class="countdown__label">Minutes</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-seconds" class="countdown__number">00</span>
+ <span class="countdown__label">Seconds</span>
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner flex-col-800 flex pt-xl">
+ <div class="flex-1"></div>
+ <div class="flex-2">
+ <h2>Event Info</h2>
+<p><a class="btn" href="https://www.linuxfoundation.org/press-release/apachecon-apache-big-data-2017-to-feature-unparalleled-educational-content-plus-co-located-events-networking-activities-and-more/" target="_blank">Press Release</a></p>
+<hr/>
+<h2>Schedules</h2>
+<p><a class="btn" href="https://apachebigdata2017.sched.com/" target="_blank">Schedule</a></p>
+<hr/>
+<h2>YouTube Videos</h2>
+<p><a class="btn" href="https://www.youtube.com/playlist?list=PLbzoR-pLrL6pLDCyPxByWQwYTL-JrF5Rp/" target="_blank">YouTube Playlist</a></p>
+<hr/>
+<h2>Feathercast</h2>
+<p><a class="btn" href="https://feathercast.apache.org/tag/apachebigdata-na-2017/" target="_blank">Feathercast Playlist</a></p>
+<hr/>
+<h2>Pictures</h2>
+<p><a class="btn" href="https://www.flickr.com/photos/linuxfoundation/albums/72157681981485090" target="_blank">Flickr Album</a></p>
+<hr/>
+
+ </div>
+ </div>
+ </section>
+ <!--
+ NOTE: For this section to work, to update the sponsors.json file in the event directory.
+ - Add all of your sponsors to the appropriate category (diamond, gold, silver).
+ - Make sure to include the sponsor's name, logo URL, and link URL in the JSON file.
+ - update the asfdata.yaml file to include the path to your sponsors.json file under the sponsors key, using a unique key for your event (e.g., glasgow-2026).
+ - in the event landing page meta data, set the sponsorskey to match the key you used in asfdata.yaml (e.g., glasgow-2026)
+ -->
+
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/apachecon-1998.ezmd b/output/events/apachecon-1998.ezmd
deleted file mode 100644
index 52711ab..0000000
--- a/output/events/apachecon-1998.ezmd
+++ /dev/null
@@ -1,66 +0,0 @@
-title: ApacheCon 1998
-template: page-event-landing
-ref: apachecon-1998
-
-<!--
- Fill out all meta info above. It will be used in the page template to create the page
- start_date: used for event countdown and meta tags. Format: YYYY-MM-DD
- end_date: used for event countdown and meta tags. Format: YYYY-MM-DD
- location: used in hero section and meta tags
- registration_link: OPTIONAL- URL for the registration page. If not provided, the "Register Now" button will not be shown.
- registration_link_text: OPTIONAL- Text for the registration button. If not provided, the "Register Now" button will not be shown.
- banner_text: OPTIONAL- Text for the banner at the top of the page. If not provided, the banner will not be shown.
- banner_link: OPTIONAL- URL for the banner link. If not provided, the banner will not be clickable.
- banner_link_text: OPTIONAL- Text for the banner link. If not provided, the banner will not
- sponsors_key: used to link the sponsors data from asfdata.yaml to this event. Make sure to add the sponsors data in asfdata.yaml with the same key.
--->
-
-## Report from ApacheCon '98
-
-This is a report about the first ever conference dedicated to Apache, held in October 1998 in San Franscisco.
-
-First published 16th October 1998.
-
-The conference ran from October 14th to October 16th, at the San Francisco Hilton in California, USA. This is the largest hotel in San Francisco, and is located in the downtown area. In total, just under 500 people registered for the conference. While most people came from the US and Canada, there were also a signficant number of people from Europe. For the first conference on Apache, this was a very good attendence, and the exhibitors and sponsors were very happy with the number of peop [...]
-
-This article contains some links to pictures taken at the conference. Some additional pictures are also available.
-
-## The keynote speeches
-
-The first general session on the 14th started with a keynote speech from author Bruce Sterling (picture). This was not directly related to Apache, but contained Bruce's thoughts on the future of a networked society.
-
-This was followed by another keynote, from John Gilmore of the Electronic Frontier Foundation (EFF) (picture). The EFF is an organisation concerned with freedom and liberties in computing and the Internet. He outlined objections to software patents, and covered the problems caused by the US export restrictions on secure encryption. Decisions about what is exportable and what is not exportable from the US are made by government employees, without any ability to appeal. Even worse, governm [...]
-
-The first talk on the second day was by John Patrick from IBM (picture). He talked about his view of how the Internet will evolve. In the last session, David Filo from Yahoo! showed how Yahoo! has used open source software (picture). They started by using commercial operating systems and home-written web servers, but had problems with vendors not being able to scale to the huge number of hits they soon received. They moved to FreeBSD so they could read and if necessary tweak the operatin [...]
-
-## The Talks
-
-There were four parallel tracks running throughout the conference, with a total of 55 talks. The tracks were Dynamic Content, Performance, Security and Case Studies.
-
-On the Dynamic Content track there were talks about using Java servlets at beginner, advanced, and performance levels. Two talks about PHP showed beginner and advanced techniques. There were also talks on writing Apache modules and mod_perl (although unfortunately the first mod_perl session could not be given by the original presenter and the second advanced session had to be cancelled).
-
-The Performance track covered making Apache go faster on Windows and Unix systems, using servlets efficiently, and tweaking Linux and FreeBSD. Also on this track was a presentation on how the Netscape Portable Runtime (NSPR) package (available under Netscape's NPL license) could be integrated with Apache to provide a multi-threading Apache on all Unix platforms as well as NT. There was also a talk about how the Apache development process works and how people with contributions can get involved.
-
-On the Security track the talk about the new mod_ssl package was popular. The author presented what mod_ssl does and why it was created from the existing Apache-SSL package. Also on this track was an introduction to SSL and TLS, basic security issues in Apache, NT security, and a panel on public key infrastructure on the Web.
-
-The final track had Case Studies from various companies. This track also contained a demonstration of various GUI configuration programs for Apache. There are various free and commercial configuration systems in development currently, some of which were demonstrated. This seems to be the start of a more concerted effort to develop a GUI infrastructure within Apache, which will allow multiple front-end implementations.
-
-## The Exhibition
-
-About a dozen companies exhibited at the trade show during the conference (picture). Companies present included IBM, RedHat, C2Net, Sendmail, nCipher, SUSE and O'Reilly. This was a very explicit demonstration of how Apache has built an associated industry, and the exhibitors we talked to were very happy with the quality, interest, and response of people that they met at the conference.
-
-## Meeting the Apache core
-
-The final session was a chance to communicate with the core Apache developers (picture). After introducing each member, there was a short discussion of items of interest to the developers, such as plans for 2.0. This was followed by an open session for questions from the floor. Questions covered a range of topics, from IBM's involvement with the Apache group (they have several people working full time on Apache and will contribute back changes) to a request for Apache incorporate SSL by [...]
-
-## Future plans
-
-This was the first conference about Apache, and the first conference ever organised by the Apache Group. The result was a very successful conference, where sponsors, exhibitors and attendees were all happy. The success of the conference means that there will be another ApacheCon in the future, but the location and dates have not yet been decided. As soon as anything is known, it will be announced in Apache Week.
-
-## Pictures
-
-[[]Pictures from the conference](https://www.flickr.com/photos/paulau/sets/72157720300544128/)
-
-
----
-
diff --git a/output/events/apachecon-1998.html b/output/events/apachecon-1998.html
new file mode 100644
index 0000000..50ca450
--- /dev/null
+++ b/output/events/apachecon-1998.html
@@ -0,0 +1,222 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>ApacheCon 1998 | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-apachecon-1998" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/about/">About</a></li>
+ <li><a href="/sponsors/">Sponsors</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ </ul>
+</nav> </header>
+
+
+ <div class="hero hero--event-home relative" style="background-image: url('');">
+ <div class="inner flex py-xl relative flex-vert-center z1 flex-col-reverse-800 flex-gap-50">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Community Over Code
+ <span class="hero__subtitle">San Francisco, CA</span>
+ </h1>
+ <div class="hero-event-dates text-white">October 14-16, 1998</div>
+ <div class="hero-ctas flex flex-gap-20 flex-wrap">
+ </div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/CoC-logo-white.webp" alt="Community Over Code logo" class="hero__logo-image">
+ </div>
+ </div>
+ <script>
+ // Countdown timer script
+ let countdownInterval;
+
+ function updateCountdown() {
+ const countdownWrapper = document.getElementById('countdown-wrapper');
+ const targetDate = new Date(countdownWrapper.getAttribute('data-date')).getTime();
+ const now = new Date().getTime();
+ const distance = targetDate - now;
+ if(distance > 0) {
+ countdownWrapper.classList.add('show');
+ } else {
+ clearInterval(countdownInterval); // Stop the interval
+ // remove countdown from the dom
+ countdownWrapper.remove();
+ return;
+ }
+
+ const days = Math.floor(distance / (1000 * 60 * 60 * 24));
+ const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
+ const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
+ const seconds = Math.floor((distance % (1000 * 60)) / 1000);
+
+ document.getElementById('cd-days').textContent = String(days).padStart(2, '0');
+ document.getElementById('cd-hours').textContent = String(hours).padStart(2, '0');
+ document.getElementById('cd-minutes').textContent = String(minutes).padStart(2, '0');
+ document.getElementById('cd-seconds').textContent = String(seconds).padStart(2, '0');
+ }
+
+ countdownInterval = setInterval(updateCountdown, 1000);
+ updateCountdown(); // Initial call to set values immediately
+ </script>
+ <div id="countdown-wrapper" class="countdown" data-date="1998-10-14">
+ <div class="countdown__box card">
+ <span id="cd-days" class="countdown__number">00</span>
+ <span class="countdown__label">Days</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-hours" class="countdown__number">00</span>
+ <span class="countdown__label">Hours</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-minutes" class="countdown__number">00</span>
+ <span class="countdown__label">Minutes</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-seconds" class="countdown__number">00</span>
+ <span class="countdown__label">Seconds</span>
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner flex-col-800 flex pt-xl">
+ <div class="flex-1"></div>
+ <div class="flex-2">
+ <!--
+ Fill out all meta info above. It will be used in the page template to create the page
+ start_date: used for event countdown and meta tags. Format: YYYY-MM-DD
+ end_date: used for event countdown and meta tags. Format: YYYY-MM-DD
+ location: used in hero section and meta tags
+ registration_link: OPTIONAL- URL for the registration page. If not provided, the "Register Now" button will not be shown.
+ registration_link_text: OPTIONAL- Text for the registration button. If not provided, the "Register Now" button will not be shown.
+ banner_text: OPTIONAL- Text for the banner at the top of the page. If not provided, the banner will not be shown.
+ banner_link: OPTIONAL- URL for the banner link. If not provided, the banner will not be clickable.
+ banner_link_text: OPTIONAL- Text for the banner link. If not provided, the banner will not
+ sponsors_key: used to link the sponsors data from asfdata.yaml to this event. Make sure to add the sponsors data in asfdata.yaml with the same key.
+-->
+<h2>Report from ApacheCon '98</h2>
+<p>This is a report about the first ever conference dedicated to Apache, held in October 1998 in San Franscisco.</p>
+<p>First published 16th October 1998.</p>
+<p>The conference ran from October 14th to October 16th, at the San Francisco Hilton in California, USA. This is the largest hotel in San Francisco, and is located in the downtown area. In total, just under 500 people registered for the conference. While most people came from the US and Canada, there were also a signficant number of people from Europe. For the first conference on Apache, this was a very good attendence, and the exhibitors and sponsors were very happy with the number of p [...]
+<p>This article contains some links to pictures taken at the conference. Some additional pictures are also available.</p>
+<h2>The keynote speeches</h2>
+<p>The first general session on the 14th started with a keynote speech from author Bruce Sterling (picture). This was not directly related to Apache, but contained Bruce's thoughts on the future of a networked society.</p>
+<p>This was followed by another keynote, from John Gilmore of the Electronic Frontier Foundation (EFF) (picture). The EFF is an organisation concerned with freedom and liberties in computing and the Internet. He outlined objections to software patents, and covered the problems caused by the US export restrictions on secure encryption. Decisions about what is exportable and what is not exportable from the US are made by government employees, without any ability to appeal. Even worse, gove [...]
+<p>The first talk on the second day was by John Patrick from IBM (picture). He talked about his view of how the Internet will evolve. In the last session, David Filo from Yahoo! showed how Yahoo! has used open source software (picture). They started by using commercial operating systems and home-written web servers, but had problems with vendors not being able to scale to the huge number of hits they soon received. They moved to FreeBSD so they could read and if necessary tweak the opera [...]
+<h2>The Talks</h2>
+<p>There were four parallel tracks running throughout the conference, with a total of 55 talks. The tracks were Dynamic Content, Performance, Security and Case Studies.</p>
+<p>On the Dynamic Content track there were talks about using Java servlets at beginner, advanced, and performance levels. Two talks about PHP showed beginner and advanced techniques. There were also talks on writing Apache modules and mod_perl (although unfortunately the first mod_perl session could not be given by the original presenter and the second advanced session had to be cancelled).</p>
+<p>The Performance track covered making Apache go faster on Windows and Unix systems, using servlets efficiently, and tweaking Linux and FreeBSD. Also on this track was a presentation on how the Netscape Portable Runtime (NSPR) package (available under Netscape's NPL license) could be integrated with Apache to provide a multi-threading Apache on all Unix platforms as well as NT. There was also a talk about how the Apache development process works and how people with contributions can get [...]
+<p>On the Security track the talk about the new mod_ssl package was popular. The author presented what mod_ssl does and why it was created from the existing Apache-SSL package. Also on this track was an introduction to SSL and TLS, basic security issues in Apache, NT security, and a panel on public key infrastructure on the Web.</p>
+<p>The final track had Case Studies from various companies. This track also contained a demonstration of various GUI configuration programs for Apache. There are various free and commercial configuration systems in development currently, some of which were demonstrated. This seems to be the start of a more concerted effort to develop a GUI infrastructure within Apache, which will allow multiple front-end implementations.</p>
+<h2>The Exhibition</h2>
+<p>About a dozen companies exhibited at the trade show during the conference (picture). Companies present included IBM, RedHat, C2Net, Sendmail, nCipher, SUSE and O'Reilly. This was a very explicit demonstration of how Apache has built an associated industry, and the exhibitors we talked to were very happy with the quality, interest, and response of people that they met at the conference.</p>
+<h2>Meeting the Apache core</h2>
+<p>The final session was a chance to communicate with the core Apache developers (picture). After introducing each member, there was a short discussion of items of interest to the developers, such as plans for 2.0. This was followed by an open session for questions from the floor. Questions covered a range of topics, from IBM's involvement with the Apache group (they have several people working full time on Apache and will contribute back changes) to a request for Apache incorporate SSL [...]
+<h2>Future plans</h2>
+<p>This was the first conference about Apache, and the first conference ever organised by the Apache Group. The result was a very successful conference, where sponsors, exhibitors and attendees were all happy. The success of the conference means that there will be another ApacheCon in the future, but the location and dates have not yet been decided. As soon as anything is known, it will be announced in Apache Week.</p>
+<h2>Pictures</h2>
+<p><a href="https://www.flickr.com/photos/paulau/sets/72157720300544128/">Pictures from the conference</a></p>
+<hr/>
+
+ </div>
+ </div>
+ </section>
+ <!--
+ NOTE: For this section to work, to update the sponsors.json file in the event directory.
+ - Add all of your sponsors to the appropriate category (diamond, gold, silver).
+ - Make sure to include the sponsor's name, logo URL, and link URL in the JSON file.
+ - update the asfdata.yaml file to include the path to your sponsors.json file under the sponsors key, using a unique key for your event (e.g., glasgow-2026).
+ - in the event landing page meta data, set the sponsorskey to match the key you used in asfdata.yaml (e.g., glasgow-2026)
+ -->
+
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/apachecon-eu-2014.ezmd b/output/events/apachecon-eu-2014.ezmd
deleted file mode 100644
index 9d4fe47..0000000
--- a/output/events/apachecon-eu-2014.ezmd
+++ /dev/null
@@ -1,25 +0,0 @@
-title: ApacheCon EU 2014
-template: page-event-landing
-ref: apachecon-eu-2014
-
-## Event Info
-
-<a class="btn" target="_blank" href="http://events.linuxfoundation.org/events/archive/2014/apachecon-europe">Press Release</a>
-
----
-
-## Schedules
-<a class="btn" target="_blank" href="https://apacheconeu2014.sched.com/">Schedule</a>
-
----
-
-## Slides
-<a class="btn" target="_blank" href="http://events.linuxfoundation.org/events/archive/2014/apachecon-europe/program/slides">Slides</a>
-
----
-
-## Pictures
-<a class="btn" target="_blank" href="https://www.flickr.com/photos/linuxfoundation/albums/72157648942693628">Flickr Album</a>
-
----
-
diff --git a/output/events/apachecon-eu-2014.html b/output/events/apachecon-eu-2014.html
new file mode 100644
index 0000000..1027f60
--- /dev/null
+++ b/output/events/apachecon-eu-2014.html
@@ -0,0 +1,198 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>ApacheCon EU 2014 | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-apachecon-eu-2014" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/about/">About</a></li>
+ <li><a href="/sponsors/">Sponsors</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ </ul>
+</nav> </header>
+
+
+ <div class="hero hero--event-home relative" style="background-image: url('');">
+ <div class="inner flex py-xl relative flex-vert-center z1 flex-col-reverse-800 flex-gap-50">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Community Over Code
+ <span class="hero__subtitle">Budapest, Hungary</span>
+ </h1>
+ <div class="hero-event-dates text-white">November 17-20, 2014</div>
+ <div class="hero-ctas flex flex-gap-20 flex-wrap">
+ </div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/CoC-logo-white.webp" alt="Community Over Code logo" class="hero__logo-image">
+ </div>
+ </div>
+ <script>
+ // Countdown timer script
+ let countdownInterval;
+
+ function updateCountdown() {
+ const countdownWrapper = document.getElementById('countdown-wrapper');
+ const targetDate = new Date(countdownWrapper.getAttribute('data-date')).getTime();
+ const now = new Date().getTime();
+ const distance = targetDate - now;
+ if(distance > 0) {
+ countdownWrapper.classList.add('show');
+ } else {
+ clearInterval(countdownInterval); // Stop the interval
+ // remove countdown from the dom
+ countdownWrapper.remove();
+ return;
+ }
+
+ const days = Math.floor(distance / (1000 * 60 * 60 * 24));
+ const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
+ const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
+ const seconds = Math.floor((distance % (1000 * 60)) / 1000);
+
+ document.getElementById('cd-days').textContent = String(days).padStart(2, '0');
+ document.getElementById('cd-hours').textContent = String(hours).padStart(2, '0');
+ document.getElementById('cd-minutes').textContent = String(minutes).padStart(2, '0');
+ document.getElementById('cd-seconds').textContent = String(seconds).padStart(2, '0');
+ }
+
+ countdownInterval = setInterval(updateCountdown, 1000);
+ updateCountdown(); // Initial call to set values immediately
+ </script>
+ <div id="countdown-wrapper" class="countdown" data-date="2014-11-17">
+ <div class="countdown__box card">
+ <span id="cd-days" class="countdown__number">00</span>
+ <span class="countdown__label">Days</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-hours" class="countdown__number">00</span>
+ <span class="countdown__label">Hours</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-minutes" class="countdown__number">00</span>
+ <span class="countdown__label">Minutes</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-seconds" class="countdown__number">00</span>
+ <span class="countdown__label">Seconds</span>
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner flex-col-800 flex pt-xl">
+ <div class="flex-1"></div>
+ <div class="flex-2">
+ <h2>Event Info</h2>
+<p><a class="btn" href="http://events.linuxfoundation.org/events/archive/2014/apachecon-europe" target="_blank">Press Release</a></p>
+<hr/>
+<h2>Schedules</h2>
+<p><a class="btn" href="https://apacheconeu2014.sched.com/" target="_blank">Schedule</a></p>
+<hr/>
+<h2>Slides</h2>
+<p><a class="btn" href="http://events.linuxfoundation.org/events/archive/2014/apachecon-europe/program/slides" target="_blank">Slides</a></p>
+<hr/>
+<h2>Pictures</h2>
+<p><a class="btn" href="https://www.flickr.com/photos/linuxfoundation/albums/72157648942693628" target="_blank">Flickr Album</a></p>
+<hr/>
+
+ </div>
+ </div>
+ </section>
+ <!--
+ NOTE: For this section to work, to update the sponsors.json file in the event directory.
+ - Add all of your sponsors to the appropriate category (diamond, gold, silver).
+ - Make sure to include the sponsor's name, logo URL, and link URL in the JSON file.
+ - update the asfdata.yaml file to include the path to your sponsors.json file under the sponsors key, using a unique key for your event (e.g., glasgow-2026).
+ - in the event landing page meta data, set the sponsorskey to match the key you used in asfdata.yaml (e.g., glasgow-2026)
+ -->
+
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/apachecon-eu-2015.ezmd b/output/events/apachecon-eu-2015.ezmd
deleted file mode 100644
index 62ec790..0000000
--- a/output/events/apachecon-eu-2015.ezmd
+++ /dev/null
@@ -1,25 +0,0 @@
-title: ApacheCon EU 2015
-template: page-event-landing
-ref: apachecon-eu-2015
-
-## Event Info
-
-<a class="btn" target="_blank" href="http://events.linuxfoundation.org/events/archive/2015/apachecon-europe">Press Release</a>
-
----
-
-## Schedules
-<a class="btn" target="_blank" href="https://apacheconcore2015.sched.com/">Schedule</a>
-
----
-
-## Slides
-<a class="btn" target="_blank" href="http://events.linuxfoundation.org/events/archive/2015/apache-big-data-europe/program/slides">Slides</a>
-
----
-
-## Pictures
-<a class="btn" target="_blank" href="https://www.flickr.com/photos/linuxfoundation/albums/72157657216444023">Flickr Album</a>
-
----
-
diff --git a/output/events/apachecon-eu-2015.html b/output/events/apachecon-eu-2015.html
new file mode 100644
index 0000000..e68bbbc
--- /dev/null
+++ b/output/events/apachecon-eu-2015.html
@@ -0,0 +1,198 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>ApacheCon EU 2015 | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-apachecon-eu-2015" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/about/">About</a></li>
+ <li><a href="/sponsors/">Sponsors</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ </ul>
+</nav> </header>
+
+
+ <div class="hero hero--event-home relative" style="background-image: url('');">
+ <div class="inner flex py-xl relative flex-vert-center z1 flex-col-reverse-800 flex-gap-50">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Community Over Code
+ <span class="hero__subtitle">Budapest, Hungary</span>
+ </h1>
+ <div class="hero-event-dates text-white">September 30 - October 2, 2015</div>
+ <div class="hero-ctas flex flex-gap-20 flex-wrap">
+ </div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/CoC-logo-white.webp" alt="Community Over Code logo" class="hero__logo-image">
+ </div>
+ </div>
+ <script>
+ // Countdown timer script
+ let countdownInterval;
+
+ function updateCountdown() {
+ const countdownWrapper = document.getElementById('countdown-wrapper');
+ const targetDate = new Date(countdownWrapper.getAttribute('data-date')).getTime();
+ const now = new Date().getTime();
+ const distance = targetDate - now;
+ if(distance > 0) {
+ countdownWrapper.classList.add('show');
+ } else {
+ clearInterval(countdownInterval); // Stop the interval
+ // remove countdown from the dom
+ countdownWrapper.remove();
+ return;
+ }
+
+ const days = Math.floor(distance / (1000 * 60 * 60 * 24));
+ const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
+ const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
+ const seconds = Math.floor((distance % (1000 * 60)) / 1000);
+
+ document.getElementById('cd-days').textContent = String(days).padStart(2, '0');
+ document.getElementById('cd-hours').textContent = String(hours).padStart(2, '0');
+ document.getElementById('cd-minutes').textContent = String(minutes).padStart(2, '0');
+ document.getElementById('cd-seconds').textContent = String(seconds).padStart(2, '0');
+ }
+
+ countdownInterval = setInterval(updateCountdown, 1000);
+ updateCountdown(); // Initial call to set values immediately
+ </script>
+ <div id="countdown-wrapper" class="countdown" data-date="2015-09-30">
+ <div class="countdown__box card">
+ <span id="cd-days" class="countdown__number">00</span>
+ <span class="countdown__label">Days</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-hours" class="countdown__number">00</span>
+ <span class="countdown__label">Hours</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-minutes" class="countdown__number">00</span>
+ <span class="countdown__label">Minutes</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-seconds" class="countdown__number">00</span>
+ <span class="countdown__label">Seconds</span>
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner flex-col-800 flex pt-xl">
+ <div class="flex-1"></div>
+ <div class="flex-2">
+ <h2>Event Info</h2>
+<p><a class="btn" href="http://events.linuxfoundation.org/events/archive/2015/apachecon-europe" target="_blank">Press Release</a></p>
+<hr/>
+<h2>Schedules</h2>
+<p><a class="btn" href="https://apacheconcore2015.sched.com/" target="_blank">Schedule</a></p>
+<hr/>
+<h2>Slides</h2>
+<p><a class="btn" href="http://events.linuxfoundation.org/events/archive/2015/apache-big-data-europe/program/slides" target="_blank">Slides</a></p>
+<hr/>
+<h2>Pictures</h2>
+<p><a class="btn" href="https://www.flickr.com/photos/linuxfoundation/albums/72157657216444023" target="_blank">Flickr Album</a></p>
+<hr/>
+
+ </div>
+ </div>
+ </section>
+ <!--
+ NOTE: For this section to work, to update the sponsors.json file in the event directory.
+ - Add all of your sponsors to the appropriate category (diamond, gold, silver).
+ - Make sure to include the sponsor's name, logo URL, and link URL in the JSON file.
+ - update the asfdata.yaml file to include the path to your sponsors.json file under the sponsors key, using a unique key for your event (e.g., glasgow-2026).
+ - in the event landing page meta data, set the sponsorskey to match the key you used in asfdata.yaml (e.g., glasgow-2026)
+ -->
+
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/apachecon-eu-2016.ezmd b/output/events/apachecon-eu-2016.ezmd
deleted file mode 100644
index 01aebe8..0000000
--- a/output/events/apachecon-eu-2016.ezmd
+++ /dev/null
@@ -1,25 +0,0 @@
-title: ApacheCon EU 2016
-template: page-event-landing
-ref: apachecon-eu-2016
-
-## Event Info
-
-<a class="btn" target="_blank" href="http://events.linuxfoundation.org/events/apachecon-europe">Press Release</a>
-
----
-
-## Schedules
-<a class="btn" target="_blank" href="https://apacheconeu2016.sched.com/">Schedule</a>
-
----
-
-## Feathercast
-<a class="btn" target="_blank" href="https://feathercast.apache.org/tag/seville/">Feathercast Playlist</a>
-
----
-
-## Pictures
-<a class="btn" target="_blank" href="https://www.flickr.com/photos/linuxfoundation/albums/72157676988658345">Flickr Album</a>
-
----
-
diff --git a/output/events/apachecon-eu-2016.html b/output/events/apachecon-eu-2016.html
new file mode 100644
index 0000000..d6bd347
--- /dev/null
+++ b/output/events/apachecon-eu-2016.html
@@ -0,0 +1,198 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>ApacheCon EU 2016 | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-apachecon-eu-2016" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/about/">About</a></li>
+ <li><a href="/sponsors/">Sponsors</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ </ul>
+</nav> </header>
+
+
+ <div class="hero hero--event-home relative" style="background-image: url('');">
+ <div class="inner flex py-xl relative flex-vert-center z1 flex-col-reverse-800 flex-gap-50">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Community Over Code
+ <span class="hero__subtitle">Seville, Spain</span>
+ </h1>
+ <div class="hero-event-dates text-white">November 16-18, 2016</div>
+ <div class="hero-ctas flex flex-gap-20 flex-wrap">
+ </div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/CoC-logo-white.webp" alt="Community Over Code logo" class="hero__logo-image">
+ </div>
+ </div>
+ <script>
+ // Countdown timer script
+ let countdownInterval;
+
+ function updateCountdown() {
+ const countdownWrapper = document.getElementById('countdown-wrapper');
+ const targetDate = new Date(countdownWrapper.getAttribute('data-date')).getTime();
+ const now = new Date().getTime();
+ const distance = targetDate - now;
+ if(distance > 0) {
+ countdownWrapper.classList.add('show');
+ } else {
+ clearInterval(countdownInterval); // Stop the interval
+ // remove countdown from the dom
+ countdownWrapper.remove();
+ return;
+ }
+
+ const days = Math.floor(distance / (1000 * 60 * 60 * 24));
+ const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
+ const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
+ const seconds = Math.floor((distance % (1000 * 60)) / 1000);
+
+ document.getElementById('cd-days').textContent = String(days).padStart(2, '0');
+ document.getElementById('cd-hours').textContent = String(hours).padStart(2, '0');
+ document.getElementById('cd-minutes').textContent = String(minutes).padStart(2, '0');
+ document.getElementById('cd-seconds').textContent = String(seconds).padStart(2, '0');
+ }
+
+ countdownInterval = setInterval(updateCountdown, 1000);
+ updateCountdown(); // Initial call to set values immediately
+ </script>
+ <div id="countdown-wrapper" class="countdown" data-date="2016-11-16">
+ <div class="countdown__box card">
+ <span id="cd-days" class="countdown__number">00</span>
+ <span class="countdown__label">Days</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-hours" class="countdown__number">00</span>
+ <span class="countdown__label">Hours</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-minutes" class="countdown__number">00</span>
+ <span class="countdown__label">Minutes</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-seconds" class="countdown__number">00</span>
+ <span class="countdown__label">Seconds</span>
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner flex-col-800 flex pt-xl">
+ <div class="flex-1"></div>
+ <div class="flex-2">
+ <h2>Event Info</h2>
+<p><a class="btn" href="http://events.linuxfoundation.org/events/apachecon-europe" target="_blank">Press Release</a></p>
+<hr/>
+<h2>Schedules</h2>
+<p><a class="btn" href="https://apacheconeu2016.sched.com/" target="_blank">Schedule</a></p>
+<hr/>
+<h2>Feathercast</h2>
+<p><a class="btn" href="https://feathercast.apache.org/tag/seville/" target="_blank">Feathercast Playlist</a></p>
+<hr/>
+<h2>Pictures</h2>
+<p><a class="btn" href="https://www.flickr.com/photos/linuxfoundation/albums/72157676988658345" target="_blank">Flickr Album</a></p>
+<hr/>
+
+ </div>
+ </div>
+ </section>
+ <!--
+ NOTE: For this section to work, to update the sponsors.json file in the event directory.
+ - Add all of your sponsors to the appropriate category (diamond, gold, silver).
+ - Make sure to include the sponsor's name, logo URL, and link URL in the JSON file.
+ - update the asfdata.yaml file to include the path to your sponsors.json file under the sponsors key, using a unique key for your event (e.g., glasgow-2026).
+ - in the event landing page meta data, set the sponsorskey to match the key you used in asfdata.yaml (e.g., glasgow-2026)
+ -->
+
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/apachecon-na-2014.ezmd b/output/events/apachecon-na-2014.ezmd
deleted file mode 100644
index 931e93c..0000000
--- a/output/events/apachecon-na-2014.ezmd
+++ /dev/null
@@ -1,35 +0,0 @@
-title: ApacheCon NA 2014
-template: page-event-landing
-ref: apachecon-na-2014
-
-## Event Info
-
-<a class="btn" target="_blank" href="http://events.linuxfoundation.org/events/archive/2014/apachecon-north-america">Press Release</a>
-
----
-
-## Schedules
-<a class="btn" target="_blank" href="https://apacheconnorthamerica2014.sched.com/">Schedule</a>
-
----
-
-## Slides
-<a class="btn" target="_blank" href="http://events.linuxfoundation.org/events/archive/2014/apachecon-north-america/program/slides">Slides</a>
-
----
-
-## YouTube Videos
-<a class="btn" target="_blank" href="https://www.youtube.com/playlist?list=PLU2OcwpQkYCzvGxZgVOunTs-3iEao6YJc">YouTube Playlist</a>
-
----
-
-## Audio Recordings
-<a class="btn" target="_blank" href="http://events17.linuxfoundation.org/events/archive/2014/apachecon-north-america/program/audio-video-recordings">Audio Recordings</a>
-
----
-
-## Pictures
-<a class="btn" target="_blank" href="https://www.flickr.com/photos/linuxfoundation/albums/72157643616532405">Flickr Album</a>
-
----
-
diff --git a/output/events/apachecon-na-2014.html b/output/events/apachecon-na-2014.html
new file mode 100644
index 0000000..3fe8c05
--- /dev/null
+++ b/output/events/apachecon-na-2014.html
@@ -0,0 +1,204 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>ApacheCon NA 2014 | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-apachecon-na-2014" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/about/">About</a></li>
+ <li><a href="/sponsors/">Sponsors</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ </ul>
+</nav> </header>
+
+
+ <div class="hero hero--event-home relative" style="background-image: url('');">
+ <div class="inner flex py-xl relative flex-vert-center z1 flex-col-reverse-800 flex-gap-50">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Community Over Code
+ <span class="hero__subtitle">Denver, CO</span>
+ </h1>
+ <div class="hero-event-dates text-white">April 7-11, 2014</div>
+ <div class="hero-ctas flex flex-gap-20 flex-wrap">
+ </div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/CoC-logo-white.webp" alt="Community Over Code logo" class="hero__logo-image">
+ </div>
+ </div>
+ <script>
+ // Countdown timer script
+ let countdownInterval;
+
+ function updateCountdown() {
+ const countdownWrapper = document.getElementById('countdown-wrapper');
+ const targetDate = new Date(countdownWrapper.getAttribute('data-date')).getTime();
+ const now = new Date().getTime();
+ const distance = targetDate - now;
+ if(distance > 0) {
+ countdownWrapper.classList.add('show');
+ } else {
+ clearInterval(countdownInterval); // Stop the interval
+ // remove countdown from the dom
+ countdownWrapper.remove();
+ return;
+ }
+
+ const days = Math.floor(distance / (1000 * 60 * 60 * 24));
+ const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
+ const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
+ const seconds = Math.floor((distance % (1000 * 60)) / 1000);
+
+ document.getElementById('cd-days').textContent = String(days).padStart(2, '0');
+ document.getElementById('cd-hours').textContent = String(hours).padStart(2, '0');
+ document.getElementById('cd-minutes').textContent = String(minutes).padStart(2, '0');
+ document.getElementById('cd-seconds').textContent = String(seconds).padStart(2, '0');
+ }
+
+ countdownInterval = setInterval(updateCountdown, 1000);
+ updateCountdown(); // Initial call to set values immediately
+ </script>
+ <div id="countdown-wrapper" class="countdown" data-date="2014-04-07">
+ <div class="countdown__box card">
+ <span id="cd-days" class="countdown__number">00</span>
+ <span class="countdown__label">Days</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-hours" class="countdown__number">00</span>
+ <span class="countdown__label">Hours</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-minutes" class="countdown__number">00</span>
+ <span class="countdown__label">Minutes</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-seconds" class="countdown__number">00</span>
+ <span class="countdown__label">Seconds</span>
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner flex-col-800 flex pt-xl">
+ <div class="flex-1"></div>
+ <div class="flex-2">
+ <h2>Event Info</h2>
+<p><a class="btn" href="http://events.linuxfoundation.org/events/archive/2014/apachecon-north-america" target="_blank">Press Release</a></p>
+<hr/>
+<h2>Schedules</h2>
+<p><a class="btn" href="https://apacheconnorthamerica2014.sched.com/" target="_blank">Schedule</a></p>
+<hr/>
+<h2>Slides</h2>
+<p><a class="btn" href="http://events.linuxfoundation.org/events/archive/2014/apachecon-north-america/program/slides" target="_blank">Slides</a></p>
+<hr/>
+<h2>YouTube Videos</h2>
+<p><a class="btn" href="https://www.youtube.com/playlist?list=PLU2OcwpQkYCzvGxZgVOunTs-3iEao6YJc" target="_blank">YouTube Playlist</a></p>
+<hr/>
+<h2>Audio Recordings</h2>
+<p><a class="btn" href="http://events17.linuxfoundation.org/events/archive/2014/apachecon-north-america/program/audio-video-recordings" target="_blank">Audio Recordings</a></p>
+<hr/>
+<h2>Pictures</h2>
+<p><a class="btn" href="https://www.flickr.com/photos/linuxfoundation/albums/72157643616532405" target="_blank">Flickr Album</a></p>
+<hr/>
+
+ </div>
+ </div>
+ </section>
+ <!--
+ NOTE: For this section to work, to update the sponsors.json file in the event directory.
+ - Add all of your sponsors to the appropriate category (diamond, gold, silver).
+ - Make sure to include the sponsor's name, logo URL, and link URL in the JSON file.
+ - update the asfdata.yaml file to include the path to your sponsors.json file under the sponsors key, using a unique key for your event (e.g., glasgow-2026).
+ - in the event landing page meta data, set the sponsorskey to match the key you used in asfdata.yaml (e.g., glasgow-2026)
+ -->
+
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/apachecon-na-2015.ezmd b/output/events/apachecon-na-2015.ezmd
deleted file mode 100644
index 518f5d3..0000000
--- a/output/events/apachecon-na-2015.ezmd
+++ /dev/null
@@ -1,35 +0,0 @@
-title: ApacheCon NA 2015
-template: page-event-landing
-ref: apachecon-na-2015
-
-## Event Info
-
-<a class="btn" target="_blank" href="http://events.linuxfoundation.org/events/archive/2015/apachecon-north-america">Press Release</a>
-
----
-
-## Schedules
-<a class="btn" target="_blank" href="https://apacheconna2015.sched.com/">Schedule</a>
-
----
-
-## Slides
-<a class="btn" target="_blank" href="http://events.linuxfoundation.org/events/archive/2015/apachecon-north-america/program/slides">Slides</a>
-
----
-
-## YouTube Videos
-<a class="btn" target="_blank" href="https://www.youtube.com/playlist?list=PLU2OcwpQkYCwpsq3-a84qgPbVqF4-wxVI">YouTube Playlist</a>
-
----
-
-## Feathercast
-<a class="btn" target="_blank" href="https://feathercast.apache.org/2015/04/">Feathercast</a>
-
----
-
-## Pictures
-<a class="btn" target="_blank" href="https://www.flickr.com/photos/linuxfoundation/albums/72157651931911042">Flickr Album</a>
-
----
-
diff --git a/output/events/apachecon-na-2015.html b/output/events/apachecon-na-2015.html
new file mode 100644
index 0000000..94243ec
--- /dev/null
+++ b/output/events/apachecon-na-2015.html
@@ -0,0 +1,204 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>ApacheCon NA 2015 | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-apachecon-na-2015" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/about/">About</a></li>
+ <li><a href="/sponsors/">Sponsors</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ </ul>
+</nav> </header>
+
+
+ <div class="hero hero--event-home relative" style="background-image: url('');">
+ <div class="inner flex py-xl relative flex-vert-center z1 flex-col-reverse-800 flex-gap-50">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Community Over Code
+ <span class="hero__subtitle">Austin, TX</span>
+ </h1>
+ <div class="hero-event-dates text-white">April 13-16, 2015</div>
+ <div class="hero-ctas flex flex-gap-20 flex-wrap">
+ </div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/CoC-logo-white.webp" alt="Community Over Code logo" class="hero__logo-image">
+ </div>
+ </div>
+ <script>
+ // Countdown timer script
+ let countdownInterval;
+
+ function updateCountdown() {
+ const countdownWrapper = document.getElementById('countdown-wrapper');
+ const targetDate = new Date(countdownWrapper.getAttribute('data-date')).getTime();
+ const now = new Date().getTime();
+ const distance = targetDate - now;
+ if(distance > 0) {
+ countdownWrapper.classList.add('show');
+ } else {
+ clearInterval(countdownInterval); // Stop the interval
+ // remove countdown from the dom
+ countdownWrapper.remove();
+ return;
+ }
+
+ const days = Math.floor(distance / (1000 * 60 * 60 * 24));
+ const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
+ const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
+ const seconds = Math.floor((distance % (1000 * 60)) / 1000);
+
+ document.getElementById('cd-days').textContent = String(days).padStart(2, '0');
+ document.getElementById('cd-hours').textContent = String(hours).padStart(2, '0');
+ document.getElementById('cd-minutes').textContent = String(minutes).padStart(2, '0');
+ document.getElementById('cd-seconds').textContent = String(seconds).padStart(2, '0');
+ }
+
+ countdownInterval = setInterval(updateCountdown, 1000);
+ updateCountdown(); // Initial call to set values immediately
+ </script>
+ <div id="countdown-wrapper" class="countdown" data-date="2015-04-13">
+ <div class="countdown__box card">
+ <span id="cd-days" class="countdown__number">00</span>
+ <span class="countdown__label">Days</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-hours" class="countdown__number">00</span>
+ <span class="countdown__label">Hours</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-minutes" class="countdown__number">00</span>
+ <span class="countdown__label">Minutes</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-seconds" class="countdown__number">00</span>
+ <span class="countdown__label">Seconds</span>
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner flex-col-800 flex pt-xl">
+ <div class="flex-1"></div>
+ <div class="flex-2">
+ <h2>Event Info</h2>
+<p><a class="btn" href="http://events.linuxfoundation.org/events/archive/2015/apachecon-north-america" target="_blank">Press Release</a></p>
+<hr/>
+<h2>Schedules</h2>
+<p><a class="btn" href="https://apacheconna2015.sched.com/" target="_blank">Schedule</a></p>
+<hr/>
+<h2>Slides</h2>
+<p><a class="btn" href="http://events.linuxfoundation.org/events/archive/2015/apachecon-north-america/program/slides" target="_blank">Slides</a></p>
+<hr/>
+<h2>YouTube Videos</h2>
+<p><a class="btn" href="https://www.youtube.com/playlist?list=PLU2OcwpQkYCwpsq3-a84qgPbVqF4-wxVI" target="_blank">YouTube Playlist</a></p>
+<hr/>
+<h2>Feathercast</h2>
+<p><a class="btn" href="https://feathercast.apache.org/2015/04/" target="_blank">Feathercast</a></p>
+<hr/>
+<h2>Pictures</h2>
+<p><a class="btn" href="https://www.flickr.com/photos/linuxfoundation/albums/72157651931911042" target="_blank">Flickr Album</a></p>
+<hr/>
+
+ </div>
+ </div>
+ </section>
+ <!--
+ NOTE: For this section to work, to update the sponsors.json file in the event directory.
+ - Add all of your sponsors to the appropriate category (diamond, gold, silver).
+ - Make sure to include the sponsor's name, logo URL, and link URL in the JSON file.
+ - update the asfdata.yaml file to include the path to your sponsors.json file under the sponsors key, using a unique key for your event (e.g., glasgow-2026).
+ - in the event landing page meta data, set the sponsorskey to match the key you used in asfdata.yaml (e.g., glasgow-2026)
+ -->
+
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/apachecon-na-2016.ezmd b/output/events/apachecon-na-2016.ezmd
deleted file mode 100644
index 29f684b..0000000
--- a/output/events/apachecon-na-2016.ezmd
+++ /dev/null
@@ -1,30 +0,0 @@
-title: ApacheCon NA 2016
-template: page-event-landing
-ref: apachecon-na-2016
-
-## Event Info
-
-<a class="btn" target="_blank" href="http://events.linuxfoundation.org/events/archive/2016/apachecon-north-america">Press Release</a>
-
----
-
-## Schedules
-<a class="btn" target="_blank" href="https://apachecon2016.sched.com/">Schedule</a>
-
----
-
-## YouTube Videos
-<a class="btn" target="_blank" href="https://www.youtube.com/playlist?list=PLGeM09tlguZTvqV5g7KwFhxDlWi4njK6n">YouTube Playlist</a>
-
----
-
-## Feathercast
-<a class="btn" target="_blank" href="https://feathercast.apache.org/tag/apacheconna2016/">Feathercast Playlist</a>
-
----
-
-## Pictures
-<a class="btn" target="_blank" href="https://www.flickr.com/photos/linuxfoundation/albums/72157668400270146">Flickr Album</a>
-
----
-
diff --git a/output/events/apachecon-na-2016.html b/output/events/apachecon-na-2016.html
new file mode 100644
index 0000000..f8f7752
--- /dev/null
+++ b/output/events/apachecon-na-2016.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>ApacheCon NA 2016 | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-apachecon-na-2016" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/about/">About</a></li>
+ <li><a href="/sponsors/">Sponsors</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ </ul>
+</nav> </header>
+
+
+ <div class="hero hero--event-home relative" style="background-image: url('');">
+ <div class="inner flex py-xl relative flex-vert-center z1 flex-col-reverse-800 flex-gap-50">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Community Over Code
+ <span class="hero__subtitle">Vancouver, BC</span>
+ </h1>
+ <div class="hero-event-dates text-white">May 11-13, 2016</div>
+ <div class="hero-ctas flex flex-gap-20 flex-wrap">
+ </div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/CoC-logo-white.webp" alt="Community Over Code logo" class="hero__logo-image">
+ </div>
+ </div>
+ <script>
+ // Countdown timer script
+ let countdownInterval;
+
+ function updateCountdown() {
+ const countdownWrapper = document.getElementById('countdown-wrapper');
+ const targetDate = new Date(countdownWrapper.getAttribute('data-date')).getTime();
+ const now = new Date().getTime();
+ const distance = targetDate - now;
+ if(distance > 0) {
+ countdownWrapper.classList.add('show');
+ } else {
+ clearInterval(countdownInterval); // Stop the interval
+ // remove countdown from the dom
+ countdownWrapper.remove();
+ return;
+ }
+
+ const days = Math.floor(distance / (1000 * 60 * 60 * 24));
+ const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
+ const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
+ const seconds = Math.floor((distance % (1000 * 60)) / 1000);
+
+ document.getElementById('cd-days').textContent = String(days).padStart(2, '0');
+ document.getElementById('cd-hours').textContent = String(hours).padStart(2, '0');
+ document.getElementById('cd-minutes').textContent = String(minutes).padStart(2, '0');
+ document.getElementById('cd-seconds').textContent = String(seconds).padStart(2, '0');
+ }
+
+ countdownInterval = setInterval(updateCountdown, 1000);
+ updateCountdown(); // Initial call to set values immediately
+ </script>
+ <div id="countdown-wrapper" class="countdown" data-date="2016-05-11">
+ <div class="countdown__box card">
+ <span id="cd-days" class="countdown__number">00</span>
+ <span class="countdown__label">Days</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-hours" class="countdown__number">00</span>
+ <span class="countdown__label">Hours</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-minutes" class="countdown__number">00</span>
+ <span class="countdown__label">Minutes</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-seconds" class="countdown__number">00</span>
+ <span class="countdown__label">Seconds</span>
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner flex-col-800 flex pt-xl">
+ <div class="flex-1"></div>
+ <div class="flex-2">
+ <h2>Event Info</h2>
+<p><a class="btn" href="http://events.linuxfoundation.org/events/archive/2016/apachecon-north-america" target="_blank">Press Release</a></p>
+<hr/>
+<h2>Schedules</h2>
+<p><a class="btn" href="https://apachecon2016.sched.com/" target="_blank">Schedule</a></p>
+<hr/>
+<h2>YouTube Videos</h2>
+<p><a class="btn" href="https://www.youtube.com/playlist?list=PLGeM09tlguZTvqV5g7KwFhxDlWi4njK6n" target="_blank">YouTube Playlist</a></p>
+<hr/>
+<h2>Feathercast</h2>
+<p><a class="btn" href="https://feathercast.apache.org/tag/apacheconna2016/" target="_blank">Feathercast Playlist</a></p>
+<hr/>
+<h2>Pictures</h2>
+<p><a class="btn" href="https://www.flickr.com/photos/linuxfoundation/albums/72157668400270146" target="_blank">Flickr Album</a></p>
+<hr/>
+
+ </div>
+ </div>
+ </section>
+ <!--
+ NOTE: For this section to work, to update the sponsors.json file in the event directory.
+ - Add all of your sponsors to the appropriate category (diamond, gold, silver).
+ - Make sure to include the sponsor's name, logo URL, and link URL in the JSON file.
+ - update the asfdata.yaml file to include the path to your sponsors.json file under the sponsors key, using a unique key for your event (e.g., glasgow-2026).
+ - in the event landing page meta data, set the sponsorskey to match the key you used in asfdata.yaml (e.g., glasgow-2026)
+ -->
+
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/apachecon-na-2017.ezmd b/output/events/apachecon-na-2017.ezmd
deleted file mode 100644
index 24ebfa5..0000000
--- a/output/events/apachecon-na-2017.ezmd
+++ /dev/null
@@ -1,30 +0,0 @@
-title: ApacheCon NA 2017
-template: page-event-landing
-ref: apachecon-na-2017
-
-## Event Info
-
-<a class="btn" target="_blank" href="https://www.linuxfoundation.org/press-release/apachecon-apache-big-data-2017-to-feature-unparalleled-educational-content-plus-co-located-events-networking-activities-and-more/">Press Release</a>
-
----
-
-## Schedules
-<a class="btn" target="_blank" href="https://apachecon2017.sched.com/">Schedule</a>
-
----
-
-## YouTube Videos
-<a class="btn" target="_blank" href="https://www.youtube.com/playlist?list=PLbzoR-pLrL6pLDCyPxByWQwYTL-JrF5Rp">YouTube Playlist</a>
-
----
-
-## Feathercast
-<a class="btn" target="_blank" href="https://feathercast.apache.org/tag/apacheconna2017/">Feathercast Playlist</a>
-
----
-
-## Pictures
-<a class="btn" target="_blank" href="https://www.flickr.com/photos/linuxfoundation/albums/72157681981485090">Flickr Album</a>
-
----
-
diff --git a/output/events/apachecon-na-2017.html b/output/events/apachecon-na-2017.html
new file mode 100644
index 0000000..d03f585
--- /dev/null
+++ b/output/events/apachecon-na-2017.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>ApacheCon NA 2017 | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-apachecon-na-2017" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/about/">About</a></li>
+ <li><a href="/sponsors/">Sponsors</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ </ul>
+</nav> </header>
+
+
+ <div class="hero hero--event-home relative" style="background-image: url('');">
+ <div class="inner flex py-xl relative flex-vert-center z1 flex-col-reverse-800 flex-gap-50">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Community Over Code
+ <span class="hero__subtitle">Miami, FL</span>
+ </h1>
+ <div class="hero-event-dates text-white">May 16-18, 2017</div>
+ <div class="hero-ctas flex flex-gap-20 flex-wrap">
+ </div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/CoC-logo-white.webp" alt="Community Over Code logo" class="hero__logo-image">
+ </div>
+ </div>
+ <script>
+ // Countdown timer script
+ let countdownInterval;
+
+ function updateCountdown() {
+ const countdownWrapper = document.getElementById('countdown-wrapper');
+ const targetDate = new Date(countdownWrapper.getAttribute('data-date')).getTime();
+ const now = new Date().getTime();
+ const distance = targetDate - now;
+ if(distance > 0) {
+ countdownWrapper.classList.add('show');
+ } else {
+ clearInterval(countdownInterval); // Stop the interval
+ // remove countdown from the dom
+ countdownWrapper.remove();
+ return;
+ }
+
+ const days = Math.floor(distance / (1000 * 60 * 60 * 24));
+ const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
+ const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
+ const seconds = Math.floor((distance % (1000 * 60)) / 1000);
+
+ document.getElementById('cd-days').textContent = String(days).padStart(2, '0');
+ document.getElementById('cd-hours').textContent = String(hours).padStart(2, '0');
+ document.getElementById('cd-minutes').textContent = String(minutes).padStart(2, '0');
+ document.getElementById('cd-seconds').textContent = String(seconds).padStart(2, '0');
+ }
+
+ countdownInterval = setInterval(updateCountdown, 1000);
+ updateCountdown(); // Initial call to set values immediately
+ </script>
+ <div id="countdown-wrapper" class="countdown" data-date="2017-05-16">
+ <div class="countdown__box card">
+ <span id="cd-days" class="countdown__number">00</span>
+ <span class="countdown__label">Days</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-hours" class="countdown__number">00</span>
+ <span class="countdown__label">Hours</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-minutes" class="countdown__number">00</span>
+ <span class="countdown__label">Minutes</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-seconds" class="countdown__number">00</span>
+ <span class="countdown__label">Seconds</span>
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner flex-col-800 flex pt-xl">
+ <div class="flex-1"></div>
+ <div class="flex-2">
+ <h2>Event Info</h2>
+<p><a class="btn" href="https://www.linuxfoundation.org/press-release/apachecon-apache-big-data-2017-to-feature-unparalleled-educational-content-plus-co-located-events-networking-activities-and-more/" target="_blank">Press Release</a></p>
+<hr/>
+<h2>Schedules</h2>
+<p><a class="btn" href="https://apachecon2017.sched.com/" target="_blank">Schedule</a></p>
+<hr/>
+<h2>YouTube Videos</h2>
+<p><a class="btn" href="https://www.youtube.com/playlist?list=PLbzoR-pLrL6pLDCyPxByWQwYTL-JrF5Rp" target="_blank">YouTube Playlist</a></p>
+<hr/>
+<h2>Feathercast</h2>
+<p><a class="btn" href="https://feathercast.apache.org/tag/apacheconna2017/" target="_blank">Feathercast Playlist</a></p>
+<hr/>
+<h2>Pictures</h2>
+<p><a class="btn" href="https://www.flickr.com/photos/linuxfoundation/albums/72157681981485090" target="_blank">Flickr Album</a></p>
+<hr/>
+
+ </div>
+ </div>
+ </section>
+ <!--
+ NOTE: For this section to work, to update the sponsors.json file in the event directory.
+ - Add all of your sponsors to the appropriate category (diamond, gold, silver).
+ - Make sure to include the sponsor's name, logo URL, and link URL in the JSON file.
+ - update the asfdata.yaml file to include the path to your sponsors.json file under the sponsors key, using a unique key for your event (e.g., glasgow-2026).
+ - in the event landing page meta data, set the sponsorskey to match the key you used in asfdata.yaml (e.g., glasgow-2026)
+ -->
+
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/asia-2026/index.ezmd b/output/events/asia-2026/index.ezmd
deleted file mode 100644
index 5faa7f1..0000000
--- a/output/events/asia-2026/index.ezmd
+++ /dev/null
@@ -1,32 +0,0 @@
-title: Community Over Code Asia 2026
-template: page-event-landing
-ref: asia-2026
-nav: nav-asia-2026
-customcss: /events/asia-2026/css/asia-2026.css
-heroBackgroundImage: ../images/events/event-hero-asia-2026.webp
-eventLogo: /images/logos/CommunityOverCode_Logo_beijing-stacked-white.svg
-sponsorsKey: asia-2026
-<!--
- Fill out all meta info above. It will be used in the page template to create the page
- start_date: used for event countdown and meta tags. Format: YYYY-MM-DD
- end_date: used for event countdown and meta tags. Format: YYYY-MM-DD
- location: used in hero section and meta tags
- registration_link: OPTIONAL- URL for the registration page. If not provided, the "Register Now" button will not be shown.
- registration_link_text: OPTIONAL- Text for the registration button. If not provided, the "Register Now" button will not be shown.
- banner_text: OPTIONAL- Text for the banner at the top of the page. If not provided, the banner will not be shown.
- banner_link: OPTIONAL- URL for the banner link. If not provided, the banner will not be clickable.
- banner_link_text: OPTIONAL- Text for the banner link. If not provided, the banner will not
- sponsors_key: used to link the sponsors data from asfdata.yaml to this event. Make sure to add the sponsors data in asfdata.yaml with the same key.
--->
-
-
-Community Over Code (formerly known as ApacheCon) is the official global conference series of The Apache Software Foundation (ASF). Since 1998 – before the ASF’s incorporation – ApacheCon has been drawing participants at all levels to explore ”Tomorrow’s Technology Today” across 350+ Apache projects and their diverse communities. Community Over Code showcases the latest developments in Apache projects and emerging innovations through hands-on sessions, keynotes, real-world case studies, [...]
-
-Community Over Code showcases the latest breakthroughs from ubiquitous Apache projects and upcoming innovations in the Apache Incubator, as well as open source development and leading community-driven projects the Apache way. Attendees learn about core open source technologies independent of business interests, corporate biases, or sales pitches.
-
-The Community Over Code program is dynamic, evolving at each event with content directly driven by select Apache project developer and user communities. Community Over Code delivers state-of-the-art content that features the latest open source advances in big data, cloud, community development, FinTech, IoT, machine learning, messaging, programming, search, security, servers, streaming, web frameworks, and more in a collaborative, vendor-neutral environment.
-
-<a href="https://asia.communityovercode.org/2025/" class="btn">Visit Community Over Code Asia 2025</a>
-
----
-
diff --git a/output/events/asia-2026/index.html b/output/events/asia-2026/index.html
new file mode 100644
index 0000000..bdec6a1
--- /dev/null
+++ b/output/events/asia-2026/index.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>Community Over Code Asia 2026 | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+<link href="/events/asia-2026/css/asia-2026.css" async rel="stylesheet"> <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-asia-2026" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/events/asia-2026/tracks/">Tracks</a></li>
+ </ul>
+</nav> </header>
+
+
+ <div class="hero hero--event-home relative" style="background-image: url('../images/events/event-hero-asia-2026.webp');">
+ <div class="inner flex py-xl relative flex-vert-center z1 flex-col-reverse-800 flex-gap-50">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Community Over Code
+ <span class="hero__subtitle">Beijing, China</span>
+ </h1>
+ <div class="hero-event-dates text-white">August 7-9, 2026</div>
+ <div class="hero-ctas flex flex-gap-20 flex-wrap">
+ </div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/logos/CommunityOverCode_Logo_beijing-stacked-white.svg" alt="Community Over Code Asia 2026 logo" class="hero__logo-image">
+ </div>
+ </div>
+ <script>
+ // Countdown timer script
+ let countdownInterval;
+
+ function updateCountdown() {
+ const countdownWrapper = document.getElementById('countdown-wrapper');
+ const targetDate = new Date(countdownWrapper.getAttribute('data-date')).getTime();
+ const now = new Date().getTime();
+ const distance = targetDate - now;
+ if(distance > 0) {
+ countdownWrapper.classList.add('show');
+ } else {
+ clearInterval(countdownInterval); // Stop the interval
+ // remove countdown from the dom
+ countdownWrapper.remove();
+ return;
+ }
+
+ const days = Math.floor(distance / (1000 * 60 * 60 * 24));
+ const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
+ const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
+ const seconds = Math.floor((distance % (1000 * 60)) / 1000);
+
+ document.getElementById('cd-days').textContent = String(days).padStart(2, '0');
+ document.getElementById('cd-hours').textContent = String(hours).padStart(2, '0');
+ document.getElementById('cd-minutes').textContent = String(minutes).padStart(2, '0');
+ document.getElementById('cd-seconds').textContent = String(seconds).padStart(2, '0');
+ }
+
+ countdownInterval = setInterval(updateCountdown, 1000);
+ updateCountdown(); // Initial call to set values immediately
+ </script>
+ <div id="countdown-wrapper" class="countdown" data-date="2026-08-07">
+ <div class="countdown__box card">
+ <span id="cd-days" class="countdown__number">00</span>
+ <span class="countdown__label">Days</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-hours" class="countdown__number">00</span>
+ <span class="countdown__label">Hours</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-minutes" class="countdown__number">00</span>
+ <span class="countdown__label">Minutes</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-seconds" class="countdown__number">00</span>
+ <span class="countdown__label">Seconds</span>
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner flex-col-800 flex pt-xl">
+ <div class="flex-1"></div>
+ <div class="flex-2">
+ <!--
+ Fill out all meta info above. It will be used in the page template to create the page
+ start_date: used for event countdown and meta tags. Format: YYYY-MM-DD
+ end_date: used for event countdown and meta tags. Format: YYYY-MM-DD
+ location: used in hero section and meta tags
+ registration_link: OPTIONAL- URL for the registration page. If not provided, the "Register Now" button will not be shown.
+ registration_link_text: OPTIONAL- Text for the registration button. If not provided, the "Register Now" button will not be shown.
+ banner_text: OPTIONAL- Text for the banner at the top of the page. If not provided, the banner will not be shown.
+ banner_link: OPTIONAL- URL for the banner link. If not provided, the banner will not be clickable.
+ banner_link_text: OPTIONAL- Text for the banner link. If not provided, the banner will not
+ sponsors_key: used to link the sponsors data from asfdata.yaml to this event. Make sure to add the sponsors data in asfdata.yaml with the same key.
+-->
+<p>Community Over Code (formerly known as ApacheCon) is the official global conference series of The Apache Software Foundation (ASF). Since 1998 – before the ASF’s incorporation – ApacheCon has been drawing participants at all levels to explore ”Tomorrow’s Technology Today” across 350+ Apache projects and their diverse communities. Community Over Code showcases the latest developments in Apache projects and emerging innovations through hands-on sessio [...]
+<p>Community Over Code showcases the latest breakthroughs from ubiquitous Apache projects and upcoming innovations in the Apache Incubator, as well as open source development and leading community-driven projects the Apache way. Attendees learn about core open source technologies independent of business interests, corporate biases, or sales pitches.</p>
+<p>The Community Over Code program is dynamic, evolving at each event with content directly driven by select Apache project developer and user communities. Community Over Code delivers state-of-the-art content that features the latest open source advances in big data, cloud, community development, FinTech, IoT, machine learning, messaging, programming, search, security, servers, streaming, web frameworks, and more in a collaborative, vendor-neutral environment.</p>
+<p><a class="btn" href="https://asia.communityovercode.org/2025/">Visit Community Over Code Asia 2025</a></p>
+<hr/>
+
+ </div>
+ </div>
+ </section>
+ <!--
+ NOTE: For this section to work, to update the sponsors.json file in the event directory.
+ - Add all of your sponsors to the appropriate category (diamond, gold, silver).
+ - Make sure to include the sponsor's name, logo URL, and link URL in the JSON file.
+ - update the asfdata.yaml file to include the path to your sponsors.json file under the sponsors key, using a unique key for your event (e.g., glasgow-2026).
+ - in the event landing page meta data, set the sponsorskey to match the key you used in asfdata.yaml (e.g., glasgow-2026)
+ -->
+
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/asia-2026/tracks/agentic-coding.ezmd b/output/events/asia-2026/tracks/agentic-coding.ezmd
deleted file mode 100644
index 5c1a47c..0000000
--- a/output/events/asia-2026/tracks/agentic-coding.ezmd
+++ /dev/null
@@ -1,12 +0,0 @@
-title: Agentic Coding
-template: page-event-default
-ref: asia-2026
-inPageNav: false
-eventLogo: /images/logos/CommunityOverCode_Logo_beijing-stacked-color.svg
-customcss: /events/asia-2026/css/asia-2026.css
-
-## Track Chairs : tison, Xuanwo
-
-Agentic coding is moving from demos into production. Across Apache projects, maintainers are asking: How can we integrate LLM-powered agents into our development workflows without compromising code quality, reviewability, or the ASF’s community-driven principles? From code generation and test writing to refactoring, debugging, code review assistance, and release automation, projects across the foundation are experimenting with agents across the entire software lifecycle. These early effo [...]
-
-This track focuses on hands‑on experiences from ASF contributors who are building, integrating, or evaluating code agents. We want to hear what actually works when agents participate in discussions, propose patches, or help with large‑scale maintenance. What breaks, what becomes easier, and what repeatable patterns are emerging? We’re looking for talks that share practical lessons to help the community turn agents from flashy helpers into dependable collaborators.
\ No newline at end of file
diff --git a/output/events/asia-2026/tracks/agentic-coding.html b/output/events/asia-2026/tracks/agentic-coding.html
new file mode 100644
index 0000000..67c531a
--- /dev/null
+++ b/output/events/asia-2026/tracks/agentic-coding.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>Agentic Coding | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+<link href="/events/asia-2026/css/asia-2026.css" async rel="stylesheet"> <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-asia-2026" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/events/asia-2026/tracks/">Tracks</a></li>
+ </ul>
+</nav> </header>
+
+
+
+
+ <div class="hero hero--single-event-default relative">
+ <div class="inner flex flex-vert-center py-xl relative z1 flex-gap-50 flex-col-reverse-800">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Agentic Coding
+ </h1>
+ <h2 class="hero__default-subtitle">
+ Community Over Code
+ <span class="hero__subtitle"> Beijing, China</span>
+ </h2>
+ <div class="hero-event-dates">August 7-9, 2026</div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/logos/CommunityOverCode_Logo_beijing-stacked-color.svg" alt="Agentic Coding logo" class="hero__logo-image">
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner py-xl">
+ <div class="mb-medium cf">
+ <div class="float66 right" style="padding-left: 50px;">
+ <a class="breadcrumb" href="/events/asia-2026"><svg viewBox="0 0 24 24" width="16" height="16" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><polyline points="15 18 9 12 15 6"></polyline></svg> Back to Event Home</a>
+ </div>
+ </div>
+ <div class="cf flex-col-800">
+ <div class="float33 full-width-800"> </div>
+ <div class="float66 event-content">
+ <h2>Track Chairs : tison, Xuanwo</h2>
+<p>Agentic coding is moving from demos into production. Across Apache projects, maintainers are asking: How can we integrate LLM-powered agents into our development workflows without compromising code quality, reviewability, or the ASF’s community-driven principles? From code generation and test writing to refactoring, debugging, code review assistance, and release automation, projects across the foundation are experimenting with agents across the entire software lifecycle. These e [...]
+<p>This track focuses on hands‑on experiences from ASF contributors who are building, integrating, or evaluating code agents. We want to hear what actually works when agents participate in discussions, propose patches, or help with large‑scale maintenance. What breaks, what becomes easier, and what repeatable patterns are emerging? We’re looking for talks that share practical lessons to help the community turn agents from flashy helpers into dependable collaborators.</p>
+
+ </div>
+ </div>
+ </div>
+ </section>
+ <script>
+ // Smooth scroll for in-page navigation
+ const navContainer = document.getElementById('in-page-nav');
+ if(navContainer) {
+ document.addEventListener('DOMContentLoaded', function() {
+ // generate in-page navigation based on h2
+ const content = document.querySelector('.event-content');
+ const headings = content.querySelectorAll('h2');
+ const nav = document.getElementById('in-page-nav');
+ if (headings.length > 0) {
+ const navList = document.createElement('ul');
+ headings.forEach(heading => {
+ const id = heading.textContent.trim().toLowerCase().replace(/\s+/g, '-');
+ heading.setAttribute('id', id);
+ const navItem = document.createElement('li');
+ const navLink = document.createElement('a');
+ navLink.setAttribute('href', `#${id}`);
+ navLink.textContent = heading.textContent;
+ navItem.appendChild(navLink);
+ navList.appendChild(navItem);
+ });
+ nav.appendChild(navList);
+ }
+
+ const links = document.querySelectorAll('#in-page-nav a');
+ links.forEach(link => {
+ link.addEventListener('click', function(e) {
+ e.preventDefault();
+ // in this loop, 'this' refers to the clicked link
+ // add class of current-section to the clicked link and remove from others
+ links.forEach(l => l.classList.remove('current-section'));
+ this.classList.add('current-section');
+ const targetId = this.getAttribute('href').substring(1);
+ const targetElement = document.getElementById(targetId);
+ if (targetElement) {
+ window.scrollTo({
+ top: targetElement.offsetTop - 100, // Adjust for fixed header
+ behavior: 'smooth'
+ });
+ }
+ });
+ });
+
+ // Highlight the current section in the navigation as the user scrolls
+ window.addEventListener('scroll', function() {
+ let currentSection = '';
+ headings.forEach(heading => {
+ const sectionTop = heading.offsetTop - 150; // Adjust for fixed header
+ if (window.scrollY >= sectionTop) {
+ currentSection = heading.getAttribute('id');
+ }
+ });
+ links.forEach(link => {
+ link.classList.remove('current-section');
+ if (link.getAttribute('href').substring(1) === currentSection) {
+ link.classList.add('current-section');
+ }
+ });
+ });
+ });
+ }
+ </script>
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/asia-2026/tracks/ai-infra.ezmd b/output/events/asia-2026/tracks/ai-infra.ezmd
deleted file mode 100644
index 3ea9987..0000000
--- a/output/events/asia-2026/tracks/ai-infra.ezmd
+++ /dev/null
@@ -1,15 +0,0 @@
-title: AI Infra
-template: page-event-default
-ref: asia-2026
-inPageNav: false
-eventLogo: /images/logos/CommunityOverCode_Logo_beijing-stacked-color.svg
-customcss: /events/asia-2026/css/asia-2026.css
-
-## Track Chairs : Jerry Tan, junping Du
-
-The AI Sub-forum is a professional exchange platform focusing on the integration of artificial intelligence (AI) technology and Apache open-source projects. This sub-forum aims to bring together developers, researchers, and industry users from around the world to explore the application and development of AI technology in the open-source ecosystem, showcase cutting-edge technologies, share practical experience, and promote the implementation of open-source AI solutions across various ind [...]
-
-- AI-related projects under the Apache Foundation (e.g., focusing on open-source AI frameworks and foundational libraries such as Apache TVM, Mahout, Singa, SystemML, etc.).
-- Optimization of individual Apache projects in AI scenarios (e.g., projects like Spark MLlib, Flink ML).
-- AI solutions in industrial scenarios based on combinations of multiple Apache projects (e.g., methods for building AI businesses by certain enterprises using a combination of Apache projects).
-
diff --git a/output/events/asia-2026/tracks/ai-infra.html b/output/events/asia-2026/tracks/ai-infra.html
new file mode 100644
index 0000000..c8418b5
--- /dev/null
+++ b/output/events/asia-2026/tracks/ai-infra.html
@@ -0,0 +1,205 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>AI Infra | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+<link href="/events/asia-2026/css/asia-2026.css" async rel="stylesheet"> <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-asia-2026" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/events/asia-2026/tracks/">Tracks</a></li>
+ </ul>
+</nav> </header>
+
+
+
+
+ <div class="hero hero--single-event-default relative">
+ <div class="inner flex flex-vert-center py-xl relative z1 flex-gap-50 flex-col-reverse-800">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ AI Infra
+ </h1>
+ <h2 class="hero__default-subtitle">
+ Community Over Code
+ <span class="hero__subtitle"> Beijing, China</span>
+ </h2>
+ <div class="hero-event-dates">August 7-9, 2026</div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/logos/CommunityOverCode_Logo_beijing-stacked-color.svg" alt="AI Infra logo" class="hero__logo-image">
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner py-xl">
+ <div class="mb-medium cf">
+ <div class="float66 right" style="padding-left: 50px;">
+ <a class="breadcrumb" href="/events/asia-2026"><svg viewBox="0 0 24 24" width="16" height="16" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><polyline points="15 18 9 12 15 6"></polyline></svg> Back to Event Home</a>
+ </div>
+ </div>
+ <div class="cf flex-col-800">
+ <div class="float33 full-width-800"> </div>
+ <div class="float66 event-content">
+ <h2>Track Chairs : Jerry Tan, junping Du</h2>
+<p>The AI Sub-forum is a professional exchange platform focusing on the integration of artificial intelligence (AI) technology and Apache open-source projects. This sub-forum aims to bring together developers, researchers, and industry users from around the world to explore the application and development of AI technology in the open-source ecosystem, showcase cutting-edge technologies, share practical experience, and promote the implementation of open-source AI solutions across various [...]
+<ul>
+<li>AI-related projects under the Apache Foundation (e.g., focusing on open-source AI frameworks and foundational libraries such as Apache TVM, Mahout, Singa, SystemML, etc.).</li>
+<li>Optimization of individual Apache projects in AI scenarios (e.g., projects like Spark MLlib, Flink ML).</li>
+<li>AI solutions in industrial scenarios based on combinations of multiple Apache projects (e.g., methods for building AI businesses by certain enterprises using a combination of Apache projects).</li>
+</ul>
+
+ </div>
+ </div>
+ </div>
+ </section>
+ <script>
+ // Smooth scroll for in-page navigation
+ const navContainer = document.getElementById('in-page-nav');
+ if(navContainer) {
+ document.addEventListener('DOMContentLoaded', function() {
+ // generate in-page navigation based on h2
+ const content = document.querySelector('.event-content');
+ const headings = content.querySelectorAll('h2');
+ const nav = document.getElementById('in-page-nav');
+ if (headings.length > 0) {
+ const navList = document.createElement('ul');
+ headings.forEach(heading => {
+ const id = heading.textContent.trim().toLowerCase().replace(/\s+/g, '-');
+ heading.setAttribute('id', id);
+ const navItem = document.createElement('li');
+ const navLink = document.createElement('a');
+ navLink.setAttribute('href', `#${id}`);
+ navLink.textContent = heading.textContent;
+ navItem.appendChild(navLink);
+ navList.appendChild(navItem);
+ });
+ nav.appendChild(navList);
+ }
+
+ const links = document.querySelectorAll('#in-page-nav a');
+ links.forEach(link => {
+ link.addEventListener('click', function(e) {
+ e.preventDefault();
+ // in this loop, 'this' refers to the clicked link
+ // add class of current-section to the clicked link and remove from others
+ links.forEach(l => l.classList.remove('current-section'));
+ this.classList.add('current-section');
+ const targetId = this.getAttribute('href').substring(1);
+ const targetElement = document.getElementById(targetId);
+ if (targetElement) {
+ window.scrollTo({
+ top: targetElement.offsetTop - 100, // Adjust for fixed header
+ behavior: 'smooth'
+ });
+ }
+ });
+ });
+
+ // Highlight the current section in the navigation as the user scrolls
+ window.addEventListener('scroll', function() {
+ let currentSection = '';
+ headings.forEach(heading => {
+ const sectionTop = heading.offsetTop - 150; // Adjust for fixed header
+ if (window.scrollY >= sectionTop) {
+ currentSection = heading.getAttribute('id');
+ }
+ });
+ links.forEach(link => {
+ link.classList.remove('current-section');
+ if (link.getAttribute('href').substring(1) === currentSection) {
+ link.classList.add('current-section');
+ }
+ });
+ });
+ });
+ }
+ </script>
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/asia-2026/tracks/index.ezmd b/output/events/asia-2026/tracks/index.ezmd
deleted file mode 100644
index e76a6a2..0000000
--- a/output/events/asia-2026/tracks/index.ezmd
+++ /dev/null
@@ -1,29 +0,0 @@
-title: Tracks
-template: page-event-default
-ref: asia-2026
-inPageNav: false
-eventLogo: /images/logos/CommunityOverCode_Logo_beijing-stacked-color.svg
-customcss: /events/asia-2026/css/asia-2026.css
-
-
-| Tracks | Track Chairs|
-| --- | --- |
-| [[]Agentic coding](/events/asia-2026/tracks/agentic-coding) | tison, Xuanwo |
-| [[]AI Infra](/events/asia-2026/tracks/ai-infra) | Jerry Tan, junping Du |
-| [[]Community](/events/asia-2026/tracks/community) | Yin Xu, Richard Lin |
-| [[]Data + AI](/events/asia-2026/tracks/data-ai) | Juan Pan, Sheng Wu, Jeff Feng |
-| [[]Data Lake & Data Warehouse](/events/asia-2026/tracks/data-lake-data-warehouse) | Lidong Dai, Shaofeng Shi, Zongtang Hu, Jean-Baptiste Onofré, Huaxin Gao |
-| [[]Data Storage & Computing](/events/asia-2026/tracks/data-storage-computing) | Gang Li, Nicholas Jiang |
-| [[]DataOps](/events/asia-2026/tracks/dataops) | William Guo, Lifeng Nie |
-| [[]General](/events/asia-2026/tracks/general) | Willem Jiang |
-| [[]Incubator](/events/asia-2026/tracks/incubator) | Calvin Kirs, Justin Mclean |
-| [[]IoT and IIoT](/events/asia-2026/tracks/iot-and-iiot) | Jialin Qiao, Pengcheng Zheng |
-| [[]Keynote](/events/asia-2026/tracks/keynote) | Willem Jiang, Nadia Jiang |
-| [[]Lightning Talk](/events/asia-2026/tracks/lightning-talk) | Richard Lin |
-| [[]Messaging](/events/asia-2026/tracks/messaging) | Jia Zha, Qingshan Lin, Zongtang Hu |
-| [[]Microservice](/events/asia-2026/tracks/microservice) | Jun Liu |
-| [[]Observability](/events/asia-2026/tracks/observability) | Huxing Zhang, Sheng Wu |
-| [[]OLAP & Data Analysis](/events/asia-2026/tracks/olap-data-analysis) | Mingyu Chen, Zhijing Lu, Dianjin Wang |
-| [[]Rust](/events/asia-2026/tracks/rust) | tison, Handong Zhang |
-| [[]Streaming](/events/asia-2026/tracks/streaming) | Yu Li, Xin Wang |
-| [[]Web Application & Framework](/events/asia-2026/tracks/web-application-framework) | Huxing Zhang, Han Li |
\ No newline at end of file
diff --git a/output/events/asia-2026/tracks/index.html b/output/events/asia-2026/tracks/index.html
new file mode 100644
index 0000000..3d08081
--- /dev/null
+++ b/output/events/asia-2026/tracks/index.html
@@ -0,0 +1,282 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>Tracks | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+<link href="/events/asia-2026/css/asia-2026.css" async rel="stylesheet"> <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-asia-2026" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/events/asia-2026/tracks/">Tracks</a></li>
+ </ul>
+</nav> </header>
+
+
+
+
+ <div class="hero hero--single-event-default relative">
+ <div class="inner flex flex-vert-center py-xl relative z1 flex-gap-50 flex-col-reverse-800">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Tracks
+ </h1>
+ <h2 class="hero__default-subtitle">
+ Community Over Code
+ <span class="hero__subtitle"> Beijing, China</span>
+ </h2>
+ <div class="hero-event-dates">August 7-9, 2026</div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/logos/CommunityOverCode_Logo_beijing-stacked-color.svg" alt="Tracks logo" class="hero__logo-image">
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner py-xl">
+ <div class="mb-medium cf">
+ <div class="float66 right" style="padding-left: 50px;">
+ <a class="breadcrumb" href="/events/asia-2026"><svg viewBox="0 0 24 24" width="16" height="16" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><polyline points="15 18 9 12 15 6"></polyline></svg> Back to Event Home</a>
+ </div>
+ </div>
+ <div class="cf flex-col-800">
+ <div class="float33 full-width-800"> </div>
+ <div class="float66 event-content">
+ <table class="table">
+<thead>
+<tr>
+<th>Tracks</th>
+<th>Track Chairs</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><a href="/events/asia-2026/tracks/agentic-coding">Agentic coding</a></td>
+<td>tison, Xuanwo</td>
+</tr>
+<tr>
+<td><a href="/events/asia-2026/tracks/ai-infra">AI Infra</a></td>
+<td>Jerry Tan, junping Du</td>
+</tr>
+<tr>
+<td><a href="/events/asia-2026/tracks/community">Community</a></td>
+<td>Yin Xu, Richard Lin</td>
+</tr>
+<tr>
+<td><a href="/events/asia-2026/tracks/data-ai">Data + AI</a></td>
+<td>Juan Pan, Sheng Wu, Jeff Feng</td>
+</tr>
+<tr>
+<td><a href="/events/asia-2026/tracks/data-lake-data-warehouse">Data Lake & Data Warehouse</a></td>
+<td>Lidong Dai, Shaofeng Shi, Zongtang Hu, Jean-Baptiste Onofré, Huaxin Gao</td>
+</tr>
+<tr>
+<td><a href="/events/asia-2026/tracks/data-storage-computing">Data Storage & Computing</a></td>
+<td>Gang Li, Nicholas Jiang</td>
+</tr>
+<tr>
+<td><a href="/events/asia-2026/tracks/dataops">DataOps</a></td>
+<td>William Guo, Lifeng Nie</td>
+</tr>
+<tr>
+<td><a href="/events/asia-2026/tracks/general">General</a></td>
+<td>Willem Jiang</td>
+</tr>
+<tr>
+<td><a href="/events/asia-2026/tracks/incubator">Incubator</a></td>
+<td>Calvin Kirs, Justin Mclean</td>
+</tr>
+<tr>
+<td><a href="/events/asia-2026/tracks/iot-and-iiot">IoT and IIoT</a></td>
+<td>Jialin Qiao, Pengcheng Zheng</td>
+</tr>
+<tr>
+<td><a href="/events/asia-2026/tracks/keynote">Keynote</a></td>
+<td>Willem Jiang, Nadia Jiang</td>
+</tr>
+<tr>
+<td><a href="/events/asia-2026/tracks/lightning-talk">Lightning Talk</a></td>
+<td>Richard Lin</td>
+</tr>
+<tr>
+<td><a href="/events/asia-2026/tracks/messaging">Messaging</a></td>
+<td>Jia Zha, Qingshan Lin, Zongtang Hu</td>
+</tr>
+<tr>
+<td><a href="/events/asia-2026/tracks/microservice">Microservice</a></td>
+<td>Jun Liu</td>
+</tr>
+<tr>
+<td><a href="/events/asia-2026/tracks/observability">Observability</a></td>
+<td>Huxing Zhang, Sheng Wu</td>
+</tr>
+<tr>
+<td><a href="/events/asia-2026/tracks/olap-data-analysis">OLAP & Data Analysis</a></td>
+<td>Mingyu Chen, Zhijing Lu, Dianjin Wang</td>
+</tr>
+<tr>
+<td><a href="/events/asia-2026/tracks/rust">Rust</a></td>
+<td>tison, Handong Zhang</td>
+</tr>
+<tr>
+<td><a href="/events/asia-2026/tracks/streaming">Streaming</a></td>
+<td>Yu Li, Xin Wang</td>
+</tr>
+<tr>
+<td><a href="/events/asia-2026/tracks/web-application-framework">Web Application & Framework</a></td>
+<td>Huxing Zhang, Han Li</td>
+</tr></tbody></table>
+
+ </div>
+ </div>
+ </div>
+ </section>
+ <script>
+ // Smooth scroll for in-page navigation
+ const navContainer = document.getElementById('in-page-nav');
+ if(navContainer) {
+ document.addEventListener('DOMContentLoaded', function() {
+ // generate in-page navigation based on h2
+ const content = document.querySelector('.event-content');
+ const headings = content.querySelectorAll('h2');
+ const nav = document.getElementById('in-page-nav');
+ if (headings.length > 0) {
+ const navList = document.createElement('ul');
+ headings.forEach(heading => {
+ const id = heading.textContent.trim().toLowerCase().replace(/\s+/g, '-');
+ heading.setAttribute('id', id);
+ const navItem = document.createElement('li');
+ const navLink = document.createElement('a');
+ navLink.setAttribute('href', `#${id}`);
+ navLink.textContent = heading.textContent;
+ navItem.appendChild(navLink);
+ navList.appendChild(navItem);
+ });
+ nav.appendChild(navList);
+ }
+
+ const links = document.querySelectorAll('#in-page-nav a');
+ links.forEach(link => {
+ link.addEventListener('click', function(e) {
+ e.preventDefault();
+ // in this loop, 'this' refers to the clicked link
+ // add class of current-section to the clicked link and remove from others
+ links.forEach(l => l.classList.remove('current-section'));
+ this.classList.add('current-section');
+ const targetId = this.getAttribute('href').substring(1);
+ const targetElement = document.getElementById(targetId);
+ if (targetElement) {
+ window.scrollTo({
+ top: targetElement.offsetTop - 100, // Adjust for fixed header
+ behavior: 'smooth'
+ });
+ }
+ });
+ });
+
+ // Highlight the current section in the navigation as the user scrolls
+ window.addEventListener('scroll', function() {
+ let currentSection = '';
+ headings.forEach(heading => {
+ const sectionTop = heading.offsetTop - 150; // Adjust for fixed header
+ if (window.scrollY >= sectionTop) {
+ currentSection = heading.getAttribute('id');
+ }
+ });
+ links.forEach(link => {
+ link.classList.remove('current-section');
+ if (link.getAttribute('href').substring(1) === currentSection) {
+ link.classList.add('current-section');
+ }
+ });
+ });
+ });
+ }
+ </script>
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/denver-2024.ezmd b/output/events/denver-2024.ezmd
deleted file mode 100644
index 2c2dd92..0000000
--- a/output/events/denver-2024.ezmd
+++ /dev/null
@@ -1,22 +0,0 @@
-title: Community Over Code North America 2025
-template: page-event-landing
-ref: denver-2024
-
-<!--
- Fill out all meta info above. It will be used in the page template to create the page
- start_date: used for event countdown and meta tags. Format: YYYY-MM-DD
- end_date: used for event countdown and meta tags. Format: YYYY-MM-DD
- location: used in hero section and meta tags
- registration_link: OPTIONAL- URL for the registration page. If not provided, the "Register Now" button will not be shown.
- registration_link_text: OPTIONAL- Text for the registration button. If not provided, the "Register Now" button will not be shown.
- banner_text: OPTIONAL- Text for the banner at the top of the page. If not provided, the banner will not be shown.
- banner_link: OPTIONAL- URL for the banner link. If not provided, the banner will not be clickable.
- banner_link_text: OPTIONAL- Text for the banner link. If not provided, the banner will not
- sponsors_key: used to link the sponsors data from asfdata.yaml to this event. Make sure to add the sponsors data in asfdata.yaml with the same key.
--->
-
-## YouTube Playlist
-<p><a href="https://youtube.com/playlist?list=PLnmZetgAnzKo9CQikeJixoGP6K4R7YSxY&si=6GBH0ASZVRPGg9sU">Watch on YouTube</a></p>
-
----
-
diff --git a/output/events/denver-2024.html b/output/events/denver-2024.html
new file mode 100644
index 0000000..27e32c6
--- /dev/null
+++ b/output/events/denver-2024.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>Community Over Code North America 2025 | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-denver-2024" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/about/">About</a></li>
+ <li><a href="/sponsors/">Sponsors</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ </ul>
+</nav> </header>
+
+
+ <div class="hero hero--event-home relative" style="background-image: url('');">
+ <div class="inner flex py-xl relative flex-vert-center z1 flex-col-reverse-800 flex-gap-50">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Community Over Code
+ <span class="hero__subtitle">Denver, CO</span>
+ </h1>
+ <div class="hero-event-dates text-white">October 7-10, 2024</div>
+ <div class="hero-ctas flex flex-gap-20 flex-wrap">
+ </div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/CoC-logo-white.webp" alt="Community Over Code logo" class="hero__logo-image">
+ </div>
+ </div>
+ <script>
+ // Countdown timer script
+ let countdownInterval;
+
+ function updateCountdown() {
+ const countdownWrapper = document.getElementById('countdown-wrapper');
+ const targetDate = new Date(countdownWrapper.getAttribute('data-date')).getTime();
+ const now = new Date().getTime();
+ const distance = targetDate - now;
+ if(distance > 0) {
+ countdownWrapper.classList.add('show');
+ } else {
+ clearInterval(countdownInterval); // Stop the interval
+ // remove countdown from the dom
+ countdownWrapper.remove();
+ return;
+ }
+
+ const days = Math.floor(distance / (1000 * 60 * 60 * 24));
+ const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
+ const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
+ const seconds = Math.floor((distance % (1000 * 60)) / 1000);
+
+ document.getElementById('cd-days').textContent = String(days).padStart(2, '0');
+ document.getElementById('cd-hours').textContent = String(hours).padStart(2, '0');
+ document.getElementById('cd-minutes').textContent = String(minutes).padStart(2, '0');
+ document.getElementById('cd-seconds').textContent = String(seconds).padStart(2, '0');
+ }
+
+ countdownInterval = setInterval(updateCountdown, 1000);
+ updateCountdown(); // Initial call to set values immediately
+ </script>
+ <div id="countdown-wrapper" class="countdown" data-date="2024-10-07">
+ <div class="countdown__box card">
+ <span id="cd-days" class="countdown__number">00</span>
+ <span class="countdown__label">Days</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-hours" class="countdown__number">00</span>
+ <span class="countdown__label">Hours</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-minutes" class="countdown__number">00</span>
+ <span class="countdown__label">Minutes</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-seconds" class="countdown__number">00</span>
+ <span class="countdown__label">Seconds</span>
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner flex-col-800 flex pt-xl">
+ <div class="flex-1"></div>
+ <div class="flex-2">
+ <!--
+ Fill out all meta info above. It will be used in the page template to create the page
+ start_date: used for event countdown and meta tags. Format: YYYY-MM-DD
+ end_date: used for event countdown and meta tags. Format: YYYY-MM-DD
+ location: used in hero section and meta tags
+ registration_link: OPTIONAL- URL for the registration page. If not provided, the "Register Now" button will not be shown.
+ registration_link_text: OPTIONAL- Text for the registration button. If not provided, the "Register Now" button will not be shown.
+ banner_text: OPTIONAL- Text for the banner at the top of the page. If not provided, the banner will not be shown.
+ banner_link: OPTIONAL- URL for the banner link. If not provided, the banner will not be clickable.
+ banner_link_text: OPTIONAL- Text for the banner link. If not provided, the banner will not
+ sponsors_key: used to link the sponsors data from asfdata.yaml to this event. Make sure to add the sponsors data in asfdata.yaml with the same key.
+-->
+<h2>YouTube Playlist</h2>
+<p><a href="https://youtube.com/playlist?list=PLnmZetgAnzKo9CQikeJixoGP6K4R7YSxY&si=6GBH0ASZVRPGg9sU">Watch on YouTube</a></p>
+<hr/>
+
+ </div>
+ </div>
+ </section>
+ <!--
+ NOTE: For this section to work, to update the sponsors.json file in the event directory.
+ - Add all of your sponsors to the appropriate category (diamond, gold, silver).
+ - Make sure to include the sponsor's name, logo URL, and link URL in the JSON file.
+ - update the asfdata.yaml file to include the path to your sponsors.json file under the sponsors key, using a unique key for your event (e.g., glasgow-2026).
+ - in the event landing page meta data, set the sponsorskey to match the key you used in asfdata.yaml (e.g., glasgow-2026)
+ -->
+
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/glasgow-2026/call-for-presentations.ezmd b/output/events/glasgow-2026/call-for-presentations.ezmd
deleted file mode 100644
index 5fd3d1d..0000000
--- a/output/events/glasgow-2026/call-for-presentations.ezmd
+++ /dev/null
@@ -1,59 +0,0 @@
-title: Call for Presentations
-template: page-event-default
-ref: glasgow-2026
-eventLogo: /images/logos/CommunityOverCode_Logo_stacked-color.svg
-bannerText: CFP is open until June 30, 2026!
-ctaText: Submit Your Proposal
-ctaLink: https://www.cvent.com/c/abstracts/glasgow-2026
-inPageNav: true
-
-Community Over Code is accepting presentation proposals for any topic related to the ASF's mission of producing free software for the public good. The event is in-person only, and there is no fee for speakers to attend. This four-day event is designed to bring together contributors, committers, and open source practitioners from across the global Apache ecosystem to celebrate the projects and communities that power the world's most widely used open source software — and to shape what com [...]
-
-Important! First-time presenters, you must create a Cvent account to submit your talk.
-
-<a class="btn" href="https://www.cvent.com/c/abstracts/glasgow-2026/1b9a0c8e-9c5d-4f1e-8b3a-9c5d4f1e8b3a">Submit Your Proposal</a>
-
----
-
-## Timeline
-| Timepoint | Date(s) |
-| --- | --- |
-| CFP Closes | Friday, March 20 at 23:59 UTC |
-| Speaker Notifications | First week of April |
-| Scheduled Announced | Mid-April |
-| Speaker Slides Due | First week of September |
-
----
-
-## CFP Topics
-
-We are looking for presentations about anything relating to ASF projects, open source governance, community, and software development.
-This includes, but is not limited to:
-
-- **AI Plumbing.** Explore agentic AI and the critical ‘plumbing’ that makes it useful, including linear and graph-based workflows, orchestration tactics, communication protocols, and knowledge graphs.
-- **Airflow Contributor Days.** A contributor-focused embedded event that will bring together the Airflow community to focus on this workflow platform.
-- **Cassandra.** All things Apache Cassandra, focus on 6.0 features, how we do engineering, and our community.
-- **CloudStack.** Topics will address CloudStack basic and advanced concepts, new features, use cases, and various topics about the platform.
-- **Community.** The ASF community is its best asset. Sessions about how to keep communities healthy and vibrant are welcome.
-- **Data Infra and Engineering.** This track covers data infrastructure, systems for processing, storage, data lakes, and engineering workflows.
-- **Fintech and Fineract.** This track is focused on the Apache Fineract community and also other open source projects involved in Fintech.
-- **Governance and Policy.** Discussions on community guidelines, succession, decision-making, and EU policy to foster well-maintained, healthy open source projects.
-- **Groovy.** A track dedicated to the Apache Groovy programming language, the Apache Grails web framework, and relevant projects and topics in the broader Groovy ecosystem.
-- **Incubator.** Share your incubating project’s journey, technical work, and real-world lessons. Process and governance topics are welcome.
-- **Industrial Internet of Things.** IoT and IIoT focuses on how ASF projects empower connected devices, industrial systems, and AI-driven intelligence at the edge.
-- **Infrastructure.** Topics that address the ins and outs of the amazing ASF infra configuration with expertise from the Infra team.
-- **NuttX RTOS.** An annual workshop to bring together the NuttX community and share the latest achievements.
-- **Performance, Scalability, and Observability.** Theory and practice of designing, building and understanding high-performance, scalable software in Apache projects and beyond.
-- **Search.** Talks pertaining to all things Search – Spatial, full text, spatial, and vector.
-- **Streaming.** Explore the evolution from batch to real-time stream processing and building streaming platforms with Apache projects like Flink, Spark, Kafka, and Pulsar for timely data insights.
-- **Sustainability and Green Software.** Examine open source libraries, tools, and projects that reduce software’s environmental impact. Featuring technical deep dives on energy profiling, carbon-aware scheduling, and sustainability metrics for cloud and AI workloads.
-- **Tomcat, Httpd, and other servers.** Web Servers and Application Servers are used mostly everywhere, the track will feature Apache Tomcat, Apache HTTPD server, and Traffic Server, among other system. New protocols and new specifications in the area will be presented.
-
----
-
-## Session Formats
-
-- Presentation: xx minutes including Q&A
-- Short presentation: xx minutes including Q&A
-- Lightning talks: xx minutes
-
diff --git a/output/events/glasgow-2026/call-for-presentations.html b/output/events/glasgow-2026/call-for-presentations.html
new file mode 100644
index 0000000..339f6f2
--- /dev/null
+++ b/output/events/glasgow-2026/call-for-presentations.html
@@ -0,0 +1,279 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>Call for Presentations | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-glasgow-2026" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/events/glasgow-2026/register/">Register</a></li>
+ <li class="has-sub-menu">
+ <a href="#">Attend</a>
+ <ul class="sub-menu">
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/travel/">Travel</a></li>
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/why-attend/">Why Attend</a></li>
+ </ul>
+ </li>
+ <li class="has-sub-menu">
+ <a href="#">Co-located Events</a>
+ <ul class="sub-menu">
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/lakehouse-day-glasgow/">Lakehouse Day</a></li>
+ </ul>
+ </li>
+ <li><a href="/events/glasgow-2026/schedule/">Schedule</a></li>
+ <li><a href="/events/glasgow-2026/sponsorship/">Sponsor</a></li>
+ </ul>
+</nav> </header>
+
+ <div class="banner">
+ <div class="inner flex flex-gap-20 flex-center">
+ <div class="banner-text">CFP is open until June 30, 2026!</div>
+ </div>
+ </div>
+
+
+
+ <div class="hero hero--single-event-default relative">
+ <div class="inner flex flex-vert-center py-xl relative z1 flex-gap-50 flex-col-reverse-800">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Call for Presentations
+ </h1>
+ <h2 class="hero__default-subtitle">
+ Community Over Code
+ <span class="hero__subtitle"> Glasgow, UK</span>
+ </h2>
+ <div class="hero-event-dates">October 11-14, 2026</div>
+ <p><a class="btn btn--alt" href="https://www.cvent.com/c/abstracts/glasgow-2026">Submit Your Proposal</a></p>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-color.svg" alt="Call for Presentations logo" class="hero__logo-image">
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner py-xl">
+ <div class="mb-medium cf">
+ <div class="float66 right" style="padding-left: 50px;">
+ <a class="breadcrumb" href="/events/glasgow-2026"><svg viewBox="0 0 24 24" width="16" height="16" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><polyline points="15 18 9 12 15 6"></polyline></svg> Back to Event Home</a>
+ </div>
+ </div>
+ <div class="cf flex-col-800">
+ <div id="in-page-nav" class="float33"></div>
+ <div class="float66 event-content">
+ <p>Community Over Code is accepting presentation proposals for any topic related to the ASF's mission of producing free software for the public good. The event is in-person only, and there is no fee for speakers to attend. This four-day event is designed to bring together contributors, committers, and open source practitioners from across the global Apache ecosystem to celebrate the projects and communities that power the world's most widely used open source softw [...]
+<p>Important! First-time presenters, you must create a Cvent account to submit your talk.</p>
+<p><a class="btn" href="https://www.cvent.com/c/abstracts/glasgow-2026/1b9a0c8e-9c5d-4f1e-8b3a-9c5d4f1e8b3a">Submit Your Proposal</a></p>
+<hr/>
+<h2>Timeline</h2>
+<table class="table">
+<thead>
+<tr>
+<th>Timepoint</th>
+<th>Date(s)</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>CFP Closes</td>
+<td>Friday, March 20 at 23:59 UTC</td>
+</tr>
+<tr>
+<td>Speaker Notifications</td>
+<td>First week of April</td>
+</tr>
+<tr>
+<td>Scheduled Announced</td>
+<td>Mid-April</td>
+</tr>
+<tr>
+<td>Speaker Slides Due</td>
+<td>First week of September</td>
+</tr></tbody></table>
+<hr/>
+<h2>CFP Topics</h2>
+<p>We are looking for presentations about anything relating to ASF projects, open source governance, community, and software development.
+This includes, but is not limited to:</p>
+<ul>
+<li><strong>AI Plumbing.</strong> Explore agentic AI and the critical ‘plumbing’ that makes it useful, including linear and graph-based workflows, orchestration tactics, communication protocols, and knowledge graphs.</li>
+<li><strong>Airflow Contributor Days.</strong> A contributor-focused embedded event that will bring together the Airflow community to focus on this workflow platform.</li>
+<li><strong>Cassandra.</strong> All things Apache Cassandra, focus on 6.0 features, how we do engineering, and our community.</li>
+<li><strong>CloudStack.</strong> Topics will address CloudStack basic and advanced concepts, new features, use cases, and various topics about the platform.</li>
+<li><strong>Community.</strong> The ASF community is its best asset. Sessions about how to keep communities healthy and vibrant are welcome.</li>
+<li><strong>Data Infra and Engineering.</strong> This track covers data infrastructure, systems for processing, storage, data lakes, and engineering workflows.</li>
+<li><strong>Fintech and Fineract.</strong> This track is focused on the Apache Fineract community and also other open source projects involved in Fintech.</li>
+<li><strong>Governance and Policy.</strong> Discussions on community guidelines, succession, decision-making, and EU policy to foster well-maintained, healthy open source projects.</li>
+<li><strong>Groovy.</strong> A track dedicated to the Apache Groovy programming language, the Apache Grails web framework, and relevant projects and topics in the broader Groovy ecosystem.</li>
+<li><strong>Incubator.</strong> Share your incubating project’s journey, technical work, and real-world lessons. Process and governance topics are welcome.</li>
+<li><strong>Industrial Internet of Things.</strong> IoT and IIoT focuses on how ASF projects empower connected devices, industrial systems, and AI-driven intelligence at the edge.</li>
+<li><strong>Infrastructure.</strong> Topics that address the ins and outs of the amazing ASF infra configuration with expertise from the Infra team.</li>
+<li><strong>NuttX RTOS.</strong> An annual workshop to bring together the NuttX community and share the latest achievements.</li>
+<li><strong>Performance, Scalability, and Observability.</strong> Theory and practice of designing, building and understanding high-performance, scalable software in Apache projects and beyond.</li>
+<li><strong>Search.</strong> Talks pertaining to all things Search – Spatial, full text, spatial, and vector.</li>
+<li><strong>Streaming.</strong> Explore the evolution from batch to real-time stream processing and building streaming platforms with Apache projects like Flink, Spark, Kafka, and Pulsar for timely data insights.</li>
+<li><strong>Sustainability and Green Software.</strong> Examine open source libraries, tools, and projects that reduce software’s environmental impact. Featuring technical deep dives on energy profiling, carbon-aware scheduling, and sustainability metrics for cloud and AI workloads.</li>
+<li><strong>Tomcat, Httpd, and other servers.</strong> Web Servers and Application Servers are used mostly everywhere, the track will feature Apache Tomcat, Apache HTTPD server, and Traffic Server, among other system. New protocols and new specifications in the area will be presented.</li>
+</ul>
+<hr/>
+<h2>Session Formats</h2>
+<ul>
+<li>Presentation: xx minutes including Q&A</li>
+<li>Short presentation: xx minutes including Q&A</li>
+<li>Lightning talks: xx minutes</li>
+</ul>
+
+ </div>
+ </div>
+ </div>
+ </section>
+ <script>
+ // Smooth scroll for in-page navigation
+ const navContainer = document.getElementById('in-page-nav');
+ if(navContainer) {
+ document.addEventListener('DOMContentLoaded', function() {
+ // generate in-page navigation based on h2
+ const content = document.querySelector('.event-content');
+ const headings = content.querySelectorAll('h2');
+ const nav = document.getElementById('in-page-nav');
+ if (headings.length > 0) {
+ const navList = document.createElement('ul');
+ headings.forEach(heading => {
+ const id = heading.textContent.trim().toLowerCase().replace(/\s+/g, '-');
+ heading.setAttribute('id', id);
+ const navItem = document.createElement('li');
+ const navLink = document.createElement('a');
+ navLink.setAttribute('href', `#${id}`);
+ navLink.textContent = heading.textContent;
+ navItem.appendChild(navLink);
+ navList.appendChild(navItem);
+ });
+ nav.appendChild(navList);
+ }
+
+ const links = document.querySelectorAll('#in-page-nav a');
+ links.forEach(link => {
+ link.addEventListener('click', function(e) {
+ e.preventDefault();
+ // in this loop, 'this' refers to the clicked link
+ // add class of current-section to the clicked link and remove from others
+ links.forEach(l => l.classList.remove('current-section'));
+ this.classList.add('current-section');
+ const targetId = this.getAttribute('href').substring(1);
+ const targetElement = document.getElementById(targetId);
+ if (targetElement) {
+ window.scrollTo({
+ top: targetElement.offsetTop - 100, // Adjust for fixed header
+ behavior: 'smooth'
+ });
+ }
+ });
+ });
+
+ // Highlight the current section in the navigation as the user scrolls
+ window.addEventListener('scroll', function() {
+ let currentSection = '';
+ headings.forEach(heading => {
+ const sectionTop = heading.offsetTop - 150; // Adjust for fixed header
+ if (window.scrollY >= sectionTop) {
+ currentSection = heading.getAttribute('id');
+ }
+ });
+ links.forEach(link => {
+ link.classList.remove('current-section');
+ if (link.getAttribute('href').substring(1) === currentSection) {
+ link.classList.add('current-section');
+ }
+ });
+ });
+ });
+ }
+ </script>
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/glasgow-2026/index.ezmd b/output/events/glasgow-2026/index.ezmd
deleted file mode 100644
index fca3a70..0000000
--- a/output/events/glasgow-2026/index.ezmd
+++ /dev/null
@@ -1,41 +0,0 @@
-title: Community Over Code Glasgow 2026
-template: page-event-landing
-ref: glasgow-2026
-heroBackgroundImage: ../images/events/event-hero-glasgow.webp
-eventLogo: /images/logos/CommunityOverCode_Logo_stacked-white.svg
-bannerText: CFP is open until June 30, 2026!
-bannerLink: /events/glasgow-2026/call-for-presentations/
-bannerLinkText: Submit Today
-sponsorsKey: glasgow-2026
-ctaText: View the Schedule
-ctaLink: /events/glasgow-2026/schedule/
-ctaTwoText: Submit a Presentation
-ctaTwoLink: /events/glasgow-2026/call-for-presentations/
-
-<!--
- ref: REQUIRED - Must be unique - Used for matching event data from events.yaml in events page templates.
- customCss: /events/glasgow-2026/css/glasgow-2026.css
- bannerText: OPTIONAL- Text for the banner at the top of the page. If not provided, the banner will not be shown.
- bannerLink: OPTIONAL- URL for the banner link. If not provided, the banner will not be clickable.
- bannerLinkText: OPTIONAL- Text for the banner link. If not provided, the banner will not
- sponsorsKey: used to link the sponsors data from asfdata.yaml to this event. Make sure to add the sponsors data in asfdata.yaml with the same key.
--->
-
-Community Over Code Glasgow 2026 features four in-person days of sessions at the Hilton Glasgow for ASF members, committers, and open source developers from around the world, focusing on Search, Big Data, Internet of Things, Community, Geospatial, Financial Tech, and many other topics. Each evening will also feature Birds of a Feather (BoF) sessions and social events, where communities will have an opportunity for free-form discussion and planning around our various projects.
-
-## Deep Dives, Real Insights
-
-We're featuring co-located events and workshops on Saturday, October 10 and more than xxx sessions across x tracks from Sunday, October 11 to Wednesday, October 14. Check out the 2025 schedule for an idea of what to expect.
-
-<a class="btn" href="#">View the Schedule</a>
-
----
-
-## Communities That Endure
-
-Community Over Code is the official conference of the Apache Software Foundation — where the committers, contributors, and community members behind the world's most widely deployed open source software gather to share, learn, and shape what comes next.
-
-<a class="btn" href="https://www.google.com">About Community Over Code</a>
-
----
-
diff --git a/output/events/glasgow-2026/index.html b/output/events/glasgow-2026/index.html
new file mode 100644
index 0000000..4fbe690
--- /dev/null
+++ b/output/events/glasgow-2026/index.html
@@ -0,0 +1,504 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>Community Over Code Glasgow 2026 | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-glasgow-2026" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/events/glasgow-2026/register/">Register</a></li>
+ <li class="has-sub-menu">
+ <a href="#">Attend</a>
+ <ul class="sub-menu">
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/travel/">Travel</a></li>
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/why-attend/">Why Attend</a></li>
+ </ul>
+ </li>
+ <li class="has-sub-menu">
+ <a href="#">Co-located Events</a>
+ <ul class="sub-menu">
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/lakehouse-day-glasgow/">Lakehouse Day</a></li>
+ </ul>
+ </li>
+ <li><a href="/events/glasgow-2026/schedule/">Schedule</a></li>
+ <li><a href="/events/glasgow-2026/sponsorship/">Sponsor</a></li>
+ </ul>
+</nav> </header>
+
+ <div class="banner">
+ <div class="inner flex flex-gap-20 flex-center">
+ <div class="banner-text">CFP is open until June 30, 2026!</div>
+ <a href="/events/glasgow-2026/call-for-presentations/" class="">Submit Today</a>
+ </div>
+ </div>
+
+ <div class="hero hero--event-home relative" style="background-image: url('../images/events/event-hero-glasgow.webp');">
+ <div class="inner flex py-xl relative flex-vert-center z1 flex-col-reverse-800 flex-gap-50">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Community Over Code
+ <span class="hero__subtitle">Glasgow, UK</span>
+ </h1>
+ <div class="hero-event-dates text-white">October 11-14, 2026</div>
+ <div class="hero-ctas flex flex-gap-20 flex-wrap">
+ <a class="btn btn--event-hero btn--alt" href="/events/glasgow-2026/schedule/">View the Schedule</a>
+ <a class="btn btn--event-hero btn--white" href="/events/glasgow-2026/call-for-presentations/">Submit a Presentation</a>
+ </div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.svg" alt="Community Over Code Glasgow 2026 logo" class="hero__logo-image">
+ </div>
+ </div>
+ <script>
+ // Countdown timer script
+ let countdownInterval;
+
+ function updateCountdown() {
+ const countdownWrapper = document.getElementById('countdown-wrapper');
+ const targetDate = new Date(countdownWrapper.getAttribute('data-date')).getTime();
+ const now = new Date().getTime();
+ const distance = targetDate - now;
+ if(distance > 0) {
+ countdownWrapper.classList.add('show');
+ } else {
+ clearInterval(countdownInterval); // Stop the interval
+ // remove countdown from the dom
+ countdownWrapper.remove();
+ return;
+ }
+
+ const days = Math.floor(distance / (1000 * 60 * 60 * 24));
+ const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
+ const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
+ const seconds = Math.floor((distance % (1000 * 60)) / 1000);
+
+ document.getElementById('cd-days').textContent = String(days).padStart(2, '0');
+ document.getElementById('cd-hours').textContent = String(hours).padStart(2, '0');
+ document.getElementById('cd-minutes').textContent = String(minutes).padStart(2, '0');
+ document.getElementById('cd-seconds').textContent = String(seconds).padStart(2, '0');
+ }
+
+ countdownInterval = setInterval(updateCountdown, 1000);
+ updateCountdown(); // Initial call to set values immediately
+ </script>
+ <div id="countdown-wrapper" class="countdown" data-date="2026-10-11">
+ <div class="countdown__box card">
+ <span id="cd-days" class="countdown__number">00</span>
+ <span class="countdown__label">Days</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-hours" class="countdown__number">00</span>
+ <span class="countdown__label">Hours</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-minutes" class="countdown__number">00</span>
+ <span class="countdown__label">Minutes</span>
+ </div>
+ <div class="countdown__box card">
+ <span id="cd-seconds" class="countdown__number">00</span>
+ <span class="countdown__label">Seconds</span>
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner flex-col-800 flex pt-xl">
+ <div class="flex-1"></div>
+ <div class="flex-2">
+ <!--
+ ref: REQUIRED - Must be unique - Used for matching event data from events.yaml in events page templates.
+ customCss: /events/glasgow-2026/css/glasgow-2026.css
+ bannerText: OPTIONAL- Text for the banner at the top of the page. If not provided, the banner will not be shown.
+ bannerLink: OPTIONAL- URL for the banner link. If not provided, the banner will not be clickable.
+ bannerLinkText: OPTIONAL- Text for the banner link. If not provided, the banner will not
+ sponsorsKey: used to link the sponsors data from asfdata.yaml to this event. Make sure to add the sponsors data in asfdata.yaml with the same key.
+-->
+<p>Community Over Code Glasgow 2026 features four in-person days of sessions at the Hilton Glasgow for ASF members, committers, and open source developers from around the world, focusing on Search, Big Data, Internet of Things, Community, Geospatial, Financial Tech, and many other topics. Each evening will also feature Birds of a Feather (BoF) sessions and social events, where communities will have an opportunity for free-form discussion and planning around our various projects.</p>
+<h2>Deep Dives, Real Insights</h2>
+<p>We're featuring co-located events and workshops on Saturday, October 10 and more than xxx sessions across x tracks from Sunday, October 11 to Wednesday, October 14. Check out the 2025 schedule for an idea of what to expect.</p>
+<p><a class="btn" href="#">View the Schedule</a></p>
+<hr/>
+<h2>Communities That Endure</h2>
+<p>Community Over Code is the official conference of the Apache Software Foundation — where the committers, contributors, and community members behind the world's most widely deployed open source software gather to share, learn, and shape what comes next.</p>
+<p><a class="btn" href="https://www.google.com">About Community Over Code</a></p>
+<hr/>
+
+ </div>
+ </div>
+ </section>
+ <section class="co-located-events">
+ <div class="inner py-xl relative z1">
+ <h2 class="text-center text-white">Co-located Events</h2>
+ <div class="co-located-events-list events-grid grid flex-gap-20">
+ <div class="co-located-event-card card flex-1">
+ <div class="card-inner">
+ <div class="colo-image-wrapper">
+ <img src="/images/events/event-hero-glasgow.webp" alt="Lakehouse Day" class="colo-image">
+ </div>
+ <div class="event-card__content">
+ <div class="event-card__date">October 11, 2026</div>
+ <h4>Lakehouse Day</h4>
+ <div class="card-links">
+ <a href="/events/glasgow-2026/lakehouse-day-glasgow">See Event</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </section>
+ <style>
+ .gallery-images {
+ width: 500%;
+ }
+ .gallery-image {
+ width: 20.0%;
+ }
+ </style>
+ <script>
+ document.addEventListener('DOMContentLoaded', function() {
+ const galleryWrapper = document.getElementById('gallery-wrapper');
+ const galleryImages = document.getElementById('gallery-images');
+
+ // Check if elements exist
+ if (!galleryWrapper || !galleryImages) {
+ console.log('Gallery elements not found');
+ return;
+ }
+
+ const images = galleryImages.getElementsByClassName('gallery-image');
+ let currentIndex = 0;
+
+ // Only proceed if we have images
+ if (images.length === 0) {
+ console.log('No gallery images found');
+ return;
+ }
+
+ function showImage(index) {
+ const offset = -index * (100 / images.length);
+ galleryImages.style.transform = `translateX(${offset}%)`;
+ }
+
+ // Create navigation arrows
+ const leftArrow = document.createElement('button');
+ leftArrow.className = 'gallery-nav left';
+ leftArrow.innerHTML = '◀';
+ leftArrow.setAttribute('aria-label', 'Previous image');
+
+ const rightArrow = document.createElement('button');
+ rightArrow.className = 'gallery-nav right';
+ rightArrow.innerHTML = '▶';
+ rightArrow.setAttribute('aria-label', 'Next image');
+
+ // Only show arrows if there's more than one image
+ if (images.length > 1) {
+ galleryWrapper.appendChild(leftArrow);
+ galleryWrapper.appendChild(rightArrow);
+
+ leftArrow.addEventListener('click', function() {
+ currentIndex = (currentIndex - 1 + images.length) % images.length;
+ showImage(currentIndex);
+ });
+
+ rightArrow.addEventListener('click', function() {
+ currentIndex = (currentIndex + 1) % images.length;
+ showImage(currentIndex);
+ });
+ }
+
+ // Initial display
+ showImage(currentIndex);
+ });
+ </script>
+ <section class="event-gallery">
+ <div class="inner py-xl">
+ <h2 class="text-center text-white">Inside Community Over Code</h2>
+ <div id="gallery-wrapper" class="gallery-wrapper">
+ <div id="gallery-images" class="gallery-images cf">
+ <div class="gallery-image">
+ <img src="/events/glasgow-2026/gallery/mosaic-1.jpg" alt="Gallery image for Community Over Code Glasgow 2026" class="gallery-image-item">
+ </div>
+ <div class="gallery-image">
+ <img src="/events/glasgow-2026/gallery/mosaic-2.jpg" alt="Gallery image for Community Over Code Glasgow 2026" class="gallery-image-item">
+ </div>
+ <div class="gallery-image">
+ <img src="/events/glasgow-2026/gallery/mosaic-3.jpg" alt="Gallery image for Community Over Code Glasgow 2026" class="gallery-image-item">
+ </div>
+ <div class="gallery-image">
+ <img src="/events/glasgow-2026/gallery/mosaic-4.jpg" alt="Gallery image for Community Over Code Glasgow 2026" class="gallery-image-item">
+ </div>
+ <div class="gallery-image">
+ <img src="/events/glasgow-2026/gallery/mosaic-5.jpg" alt="Gallery image for Community Over Code Glasgow 2026" class="gallery-image-item">
+ </div>
+ </div>
+ </div>
+ </div>
+ </section>
+ <!--
+ NOTE: For this section to work, to update the sponsors.json file in the event directory.
+ - Add all of your sponsors to the appropriate category (diamond, gold, silver).
+ - Make sure to include the sponsor's name, logo URL, and link URL in the JSON file.
+ - update the asfdata.yaml file to include the path to your sponsors.json file under the sponsors key, using a unique key for your event (e.g., glasgow-2026).
+ - in the event landing page meta data, set the sponsorskey to match the key you used in asfdata.yaml (e.g., glasgow-2026)
+ -->
+ <section class="sponsors">
+ <div class="inner py-xl">
+ <h2 class="text-center">Event Sponsors</h2>
+ <div class="sponsor-logos-section py-large">
+ <h3 class="text-center">Platinum</h3>
+ <div class="sponsor-logos">
+ <div class="sponsor-logo">
+ <a href="https://www.aws.com" target="_blank" class="sponsor-link">
+ <img src="/images/sponsors/logo-aws.webp" loading="lazy" alt="AWS">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.bloomberg.com" target="_blank" class="sponsor-link">
+ <img src="/images/sponsors/logo-bloomberg.webp" loading="lazy" alt="Bloomberg">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.gradle.com" target="_blank" class="sponsor-link">
+ <img src="/images/sponsors/logo-gradle.webp" loading="lazy" alt="Gradle">
+ </a>
+ </div>
+ </div>
+ </div>
+ <div class="sponsor-logos-section py-large">
+ <h3 class="text-center">Gold</h3>
+ <div class="sponsor-logos sponsor-logos--gold">
+ <div class="sponsor-logo">
+ <a href="https://www.aws.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-aws.webp" loading="" alt="AWS">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.bloomberg.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-bloomberg.webp" loading="" alt="Bloomberg">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.gradle.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-gradle.webp" loading="" alt="Gradle">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.bloomberg.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-bloomberg.webp" loading="" alt="Bloomberg">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.gradle.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-gradle.webp" loading="" alt="Gradle">
+ </a>
+ </div>
+ </div>
+ </div>
+ <div class="sponsor-logos-section py-large">
+ <h3 class="text-center">Silver</h3>
+ <div class="sponsor-logos sponsor-logos--silver">
+ <div class="sponsor-logo">
+ <a href="https://www.aws.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-aws.webp" loading="" alt="AWS">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.bloomberg.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-bloomberg.webp" loading="" alt="Bloomberg">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.gradle.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-gradle.webp" loading="" alt="Gradle">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.bloomberg.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-bloomberg.webp" loading="" alt="Bloomberg">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.gradle.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-gradle.webp" loading="" alt="Gradle">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.aws.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-aws.webp" loading="" alt="AWS">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.bloomberg.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-bloomberg.webp" loading="" alt="Bloomberg">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.gradle.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-gradle.webp" loading="" alt="Gradle">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.bloomberg.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-bloomberg.webp" loading="" alt="Bloomberg">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.gradle.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-gradle.webp" loading="" alt="Gradle">
+ </a>
+ </div>
+ </div>
+ </div>
+ <div class="sponsor-logos-section py-large">
+ <h3 class="text-center">Bronze</h3>
+ <div class="sponsor-logos sponsor-logos--bronze">
+ <div class="sponsor-logo">
+ <a href="https://www.aws.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-aws.webp" loading="" alt="AWS">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.bloomberg.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-bloomberg.webp" loading="" alt="Bloomberg">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.gradle.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-gradle.webp" loading="" alt="Gradle">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.bloomberg.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-bloomberg.webp" loading="" alt="Bloomberg">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.gradle.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-gradle.webp" loading="" alt="Gradle">
+ </a>
+ </div>
+ </div>
+ </div>
+ <div class="sponsor-logos-section py-large">
+ <h3 class="text-center">Lightning Talks</h3>
+ <div class="sponsor-logos sponsor-logos--lightning_talks">
+ <div class="sponsor-logo">
+ <a href="https://www.aws.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-aws.webp" loading="" alt="AWS">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.bloomberg.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-bloomberg.webp" loading="" alt="Bloomberg">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.gradle.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-gradle.webp" loading="" alt="Gradle">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.bloomberg.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-bloomberg.webp" loading="" alt="Bloomberg">
+ </a>
+ </div>
+ <div class="sponsor-logo">
+ <a href="https://www.gradle.com" target="" class="sponsor-link">
+ <img src="/images/sponsors/logo-gradle.webp" loading="" alt="Gradle">
+ </a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </section>
+
+
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/glasgow-2026/lakehouse-day-glasgow.ezmd b/output/events/glasgow-2026/lakehouse-day-glasgow.ezmd
deleted file mode 100644
index e8cded8..0000000
--- a/output/events/glasgow-2026/lakehouse-day-glasgow.ezmd
+++ /dev/null
@@ -1,69 +0,0 @@
-title: Lakehouse Day Glasgow
-template: page-event-default
-ref: glasgow-2026
-eventLogo: /images/logos/CommunityOverCode_Logo_stacked-color.svg
-isColocatedEvent: true
-inPageNav: true
-
-## About Lakehouse Day
-
-Lakehouse Day 2026 is an all-day, multi-track conference co-located with Community Over Code Glasgow 2026. Taking place on October 10, the event is dedicated to all things related to open lakehouse technologies under the Apache Software Foundation (ASF) umbrella, with content supporting Apache Iceberg™, Apache Hudi, Apache Parquet™, Apache Gravitino, Apache Polaris™, and more.
-The goal of the event is to provide a place for the projects in and around the lakehouse ecosystem to network, connect, and drive innovation across the space.
-
-
----
-
-## Inside Lakehouse Day
-
-
-
----
-
-## Call for Presentations (CFP)
-
-The Call for Presentations will open in the Q1 2027! Sign up for the ASF Events newsletter to stay informed of key dates.
-
-### Session Formats
-
-* **Presentation:** xx minutes including Q&A
-* **Short presentation:** xx minutes including Q&A
-* **Lightning talks:** xx minutes
-
-### Questions?
-
-For questions about the CFP process, please contact
-
-<div class="hidden">
- The Call for Papers closed on March 20, 2026. See the Community Over Code page <link to be added> for timeline and additional information.
-</div>
-
----
-
-## Schedule
-
-**October 10, 2026**
-
-Schedule is coming in April!
-
-<div class="hidden">
- <p>Please note: This schedule is automatically displayed in British Summer Time (UTC+01:00). </p>
- <p>IMPORTANT NOTE: Timing of sessions and room locations are subject to change.</p>
- <a href="" class="btn">Register Now</a>
- <a href="">View the Lakehouse Day schedule</a> | <a href="">View the full Community Over Code schedule</a>
-</div>
-
----
-
-## Selection Committee
-
-| Name | Role | Company/Affiliation |
-| --- | --- | --- |
-| Danica Fine <br>_Community Representative_ | Selection Committee <br> Co-Chair | Snowflake |
-| JB Onofré <br>_Polaris PMC Member_ | Selection Committee <br>Co-Chair | Dremio |
-| Viktor Kessler <br>_Community Representative_ | Selection Committee | Vakamo |
-| Julien Le Dem <br>_Parquet PMC Member_ | Selection Committee | Datadog |
-| Matt Topol <br>_Iceberg PMC Member_ | Selection Committee | Columnar |
-| Justin Mclean <br>_Gravitino PMC Member_ | Selection Committee | Datastrato |
-| Vinoth Chandar <br>_XTable PPMC Member_ | Selection Committee | Onehouse |
-| Giannis Polyzos <br>_Fluss PPMC Member_ | Selection Committee | Ververica |
-| Jingsong Li <br>_Paimon PMC Member_ | Selection Committee | |
diff --git a/output/events/glasgow-2026/lakehouse-day-glasgow.html b/output/events/glasgow-2026/lakehouse-day-glasgow.html
new file mode 100644
index 0000000..5d1b93f
--- /dev/null
+++ b/output/events/glasgow-2026/lakehouse-day-glasgow.html
@@ -0,0 +1,299 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>Lakehouse Day Glasgow | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-glasgow-2026" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/events/glasgow-2026/register/">Register</a></li>
+ <li class="has-sub-menu">
+ <a href="#">Attend</a>
+ <ul class="sub-menu">
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/travel/">Travel</a></li>
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/why-attend/">Why Attend</a></li>
+ </ul>
+ </li>
+ <li class="has-sub-menu">
+ <a href="#">Co-located Events</a>
+ <ul class="sub-menu">
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/lakehouse-day-glasgow/">Lakehouse Day</a></li>
+ </ul>
+ </li>
+ <li><a href="/events/glasgow-2026/schedule/">Schedule</a></li>
+ <li><a href="/events/glasgow-2026/sponsorship/">Sponsor</a></li>
+ </ul>
+</nav> </header>
+
+
+
+
+ <div class="hero hero--single-event-default relative">
+ <div class="inner flex flex-vert-center py-xl relative z1 flex-gap-50 flex-col-reverse-800">
+ <div class="hero__content flex-1">
+ <div class="colo-label">Co-located Event</div>
+ <h1 class="hero__title">
+ Lakehouse Day Glasgow
+ </h1>
+ <h2 class="hero__default-subtitle">
+ Community Over Code
+ <span class="hero__subtitle"> Glasgow, UK</span>
+ </h2>
+ <div class="hero-event-dates">October 11-14, 2026</div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-color.svg" alt="Lakehouse Day Glasgow logo" class="hero__logo-image">
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner py-xl">
+ <div class="mb-medium cf">
+ <div class="float66 right" style="padding-left: 50px;">
+ <a class="breadcrumb" href="/events/glasgow-2026"><svg viewBox="0 0 24 24" width="16" height="16" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><polyline points="15 18 9 12 15 6"></polyline></svg> Back to Event Home</a>
+ </div>
+ </div>
+ <div class="cf flex-col-800">
+ <div id="in-page-nav" class="float33"></div>
+ <div class="float66 event-content">
+ <h2>About Lakehouse Day</h2>
+<p>Lakehouse Day 2026 is an all-day, multi-track conference co-located with Community Over Code Glasgow 2026. Taking place on October 10, the event is dedicated to all things related to open lakehouse technologies under the Apache Software Foundation (ASF) umbrella, with content supporting Apache Iceberg™, Apache Hudi, Apache Parquet™, Apache Gravitino, Apache Polaris™, and more.
+The goal of the event is to provide a place for the projects in and around the lakehouse ecosystem to network, connect, and drive innovation across the space.</p>
+<hr/>
+<h2>Inside Lakehouse Day</h2>
+<hr/>
+<h2>Call for Presentations (CFP)</h2>
+<p>The Call for Presentations will open in the Q1 2027! Sign up for the ASF Events newsletter to stay informed of key dates.</p>
+<h3>Session Formats</h3>
+<ul>
+<li><strong>Presentation:</strong> xx minutes including Q&A</li>
+<li><strong>Short presentation:</strong> xx minutes including Q&A</li>
+<li><strong>Lightning talks:</strong> xx minutes</li>
+</ul>
+<h3>Questions?</h3>
+<p>For questions about the CFP process, please contact</p>
+<div class="hidden">
+ The Call for Papers closed on March 20, 2026. See the Community Over Code page <link added="" be="" to=""/> for timeline and additional information.
+</div>
+<hr/>
+<h2>Schedule</h2>
+<p><strong>October 10, 2026</strong></p>
+<p>Schedule is coming in April!</p>
+<div class="hidden">
+<p>Please note: This schedule is automatically displayed in British Summer Time (UTC+01:00). </p>
+<p>IMPORTANT NOTE: Timing of sessions and room locations are subject to change.</p>
+<a class="btn" href="">Register Now</a>
+<a href="">View the Lakehouse Day schedule</a> | <a href="">View the full Community Over Code schedule</a>
+</div>
+<hr/>
+<h2>Selection Committee</h2>
+<table class="table">
+<thead>
+<tr>
+<th>Name</th>
+<th>Role</th>
+<th>Company/Affiliation</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Danica Fine <br/><em>Community Representative</em></td>
+<td>Selection Committee <br/> Co-Chair</td>
+<td>Snowflake</td>
+</tr>
+<tr>
+<td>JB Onofré <br/><em>Polaris PMC Member</em></td>
+<td>Selection Committee <br/>Co-Chair</td>
+<td>Dremio</td>
+</tr>
+<tr>
+<td>Viktor Kessler <br/><em>Community Representative</em></td>
+<td>Selection Committee</td>
+<td>Vakamo</td>
+</tr>
+<tr>
+<td>Julien Le Dem <br/><em>Parquet PMC Member</em></td>
+<td>Selection Committee</td>
+<td>Datadog</td>
+</tr>
+<tr>
+<td>Matt Topol <br/><em>Iceberg PMC Member</em></td>
+<td>Selection Committee</td>
+<td>Columnar</td>
+</tr>
+<tr>
+<td>Justin Mclean <br/><em>Gravitino PMC Member</em></td>
+<td>Selection Committee</td>
+<td>Datastrato</td>
+</tr>
+<tr>
+<td>Vinoth Chandar <br/><em>XTable PPMC Member</em></td>
+<td>Selection Committee</td>
+<td>Onehouse</td>
+</tr>
+<tr>
+<td>Giannis Polyzos <br/><em>Fluss PPMC Member</em></td>
+<td>Selection Committee</td>
+<td>Ververica</td>
+</tr>
+<tr>
+<td>Jingsong Li <br/><em>Paimon PMC Member</em></td>
+<td>Selection Committee</td>
+<td></td>
+</tr></tbody></table>
+
+ </div>
+ </div>
+ </div>
+ </section>
+ <script>
+ // Smooth scroll for in-page navigation
+ const navContainer = document.getElementById('in-page-nav');
+ if(navContainer) {
+ document.addEventListener('DOMContentLoaded', function() {
+ // generate in-page navigation based on h2
+ const content = document.querySelector('.event-content');
+ const headings = content.querySelectorAll('h2');
+ const nav = document.getElementById('in-page-nav');
+ if (headings.length > 0) {
+ const navList = document.createElement('ul');
+ headings.forEach(heading => {
+ const id = heading.textContent.trim().toLowerCase().replace(/\s+/g, '-');
+ heading.setAttribute('id', id);
+ const navItem = document.createElement('li');
+ const navLink = document.createElement('a');
+ navLink.setAttribute('href', `#${id}`);
+ navLink.textContent = heading.textContent;
+ navItem.appendChild(navLink);
+ navList.appendChild(navItem);
+ });
+ nav.appendChild(navList);
+ }
+
+ const links = document.querySelectorAll('#in-page-nav a');
+ links.forEach(link => {
+ link.addEventListener('click', function(e) {
+ e.preventDefault();
+ // in this loop, 'this' refers to the clicked link
+ // add class of current-section to the clicked link and remove from others
+ links.forEach(l => l.classList.remove('current-section'));
+ this.classList.add('current-section');
+ const targetId = this.getAttribute('href').substring(1);
+ const targetElement = document.getElementById(targetId);
+ if (targetElement) {
+ window.scrollTo({
+ top: targetElement.offsetTop - 100, // Adjust for fixed header
+ behavior: 'smooth'
+ });
+ }
+ });
+ });
+
+ // Highlight the current section in the navigation as the user scrolls
+ window.addEventListener('scroll', function() {
+ let currentSection = '';
+ headings.forEach(heading => {
+ const sectionTop = heading.offsetTop - 150; // Adjust for fixed header
+ if (window.scrollY >= sectionTop) {
+ currentSection = heading.getAttribute('id');
+ }
+ });
+ links.forEach(link => {
+ link.classList.remove('current-section');
+ if (link.getAttribute('href').substring(1) === currentSection) {
+ link.classList.add('current-section');
+ }
+ });
+ });
+ });
+ }
+ </script>
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/glasgow-2026/register.ezmd b/output/events/glasgow-2026/register.ezmd
deleted file mode 100644
index 8877c43..0000000
--- a/output/events/glasgow-2026/register.ezmd
+++ /dev/null
@@ -1,42 +0,0 @@
-title: Register
-template: page-event-default
-ref: glasgow-2026
-eventLogo: /images/logos/CommunityOverCode_Logo_stacked-color.svg
-inPageNav: true
-
-## Register for Community Over Code Glasgow 2026
-
-Registration will open in April 2026.
-
----
-
-## Timeline
-
-| | Early Bird <br> _April 13-June 28, 2026_ | Standard <br> _June 29-October 14, 2026_ |
-| --- | --- | --- |
-| General Attendees | $650 | $750 |
-| ASF Committers* | $250 | $250 |
-
-*ASF committers must register with their @apache.org email to receive the reduced rate.
-
-
----
-
-## What’s Included?
-
-Your registration includes:
-
-- All conference content within the Community Over Code conference umbrella – keynotes, conference sessions, colocated events, BoFs, and more
-- Expo Hall entry
-- Welcome coffee, lunch, morning and afternoon coffee & snacks
-- Conference t-shirt
-
----
-
-## Travel Assistance
-
-| | |
-| --- | --- |
-| Deadline to Submit | June 3, 2026 |
-| Amount | https://tac.apache.org/ |
-
diff --git a/output/events/glasgow-2026/register.html b/output/events/glasgow-2026/register.html
new file mode 100644
index 0000000..f1e0de0
--- /dev/null
+++ b/output/events/glasgow-2026/register.html
@@ -0,0 +1,264 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>Register | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-glasgow-2026" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/events/glasgow-2026/register/">Register</a></li>
+ <li class="has-sub-menu">
+ <a href="#">Attend</a>
+ <ul class="sub-menu">
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/travel/">Travel</a></li>
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/why-attend/">Why Attend</a></li>
+ </ul>
+ </li>
+ <li class="has-sub-menu">
+ <a href="#">Co-located Events</a>
+ <ul class="sub-menu">
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/lakehouse-day-glasgow/">Lakehouse Day</a></li>
+ </ul>
+ </li>
+ <li><a href="/events/glasgow-2026/schedule/">Schedule</a></li>
+ <li><a href="/events/glasgow-2026/sponsorship/">Sponsor</a></li>
+ </ul>
+</nav> </header>
+
+
+
+
+ <div class="hero hero--single-event-default relative">
+ <div class="inner flex flex-vert-center py-xl relative z1 flex-gap-50 flex-col-reverse-800">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Register
+ </h1>
+ <h2 class="hero__default-subtitle">
+ Community Over Code
+ <span class="hero__subtitle"> Glasgow, UK</span>
+ </h2>
+ <div class="hero-event-dates">October 11-14, 2026</div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-color.svg" alt="Register logo" class="hero__logo-image">
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner py-xl">
+ <div class="mb-medium cf">
+ <div class="float66 right" style="padding-left: 50px;">
+ <a class="breadcrumb" href="/events/glasgow-2026"><svg viewBox="0 0 24 24" width="16" height="16" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><polyline points="15 18 9 12 15 6"></polyline></svg> Back to Event Home</a>
+ </div>
+ </div>
+ <div class="cf flex-col-800">
+ <div id="in-page-nav" class="float33"></div>
+ <div class="float66 event-content">
+ <h2>Register for Community Over Code Glasgow 2026</h2>
+<p>Registration will open in April 2026.</p>
+<hr/>
+<h2>Timeline</h2>
+<table class="table">
+<thead>
+<tr>
+<th></th>
+<th>Early Bird <br/> <em>April 13-June 28, 2026</em></th>
+<th>Standard <br/> <em>June 29-October 14, 2026</em></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>General Attendees</td>
+<td>$650</td>
+<td>$750</td>
+</tr>
+<tr>
+<td>ASF Committers*</td>
+<td>$250</td>
+<td>$250</td>
+</tr></tbody></table>
+<p>*ASF committers must register with their @apache.org email to receive the reduced rate.</p>
+<hr/>
+<h2>What’s Included?</h2>
+<p>Your registration includes:</p>
+<ul>
+<li>All conference content within the Community Over Code conference umbrella – keynotes, conference sessions, colocated events, BoFs, and more</li>
+<li>Expo Hall entry</li>
+<li>Welcome coffee, lunch, morning and afternoon coffee & snacks</li>
+<li>Conference t-shirt</li>
+</ul>
+<hr/>
+<h2>Travel Assistance</h2>
+<table class="table">
+<thead>
+<tr>
+<th></th>
+<th></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Deadline to Submit</td>
+<td>June 3, 2026</td>
+</tr>
+<tr>
+<td>Amount</td>
+<td><a href="https://tac.apache.org/">https://tac.apache.org/</a></td>
+</tr></tbody></table>
+
+ </div>
+ </div>
+ </div>
+ </section>
+ <script>
+ // Smooth scroll for in-page navigation
+ const navContainer = document.getElementById('in-page-nav');
+ if(navContainer) {
+ document.addEventListener('DOMContentLoaded', function() {
+ // generate in-page navigation based on h2
+ const content = document.querySelector('.event-content');
+ const headings = content.querySelectorAll('h2');
+ const nav = document.getElementById('in-page-nav');
+ if (headings.length > 0) {
+ const navList = document.createElement('ul');
+ headings.forEach(heading => {
+ const id = heading.textContent.trim().toLowerCase().replace(/\s+/g, '-');
+ heading.setAttribute('id', id);
+ const navItem = document.createElement('li');
+ const navLink = document.createElement('a');
+ navLink.setAttribute('href', `#${id}`);
+ navLink.textContent = heading.textContent;
+ navItem.appendChild(navLink);
+ navList.appendChild(navItem);
+ });
+ nav.appendChild(navList);
+ }
+
+ const links = document.querySelectorAll('#in-page-nav a');
+ links.forEach(link => {
+ link.addEventListener('click', function(e) {
+ e.preventDefault();
+ // in this loop, 'this' refers to the clicked link
+ // add class of current-section to the clicked link and remove from others
+ links.forEach(l => l.classList.remove('current-section'));
+ this.classList.add('current-section');
+ const targetId = this.getAttribute('href').substring(1);
+ const targetElement = document.getElementById(targetId);
+ if (targetElement) {
+ window.scrollTo({
+ top: targetElement.offsetTop - 100, // Adjust for fixed header
+ behavior: 'smooth'
+ });
+ }
+ });
+ });
+
+ // Highlight the current section in the navigation as the user scrolls
+ window.addEventListener('scroll', function() {
+ let currentSection = '';
+ headings.forEach(heading => {
+ const sectionTop = heading.offsetTop - 150; // Adjust for fixed header
+ if (window.scrollY >= sectionTop) {
+ currentSection = heading.getAttribute('id');
+ }
+ });
+ links.forEach(link => {
+ link.classList.remove('current-section');
+ if (link.getAttribute('href').substring(1) === currentSection) {
+ link.classList.add('current-section');
+ }
+ });
+ });
+ });
+ }
+ </script>
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/glasgow-2026/schedule.ezmd b/output/events/glasgow-2026/schedule.ezmd
deleted file mode 100644
index bd83f75..0000000
--- a/output/events/glasgow-2026/schedule.ezmd
+++ /dev/null
@@ -1,33 +0,0 @@
-title: Schedule
-template: page-event-default
-ref: glasgow-2026
-eventLogo: /images/logos/CommunityOverCode_Logo_stacked-color.svg
-location: Glasgow, UK
-inPageNav: false
-
-## Schedule
-
-<div data-cvt-embed>
- <script async src="https://web.cvent.com/event_guest/v1/embed/72f871ec-e869-412d-bae0-f510690caa18.js"></script>
-</div>
-
----
-
-### October 11 - 14, 2026
-
-Schedule is coming in April!
-
-### Schedule at a glance:
-
-| | |
-| --- | --- |
-| **Sunday, October 11** | Keynotes & Sessions |
-| **Monday, October 12** | Keynotes & Sessions |
-| **Tuesday, October 13** | Keynotes & Sessions |
-| **Wednesday, October 14** | Keynotes & Sessions |
-
-<div style="display:none;">
- <p>Please note: This schedule is automatically displayed in **British Summer Time (UTC+01:00).** </p>
- <p>IMPORTANT NOTE: Timing of sessions and room locations are subject to change.</p>
- <a href="/events/glasgow-2026/register" class="btn">Register Now</a>
-</div>
\ No newline at end of file
diff --git a/output/events/glasgow-2026/schedule.html b/output/events/glasgow-2026/schedule.html
new file mode 100644
index 0000000..a6be3b4
--- /dev/null
+++ b/output/events/glasgow-2026/schedule.html
@@ -0,0 +1,250 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>Schedule | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-glasgow-2026" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/events/glasgow-2026/register/">Register</a></li>
+ <li class="has-sub-menu">
+ <a href="#">Attend</a>
+ <ul class="sub-menu">
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/travel/">Travel</a></li>
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/why-attend/">Why Attend</a></li>
+ </ul>
+ </li>
+ <li class="has-sub-menu">
+ <a href="#">Co-located Events</a>
+ <ul class="sub-menu">
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/lakehouse-day-glasgow/">Lakehouse Day</a></li>
+ </ul>
+ </li>
+ <li><a href="/events/glasgow-2026/schedule/">Schedule</a></li>
+ <li><a href="/events/glasgow-2026/sponsorship/">Sponsor</a></li>
+ </ul>
+</nav> </header>
+
+
+
+
+ <div class="hero hero--single-event-default relative">
+ <div class="inner flex flex-vert-center py-xl relative z1 flex-gap-50 flex-col-reverse-800">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Schedule
+ </h1>
+ <h2 class="hero__default-subtitle">
+ Community Over Code
+ <span class="hero__subtitle"> Glasgow, UK</span>
+ </h2>
+ <div class="hero-event-dates">October 11-14, 2026</div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-color.svg" alt="Schedule logo" class="hero__logo-image">
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner py-xl">
+ <div class="mb-medium cf">
+ <div class="float66 right" style="padding-left: 50px;">
+ <a class="breadcrumb" href="/events/glasgow-2026"><svg viewBox="0 0 24 24" width="16" height="16" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><polyline points="15 18 9 12 15 6"></polyline></svg> Back to Event Home</a>
+ </div>
+ </div>
+ <div class="cf flex-col-800">
+ <div class="float33 full-width-800"> </div>
+ <div class="float66 event-content">
+ <h2>Schedule</h2>
+<div data-cvt-embed="">
+<script async="" src="https://web.cvent.com/event_guest/v1/embed/72f871ec-e869-412d-bae0-f510690caa18.js"></script>
+</div>
+<hr/>
+<h3>October 11 - 14, 2026</h3>
+<p>Schedule is coming in April!</p>
+<h3>Schedule at a glance:</h3>
+<table class="table">
+<thead>
+<tr>
+<th></th>
+<th></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><strong>Sunday, October 11</strong></td>
+<td>Keynotes & Sessions</td>
+</tr>
+<tr>
+<td><strong>Monday, October 12</strong></td>
+<td>Keynotes & Sessions</td>
+</tr>
+<tr>
+<td><strong>Tuesday, October 13</strong></td>
+<td>Keynotes & Sessions</td>
+</tr>
+<tr>
+<td><strong>Wednesday, October 14</strong></td>
+<td>Keynotes & Sessions</td>
+</tr></tbody></table>
+<div style="display:none;">
+<p>Please note: This schedule is automatically displayed in **British Summer Time (UTC+01:00).** </p>
+<p>IMPORTANT NOTE: Timing of sessions and room locations are subject to change.</p>
+<a class="btn" href="/events/glasgow-2026/register">Register Now</a>
+</div>
+
+ </div>
+ </div>
+ </div>
+ </section>
+ <script>
+ // Smooth scroll for in-page navigation
+ const navContainer = document.getElementById('in-page-nav');
+ if(navContainer) {
+ document.addEventListener('DOMContentLoaded', function() {
+ // generate in-page navigation based on h2
+ const content = document.querySelector('.event-content');
+ const headings = content.querySelectorAll('h2');
+ const nav = document.getElementById('in-page-nav');
+ if (headings.length > 0) {
+ const navList = document.createElement('ul');
+ headings.forEach(heading => {
+ const id = heading.textContent.trim().toLowerCase().replace(/\s+/g, '-');
+ heading.setAttribute('id', id);
+ const navItem = document.createElement('li');
+ const navLink = document.createElement('a');
+ navLink.setAttribute('href', `#${id}`);
+ navLink.textContent = heading.textContent;
+ navItem.appendChild(navLink);
+ navList.appendChild(navItem);
+ });
+ nav.appendChild(navList);
+ }
+
+ const links = document.querySelectorAll('#in-page-nav a');
+ links.forEach(link => {
+ link.addEventListener('click', function(e) {
+ e.preventDefault();
+ // in this loop, 'this' refers to the clicked link
+ // add class of current-section to the clicked link and remove from others
+ links.forEach(l => l.classList.remove('current-section'));
+ this.classList.add('current-section');
+ const targetId = this.getAttribute('href').substring(1);
+ const targetElement = document.getElementById(targetId);
+ if (targetElement) {
+ window.scrollTo({
+ top: targetElement.offsetTop - 100, // Adjust for fixed header
+ behavior: 'smooth'
+ });
+ }
+ });
+ });
+
+ // Highlight the current section in the navigation as the user scrolls
+ window.addEventListener('scroll', function() {
+ let currentSection = '';
+ headings.forEach(heading => {
+ const sectionTop = heading.offsetTop - 150; // Adjust for fixed header
+ if (window.scrollY >= sectionTop) {
+ currentSection = heading.getAttribute('id');
+ }
+ });
+ links.forEach(link => {
+ link.classList.remove('current-section');
+ if (link.getAttribute('href').substring(1) === currentSection) {
+ link.classList.add('current-section');
+ }
+ });
+ });
+ });
+ }
+ </script>
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/glasgow-2026/sponsorship.ezmd b/output/events/glasgow-2026/sponsorship.ezmd
deleted file mode 100644
index da2c77d..0000000
--- a/output/events/glasgow-2026/sponsorship.ezmd
+++ /dev/null
@@ -1,11 +0,0 @@
-title: Sponsorship
-template: page-event-default
-ref: glasgow-2026
-eventLogo: /images/logos/CommunityOverCode_Logo_stacked-color.svg
-inPageNav: false
-
-## Be a part of our community as a sponsor
-
-<a href="/pdfs/Community-Over-Code-Prospectus-2026.pdf" class="btn">Contact Us</a>
-
-Community Over Code is the primary gathering of the collective ASF community worldwide; positioning your brand alongside the world’s largest open source foundation is one of the most effective ways to gain visibility and competitive advantage. Sponsors who showcase their products, people, and community support benefit by extending their brands to the greater Apache community, engaging with industry influencers, and connecting with potential future collaborators. Many sponsors consider AS [...]
diff --git a/output/events/glasgow-2026/sponsorship.html b/output/events/glasgow-2026/sponsorship.html
new file mode 100644
index 0000000..13ee19b
--- /dev/null
+++ b/output/events/glasgow-2026/sponsorship.html
@@ -0,0 +1,216 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>Sponsorship | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-glasgow-2026" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/events/glasgow-2026/register/">Register</a></li>
+ <li class="has-sub-menu">
+ <a href="#">Attend</a>
+ <ul class="sub-menu">
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/travel/">Travel</a></li>
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/why-attend/">Why Attend</a></li>
+ </ul>
+ </li>
+ <li class="has-sub-menu">
+ <a href="#">Co-located Events</a>
+ <ul class="sub-menu">
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/lakehouse-day-glasgow/">Lakehouse Day</a></li>
+ </ul>
+ </li>
+ <li><a href="/events/glasgow-2026/schedule/">Schedule</a></li>
+ <li><a href="/events/glasgow-2026/sponsorship/">Sponsor</a></li>
+ </ul>
+</nav> </header>
+
+
+
+
+ <div class="hero hero--single-event-default relative">
+ <div class="inner flex flex-vert-center py-xl relative z1 flex-gap-50 flex-col-reverse-800">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Sponsorship
+ </h1>
+ <h2 class="hero__default-subtitle">
+ Community Over Code
+ <span class="hero__subtitle"> Glasgow, UK</span>
+ </h2>
+ <div class="hero-event-dates">October 11-14, 2026</div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-color.svg" alt="Sponsorship logo" class="hero__logo-image">
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner py-xl">
+ <div class="mb-medium cf">
+ <div class="float66 right" style="padding-left: 50px;">
+ <a class="breadcrumb" href="/events/glasgow-2026"><svg viewBox="0 0 24 24" width="16" height="16" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><polyline points="15 18 9 12 15 6"></polyline></svg> Back to Event Home</a>
+ </div>
+ </div>
+ <div class="cf flex-col-800">
+ <div class="float33 full-width-800"> </div>
+ <div class="float66 event-content">
+ <h2>Be a part of our community as a sponsor</h2>
+<p><a class="btn" href="/pdfs/Community-Over-Code-Prospectus-2026.pdf">Contact Us</a></p>
+<p>Community Over Code is the primary gathering of the collective ASF community worldwide; positioning your brand alongside the world’s largest open source foundation is one of the most effective ways to gain visibility and competitive advantage. Sponsors who showcase their products, people, and community support benefit by extending their brands to the greater Apache community, engaging with industry influencers, and connecting with potential future collaborators. Many sponsors co [...]
+
+ </div>
+ </div>
+ </div>
+ </section>
+ <script>
+ // Smooth scroll for in-page navigation
+ const navContainer = document.getElementById('in-page-nav');
+ if(navContainer) {
+ document.addEventListener('DOMContentLoaded', function() {
+ // generate in-page navigation based on h2
+ const content = document.querySelector('.event-content');
+ const headings = content.querySelectorAll('h2');
+ const nav = document.getElementById('in-page-nav');
+ if (headings.length > 0) {
+ const navList = document.createElement('ul');
+ headings.forEach(heading => {
+ const id = heading.textContent.trim().toLowerCase().replace(/\s+/g, '-');
+ heading.setAttribute('id', id);
+ const navItem = document.createElement('li');
+ const navLink = document.createElement('a');
+ navLink.setAttribute('href', `#${id}`);
+ navLink.textContent = heading.textContent;
+ navItem.appendChild(navLink);
+ navList.appendChild(navItem);
+ });
+ nav.appendChild(navList);
+ }
+
+ const links = document.querySelectorAll('#in-page-nav a');
+ links.forEach(link => {
+ link.addEventListener('click', function(e) {
+ e.preventDefault();
+ // in this loop, 'this' refers to the clicked link
+ // add class of current-section to the clicked link and remove from others
+ links.forEach(l => l.classList.remove('current-section'));
+ this.classList.add('current-section');
+ const targetId = this.getAttribute('href').substring(1);
+ const targetElement = document.getElementById(targetId);
+ if (targetElement) {
+ window.scrollTo({
+ top: targetElement.offsetTop - 100, // Adjust for fixed header
+ behavior: 'smooth'
+ });
+ }
+ });
+ });
+
+ // Highlight the current section in the navigation as the user scrolls
+ window.addEventListener('scroll', function() {
+ let currentSection = '';
+ headings.forEach(heading => {
+ const sectionTop = heading.offsetTop - 150; // Adjust for fixed header
+ if (window.scrollY >= sectionTop) {
+ currentSection = heading.getAttribute('id');
+ }
+ });
+ links.forEach(link => {
+ link.classList.remove('current-section');
+ if (link.getAttribute('href').substring(1) === currentSection) {
+ link.classList.add('current-section');
+ }
+ });
+ });
+ });
+ }
+ </script>
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/glasgow-2026/travel.ezmd b/output/events/glasgow-2026/travel.ezmd
deleted file mode 100644
index d84ea74..0000000
--- a/output/events/glasgow-2026/travel.ezmd
+++ /dev/null
@@ -1,56 +0,0 @@
-title: Travel
-template: page-event-default
-ref: glasgow-2026
-eventLogo: /images/logos/CommunityOverCode_Logo_stacked-color.svg
-inPageNav: true
-
-## Travel & Venue
-
-### Conference Venue
-[[]Hilton Glasgow](https://www.hilton.com/en/hotels/glahitw-hilton-glasgow/) <br>1 William St <br>Glasgow G3 8HT, United Kingdom
-
-![[]Hilton Glasgow](../images/pellier-3461.webp)
-
----
-
-## Conference Accessibility
-
-Community Over Code strives to be a welcoming, inclusive, and accessible environment for all, regardless of ability. Participants requiring special accommodations should provide details in their registration and/or by emailing us at planners@apachecon.com. This information will be kept private and only be shared with individuals who need to know to secure these accommodations.
-
-### Hotel Information
-
-The ASF has contracted with the hotel to receive discounted rates for Community Over Code attendees. Discounted rates will be available through October 1, 2026, or when the room block is full — whichever comes first.
-
-When booking, use code TEST to receive the discounted rate.
-
-Hilton Glasgow
-1 William St
-Glasgow G3 8HT, United Kingdom
-
-
-#### Discounted Rooms
-| | |
-| --- | --- |
-| 1 King Bed/2 Queen Beds| $219 USD |
-| 1 King Bed/2 Queen Beds with City View | $229 USD |
-| King Studio Suite | $239 USD |
-
-<a class="btn" href="https://www.hilton.com/en/hotels/glahitw-hilton-glasgow/rooms/">Book Your Room</a>
-
----
-
-### REAL ID Compliance
-
-Starting May 7, 2025, all U.S. travelers flying domestically will need a REAL ID-compliant driver’s license or an acceptable alternative (such as a passport) to board their flight. Please ensure your ID meets the requirements to avoid travel delays. For more information, visit DHS REAL ID Information.
-
-Visa Information
-
-If you are traveling to the U.S. from outside the country, please check the U.S. Visa website to determine if you need a visa to enter the United States. Be sure to apply well in advance of your travels to avoid delays.
-
-### Getting There
-
-| | |
-| --- | --- |
-| Airport Information | The closest airport is Glasgow International Airport (GLA). It’s approximately 15 minutes from the airport to the hotel/venue. |
-| Public Transportation | Bus, subway, and train options are available in Glasgow. Learn more here. |
-| Parking | **Self-parking**: £16.50 per day <br>**On-siteValet parking:** Not available <br>**EV charging:** On-site <br>**Secured:** Available <br>**Covered:** Available <br>**In/out privileges:** Available <br>**Parking details:** 16.5/night guests, 3.3/h, max 1.8m |
\ No newline at end of file
diff --git a/output/events/glasgow-2026/travel.html b/output/events/glasgow-2026/travel.html
new file mode 100644
index 0000000..d04fbd4
--- /dev/null
+++ b/output/events/glasgow-2026/travel.html
@@ -0,0 +1,274 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>Travel | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-glasgow-2026" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/events/glasgow-2026/register/">Register</a></li>
+ <li class="has-sub-menu">
+ <a href="#">Attend</a>
+ <ul class="sub-menu">
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/travel/">Travel</a></li>
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/why-attend/">Why Attend</a></li>
+ </ul>
+ </li>
+ <li class="has-sub-menu">
+ <a href="#">Co-located Events</a>
+ <ul class="sub-menu">
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/lakehouse-day-glasgow/">Lakehouse Day</a></li>
+ </ul>
+ </li>
+ <li><a href="/events/glasgow-2026/schedule/">Schedule</a></li>
+ <li><a href="/events/glasgow-2026/sponsorship/">Sponsor</a></li>
+ </ul>
+</nav> </header>
+
+
+
+
+ <div class="hero hero--single-event-default relative">
+ <div class="inner flex flex-vert-center py-xl relative z1 flex-gap-50 flex-col-reverse-800">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Travel
+ </h1>
+ <h2 class="hero__default-subtitle">
+ Community Over Code
+ <span class="hero__subtitle"> Glasgow, UK</span>
+ </h2>
+ <div class="hero-event-dates">October 11-14, 2026</div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-color.svg" alt="Travel logo" class="hero__logo-image">
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner py-xl">
+ <div class="mb-medium cf">
+ <div class="float66 right" style="padding-left: 50px;">
+ <a class="breadcrumb" href="/events/glasgow-2026"><svg viewBox="0 0 24 24" width="16" height="16" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><polyline points="15 18 9 12 15 6"></polyline></svg> Back to Event Home</a>
+ </div>
+ </div>
+ <div class="cf flex-col-800">
+ <div id="in-page-nav" class="float33"></div>
+ <div class="float66 event-content">
+ <h2>Travel & Venue</h2>
+<h3>Conference Venue</h3>
+<p><a href="https://www.hilton.com/en/hotels/glahitw-hilton-glasgow/">Hilton Glasgow</a> <br/>1 William St <br/>Glasgow G3 8HT, United Kingdom</p>
+<p><img alt="Hilton Glasgow" src="../images/pellier-3461.webp"/></p>
+<hr/>
+<h2>Conference Accessibility</h2>
+<p>Community Over Code strives to be a welcoming, inclusive, and accessible environment for all, regardless of ability. Participants requiring special accommodations should provide details in their registration and/or by emailing us at <a href="mailto:planners@apachecon.com">planners@apachecon.com</a>. This information will be kept private and only be shared with individuals who need to know to secure these accommodations.</p>
+<h3>Hotel Information</h3>
+<p>The ASF has contracted with the hotel to receive discounted rates for Community Over Code attendees. Discounted rates will be available through October 1, 2026, or when the room block is full — whichever comes first.</p>
+<p>When booking, use code TEST to receive the discounted rate.</p>
+<p>Hilton Glasgow
+1 William St
+Glasgow G3 8HT, United Kingdom</p>
+<h4>Discounted Rooms</h4>
+<table class="table">
+<thead>
+<tr>
+<th></th>
+<th></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>1 King Bed/2 Queen Beds</td>
+<td>$219 USD</td>
+</tr>
+<tr>
+<td>1 King Bed/2 Queen Beds with City View</td>
+<td>$229 USD</td>
+</tr>
+<tr>
+<td>King Studio Suite</td>
+<td>$239 USD</td>
+</tr></tbody></table>
+<p><a class="btn" href="https://www.hilton.com/en/hotels/glahitw-hilton-glasgow/rooms/">Book Your Room</a></p>
+<hr/>
+<h3>REAL ID Compliance</h3>
+<p>Starting May 7, 2025, all U.S. travelers flying domestically will need a REAL ID-compliant driver’s license or an acceptable alternative (such as a passport) to board their flight. Please ensure your ID meets the requirements to avoid travel delays. For more information, visit DHS REAL ID Information.</p>
+<p>Visa Information</p>
+<p>If you are traveling to the U.S. from outside the country, please check the U.S. Visa website to determine if you need a visa to enter the United States. Be sure to apply well in advance of your travels to avoid delays.</p>
+<h3>Getting There</h3>
+<table class="table">
+<thead>
+<tr>
+<th></th>
+<th></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Airport Information</td>
+<td>The closest airport is Glasgow International Airport (GLA). It’s approximately 15 minutes from the airport to the hotel/venue.</td>
+</tr>
+<tr>
+<td>Public Transportation</td>
+<td>Bus, subway, and train options are available in Glasgow. Learn more here.</td>
+</tr>
+<tr>
+<td>Parking</td>
+<td><strong>Self-parking</strong>: £16.50 per day <br/><strong>On-siteValet parking:</strong> Not available <br/><strong>EV charging:</strong> On-site <br/><strong>Secured:</strong> Available <br/><strong>Covered:</strong> Available <br/><strong>In/out privileges:</strong> Available <br/><strong>Parking details:</strong> 16.5/night guests, 3.3/h, max 1.8m</td>
+</tr></tbody></table>
+
+ </div>
+ </div>
+ </div>
+ </section>
+ <script>
+ // Smooth scroll for in-page navigation
+ const navContainer = document.getElementById('in-page-nav');
+ if(navContainer) {
+ document.addEventListener('DOMContentLoaded', function() {
+ // generate in-page navigation based on h2
+ const content = document.querySelector('.event-content');
+ const headings = content.querySelectorAll('h2');
+ const nav = document.getElementById('in-page-nav');
+ if (headings.length > 0) {
+ const navList = document.createElement('ul');
+ headings.forEach(heading => {
+ const id = heading.textContent.trim().toLowerCase().replace(/\s+/g, '-');
+ heading.setAttribute('id', id);
+ const navItem = document.createElement('li');
+ const navLink = document.createElement('a');
+ navLink.setAttribute('href', `#${id}`);
+ navLink.textContent = heading.textContent;
+ navItem.appendChild(navLink);
+ navList.appendChild(navItem);
+ });
+ nav.appendChild(navList);
+ }
+
+ const links = document.querySelectorAll('#in-page-nav a');
+ links.forEach(link => {
+ link.addEventListener('click', function(e) {
+ e.preventDefault();
+ // in this loop, 'this' refers to the clicked link
+ // add class of current-section to the clicked link and remove from others
+ links.forEach(l => l.classList.remove('current-section'));
+ this.classList.add('current-section');
+ const targetId = this.getAttribute('href').substring(1);
+ const targetElement = document.getElementById(targetId);
+ if (targetElement) {
+ window.scrollTo({
+ top: targetElement.offsetTop - 100, // Adjust for fixed header
+ behavior: 'smooth'
+ });
+ }
+ });
+ });
+
+ // Highlight the current section in the navigation as the user scrolls
+ window.addEventListener('scroll', function() {
+ let currentSection = '';
+ headings.forEach(heading => {
+ const sectionTop = heading.offsetTop - 150; // Adjust for fixed header
+ if (window.scrollY >= sectionTop) {
+ currentSection = heading.getAttribute('id');
+ }
+ });
+ links.forEach(link => {
+ link.classList.remove('current-section');
+ if (link.getAttribute('href').substring(1) === currentSection) {
+ link.classList.add('current-section');
+ }
+ });
+ });
+ });
+ }
+ </script>
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/glasgow-2026/why-attend.ezmd b/output/events/glasgow-2026/why-attend.ezmd
deleted file mode 100644
index ff42584..0000000
--- a/output/events/glasgow-2026/why-attend.ezmd
+++ /dev/null
@@ -1,36 +0,0 @@
-title: Attend
-template: page-event-default
-ref: glasgow-2026
-inPageNav: true
-eventLogo: /images/logos/CommunityOverCode_Logo_stacked-color.svg
-
-## The Apache way has powered the internet for over 25 years. This is where it happens.
-
-Community Over Code is the official conference of the Apache Software Foundation — the only event built entirely around the projects, people, and principles that define how open source gets done at scale. If you build with Apache software, contribute to ASF projects, or care about the future of vendor-neutral open source, this is your gathering.
-
----
-
-## Your people are here.
-
-Community Over Code draws committers, contributors, Project Management Committee members, and open source practitioners from across the global Apache ecosystem. Attendees range from first-time contributors finding their footing to long-tenured ASF members who have been shaping the foundation for decades.
-
-This isn't a general-purpose tech conference. The people in this room understand consensus-driven governance, the Apache License, the incubation process, and what it means to build software for the public good — because they live it.
-
-“The ASF came together as people first, not as a Foundation.”
-
----
-
-## Four days of content built around the Apache ecosystem.
-
-Sessions span multiple tracks, organized by ASF projects and related communities — meaning you get depth, not just breadth. Expect technical deep-dives, real-world case studies, keynotes from ASF leadership, the annual State of the Feather address, hackathon space, and nightly Birds of a Feather sessions for freeform discussion and planning across projects.
-
-Topics typically include big data, search, IoT, fintech, geospatial, community health, open source governance, and emerging areas like AI and data infrastructure — all grounded in what's actually shipping inside Apache projects.
-
----
-
-## Vendor-neutral. Volunteer-driven. Genuinely collaborative.
-
-What makes Community Over Code different isn't the schedule — it's the culture. The Apache community is one of the oldest and most respected in open source, built on a foundation of merit, transparency, and mutual respect. That ethos shows up in every hallway conversation, every BoF session, every impromptu whiteboard session between talks.
-
-Whether you're representing a company that ships Apache software or contributing purely on your own time, you're an equal here. That's the Apache way — and it's been working since before most of today's tech companies existed.
-
diff --git a/output/events/glasgow-2026/why-attend.html b/output/events/glasgow-2026/why-attend.html
new file mode 100644
index 0000000..d24b574
--- /dev/null
+++ b/output/events/glasgow-2026/why-attend.html
@@ -0,0 +1,228 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>Attend | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body class="body-glasgow-2026" >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/events/glasgow-2026/register/">Register</a></li>
+ <li class="has-sub-menu">
+ <a href="#">Attend</a>
+ <ul class="sub-menu">
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/travel/">Travel</a></li>
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/why-attend/">Why Attend</a></li>
+ </ul>
+ </li>
+ <li class="has-sub-menu">
+ <a href="#">Co-located Events</a>
+ <ul class="sub-menu">
+ <li class="sub-menu-item"><a href="/events/glasgow-2026/lakehouse-day-glasgow/">Lakehouse Day</a></li>
+ </ul>
+ </li>
+ <li><a href="/events/glasgow-2026/schedule/">Schedule</a></li>
+ <li><a href="/events/glasgow-2026/sponsorship/">Sponsor</a></li>
+ </ul>
+</nav> </header>
+
+
+
+
+ <div class="hero hero--single-event-default relative">
+ <div class="inner flex flex-vert-center py-xl relative z1 flex-gap-50 flex-col-reverse-800">
+ <div class="hero__content flex-1">
+ <h1 class="hero__title">
+ Attend
+ </h1>
+ <h2 class="hero__default-subtitle">
+ Community Over Code
+ <span class="hero__subtitle"> Glasgow, UK</span>
+ </h2>
+ <div class="hero-event-dates">October 11-14, 2026</div>
+ </div>
+ <div class="hero__logo flex-1">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-color.svg" alt="Attend logo" class="hero__logo-image">
+ </div>
+ </div>
+ </div>
+ <section class="maincontent maincontent--single-event">
+ <div class="inner py-xl">
+ <div class="mb-medium cf">
+ <div class="float66 right" style="padding-left: 50px;">
+ <a class="breadcrumb" href="/events/glasgow-2026"><svg viewBox="0 0 24 24" width="16" height="16" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><polyline points="15 18 9 12 15 6"></polyline></svg> Back to Event Home</a>
+ </div>
+ </div>
+ <div class="cf flex-col-800">
+ <div id="in-page-nav" class="float33"></div>
+ <div class="float66 event-content">
+ <h2>The Apache way has powered the internet for over 25 years. This is where it happens.</h2>
+<p>Community Over Code is the official conference of the Apache Software Foundation — the only event built entirely around the projects, people, and principles that define how open source gets done at scale. If you build with Apache software, contribute to ASF projects, or care about the future of vendor-neutral open source, this is your gathering.</p>
+<hr/>
+<h2>Your people are here.</h2>
+<p>Community Over Code draws committers, contributors, Project Management Committee members, and open source practitioners from across the global Apache ecosystem. Attendees range from first-time contributors finding their footing to long-tenured ASF members who have been shaping the foundation for decades.</p>
+<p>This isn't a general-purpose tech conference. The people in this room understand consensus-driven governance, the Apache License, the incubation process, and what it means to build software for the public good — because they live it.</p>
+<p>“The ASF came together as people first, not as a Foundation.”</p>
+<hr/>
+<h2>Four days of content built around the Apache ecosystem.</h2>
+<p>Sessions span multiple tracks, organized by ASF projects and related communities — meaning you get depth, not just breadth. Expect technical deep-dives, real-world case studies, keynotes from ASF leadership, the annual State of the Feather address, hackathon space, and nightly Birds of a Feather sessions for freeform discussion and planning across projects.</p>
+<p>Topics typically include big data, search, IoT, fintech, geospatial, community health, open source governance, and emerging areas like AI and data infrastructure — all grounded in what's actually shipping inside Apache projects.</p>
+<hr/>
+<h2>Vendor-neutral. Volunteer-driven. Genuinely collaborative.</h2>
+<p>What makes Community Over Code different isn't the schedule — it's the culture. The Apache community is one of the oldest and most respected in open source, built on a foundation of merit, transparency, and mutual respect. That ethos shows up in every hallway conversation, every BoF session, every impromptu whiteboard session between talks.</p>
+<p>Whether you're representing a company that ships Apache software or contributing purely on your own time, you're an equal here. That's the Apache way — and it's been working since before most of today's tech companies existed.</p>
+
+ </div>
+ </div>
+ </div>
+ </section>
+ <script>
+ // Smooth scroll for in-page navigation
+ const navContainer = document.getElementById('in-page-nav');
+ if(navContainer) {
+ document.addEventListener('DOMContentLoaded', function() {
+ // generate in-page navigation based on h2
+ const content = document.querySelector('.event-content');
+ const headings = content.querySelectorAll('h2');
+ const nav = document.getElementById('in-page-nav');
+ if (headings.length > 0) {
+ const navList = document.createElement('ul');
+ headings.forEach(heading => {
+ const id = heading.textContent.trim().toLowerCase().replace(/\s+/g, '-');
+ heading.setAttribute('id', id);
+ const navItem = document.createElement('li');
+ const navLink = document.createElement('a');
+ navLink.setAttribute('href', `#${id}`);
+ navLink.textContent = heading.textContent;
+ navItem.appendChild(navLink);
+ navList.appendChild(navItem);
+ });
+ nav.appendChild(navList);
+ }
+
+ const links = document.querySelectorAll('#in-page-nav a');
+ links.forEach(link => {
+ link.addEventListener('click', function(e) {
+ e.preventDefault();
+ // in this loop, 'this' refers to the clicked link
+ // add class of current-section to the clicked link and remove from others
+ links.forEach(l => l.classList.remove('current-section'));
+ this.classList.add('current-section');
+ const targetId = this.getAttribute('href').substring(1);
+ const targetElement = document.getElementById(targetId);
+ if (targetElement) {
+ window.scrollTo({
+ top: targetElement.offsetTop - 100, // Adjust for fixed header
+ behavior: 'smooth'
+ });
+ }
+ });
+ });
+
+ // Highlight the current section in the navigation as the user scrolls
+ window.addEventListener('scroll', function() {
+ let currentSection = '';
+ headings.forEach(heading => {
+ const sectionTop = heading.offsetTop - 150; // Adjust for fixed header
+ if (window.scrollY >= sectionTop) {
+ currentSection = heading.getAttribute('id');
+ }
+ });
+ links.forEach(link => {
+ link.classList.remove('current-section');
+ if (link.getAttribute('href').substring(1) === currentSection) {
+ link.classList.add('current-section');
+ }
+ });
+ });
+ });
+ }
+ </script>
+ <!-- Footer -->
+ <div class="footer-top-border"></div>
+ <footer>
+ <div class="inner py-large flex flex-gap-50">
+ <div class="flex flex-column flex-gap-20 flex-1 text-white">
+ <img src="/images/logos/CommunityOverCode_Logo_stacked-white.webp" width="200" alt="Apache Software Foundation">
+ <p>The Apache® Software Foundation (The ASF) provides software for the public good, guided by community over code. Learn more at apache.org.</p>
+ <p>Apache and the Apache logo are trademarks of The Apache Software Foundation.</p>
+ <p>The Apache® Software Foundation is a 501(c)(3) nonprofit organization. Tax ID # 47-0825376</p>
+ </div>
+ <div class="flex flex-column flex-gap-20 flex-1">
+ <nav class="footer-nav">
+ <ul class="flex flex-column flex-gap-10 ">
+ <li><a href="/events">Events</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ <li><a href="/about#contact-section">Contact</a></li>
+ <li><a href="/code-of-conduct">Code of Conduct</a></li>
+ <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="flex flex-column flex-gap-20 footer-events flex-1">
+ <h2 class="text-heading-light">ASF Events</h2>
+ <div class="card card--footer">
+ <a href="/events/asia-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">August 7-9, 2026</div>
+ <h4>Community Over Code Asia 2026</h4>
+ </div>
+ </a>
+ </div>
+ <div class="card card--footer">
+ <a href="/events/glasgow-2026">
+ <div class="card-inner flex flex-column">
+ <div class="event-card__date">October 11-14, 2026</div>
+ <h4>Community Over Code Glasgow 2026</h4>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </footer>
+ </body>
+</html>
+
+
diff --git a/output/events/index.ezmd b/output/events/index.ezmd
deleted file mode 100644
index 5a5418f..0000000
--- a/output/events/index.ezmd
+++ /dev/null
@@ -1,45 +0,0 @@
-title: Events
-description: Community Over Code is the official conference of the Apache Software Foundation (ASF), bringing together the communities behind Apache open source projects. The event features project-specific technical tracks, real-world production use cases, and sessions on Apache governance, release management, security practices, and open source sustainability.
-
-
-<div class="hero_events flex-1">
- <div class="events-wrapper upcoming-events mb-xl">
- <h2 class="text-center">Upcoming Events</h2>
- [if-any events]<div class="events-grid grid flex-gap-20">
- [for events]<div class="co-located-event-card card">
- <div class="card-inner">
- <div class="colo-image-wrapper">
- <!-- the following can have no spaces or it will fail. -->
- [if-any events.image]<img src="[events.image]" alt="[events.name]" width="333" height="187" loading="lazy">[else]<img width="333" height="187" src="/images/events/event-card-default.webp" loading="lazy" alt="Community Over Code">[end]
- </div>
- <div class="event-card__content">
- <div class="event-card__location">[events.location]</div>
- <div class="event-card__date">[events.displayDate]</div>
- <h4>[events.name]</h4>
- <div><a href="[events.href]">View Details</a></div>
- </div>
- </div>
- </div>[end]
- </div>[else]<p class="text-center">There are no upcoming events at this time.</p>[end]
- </div>
- <div class="events-wrapper archived-events">
- <input type="text" name="timestamp" value="<script>document.write(Date.now())</script>" hidden>
- <h2 class="text-center">Past Events</h2>
- [if-any archived_events]<div class="events-grid grid flex-gap-20">
- [for archived_events]<div class="co-located-event-card card">
- <div class="card-inner">
- <div class="colo-image-wrapper">
- <!-- the following can have no spaces or it will fail. -->
- [if-any archived_events.image]<img src="[archived_events.image]" alt="[archived_events.name]" width="333" height="187" loading="lazy">[else]<img width="333" height="187" src="/images/events/event-card-default.webp" loading="lazy" alt="Community Over Code">[end]
- </div>
- <div class="event-card__content">
- <div class="event-card__date">[archived_events.displayDate]</div>
- <div class="event-card__location">[archived_events.location]</div>
- <h4>[archived_events.name]</h4>
- <div><a href="[archived_events.href]">View Details</a></div>
- </div>
- </div>
- </div>[end]
- </div>[else]<p class="text-center">No past events to show.</p>[end]
- </div>
-</div>
diff --git a/output/events/index.html b/output/events/index.html
new file mode 100644
index 0000000..0bdaba7
--- /dev/null
+++ b/output/events/index.html
@@ -0,0 +1,795 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="description" content="Community Over Code is the official conference of the Apache Software Foundation (ASF), bringing together the communities behind Apache open source projects. The event features project-specific technical tracks, real-world production use cases, and sessions on Apache governance, release management, security practices, and open source sustainability.">
+ <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="/favicons/manifest.json">
+ <link rel="shortcut icon" href="/favicons/favicon.png">
+ <meta name="msapplication-TileColor" content="#603cba">
+ <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
+ <meta name="msapplication-config" content="/favicons/browserconfig.xml">
+ <meta name="theme-color" content="#282661">
+
+ <title>Events | Apache Software Foundation Events</title>
+ <link href="/fonts/Montserrat-300-600-800.css" async rel="stylesheet">
+ <link href="/css/styles.css" async rel="stylesheet">
+ <script src="https://www.apachecon.com/event-images/snippet.js" async></script>
+
+ <script src="/js/jquery.min.js"></script>
+ <script src="/js/init.js"></script>
+</head>
+<body >
+ <header id="header-main">
+ <div class="inner relative z1 flex flex-space-between flex-vert-center">
+ <a href="/" class="logo">
+ <img src="/images/CommunityOverCode_Logo_horizontal-color.svg" alt="ASF Events">
+ </a>
+ <div id="nav-toggle" class="nav-toggle hidden">
+ <span id="nav-top"></span>
+ <span id="nav-mid"></span>
+ <span id="nav-btm"></span>
+ </div>
+
+
+<nav>
+ <ul class="flex">
+ <li><a href="/about/">About</a></li>
+ <li><a href="/sponsors/">Sponsors</a></li>
+ <li><a href="https://news.apache.org/foundation/entry/category/events">News</a></li>
+ </ul>
+</nav> </header>
+
+ <div class="hero hero--defaults relative">
+ <div class="inner py-xl relative z1">
+ <div class="hero-content text-center">
+ <h1 class="hero-title">Events</h1>
+ </div>
+ </div>
+ </div>
+ <section class="maincontent">
+ <div class="inner py-xl">
+ <div class="hero_events flex-1">
+<div class="events-wrapper upcoming-events mb-xl">
+<h2 class="text-center">Upcoming Events</h2>
+<div class="events-grid grid flex-gap-20">
+<div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code Asia 2026" height="187" loading="lazy" src="/images/events/2026-banner-bg-v1.jpg" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__location">Beijing, China</div>
+<div class="event-card__date">August 7-9, 2026</div>
+<h4>Community Over Code Asia 2026</h4>
+<div><a href="/events/asia-2026">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code Glasgow 2026" height="187" loading="lazy" src="/images/events/event-hero-glasgow.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__location">Glasgow, UK</div>
+<div class="event-card__date">October 11-14, 2026</div>
+<h4>Community Over Code Glasgow 2026</h4>
+<div><a href="/events/glasgow-2026">View Details</a></div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="events-wrapper archived-events">
+<input hidden="" name="timestamp" type="text" value="<script>document.write(Date.now())</script>"/>
+<h2 class="text-center">Past Events</h2>
+<div class="events-grid grid flex-gap-20">
+<div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">September 11-14, 2025</div>
+<div class="event-card__location">Minneapolis, MN</div>
+<h4>Community Over Code North America 2025</h4>
+<div><a href="/events/minneapolis-2025">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">September 11-14, 2025</div>
+<div class="event-card__location">Minneapolis, MN</div>
+<h4>Community Over Code North America 2025</h4>
+<div><a href="https://youtube.com/playlist?list=PLnmZetgAnzKo9CQikeJixoGP6K4R7YSxY&si=6GBH0ASZVRPGg9sU">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">October 7-10, 2024</div>
+<div class="event-card__location">Denver, CO</div>
+<h4>Community Over Code North America 2024</h4>
+<div><a href="/events/denver-2024">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">October 7-10, 2024</div>
+<div class="event-card__location">Denver, CO</div>
+<h4>Community Over Code North America 2024</h4>
+<div><a href="https://communityovercode.org/past-sessions/community-over-code-na-2024/">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">October 7-10, 2023</div>
+<div class="event-card__location">Halifax, Nova Scotia, Canada</div>
+<h4>Community Over Code North America 2023</h4>
+<div><a href="https://communityovercode.org/past-sessions/community-over-code-na-2023/">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">August 18-20, 2023</div>
+<div class="event-card__location">Beijing, China</div>
+<h4>Community Over Code Asia 2023</h4>
+<div><a href="https://www.bagevent.com/event/cocasia-2023-EN">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">October 2-6, 2022</div>
+<div class="event-card__location">New Orleans, LA</div>
+<h4>ApacheCon North America 2022</h4>
+<div><a href="https://apachecon.com/acna2022/">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">September 21-23, 2021</div>
+<div class="event-card__location">Online</div>
+<h4>ApacheCon @Home 2021</h4>
+<div><a href="https://apachecon.com/acah2021/">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">August 6-8, 2021</div>
+<div class="event-card__location">Online</div>
+<h4>ApacheCon Asia 2021</h4>
+<div><a href="https://apachecon.com/acasia2021/">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">September 28 - October 1, 2020</div>
+<div class="event-card__location">Online</div>
+<h4>ApacheCon @Home 2020</h4>
+<div><a href="https://apachecon.com/acah2020/">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">October 22-24, 2019</div>
+<div class="event-card__location">Berlin, Germany</div>
+<h4>ApacheCon EU 2019</h4>
+<div><a href="https://aceu19.apachecon.com/">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">September 9-12, 2019</div>
+<div class="event-card__location">Las Vegas, NV, USA</div>
+<h4>ApacheCon NA 2019</h4>
+<div><a href="https://www.apachecon.com/acna19/">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">March 25, 2019</div>
+<div class="event-card__location">Washington, DC, USA</div>
+<h4>Apache Roadshow</h4>
+<div><a href="https://apachecon.com/usroadshowdc19/">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">September 24-27, 2018</div>
+<div class="event-card__location">Montréal, Canada</div>
+<h4>ApacheCon NA 2018</h4>
+<div><a href="https://apachecon.com/acna18/">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">May 16-18, 2017</div>
+<div class="event-card__location">Miami, FL</div>
+<h4>Apache BigData NA 2017</h4>
+<div><a href="/events/apache-bigdata-na-2017/">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">May 16-18, 2017</div>
+<div class="event-card__location">Miami, FL</div>
+<h4>ApacheCon NA 2017</h4>
+<div><a href="/events/apachecon-na-2017/">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">November 16-18, 2016</div>
+<div class="event-card__location">Seville, Spain</div>
+<h4>ApacheCon EU 2016</h4>
+<div><a href="/events/apachecon-eu-2016/">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">November 14-16, 2016</div>
+<div class="event-card__location">Seville, Spain</div>
+<h4>Apache BigData EU 2016</h4>
+<div><a href="/events/apache-bigdata-eu-2016/">View Details</a></div>
+</div>
+</div>
+</div><div class="co-located-event-card card">
+<div class="card-inner">
+<div class="colo-image-wrapper">
+<!-- the following can have no spaces or it will fail. -->
+<img alt="Community Over Code" height="187" loading="lazy" src="/images/events/event-card-default.webp" width="333"/>
+</div>
+<div class="event-card__content">
+<div class="event-card__date">May 11-13, 2016</div>
+<div class="event-card__location">Vancouver, BC</div>
+<h4>ApacheCon NA 2016</h4>
+<div><a href="/events/apachecon-na-2016/">View Details</a></div>
+</div>
+</div>
... 1421 lines suppressed ...