Commits: 3
Members' cards are now backed by markdown files
Technically they are pages (in Zola nomenclature). To maintain stable order (i.e. so it doesn't change on each rebuild) the cards are sorted by date attribute, which is roughly the date and time a given member joined the collective.
index 69b1963..acdeccb 100644
--- a/content/_index.md
+++ b/content/_index.md
@@ -2,3 +2,4 @@
=---
=
=We are an international network of IT professionals and entrepreneurs dedicated to promote and support free software and use of services respecting human rights, dignity and privacy.
+new file mode 100644
index 0000000..1b16067
--- /dev/null
+++ b/content/joachim-nuyttens.md
@@ -0,0 +1,7 @@
+---
+title: Joachim Nuyttens
+date: 2025-05-09T22:10:00
+---
+
+
+I'm the COO of [Trevalco](https://trevalco.com/), an SME providing services to the life sciences industry. As a technology, open-source and Linux enthusiast I advise ESC on the development of services of value to small and medium sized companies in EU.new file mode 100644
index 0000000..82b25f3
--- /dev/null
+++ "b/content/jo\303\243o-campos.md"
@@ -0,0 +1,6 @@
+---
+title: João Campos
+date: 2025-04-21T18:55:00
+---
+
+I'm a researcher and a software engineer from Portugal, with a passion for building efficient and scalable systems, specialized in designing reliable infrastructure for distributed systems.new file mode 100644
index 0000000..603ec84
--- /dev/null
+++ b/content/richard-cronan.md
@@ -0,0 +1,6 @@
+---
+title: Richard Cronan
+date: 2025-05-09T13:58:00
+---
+
+I’m an experienced consultant and team leader with a background in digital strategy and analytics who translates between technical and non-technical teams to drive successful, people-centred digital solutions. I believe we can do business ethically.new file mode 100644
index 0000000..47cba24
--- /dev/null
+++ b/content/tad-lazurski.md
@@ -0,0 +1,6 @@
+---
+title: Tad Lazurski
+date: 2025-04-21T12:20:00
+---
+
+AKA Tad Lispy. I'm a software developer, entrepreneur, and an educator based in the Netherlands, founder and facilitator of Esc Co. My delight is finding simple, creative and practical solutions to real business problems. Find out more at [tad-lispy.com](https://tad-lispy.com/).new file mode 100644
index 0000000..def1585
--- /dev/null
+++ b/content/tibor-eszes.md
@@ -0,0 +1,6 @@
+---
+title: Tibor Eszes
+date: 2025-05-09T14:00:00
+---
+
+I have a deep experience in cloud, data and systems engineering, software architecture, AI, backend programming (Go and Python), Kubernetes and embedded systems. I'm also interested in electrical and mechanical engineering, genetics and genomics.new file mode 100644
index 0000000..d1302ac
--- /dev/null
+++ "b/content/v\303\255tor-andrade.md"
@@ -0,0 +1,6 @@
+---
+title: Vítor Andrade
+date: 2025-05-09T13:59:00
+---
+
+I am a devops / SRE / infrastructure engineer happy to help with anything that runs on a Linux system - from a bash script to a multi-continental distributed system. I love solving problems and working with great people. Fun is an essential ingredient.index 0d97221..4645233 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -4,67 +4,15 @@
={\{- section.content | safe -\}}
=
=<section class="card-grid">
- <article>
- <h2>Tad Lazurski</h2>
- <p>
- AKA Tad Lispy. I'm a software developer, entrepreneur, and an
- educator based in the Netherlands, founder and facilitator of Esc
- Co. My delight is finding simple, creative and practical solutions
- to real business problems. Find out more at
- <a href="https://tad-lispy.com/">tad-lispy.com</a>.
- </p>
- </article>
-
- <article>
- <h2>Richard Cronan</h2>
- <p>
- I’m an experienced consultant and team leader with a background in
- digital strategy and analytics who translates between technical and
- non-technical teams to drive successful, people-centred digital
- solutions. I believe we can do business ethically.
- </p>
- </article>
-
- <article>
- <h2>Vítor Andrade</h2>
- <p>
- I am a devops / SRE / infrastructure engineer happy to help with
- anything that runs on a Linux system - from a bash script to a
- multi-continental distributed system. I love solving problems and
- working with great people. Fun is an essential ingredient.
- </p>
- </article>
+ {# Each page in this category represents a person.
=
+ It's a bit clunky. We will improve it later.
+ #}
+ {\%- for page in section.pages | sort(attribute="date") -%}
= <article>
- <h2>Tibor Eszes</h2>
- <p>
- I have a deep experience in cloud, data and systems engineering,
- software architecture, AI, backend programming (Go and Python),
- Kubernetes and embedded systems. I'm also interested in electrical
- and mechanical engineering, genetics and genomics.
- </p>
+ <h2>{\{ page.title \}}</h2>
+ {\{ page.content | safe \}}
= </article>
-
- <article>
- <h2>João Campos</h2>
- <p>
- I'm a researcher and a software engineer from Portugal, with a
- passion for building efficient and scalable systems, specialized in
- designing reliable infrastructure for distributed systems.
- </p>
- </article>
-
- <article>
- <h2>Joachim Nuyttens</h2>
- <p>
- I'm the COO of
- <a href="https://trevalco.com/" target="_blank">Trevalco</a>,
- an SME providing services to the life sciences industry. As a
- technology, open-source and Linux enthusiast I advise ESC on the
- development of services of value to small and medium sized companies
- in EU.
- </p>
- </article>
-
+ {\%- endfor -%}
=</section>
={\%- endblock main_content -%}Add miniserve to the development environment
To preview the website generated for production, before publishing it.
index 5cab3c9..ff26771 100644
--- a/flake.nix
+++ b/flake.nix
@@ -32,7 +32,10 @@
= modules = [
= {
= # https://devenv.sh/reference/options/
- packages = [ pkgs.zola ];
+ packages = [
+ pkgs.zola
+ pkgs.miniserve
+ ];
= }
= ];
= };Write a smart (?) publish script
There's a lot of moving parts in publishing to Codeberg Pages. Some concerns:
- Publish to the same branch as source.
- Make sure the generated files are fresh.
- Only publish when changes to source are committed.
- Make sure there the histories did not diverge.
The publish.nu script (implemented in Nushell) tries to ensure all of the above.
new file mode 100755
index 0000000..61bc9e8
--- /dev/null
+++ b/publish.nu
@@ -0,0 +1,97 @@
+use std/dirs
+
+def main [] {
+ # Get the current source branch
+ # Switch pages to the same branch. Create it if needed.
+ # Find the time of last commit to pages.
+ # Make a list of commits in source since then.
+ # Format it as markdown list (only titles and hashes)
+ # Prepare a commit, showing a diff for users review
+ # Push to publish
+
+ if (not (git is-clean)) {
+ print "The source repository is not clean. First commit, then publish."
+ git status
+ exit 2
+ }
+
+ let source_branch = (git symbolic-ref --short HEAD)
+ print $"Source branch is ($source_branch)"
+
+ dirs add pages.git
+
+ print "Cleaning pages worktree..."
+ git restore .
+ git clean -fd
+
+ if (git has branch $source_branch) {
+ print "The branch exists in pages repository. Switching."
+ git switch --quiet $source_branch
+
+ if (git is-tracking) {
+ print "The branch was already deployed. Pulling."
+ git pull --quiet
+ }
+ } else {
+ print "The branch does not exist in pages repository."
+ loop {
+ match (input --numchar 1 $"Create and deploy a new branch '($source_branch)'? [y|n]: ") {
+ "y" => break,
+ "n" => { exit 1 },
+ _ => continue,
+ }
+ }
+ git switch main
+ git switch --quiet --create $source_branch
+ }
+
+ let last_commit_time = git show --no-patch --format=%cI
+ print $"Pages last published on ($last_commit_time)"
+
+ let commit_template = mktemp --tmpdir
+ let now = date now | date to-timezone utc | format date "%A, %F %T (utc)"
+
+ echo $"Update ($now)"
+ | save --append $commit_template
+ echo "\n\n"
+ | save --append $commit_template
+ echo $"Changes since ($last_commit_time | date to-timezone utc | format date '%A, %F %T (utc)')\n\n"
+ | save --append $commit_template
+ dirs prev
+
+ git log --pretty=reference --since=$last_commit_time
+ | save --append $commit_template
+
+ zola build
+
+ dirs next
+ git add .
+ git commit --verbose --file $commit_template --edit
+ git push --set-upstream origin $source_branch
+}
+
+# List all branches that can be switched to
+def "git list branches" [] {
+ git branch --list --all --format='%(refname:lstrip=-1)'
+ | lines
+ | filter { |line| $line != "HEAD" }
+ | uniq
+}
+
+def "git has branch" [name: string] {
+ $name in (git list branches)
+}
+
+
+def "git is-tracking" [] {
+ try {
+ git rev-parse --abbrev-ref --symbolic-full-name @{u} err> /dev/null
+ true
+ } catch {
+ false
+ }
+}
+
+def "git is-clean" [] {
+ git status --porcelain | is-empty
+}