elixir-lang / elixir-lang.github.com

Website for Elixir
elixir-lang.org
355 stars 824 forks source link

Migrate to an Elixir SSG (tableau) ?? #1771

Open andyl opened 1 month ago

andyl commented 1 month ago

Elixir now has a great Static Site Generator - Tableau written by @mhanberg. IMO Tableau is solid and deserves more attention.

The ElixirLang website is currently rendered with Ruby using Jekyll.

If people are interested in migrating from Jekyll to Tableau, I'll take a crack at it:

People may prefer to stick to the current tooling. If so - no problemo.

But I hope there is consensus to give it a try. It would be great to put up a Tableau showcase, and to give developers another reason to adopt Elixir.

josevalim commented 1 month ago

Thank you, I'd love to see how it would look like. My initial suggestion is to do the home page and one blog post, and we evaluate from there. Everything else should fall under these two "templates" anyway.

But I recommend waiting 24h before getting started so other team members can jump in.

mhanberg commented 1 month ago

I would recommend a couple of research tasks first

andyl commented 1 month ago

jekyll plugins

I'll have a look at that.

switching to heex

My first impulse would be to switch to Heex, and adopt mainstream elixir tooling where possible.

josevalim commented 1 month ago

I would start with liquid/solid because that's a smaller changes and then consider moving to HEEx. Fewer moving pieces at once.

mhanberg commented 1 month ago

The way I used the solid package was to create a sigil, but in order to decrease the size of the diff you might want to just have it read the templates from disk https://github.com/mhanberg/blog/blob/a719f3f9f68d9aeca058a631de780e78841ae715/lib/blog.ex#L126-L154

Either way, you'll see some options I used in that macro as well as how I handled the assigns.

mhanberg commented 1 month ago

There will also be some jekyll-isms like this that you'll have to recreate as a custom Liquid tag

andyl commented 1 month ago

This eve I did a minimal proof-of-concept - a test migration from Jekyll to Tableau. Click here for the tableau code.

Here's a screenshot of the current work-in-progress: Screenshot_2024-10-07_18-41-28

After this exercise, I believe that a migration from Jekyll to Tableau is quite feasible.

re: Jekyll plugins - looks to me like the Jekyll plugins are 'site map' and 'RSS feed', which AFAIK exist as Tableau extensions.

re: liquid templates vs HEEX - for me, HEEX is just easier, so that is what I used. In the migration, liquid includes are embedded in Tableau nested layouts, and/or captured as function components. IMO the Tableau/HEEX method of organization is easier to understand.

To finish the migration, I think these are more-or-less the next actions:

Per Jose's suggestion, I'll wait a couple days to collect feedback. If the consensus is to move forward, I'll work in my spare time to finish the migration, which might take a couple weeks depending on my schedule.

josevalim commented 1 month ago

Thank you, that was a nice starting point. Do we need to define modules for each page or can we just point to a directory and have it treat each file in there as its own page?

andyl commented 1 month ago

Do we need to define modules for each page or can we just point to a directory

The latter. We need to define 2-4 'layout' modules which wrapper each markdown file.

We have a working example of the core layout module - the root layout. This was built by repurposing HTML from the old site. The root layout still needs TLC, but works now as a proof of concept. FYI layouts can be nested.

Markdown files are customized with frontmatter. Here's documentation on Tableau.PageExtension which ingests a markdown file and generates html.