From 69eb1b0fbd285f97f31cbd5cdb8f40ffb3986ef3 Mon Sep 17 00:00:00 2001 From: Edwin Martin Date: Fri, 22 May 2026 22:13:47 +0200 Subject: [PATCH 1/6] Add lunchmeeting with Ramon Fincken --- .../activities/2026/lunchmeeting-july-2026.md | 18 ---------- .../activities/2026/lunchmeeting-may-2026.md | 18 ---------- .../2026/lunchmeeting-with-ramon-fincken.md | 35 +++++++++++++++++++ .../2026/lunchmeeting-juli-2026.md | 18 ---------- .../2026/lunchmeeting-mei-2026.md | 18 ---------- .../2026/lunchmeeting-met-ramon-fincken.md | 35 +++++++++++++++++++ 6 files changed, 70 insertions(+), 72 deletions(-) delete mode 100644 src/en/activities/2026/lunchmeeting-july-2026.md delete mode 100644 src/en/activities/2026/lunchmeeting-may-2026.md create mode 100644 src/en/activities/2026/lunchmeeting-with-ramon-fincken.md delete mode 100644 src/nl/activiteiten/2026/lunchmeeting-juli-2026.md delete mode 100644 src/nl/activiteiten/2026/lunchmeeting-mei-2026.md create mode 100644 src/nl/activiteiten/2026/lunchmeeting-met-ramon-fincken.md diff --git a/src/en/activities/2026/lunchmeeting-july-2026.md b/src/en/activities/2026/lunchmeeting-july-2026.md deleted file mode 100644 index c601bc80..00000000 --- a/src/en/activities/2026/lunchmeeting-july-2026.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: 'Fronteers Lunchmeeting - Late July 2026' -summary: Details to follow -date: 2025-12-13 -eventdate: 2026-07-28 -eventdateTentative: true -location: Online -categories: - - Lunchmeetings -locale: en -signupavailable: false ---- - -We're organizing a Fronteers lunchmeeting in late July 2026. The lunchmeeting is an online meeting during lunch that you can follow from behind your desk (but also from your couch or in the park). - -We're currently looking for a **speaker** to show (and tell), or just speak on a certain subject, during lunch. - -If you can help, please [get in touch](mailto:bestuur@fronteers.nl?subject=Fronteers%20Lunchmeeting%20-%20Late%20July%202026)! diff --git a/src/en/activities/2026/lunchmeeting-may-2026.md b/src/en/activities/2026/lunchmeeting-may-2026.md deleted file mode 100644 index b76023ba..00000000 --- a/src/en/activities/2026/lunchmeeting-may-2026.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: 'Fronteers Lunchmeeting - Mid May 2026' -summary: Details to follow -date: 2025-12-13 -eventdate: 2026-05-17 -eventdateTentative: true -location: Online -categories: - - Lunchmeetings -locale: en -signupavailable: false ---- - -We're organizing a Fronteers lunchmeeting in mid May 2026. The lunchmeeting is an online meeting during lunch that you can follow from behind your desk (but also from your couch or in the park). - -We're currently looking for a **speaker** to show (and tell), or just speak on a certain subject, during lunch. - -If you can help, please [get in touch](mailto:bestuur@fronteers.nl?subject=Fronteers%20Lunchmeeting%20-%20Mid%20May%202026)! diff --git a/src/en/activities/2026/lunchmeeting-with-ramon-fincken.md b/src/en/activities/2026/lunchmeeting-with-ramon-fincken.md new file mode 100644 index 00000000..8472b8be --- /dev/null +++ b/src/en/activities/2026/lunchmeeting-with-ramon-fincken.md @@ -0,0 +1,35 @@ +--- +title: "Fronteers Lunchmeeting with Ramon Fincken" +summary: Steps to becoming a truly sovereign European web host +date: 2026-05-22 +eventdate: 2026-06-19 +author: Edwin Martin +location: Online +categories: + - Lunchmeetings +locale: en +signupavailable: false +key: 2026-lunchmeeting-fincken +--- + +The lunchmeeting is an online meeting during lunchtime that you can attend from behind your desk (though from your couch or in the park works too). + +This lunch meeting is presented by Ramon Fincken of Klarned. + +In this session, we share general information about the AVG/GDPR and digital sovereignty/data portability. + +We'll show the audience why websites are currently — and in the future — at high risk. + +In addition, we'll share all of our insights and tell you everything about our stack and the choices we've made to be fully and truly sovereign within the European Union. + +#### Session introduction + +Learn what true digital sovereignty means for web hosting. Gain valuable insights, learn from do's & don'ts, and discover what to look out for when your website needs a perfect GDPR/AVG-friendly hosting provider. + +#### Requirements + +No specific prior knowledge is needed for this session. However, an active interest in digital sovereignty and technology will lead to a better understanding and more value from the session. + +#### Learning objectives + +By the end of this presentation, the audience will have a solid understanding of (data) sovereignty and data portability. Additionally, participants will know which steps they can take for their own stack or hosting provider. diff --git a/src/nl/activiteiten/2026/lunchmeeting-juli-2026.md b/src/nl/activiteiten/2026/lunchmeeting-juli-2026.md deleted file mode 100644 index 8d293837..00000000 --- a/src/nl/activiteiten/2026/lunchmeeting-juli-2026.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: 'Fronteers Lunchmeeting - Eind juli 2026' -summary: Details volgen -date: 2025-12-13 -eventdate: 2026-07-28 -eventdateTentative: true -location: Online -categories: - - Lunchmeetings -locale: nl -signupavailable: false ---- - -We organiseren een Fronteers lunchmeeting eind juli 2026. De lunchmeeting is een online meeting tijdens de lunch die je kan volgen van achter je bureau (maar vanaf je bank of in het park kan ook). - -We zijn op zoek naar een **spreker** om te laten zien (en vertellen), of gewoon te spreken over een bepaald onderwerp, tijdens de lunch. - -Lijkt het je leuk iets te laten zien? [Neem dan contact met ons op](mailto:bestuur@fronteers.nl?subject=Fronteers%20Lunchmeeting%20-%20Eind%20juli%202026)! diff --git a/src/nl/activiteiten/2026/lunchmeeting-mei-2026.md b/src/nl/activiteiten/2026/lunchmeeting-mei-2026.md deleted file mode 100644 index 9efc6358..00000000 --- a/src/nl/activiteiten/2026/lunchmeeting-mei-2026.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: 'Fronteers Lunchmeeting - Half mei 2026' -summary: Details volgen -date: 2025-12-13 -eventdate: 2026-05-17 -eventdateTentative: true -location: Online -categories: - - Lunchmeetings -locale: nl -signupavailable: false ---- - -We organiseren een Fronteers lunchmeeting half mei 2026. De lunchmeeting is een online meeting tijdens de lunch die je kan volgen van achter je bureau (maar vanaf je bank of in het park kan ook). - -We zijn op zoek naar een **spreker** om te laten zien (en vertellen), of gewoon te spreken over een bepaald onderwerp, tijdens de lunch. - -Lijkt het je leuk iets te laten zien? [Neem dan contact met ons op](mailto:bestuur@fronteers.nl?subject=Fronteers%20Lunchmeeting%20-%20Half%20mei%202026)! diff --git a/src/nl/activiteiten/2026/lunchmeeting-met-ramon-fincken.md b/src/nl/activiteiten/2026/lunchmeeting-met-ramon-fincken.md new file mode 100644 index 00000000..b7ab9e3e --- /dev/null +++ b/src/nl/activiteiten/2026/lunchmeeting-met-ramon-fincken.md @@ -0,0 +1,35 @@ +--- +title: "Fronteers Lunchmeeting met Ramon Fincken" +summary: Stappen om een echt soevereine Europese webhost te worden +date: 2026-05-22 +eventdate: 2026-06-19 +author: Edwin Martin +location: Online +categories: + - Lunchmeetings +locale: nl +signupavailable: false +key: 2026-lunchmeeting-fincken +--- + +De lunchmeeting is een online meeting tijdens de lunch die je kan volgen van achter je bureau (maar vanaf je bank of in het park kan ook). + +Deze lunchmeeting wordt gepresenteerd door Ramon Fincken van Klarned. + +In deze sessie delen we algemene informatie over de AVG/GDPR en digitale soevereiniteit/data-portabiliteit. + +We laten het publiek zien waarom websites momenteel — en in de toekomst — een hoog risico lopen. + +Daarnaast delen we al onze inzichten en vertellen we alles over onze stack en de keuzes die we hebben gemaakt om volledig en écht soeverein te zijn binnen de Europese Unie. + +#### Introductie van de sessie + +Leer wat echte digitale soevereiniteit voor webhosting betekent. Krijg waardevolle inzichten, leer van do’s & don’ts en ontdek waar je op moet letten wanneer jouw website behoefte heeft aan een perfecte GDPR-/AVG-vriendelijke hostingprovider. + +#### Vereisten + +Voor deze sessie is geen specifieke voorkennis nodig. Wel zal een actieve interesse in digitale soevereiniteit en technologie zorgen voor een beter begrip en meer waarde uit de sessie. + +#### Leerdoelen + +Aan het einde van deze presentatie heeft het publiek een goed begrip van (data-)soevereiniteit en data-portabiliteit. Daarnaast weten deelnemers welke stappen zij kunnen nemen voor hun eigen stack of hostingprovider. From 8e41123c59b9c7e5011eecb1abb517e39639beb2 Mon Sep 17 00:00:00 2001 From: Edwin Martin Date: Sat, 23 May 2026 00:23:43 +0200 Subject: [PATCH 2/6] Update Github action --- .github/workflows/format-members-list.yml | 48 +++++++++++------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/.github/workflows/format-members-list.yml b/.github/workflows/format-members-list.yml index 9f02ba7b..5e7eb6f9 100644 --- a/.github/workflows/format-members-list.yml +++ b/.github/workflows/format-members-list.yml @@ -7,30 +7,30 @@ jobs: contents: write runs-on: ubuntu-latest steps: - - uses: actions/setup-node@v4 - with: - node-version: 20 + - uses: actions/setup-node@v5 + with: + node-version: 22 - - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.head.ref }} - - - name: 'Format members-list.json' - run: npx prettier@latest -w src/_data/members-list.json - - - name: 'Commit formatted code' - run: | - # Check if there is nothing to commit (i.e. no formatting changes made) - if [ -z "$(git status --porcelain)" ]; then - echo "Code is already formatted correctly" - exit 0 - fi + - uses: actions/checkout@v5 + with: + ref: ${{ github.event.pull_request.head.ref }} - # Setup the git user (required to commit anything) - git config --global user.email "1964376+SleeplessByte@users.noreply.github.com" - git config --global user.name "github-actions[bot]" + - name: "Format members-list.json" + run: npx prettier@latest -w src/_data/members-list.json - # Commit the changes made by prettier - git add . - git commit -m "[CI] Format members-list.json" - git push + - name: "Commit formatted code" + run: | + # Check if there is nothing to commit (i.e. no formatting changes made) + if [ -z "$(git status --porcelain)" ]; then + echo "Code is already formatted correctly" + exit 0 + fi + + # Setup the git user (required to commit anything) + git config --global user.email "1964376+SleeplessByte@users.noreply.github.com" + git config --global user.name "github-actions[bot]" + + # Commit the changes made by prettier + git add . + git commit -m "[CI] Format members-list.json" + git push From a02ca1d4b70c559ae4d05e98cd16b5414e0e934c Mon Sep 17 00:00:00 2001 From: Edwin Martin Date: Sat, 23 May 2026 01:04:43 +0200 Subject: [PATCH 3/6] Fix npx caching / resolution quirk --- netlify.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netlify.toml b/netlify.toml index 42834232..511bca1f 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,2 +1,2 @@ [build] - command = "npx puppeteer browsers install chrome && npm run build" + command = "node node_modules/puppeteer/install.mjs && npm run build" From 4ec185a1af1ca45efcb56010815d03b0f7d0e91b Mon Sep 17 00:00:00 2001 From: Edwin Martin Date: Sat, 23 May 2026 09:33:07 +0200 Subject: [PATCH 4/6] Pin puppeteer cache dir for Netlify Forces Chrome to be cached at ./.cache/puppeteer (project-scoped) so the install path matches the runtime lookup path and Netlify's build cache picks it up between builds. Co-Authored-By: Claude Opus 4.7 --- .puppeteerrc.cjs | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .puppeteerrc.cjs diff --git a/.puppeteerrc.cjs b/.puppeteerrc.cjs new file mode 100644 index 00000000..48abff38 --- /dev/null +++ b/.puppeteerrc.cjs @@ -0,0 +1,10 @@ +const { join } = require("path"); + +/** + * @type {import("puppeteer").Configuration} + */ +module.exports = { + // Store Chrome inside the project so Netlify's build cache picks it up + // between builds (Netlify caches ./node_modules and ./.cache by default). + cacheDirectory: join(__dirname, ".cache", "puppeteer"), +}; From 79fc2bd0e1dd7c17d74ace44750c0d6f18f6b2d3 Mon Sep 17 00:00:00 2001 From: Edwin Martin Date: Sat, 23 May 2026 09:37:35 +0200 Subject: [PATCH 5/6] Override Netlify's PUPPETEER_SKIP_DOWNLOAD for Chrome install Netlify sets PUPPETEER_SKIP_DOWNLOAD=true in the build environment, and that env var takes precedence over .puppeteerrc.cjs in puppeteer's getConfiguration. install.mjs was silently skipping the download, so puppeteer-core couldn't find Chrome at runtime. Co-Authored-By: Claude Opus 4.7 --- netlify.toml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/netlify.toml b/netlify.toml index 511bca1f..1e1ae0d5 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,2 +1,4 @@ [build] - command = "node node_modules/puppeteer/install.mjs && npm run build" + # Netlify sets PUPPETEER_SKIP_DOWNLOAD=true by default, which would cause + # install.mjs to silently skip the Chrome download. Unset it for this step. + command = "PUPPETEER_SKIP_DOWNLOAD=false node node_modules/puppeteer/install.mjs && npm run build" From 74e23b277d6726c158a4b265142e0c0a8978cc0e Mon Sep 17 00:00:00 2001 From: Edwin Martin Date: Sat, 23 May 2026 10:18:59 +0200 Subject: [PATCH 6/6] Use @puppeteer/browsers CLI directly to install Chrome puppeteer's bundled install.mjs is fragile on Netlify: it respects PUPPETEER_SKIP_DOWNLOAD (which Netlify sets to true by default) and it fails to await downloadBrowsers, so errors are swallowed. Invoke the @puppeteer/browsers CLI directly with the pinned Chrome version and cache path, and list the cache contents so the next failure mode is visible in the build log. Co-Authored-By: Claude Opus 4.7 --- netlify.toml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/netlify.toml b/netlify.toml index 1e1ae0d5..824efa38 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,4 +1,7 @@ [build] - # Netlify sets PUPPETEER_SKIP_DOWNLOAD=true by default, which would cause - # install.mjs to silently skip the Chrome download. Unset it for this step. - command = "PUPPETEER_SKIP_DOWNLOAD=false node node_modules/puppeteer/install.mjs && npm run build" + # Install Chrome via @puppeteer/browsers directly. puppeteer's own install.mjs + # is unreliable on Netlify because (a) it respects PUPPETEER_SKIP_DOWNLOAD=true + # which Netlify sets by default, and (b) it calls downloadBrowsers() without + # awaiting, so failures get swallowed. We pin the cache dir explicitly and + # echo the result so the next failure is debuggable. + command = "node node_modules/@puppeteer/browsers/lib/cjs/main-cli.js install chrome@146.0.7680.153 --path $PWD/.cache/puppeteer && echo '--- .cache/puppeteer contents ---' && ls -la .cache/puppeteer && npm run build"