<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts | Olivier Goulet</title><link>http://oliviergoulet.dev/posts/</link><description>Recent content in Posts on Olivier Goulet</description><generator>Hugo</generator><language>en-ca</language><lastBuildDate>Thu, 30 Apr 2026 08:30:00 -0500</lastBuildDate><atom:link href="http://oliviergoulet.dev/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Four years at Eclipse Foundation: Looking Back</title><link>http://oliviergoulet.dev/posts/four-years-at-eclipse-foundation/</link><pubDate>Fri, 31 Jul 2026 13:00:00 -0500</pubDate><guid isPermaLink="true">http://oliviergoulet.dev/posts/four-years-at-eclipse-foundation/</guid><description>&lt;p&gt;It&amp;rsquo;s hard to believe it&amp;rsquo;s already been four years since I started my career as
a web developer. Every one of those years was spent at the Eclipse Foundation,
where I had the opportunity to grow both professionally and personally. From
collaborating with the Eclipse community to building and maintaining our Hugo
theme, PHP theme, CSS library, and web component library, I worked on the
foundation that powers 20+ websites. The work was always varied, sometimes
demanding, but consistently rewarding - and I enjoyed every minute of it.&lt;/p&gt;</description><content:encoded><![CDATA[<p>It&rsquo;s hard to believe it&rsquo;s already been four years since I started my career as
a web developer. Every one of those years was spent at the Eclipse Foundation,
where I had the opportunity to grow both professionally and personally. From
collaborating with the Eclipse community to building and maintaining our Hugo
theme, PHP theme, CSS library, and web component library, I worked on the
foundation that powers 20+ websites. The work was always varied, sometimes
demanding, but consistently rewarding - and I enjoyed every minute of it.</p>
<h2 id="the-first-year">The first year</h2>
<p>When I first joined, I was completely new to the industry. At the time, I was
much more of a follower than a technical leader. Most of my work involved
navigating an existing codebase rather than designing new systems, and that
codebase was largely built on legacy PHP 5, ES5 JavaScript, and plenty of
jQuery. It wasn&rsquo;t the modern stack I had been exposed to in school or through
my personal projects, and learning to work effectively within an established
system was a challenge in itself.</p>
<p>Like any junior developer, I made my fair share of mistakes. Some refactors
turned out to be far more disruptive than I anticipated, including removing
features that members of the Eclipse community depended on (oops). Those
experiences taught me the importance of understanding existing systems,
respecting backwards compatibility, and recognizing the impact that even
seemingly small changes can have on real users.</p>
<p>That experience has stayed with me. It fundamentally changed how I approach
changes to public-facing software and made me much more disciplined about
semantic versioning, backwards compatibility, and carefully considering the
impact of every release.</p>
<p>Later that year, I was given the opportunity to implement a major website
redesign. Looking back, I made several architectural decisions that I would
approach differently today. As the project evolved, some of those early choices
became increasingly costly to maintain. It was a humbling experience, but one
that shaped how I think about software architecture, technical debt, and the
importance of making decisions that can scale beyond the immediate needs of a
project.</p>
<h2 id="the-middle-years">The middle years</h2>
<p>In the middle years, I became more comfortable making technical decisions and
helping steer projects in a particular direction. I began taking ownership of
several libraries and websites, and even spearheaded major refactors, including
the Foundation&rsquo;s Membership Portal.</p>
<p>The Membership Portal is the Foundation&rsquo;s dashboard application that allows
members to view their project activity and manage their relationship with the
Foundation. To put it lightly, the application had significant performance
challenges. The refactor replaced a convoluted collection of <code>useEffect</code>-driven
logic with Redux Toolkit, eliminating unnecessary re-renders from the
application and significantly simplifying the overall codebase.</p>
<p>During this period, we also adopted TypeScript across our libraries, introduced
unit testing, and invested in better developer and user documentation through
Storybook. These years were about taking the lessons I had learned early on and
applying them, moving from simply contributing to projects toward actively
shaping their technical direction.</p>
<h2 id="the-final-year">The final year</h2>
<p>An unexpected brand refresh came into my lap, and I had to move quickly. There
simply was not enough time to completely rethink the architecture, so,
reluctantly, we repeated some of the same mistakes from previous redesigns.
However, as time went on, we continued working behind the scenes to gradually
turn that refresh into something more mature and maintainable.</p>
<p>I&rsquo;ll admit it: this was one of the most challenging projects I worked on, and I
never quite felt like I fully solved it. We were dealing with a legacy CSS and
component library that had been around for more than 14 years. It was deeply
coupled to nearly every website operated by the Foundation, making any
significant change a difficult balancing act.</p>
<p>Despite those challenges, we made significant progress. Rather than continuing
to evolve the legacy system, Solstice Assets, indefinitely, we began breaking
it apart into three distinct initiatives:</p>
<ul>
<li>A new CSS theme: lightweight, preferably built with vanilla CSS, and easier
for projects to adopt independently.</li>
<li>A JavaScript API client: something that could eventually be offered as a
service to the community, allowing developers to build their own experiences
without needing to understand or maintain API schemas.</li>
<li>A component library: Solstice Components, which was the only one of these
initiatives to reach completion.</li>
</ul>
<figure>
  <img src="http://oliviergoulet.dev/posts/four-years-at-eclipse-foundation/images/deprecate.webp" alt="A diagram showcasing how Solstice Assets (deprecated) can be broken into Solstice Components, a JS API client, and a CSS theme."><figcaption><p>A diagram showcasing how Solstice Assets (deprecated) can be broken into Solstice Components, a JS API client, and a CSS theme.</p></figcaption></figure>

<p>Solstice Components became a modern, framework-agnostic component library built
with web components and Lit, allowing these components to be used across
websites regardless of their underlying technology stack. See my post about it
<a href="/posts/introducing-solstice-components">here</a>
.</p>
<p>We also took the opportunity to properly deprecate major portions of the Hugo
theme. We moved from a messy 0.x.x version history that contained three
separate brand refreshes in the same major version to proper semantic
versioning, releasing 1.0.0, 2.0.0, and 3.0.0. This allowed us to better
communicate breaking changes, reduce maintenance complexity, and avoid carrying
years of accumulated technical debt forward.</p>
<p>If only I had more time to do the same with Solstice Assets. It remains one of
the biggest pieces of unfinished work, and I hope the next person who takes
ownership of it can see it through. The foundation has been laid, the problems
are better understood, and I believe it is now in a much better position to be
transformed into something more modern and maintainable.</p>
<h2 id="conclusion">Conclusion</h2>
<p>Looking back, my time at Eclipse Foundation has been a journey of growth. I
joined as someone still learning how to navigate a large and unfamiliar
codebase, and I leave having had the opportunity to shape the architecture,
tools, and practices that support the Foundation&rsquo;s work.</p>
<p>Not every challenge was solved perfectly. Some things remain unfinished, and
some decisions were made under constraints that required compromise. But I am
proud of the progress we made, the foundations we built, and the people I had
the opportunity to work alongside.</p>
<p>The biggest lesson I am taking away is that engineering is rarely about
creating something perfect from the beginning. It is about continuously
improving, making thoughtful decisions, and leaving systems in a better state
for the people who come after you.</p>
<p>Thank you to everyone at Eclipse Foundation who trusted me, challenged me, and
helped me grow over these past four years. It has been an incredible chapter of
my career, and I am excited to see what comes next.</p>
]]></content:encoded></item><item><title>We redesigned the documentation to our official Hugo website theme</title><link>http://oliviergoulet.dev/posts/hugo-solstice-theme-docs-redesign/</link><pubDate>Mon, 22 Jun 2026 16:00:00 -0500</pubDate><guid isPermaLink="true">http://oliviergoulet.dev/posts/hugo-solstice-theme-docs-redesign/</guid><description>We redesigned the documentation for Hugo Solstice Theme, the Eclipse
Foundation&amp;rsquo;s official theme for building websites with the Hugo static site
generator.</description><content:encoded><![CDATA[<p>We redesigned the <a href="https://webdev.eclipse.org/docs/hugo/" rel="external" target="_blank">documentation</a>
 for
Hugo Solstice Theme, the Eclipse Foundation&rsquo;s official theme for building
websites with the <a href="https://gohugo.io" rel="external" target="_blank">Hugo</a>
 static site generator. The new
documentation is more comprehensive, easier to navigate, and includes more
visual demos and code examples.</p>
<p>We decided it was time to refresh and reorganize the documentation to better
align with the 3.0.0 release, which incorporates the major Eclipse Foundation
brand refresh from last year.</p>
<h2 id="how-it-is-organized">How it is organized</h2>
<p>We have reorganized the documentation into several comprehensive sections:</p>
<ul>
<li><strong>Shortcodes</strong>: A catalog of all the shortcodes included in the theme, with
detailed documentation for each one, including usage guidelines, code
examples, and visual demos.</li>
<li><strong>Front Matter</strong>: A reference for all the front matter parameters that can be used to
customize the behavior and appearance of an individual webpage, with examples of how to use
them in your content files.</li>
<li><strong>Configuration</strong>: A reference for all the configuration options that can be used to
customize the behavior and appearance of your entire website, with examples of how to
use them in your Hugo config file.</li>
<li><strong>Examples</strong>: A collection of examples and recipes to demonstrate how to use
the theme&rsquo;s features.</li>
<li><strong>Changelog</strong>: A detailed log of all the changes, improvements, and bug fixes
made to the theme over time.</li>
</ul>
<figure>
  <img src="http://oliviergoulet.dev/posts/hugo-solstice-theme-docs-redesign/images/categories.webp" alt="Documentation categories"><figcaption><p>The categories listed on the documentation site&#39;s homepage.</p></figcaption></figure>

<p>We also added a showcase section to highlight websites built with the Hugo
Solstice Theme. This should provide inspiration and ideas for how to use the
theme in different ways.</p>
<figure>
  <img src="http://oliviergoulet.dev/posts/hugo-solstice-theme-docs-redesign/images/showcase.webp" alt="Documentation showcase"><figcaption><p>The showcase section of the documentation, highlighting websites built with the Hugo Solstice Theme.</p></figcaption></figure>

<h2 id="our-commitment-to-providing-high-quality-libraries">Our commitment to providing high-quality libraries</h2>
<p>The Hugo Solstice Theme is one of many libraries and tools we maintain to
support the Eclipse community. We are committed to delivering high-quality,
well-documented libraries that are easy to use and integrate into your
projects. We will continue investing in improved documentation, ongoing
enhancements, and user support to ensure you have the best possible experience
with our libraries and tools.</p>
<h2 id="consider-using-the-hugo-solstice-theme-for-your-next-website">Consider using the Hugo Solstice Theme for your next website</h2>
<p>If you&rsquo;re looking for a modern, flexible, and user-friendly theme for your next
website, the Hugo Solstice Theme is a great choice. It enables you to quickly
create a professional-looking site with minimal setup while offering extensive
customization options to suit your specific needs. Whether you&rsquo;re building a
project site, a Working Group website, or another type of web presence, the
Hugo Solstice Theme helps you get started quickly, delivers an excellent
experience for your visitors, and includes the Eclipse Foundation brand styling
by default.</p>
<p>Get started with Hugo Solstice Theme by bootstrapping your site using the
starter <a href="https://gitlab.eclipse.org/eclipsefdn/software-dev/frameworks-and-tools/hugo-eclipsefdn-website-boilerplate" rel="external" target="_blank">boilerplate project</a>
,
or install Hugo Solstice Theme directly from
<a href="https://www.npmjs.com/package/eclipsefdn-hugo-solstice-theme" rel="external" target="_blank">NPM</a>
.</p>
]]></content:encoded></item><item><title>Introducing Solstice Components</title><link>http://oliviergoulet.dev/posts/introducing-solstice-components/</link><pubDate>Thu, 07 May 2026 16:00:00 -0500</pubDate><guid isPermaLink="true">http://oliviergoulet.dev/posts/introducing-solstice-components/</guid><description>We’ve rebuilt our component library from the ground up to be more flexible,
more stable, and easier to use. Now, whether you’re maintaining an Eclipse
project website or a Working Group site, you can integrate these components
with minimal configuration regardless of your website’s tech stack.</description><content:encoded><![CDATA[<p>We&rsquo;ve rebuilt our component library from the ground up to be more flexible,
more stable, and easier to use. Now, whether you&rsquo;re maintaining an Eclipse
project website or a website for an Eclipse Foundation Working Group, you can
integrate these components with minimal configuration regardless of your
website&rsquo;s tech stack.</p>
<h2 id="the-old-library-served-us-well---heres-why-we-built-something-better">The old library served us well - here&rsquo;s why we built something better</h2>
<p>The old component library, Solstice Assets, was built on top of a combination
of jQuery, vanilla JavaScript, LESS stylesheets, and Mustache templates. While
it served us well for many years (10+), it had several issues:</p>
<ol>
<li><strong>Portability:</strong> The legacy component library was tightly coupled to
eclipse.org’s global styles, making it difficult to reuse components on
other sites without style conflicts. It also introduced significant CSS
overhead, increasing the consumer’s bundle size.</li>
<li><strong>Distribution:</strong> Solstice Assets could be included either via NPM or by
downloading build artifacts from eclipse.org. The NPM option required a
fairly strict build setup, often forcing your tooling to be built around the
library’s Webpack configuration rather than your own, which reduced
compatibility with other tools. The downloadable artifacts lacked
versioning, leading to risk of instability when updates were made.</li>
<li><strong>Scope:</strong> The library tried to do too much. It bundled a full CSS framework
(Bootstrap 3), global styles, and a large set of components, making it
difficult to adopt selectively or use only what you actually needed. While
this worked for sites already aligned with our styles, it created friction
for those with their own independent design systems and visual identity.</li>
</ol>
<p>These issues introduced significant barriers to entry for many developers who
aren&rsquo;t front-end specialists. To better support the Eclipse community, we had
to go back to the drawing board and build something more portable, easier to
integrate, and focused purely on components. We had to build a component
library that was truly for everyone in the Eclipse community, regardless of
their technical expertise or the tech stack they were using.</p>
<h2 id="introducing-our-new-component-library">Introducing our new component library</h2>
<p>Our new library, <em><a href="https://gitlab.eclipse.org/eclipsefdn/software-dev/frameworks-and-tools/solstice-components" rel="external" target="_blank">Solstice Components</a>
</em>,
is built on Web Components, a native web platform feature that allows us to
define <em>custom</em> HTML elements. This makes the components extremely simple to
use: just drop them into your markup like any standard HTML tag. No build step
required, it works out of the box.</p>
<p>Web Components are designed to integrate into any web page, regardless of the
underlying technology. This means you can use our components in a React app, a
WordPress site, or even a plain HTML page without additional setup<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>
<p>They also benefit from style encapsulation, so component styles don’t clash
with your website’s styles. This improves portability and ease of use.</p>
<h2 id="examples">Examples</h2>
<p>To display a list of project adopters for a particular project, you can simply
add the following HTML to your webpage:</p>
<div class="highlight"><div style="color:#c0caf5;background-color:#1a1b26;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#c0caf5;background-color:#1a1b26;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#a9b1d6">1
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#c0caf5;background-color:#1a1b26;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#bb9af7">efsc-project-adopter-logo-list</span> <span style="color:#7aa2f7">projectid</span><span style="color:#9ece6a;font-weight:bold">=</span><span style="color:#9ece6a">&#34;ecd.openvsx&#34;</span>&gt;&lt;/<span style="color:#bb9af7">efsc-project-adopter-logo-list</span>&gt;
</span></span></code></pre></td></tr></table>
</div>
</div><figure class="md:-mx-24">
  <img src="http://oliviergoulet.dev/posts/introducing-solstice-components/images/adopters.webp" alt="A list of project adopters for the Open VSX project. From left to right: Broadcom, Coder, Ericsson, Gitpod, IBM, Onivim, SAP, TypeFox, VSCodium"><figcaption><p>A list of project adopters for Open VSX as of May 2026</p></figcaption></figure>

<p>If you want to display a working group&rsquo;s member organizations, you can add the
following HTML:</p>
<div class="highlight"><div style="color:#c0caf5;background-color:#1a1b26;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#c0caf5;background-color:#1a1b26;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#a9b1d6">1
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#c0caf5;background-color:#1a1b26;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#bb9af7">efsc-member-logo-list</span> <span style="color:#7aa2f7">type</span><span style="color:#9ece6a;font-weight:bold">=</span><span style="color:#9ece6a">&#34;working-group&#34;</span> <span style="color:#7aa2f7">collaboration</span><span style="color:#9ece6a;font-weight:bold">=</span><span style="color:#9ece6a">&#34;adoptium&#34;</span>&gt;&lt;/<span style="color:#bb9af7">efsc-member-logo-list</span>&gt;
</span></span></code></pre></td></tr></table>
</div>
</div><figure class="md:-mx-24">
  <img src="http://oliviergoulet.dev/posts/introducing-solstice-components/images/members.webp" alt="List of logos from member organizations for the Adoptium Working Group. From left to right: Alibaba Cloud, Bloomberg Engineering, Canonical, Fujitsu, Google, IBM, iJUG Association, Microsoft, OpenElements, Rivos"><figcaption><p>List of logos from member organizations for the Adoptium Working Group</p></figcaption></figure>

<p>To display a list of events, you can do the following:</p>
<div class="highlight"><div style="color:#c0caf5;background-color:#1a1b26;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#c0caf5;background-color:#1a1b26;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#a9b1d6">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#a9b1d6">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#a9b1d6">3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#a9b1d6">4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#a9b1d6">5
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#c0caf5;background-color:#1a1b26;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#bb9af7">efsc-collection</span> <span style="color:#7aa2f7">pagesize</span><span style="color:#9ece6a;font-weight:bold">=</span><span style="color:#9ece6a">&#34;2&#34;</span> <span style="color:#7aa2f7">autoscroll</span><span style="color:#9ece6a;font-weight:bold">=</span><span style="color:#9ece6a">&#34;true&#34;</span>&gt;
</span></span><span style="display:flex;"><span>  &lt;<span style="color:#bb9af7">efsc-event-filters</span>&gt;&lt;/<span style="color:#bb9af7">efsc-event-filters</span>&gt;
</span></span><span style="display:flex;"><span>  &lt;<span style="color:#bb9af7">efsc-event-list</span>&gt;&lt;/<span style="color:#bb9af7">efsc-event-list</span>&gt;
</span></span><span style="display:flex;"><span>  &lt;<span style="color:#bb9af7">efsc-pagination</span> <span style="color:#7aa2f7">maxvisible</span><span style="color:#9ece6a;font-weight:bold">=</span><span style="color:#9ece6a">&#34;5&#34;</span> <span style="color:#7aa2f7">justify</span><span style="color:#9ece6a;font-weight:bold">=</span><span style="color:#9ece6a">&#34;center&#34;</span>&gt;&lt;/<span style="color:#bb9af7">efsc-pagination</span>&gt;
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#bb9af7">efsc-collection</span>&gt;
</span></span></code></pre></td></tr></table>
</div>
</div><figure class="md:-mx-24">
  <img src="http://oliviergoulet.dev/posts/introducing-solstice-components/images/events.webp"><figcaption><p>A list of events with the event filters and pagination components</p></figcaption></figure>

<h2 id="try-it-out">Try it out</h2>
<p>If you&rsquo;re interested in trying out the new Solstice Components, you can find
the documentation and installation instructions on our
<a href="https://webdev.eclipse.org/docs/components" rel="external" target="_blank">website</a>
.
It can be installed via NPM or you can find embeds to include the library
directly in your HTML from a CDN.</p>
<h2 id="conclusion">Conclusion</h2>
<p>This is just the beginning. We&rsquo;ve built the foundation for something better,
and we&rsquo;re counting on your feedback to keep improving it. Try the new component
library in your existing site. We think you&rsquo;ll notice the difference
immediately. And if you have ideas for new components or improvements, we&rsquo;d
love to hear you by <a href="https://gitlab.eclipse.org/eclipsefdn/software-dev/frameworks-and-tools/solstice-components/-/issues" rel="external" target="_blank">creating an issue</a>
!
This library is for the entire Eclipse community.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Web Components still require you to include the JavaScript that defines
them in the browser. In our case, they also require a small CSS theme file,
but these themes are fully compatible and designed to avoid any style
conflicts.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item></channel></rss>