This is an automated email from the ASF dual-hosted git repository.
asf-ci-deploy pushed a commit to branch asf-site-production
in repository https://gitbox.apache.org/repos/asf/grails-website.git
The following commit(s) were added to refs/heads/asf-site-production by this
push:
new 7d31273d01e Updating apache/grails-website asf-site-production branch
for GitHub Actions run:31499364847
7d31273d01e is described below
commit 7d31273d01ec4c562b1a4a9adc8a5e67866d2009
Author: jamesfredley <[email protected]>
AuthorDate: Tue Aug 11 14:19:16 2026 +0000
Updating apache/grails-website asf-site-production branch for GitHub
Actions run:31499364847
---
foundation/minutes.xml | 2 +-
foundation/minutes/20210321-tab.html | 10 ++--
foundation/minutes/20211217-tab.html | 10 ++--
foundation/minutes/20220323-tab.html | 10 ++--
foundation/minutes/20220711-tab.html | 10 ++--
foundation/minutes/20221128-tab.html | 10 ++--
foundation/minutes/index.html | 2 +-
guides/_redirects.json | 2 +-
images/grails-teepublic-shirt-acid-black.jpg | Bin 0 -> 47420 bytes
index.html | 13 +++++
plugins.html | 4 +-
plugins/owners/grails-plugins.html | 2 +-
plugins/tags/auditing.html | 2 +-
rss.xml | 2 +-
stylesheets/screen.css | 74 +++++++++++++++++++++++++++
15 files changed, 120 insertions(+), 33 deletions(-)
diff --git a/foundation/minutes.xml b/foundation/minutes.xml
index af4ee72c6ee..f7d1caf445f 100644
--- a/foundation/minutes.xml
+++ b/foundation/minutes.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><rss
xmlns:content="http://purl.org/rss/1.0/modules/content/"
version="2.0"><channel><title>Foundation | Grails
Framework</title><link>https://grails.apache.org</link><description>A powerful
Groovy-based web application framework for the JVM built on top of Spring
Boot</description><pubDate>Tue, 11 Aug 2026 12:30:52
GMT</pubDate><item><title>Technology Advisory Board
Meeting</title><link>https://grails.apache.org/foundation/minutes/20221128-tab.html<
[...]
+<?xml version="1.0" encoding="UTF-8"?><rss
xmlns:content="http://purl.org/rss/1.0/modules/content/"
version="2.0"><channel><title>Foundation | Grails
Framework</title><link>https://grails.apache.org</link><description>A powerful
Groovy-based web application framework for the JVM built on top of Spring
Boot</description><pubDate>Tue, 11 Aug 2026 14:08:58
GMT</pubDate><item><title>Technology Advisory Board
Meeting</title><link>https://grails.apache.org/foundation/minutes/20221128-tab.html<
[...]
<h3>Meeting Attendance:</h3>
<ul>
<li><strong>Puneet Behl</strong> - Grails Product Development Lead at Object
Computing</li>
diff --git a/foundation/minutes/20210321-tab.html
b/foundation/minutes/20210321-tab.html
index 75c72befb1f..8a0fea64dbe 100644
--- a/foundation/minutes/20210321-tab.html
+++ b/foundation/minutes/20210321-tab.html
@@ -239,17 +239,17 @@ community events</p>
<h3>2022</h3>
<ul>
<li>
- <minutesLink>website.model.HtmlMinutes@9f14d4c</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@7a31b1b1</minutesLink>
<parseDate>Nov 28, 2022</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
<li>
- <minutesLink>website.model.HtmlMinutes@4e5ca285</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@4e29e6ea</minutesLink>
<parseDate>Jul 07, 2022</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
<li>
- <minutesLink>website.model.HtmlMinutes@721ad0e9</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@3c07f1cf</minutesLink>
<parseDate>Mar 23, 2022</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
@@ -257,12 +257,12 @@ community events</p>
<h3>2021</h3>
<ul>
<li>
- <minutesLink>website.model.HtmlMinutes@a611d67</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@71a3837d</minutesLink>
<parseDate>Dec 17, 2021</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
<li>
- <minutesLink>website.model.HtmlMinutes@5f444266</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@6d36aaa3</minutesLink>
<parseDate>Mar 21, 2021</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
diff --git a/foundation/minutes/20211217-tab.html
b/foundation/minutes/20211217-tab.html
index 4628f54a1ed..54808fcfe69 100644
--- a/foundation/minutes/20211217-tab.html
+++ b/foundation/minutes/20211217-tab.html
@@ -281,17 +281,17 @@
<h3>2022</h3>
<ul>
<li>
- <minutesLink>website.model.HtmlMinutes@9f14d4c</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@7a31b1b1</minutesLink>
<parseDate>Nov 28, 2022</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
<li>
- <minutesLink>website.model.HtmlMinutes@4e5ca285</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@4e29e6ea</minutesLink>
<parseDate>Jul 07, 2022</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
<li>
- <minutesLink>website.model.HtmlMinutes@721ad0e9</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@3c07f1cf</minutesLink>
<parseDate>Mar 23, 2022</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
@@ -299,12 +299,12 @@
<h3>2021</h3>
<ul>
<li>
- <minutesLink>website.model.HtmlMinutes@a611d67</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@71a3837d</minutesLink>
<parseDate>Dec 17, 2021</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
<li>
- <minutesLink>website.model.HtmlMinutes@5f444266</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@6d36aaa3</minutesLink>
<parseDate>Mar 21, 2021</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
diff --git a/foundation/minutes/20220323-tab.html
b/foundation/minutes/20220323-tab.html
index ad755a976e6..903d9587e80 100644
--- a/foundation/minutes/20220323-tab.html
+++ b/foundation/minutes/20220323-tab.html
@@ -324,17 +324,17 @@
<h3>2022</h3>
<ul>
<li>
- <minutesLink>website.model.HtmlMinutes@9f14d4c</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@7a31b1b1</minutesLink>
<parseDate>Nov 28, 2022</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
<li>
- <minutesLink>website.model.HtmlMinutes@4e5ca285</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@4e29e6ea</minutesLink>
<parseDate>Jul 07, 2022</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
<li>
- <minutesLink>website.model.HtmlMinutes@721ad0e9</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@3c07f1cf</minutesLink>
<parseDate>Mar 23, 2022</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
@@ -342,12 +342,12 @@
<h3>2021</h3>
<ul>
<li>
- <minutesLink>website.model.HtmlMinutes@a611d67</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@71a3837d</minutesLink>
<parseDate>Dec 17, 2021</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
<li>
- <minutesLink>website.model.HtmlMinutes@5f444266</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@6d36aaa3</minutesLink>
<parseDate>Mar 21, 2021</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
diff --git a/foundation/minutes/20220711-tab.html
b/foundation/minutes/20220711-tab.html
index a283cdade3d..0b5477d49bf 100644
--- a/foundation/minutes/20220711-tab.html
+++ b/foundation/minutes/20220711-tab.html
@@ -232,17 +232,17 @@
<h3>2022</h3>
<ul>
<li>
- <minutesLink>website.model.HtmlMinutes@9f14d4c</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@7a31b1b1</minutesLink>
<parseDate>Nov 28, 2022</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
<li>
- <minutesLink>website.model.HtmlMinutes@4e5ca285</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@4e29e6ea</minutesLink>
<parseDate>Jul 07, 2022</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
<li>
- <minutesLink>website.model.HtmlMinutes@721ad0e9</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@3c07f1cf</minutesLink>
<parseDate>Mar 23, 2022</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
@@ -250,12 +250,12 @@
<h3>2021</h3>
<ul>
<li>
- <minutesLink>website.model.HtmlMinutes@a611d67</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@71a3837d</minutesLink>
<parseDate>Dec 17, 2021</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
<li>
- <minutesLink>website.model.HtmlMinutes@5f444266</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@6d36aaa3</minutesLink>
<parseDate>Mar 21, 2021</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
diff --git a/foundation/minutes/20221128-tab.html
b/foundation/minutes/20221128-tab.html
index 8c9fc813311..4a15b1556ba 100644
--- a/foundation/minutes/20221128-tab.html
+++ b/foundation/minutes/20221128-tab.html
@@ -271,17 +271,17 @@
<h3>2022</h3>
<ul>
<li>
- <minutesLink>website.model.HtmlMinutes@9f14d4c</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@7a31b1b1</minutesLink>
<parseDate>Nov 28, 2022</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
<li>
- <minutesLink>website.model.HtmlMinutes@4e5ca285</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@4e29e6ea</minutesLink>
<parseDate>Jul 07, 2022</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
<li>
- <minutesLink>website.model.HtmlMinutes@721ad0e9</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@3c07f1cf</minutesLink>
<parseDate>Mar 23, 2022</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
@@ -289,12 +289,12 @@
<h3>2021</h3>
<ul>
<li>
- <minutesLink>website.model.HtmlMinutes@a611d67</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@71a3837d</minutesLink>
<parseDate>Dec 17, 2021</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
<li>
- <minutesLink>website.model.HtmlMinutes@5f444266</minutesLink>
+ <minutesLink>website.model.HtmlMinutes@6d36aaa3</minutesLink>
<parseDate>Mar 21, 2021</parseDate>
<a href='minutesLink'>MMM dd - Technology Advisory Board
Meeting</a>
</li>
diff --git a/foundation/minutes/index.html b/foundation/minutes/index.html
index 3281c504d1e..bb822e03752 100644
--- a/foundation/minutes/index.html
+++ b/foundation/minutes/index.html
@@ -126,7 +126,7 @@
</div>
</header>
-<article><div class='header-bar chalices-bg'><div class='content'><h1><a
href='https://grails.apache.org/foundation/index.html'>Foundation</a></h1></div></div><div
class='clear content container'><h3 class='column-header'>Meeting Minutes
Archive</h3><div class='light'><div class='padded' style='padding-top: 0;'><div
class="three-columns"><div class='column'><article class='blog-card'
style='margin-bottom: 0; background-image:
url(https://grails.apache.org/images/grails-blog-index-6.png)' [...]
+<article><div class='header-bar chalices-bg'><div class='content'><h1><a
href='https://grails.apache.org/foundation/index.html'>Foundation</a></h1></div></div><div
class='clear content container'><h3 class='column-header'>Meeting Minutes
Archive</h3><div class='light'><div class='padded' style='padding-top: 0;'><div
class="three-columns"><div class='column'><article class='blog-card'
style='margin-bottom: 0; background-image:
url(https://grails.apache.org/images/grails-blog-index-6.png)' [...]
<footer>
<div class='content'>
<div class='apache-grails'>
diff --git a/guides/_redirects.json b/guides/_redirects.json
index 4afc8fbf2ae..d822360198b 100644
--- a/guides/_redirects.json
+++ b/guides/_redirects.json
@@ -1,6 +1,6 @@
{
"version": 1,
- "generated": "2026-08-11T12:32:47.863180782Z",
+ "generated": "2026-08-11T14:10:47.774443606Z",
"from_base": "https://guides.grails.org",
"to_base": "https://grails.apache.org/guides",
"count": 1785,
diff --git a/images/grails-teepublic-shirt-acid-black.jpg
b/images/grails-teepublic-shirt-acid-black.jpg
new file mode 100644
index 00000000000..c4a095d568d
Binary files /dev/null and b/images/grails-teepublic-shirt-acid-black.jpg differ
diff --git a/index.html b/index.html
index fcb37716e4c..0626c42cd44 100644
--- a/index.html
+++ b/index.html
@@ -269,6 +269,19 @@
</div>
</div>
</div>
+ <section class="shirt-promotion"
aria-labelledby="shirt-promotion-title">
+ <img class="shirt-promotion-image"
src="https://grails.apache.org/images/grails-teepublic-shirt-acid-black.jpg"
+ alt="Apache Grails T-shirt in Acid Black with an orange
Grails logo" width="630" height="630"
+ loading="lazy">
+ <div class="shirt-promotion-copy">
+ <h2 id="shirt-promotion-title">Apache Grails T-Shirt</h2>
+ <p>Take the Apache Grails logo with you on a TeePublic
T-shirt.</p>
+ <p class="shirt-promotion-variant">Shown in Male Fit, Vintage,
Acid Black. Select Vintage and Acid Black
+ on TeePublic to match this look.</p>
+ <a class="shirt-promotion-link"
+
href="https://www.teepublic.com/t-shirt/96393154-apache-grails?store_id=3969012">View
the T-shirt on TeePublic</a>
+ </div>
+ </section>
</div>
</article>
<article class="testimonials">
diff --git a/plugins.html b/plugins.html
index 78d74554e8a..eceaf1c984d 100644
--- a/plugins.html
+++ b/plugins.html
@@ -126,7 +126,7 @@
</div>
</header>
-<article><div class='header-bar chalices-bg'><div class='content'><h1>Grails
Plugins</h1></div></div><div class='content plugins-page'><nav
class='plugins-nav'><a href='#all' class='nav-tab active' data-tab='all'>All
(256)</a><a href='#recent' class='nav-tab' data-tab='recent'>Recently
Updated</a><a href='#stars' class='nav-tab' data-tab='stars'>Most Stars</a><a
href='#tags' class='nav-tab' data-tab='tags'>Tags</a><a href='#owners'
class='nav-tab' data-tab='owners'>Owners</a><a href='#li [...]
+<article><div class='header-bar chalices-bg'><div class='content'><h1>Grails
Plugins</h1></div></div><div class='content plugins-page'><nav
class='plugins-nav'><a href='#all' class='nav-tab active' data-tab='all'>All
(256)</a><a href='#recent' class='nav-tab' data-tab='recent'>Recently
Updated</a><a href='#stars' class='nav-tab' data-tab='stars'>Most Stars</a><a
href='#tags' class='nav-tab' data-tab='tags'>Tags</a><a href='#owners'
class='nav-tab' data-tab='owners'>Owners</a><a href='#li [...]
in controller responses</p><div class='coords-wrapper'><a
href='https://repo.grails.org/plugins/org/grails/plugins/cache-headers/2.0.2'
class='maven-link' target='_blank' title='View on Maven repository'><code
class='coords'>org.grails.plugins:<wbr>cache-headers:<wbr>2.0.2</code></a><button
class='copy-btn' data-coords='org.grails.plugins:cache-headers:2.0.2'
title='Copy to clipboard'>📋</button></div><div class='plugin-card-footer'><div
class='footer-left'><a href='https://grails.apache. [...]
on the Java API for RESTful Web Services.
@@ -154,7 +154,7 @@ functions for listing the results based on the search query.
This plugin gives application authors a powerful framework to quickly get a
scalable messaging solution running quickly.</p><div class='coords-wrapper'><a
href='https://repo.grails.org/plugins/org/grails/plugins/rabbitmq-native/4.0.0'
class='maven-link' target='_blank' title='View on Maven repository'><code
class='coords'>org.grails.plugins:<wbr>rabbitmq-native:<wbr>4.0.0</code></a><button
class='copy-btn' data-coords='org.grails.plugins:rabbitmq-native:4.0.0'
title='Copy to clipboard'>📋 [...]
Just point the auto complete JS URL at suggest/[subject]?term=bla and you get
a JSON list of suggestion strings back.
You can add suggestion handlers to the service as a closure, or just add a
text file named [subject].txt with an itemper line to be searched for matches.
The simple search returns a result if an item string contains the term anywhere.
-See docs for details.</p><div class='coords-wrapper'><a
href='https://repo.grails.org/plugins/com/nerderg/plugins/SimpleSuggestions3/1.1'
class='maven-link' target='_blank' title='View on Maven repository'><code
class='coords'>com.nerderg.plugins:<wbr>SimpleSuggestions3:<wbr>1.1</code></a><button
class='copy-btn' data-coords='com.nerderg.plugins:SimpleSuggestions3:1.1'
title='Copy to clipboard'>📋</button></div><div class='plugin-card-footer'><div
class='footer-left'><a href='https://grai [...]
+See docs for details.</p><div class='coords-wrapper'><a
href='https://repo.grails.org/plugins/com/nerderg/plugins/SimpleSuggestions3/1.1'
class='maven-link' target='_blank' title='View on Maven repository'><code
class='coords'>com.nerderg.plugins:<wbr>SimpleSuggestions3:<wbr>1.1</code></a><button
class='copy-btn' data-coords='com.nerderg.plugins:SimpleSuggestions3:1.1'
title='Copy to clipboard'>📋</button></div><div class='plugin-card-footer'><div
class='footer-left'><a href='https://grai [...]
<footer>
<div class='content'>
<div class='apache-grails'>
diff --git a/plugins/owners/grails-plugins.html
b/plugins/owners/grails-plugins.html
index 8801521bc45..129a0c2c85f 100644
--- a/plugins/owners/grails-plugins.html
+++ b/plugins/owners/grails-plugins.html
@@ -126,7 +126,7 @@
</div>
</header>
-<article><div class='header-bar chalices-bg'><div class='content'><h1>Grails
Plugins</h1></div></div><div class='content plugins-page'><div
class='breadcrumbs'><a href='https://grails.apache.org/plugins.html'>All Grails
Plugins</a><span> » </span><span>Plugins by creator:
grails-plugins</span></div><div class='plugins-section'><h2
class='section-title'>Plugins by creator: grails-plugins</h2><ul
class='plugin-list'><li class='plugin'><div class='plugin-header'><h3
class='name'><a href='ht [...]
+<article><div class='header-bar chalices-bg'><div class='content'><h1>Grails
Plugins</h1></div></div><div class='content plugins-page'><div
class='breadcrumbs'><a href='https://grails.apache.org/plugins.html'>All Grails
Plugins</a><span> » </span><span>Plugins by creator:
grails-plugins</span></div><div class='plugins-section'><h2
class='section-title'>Plugins by creator: grails-plugins</h2><ul
class='plugin-list'><li class='plugin'><div class='plugin-header'><h3
class='name'><a href='ht [...]
in controller responses</p><div class='coords-wrapper'><a
href='https://repo.grails.org/plugins/org/grails/plugins/cache-headers/2.0.2'
class='maven-link' target='_blank' title='View on Maven repository'><code
class='coords'>org.grails.plugins:<wbr>cache-headers:<wbr>2.0.2</code></a><button
class='copy-btn' data-coords='org.grails.plugins:cache-headers:2.0.2'
title='Copy to clipboard'>📋</button></div><div class='plugin-card-footer'><div
class='footer-left'><a href='https://grails.apache. [...]
<footer>
<div class='content'>
diff --git a/plugins/tags/auditing.html b/plugins/tags/auditing.html
index 2311df8c2ef..53b321519ba 100644
--- a/plugins/tags/auditing.html
+++ b/plugins/tags/auditing.html
@@ -126,7 +126,7 @@
</div>
</header>
-<article><div class='header-bar chalices-bg'><div class='content'><h1>Grails
Plugins</h1></div></div><div class='content plugins-page'><div
class='breadcrumbs'><a href='https://grails.apache.org/plugins.html'>All Grails
Plugins</a><span> » </span><span>Plugins by tag #auditing</span></div><div
class='plugins-section'><h2 class='section-title'>Plugins by tag
#auditing</h2><ul class='plugin-list'><li class='plugin'><div
class='plugin-header'><h3 class='name'><a href='https://github.com/gra [...]
+<article><div class='header-bar chalices-bg'><div class='content'><h1>Grails
Plugins</h1></div></div><div class='content plugins-page'><div
class='breadcrumbs'><a href='https://grails.apache.org/plugins.html'>All Grails
Plugins</a><span> » </span><span>Plugins by tag #auditing</span></div><div
class='plugins-section'><h2 class='section-title'>Plugins by tag
#auditing</h2><ul class='plugin-list'><li class='plugin'><div
class='plugin-header'><h3 class='name'><a href='https://github.com/gra [...]
<footer>
<div class='content'>
<div class='apache-grails'>
diff --git a/rss.xml b/rss.xml
index e3181d8e30e..0d703294c5f 100644
--- a/rss.xml
+++ b/rss.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><rss
xmlns:content="http://purl.org/rss/1.0/modules/content/"
version="2.0"><channel><title>Blog | Grails
Framework</title><link>https://grails.apache.org</link><description>A powerful
Groovy-based web application framework for the JVM built on top of Spring
Boot</description><pubDate>Tue, 11 Aug 2026 12:31:02
GMT</pubDate><item><title>Søren Glasius Named 2026 Grails® Lifetime
Contributor</title><link>https://grails.apache.org/blog/2026-07-28-soren-g [...]
+<?xml version="1.0" encoding="UTF-8"?><rss
xmlns:content="http://purl.org/rss/1.0/modules/content/"
version="2.0"><channel><title>Blog | Grails
Framework</title><link>https://grails.apache.org</link><description>A powerful
Groovy-based web application framework for the JVM built on top of Spring
Boot</description><pubDate>Tue, 11 Aug 2026 14:09:07
GMT</pubDate><item><title>Søren Glasius Named 2026 Grails® Lifetime
Contributor</title><link>https://grails.apache.org/blog/2026-07-28-soren-g [...]
<p>The Apache Grails community is proud to honor <a
href="https://github.com/sbglasius">Søren Berg Glasius</a> with the 2026 Grails
Lifetime Contributor Award. The award recognizes long-term, sustained
contributions that have strengthened Grails as a framework, an ecosystem, and a
community.</p>
<p>For years, Grails users, plugin authors, conference speakers, and project
contributors have seen the same pattern: Søren shows up for Grails, helps
others succeed with it, and strengthens its ecosystem. Today he serves on the
Project Management Committees for Apache Grails and Apache Groovy.</p>
<h2>A Builder Across the Grails Framework</h2>
diff --git a/stylesheets/screen.css b/stylesheets/screen.css
index 5890c8d47cd..eab8d55506d 100644
--- a/stylesheets/screen.css
+++ b/stylesheets/screen.css
@@ -333,6 +333,80 @@ td {
margin-top: 20px;
}
+.shirt-promotion {
+ display: grid;
+ grid-template-columns: minmax(0, 1fr);
+ gap: 24px;
+ align-items: center;
+ box-sizing: border-box;
+ margin: 50px 0;
+ padding: 24px;
+ background-color: #ffffff;
+ border-top: 2px solid #feb672;
+ box-shadow: 0 8px 6px -6px #ccc;
+}
+
+.shirt-promotion-image {
+ display: block;
+ width: 100%;
+ max-width: 420px;
+ height: auto;
+ margin: 0 auto;
+}
+
+.shirt-promotion-copy {
+ min-width: 0;
+ color: #666666;
+}
+
+.training .content .shirt-promotion-copy h2 {
+ margin: 0 0 16px;
+ color: #4f4f4f;
+ font-size: 24px;
+ line-height: 1.3;
+}
+
+.shirt-promotion-variant {
+ color: #4f4f4f;
+ font-weight: bold;
+}
+
+.shirt-promotion-link,
+.shirt-promotion-link:visited {
+ display: inline-block;
+ box-sizing: border-box;
+ max-width: 100%;
+ padding: 12px 20px;
+ background-color: #255AA8;
+ box-shadow: 1px 4px 4px #ccc;
+ color: #ffffff;
+ font-family: 'Archia-Light', 'Roboto-Light', "Open Sans", "Helvetica
Neue", Helvetica, Arial, sans-serif;
+ font-size: 18px;
+ line-height: 1.4;
+ text-decoration: none;
+}
+
+.shirt-promotion-link:hover {
+ background-color: #1d4684;
+ color: #ffffff;
+}
+
+.shirt-promotion-link:focus,
+.shirt-promotion-link:focus-visible {
+ background-color: #1d4684;
+ color: #ffffff;
+ outline: 3px solid #255AA8;
+ outline-offset: 3px;
+}
+
+@media screen and (min-width: 768px) {
+ .shirt-promotion {
+ grid-template-columns: minmax(240px, 0.9fr) minmax(0, 1.1fr);
+ gap: 40px;
+ padding: 32px;
+ }
+}
+
body.search thead th,