The Let’s Encrypt website has a common set of elements: A landing page and some other static info-pages, a document section, a blog, and a documentation section. Having it moved to Hugo was mostly motivated by a simpler administration and Hugo’s multilingual support. They already serve HTTPS to more than 60 million domains, and having the documentation available in more languages will increase that reach.1
The Let's Encrypt website is now built with @GoHugoIO, easing management and giving us access to more features. Thanks to @domeneshop for supporting this work through a Let's Encrypt sponsorship and to @bepsays for the migration work!
I helped them port the site from Jekyll to Hugo. There are usually very few surprises doing this. I know Hugo very well, but working on sites with a history usually comes up with something new.
That site is bookmarked in many browsers, so preserving the URLs was a must. Hugo’s URL handling is very flexible, but there was one challenge. The website has a mix of standard and what we in Hugo call ugly URLs (https://letsencrypt.org/2017/12/07/looking-forward-to-2018.html). In Hugo this is handled automatically, and you can turn it on globally or per language. But before Hugo 0.33 you could not configure it for parts of your site. You could set it manually for the relevant pages in front matter – which is how it was done in Jekyll – but that would be hard to manage, especially when you start to introduce translations. So, in Hugo 0.33 I added support for ugly URLs per section and also url set in front matter for list pages (https://letsencrypt.org/blog/).
The lessons learned from this also lead to disableLanguages in Hugo 0.34 (a way to turn off languages during translation). And I also registered this issue. Once fixed it will make it easier to handle partially translated sites.
The work on getting the content translated is in progress.