astro-knots
Mode

← All ship notes

twf_site

Team Data Updates and the Astro 6 Migration

Roster changes to the people data, plus the Astro 6 upgrade — which turned out to be less a version bump than a Content Collections migration with required rework.

Summary

This changeset updates team member data and upgrades the site’s tooling (notably Astro to v6), including required migration work for Astro v6 Content Collections.

Team / People data updates

Added

  • Added Gerelmaa Georgina Batchuluun to:

    • src/content/people/team.json

    • src/content/people/team-extended.json

  • Fields:

    • role: TWF Strategy Institute Partner Singapore | South Asia Desk

    • classifiers: Institute

    • image: /headshots/headshotOf__Georgina-Batchuluun.jpeg

    • socialLinks: LinkedIn https://www.linkedin.com/in/gerelmaa/

  • Added additional Institute entries to:

    • src/content/people/team.json

    • src/content/people/team-extended.json

    • Onchinsuren Dendevsambuu

      • role: Ambassador for Mongolia | TWF Institute Partner — Mongolia Desk

      • image: /headshots/headshotOf__Onchinsuren-Dendevsambuu.jpeg

      • socialLinks: LinkedIn https://www.linkedin.com/in/onch-dendev/

    • Thomas Bella

      • role: TWF Institute Partner — DACH Desk

      • socialLinks: LinkedIn https://www.linkedin.com/in/thomas-bella-munich/

    • Robert Schiele

      • role: TWF Institute Partner — DACH Desk

      • socialLinks: LinkedIn https://www.linkedin.com/in/robert-schiele-a126a2158/

    • Ineeleng Molete

      • image: /headshots/headshotOf__Ineeleng-Molete.jpeg

      • socialLinks: LinkedIn https://www.linkedin.com/in/ineeleng-molete-a5078992/

Removed

  • Removed Lisa Niedenfuehr from:

    • src/content/people/team.json

    • src/content/people/team-extended.json

  • Removed Nick Stübbe from:

    • src/content/people/team.json

    • src/content/people/team-extended.json

Updated

  • Updated Corinna Schwager title:

    • role: Chief of Staff

    • in both team.json and team-extended.json

  • Updated Divyakshi Nath:

    • role: Analyst

    • classifiers: changed from Visiting Fellow to Team

    • in both team.json and team-extended.json

  • Adjusted Martin Klässner to prevent duplicate rendering on the Team page:

    • classifiers: Vertical Partner, Team -> Vertical Partner

    • in src/content/people/team.json

  • Rewrote Robert Schiele bio to match the site’s typical third-person style and length.

Dependency upgrades

Updated package.json versions (installed via pnpm):

  • astro: ^5.16.11 -> ^6.1.5

  • tailwindcss: ^4.1.18 -> ^4.2.2

  • @tailwindcss/vite: ^4.1.18 -> ^4.2.2

  • vitest: ^4.0.17 -> ^4.1.4

  • @vitest/ui: ^4.0.17 -> ^4.1.4

  • jsdom: ^27.4.0 -> ^29.0.2

  • @types/node: ^24.10.9 -> ^25.5.2

  • @astrojs/check: ^0.9.6 -> ^0.9.8

  • typescript: ^5.9.3 -> ^6.0.2

Notes:

  • pnpm reported peer dependency warnings indicating Astro tooling expects TypeScript ^5.x (TypeScript v6 may be too new).

Astro v6 migration (Content Collections)

Content config migration

  • Added new Astro v6 content config file:

    • src/content.config.ts

  • Existing legacy file still present:

    • src/content/config.ts

Added loaders to content collections

Astro v6 requires loaders for collections.

  • Updated src/content/events/config.ts:

    • Added loader: glob({ pattern: '**/*.md', base: './src/content/events' })

    • Imported glob from astro/loaders

  • Updated src/content/facts/schema.ts:

    • Added loader: glob({ pattern: '**/[!_]*.md', base: './src/content/facts' })

    • The [!_]* exclusion prevents underscore-prefixed markdown (e.g. _All-Facts.md) from being treated as a facts entry and failing schema validation.

Render API change

Astro v6 changed how collection entries render.

  • Updated src/components/facts/FactCard--w-Image.astro:

    • Replaced entry.render() with render(entry)

    • Updated import to import { render, type CollectionEntry } from 'astro:content'

Events pages compatibility (slug handling)

With v6 loaders, pages relying on event.slug could fail.

  • Updated events pages to derive a slug from event.id when event.slug is absent.

    • Added helper getEventSlug = (event: any) => (event.slug ?? event.id?.replace(/\.md$/, '')) in several pages.

  • Files updated:

    • src/pages/events/bmw-foundation-the-leaders-collaboration-forum.astro

    • src/pages/events/unga.astro

    • src/pages/events/oceanx.astro

    • src/pages/events/norrsken-impact-week.astro

    • src/pages/events/thedrop.astro

    • src/pages/events/hellenic-impact-investor-conference.astro

    • src/pages/events/index.astro

    • src/pages/events/cop.astro

    • src/pages/events/g20-summit.astro

    • src/pages/events/twf-water-resilient-cities-forum.astro

    • src/pages/events/water-futures-forum.astro

    • src/layouts/sections/events/UpcomingEvents.astro

Build status

  • pnpm build passes successfully after the Astro v6 migration changes.

Known warnings / follow-ups

  • Unsplash 403 errors can occur during prerender when attempting Unsplash lookups; these are treated as non-blocking for now (fallback image logic exists).

  • Consider removing src/content/config.ts to avoid confusion/regressions related to legacy content config detection.

  • Consider downgrading TypeScript back to a supported ^5.x range to eliminate peer dependency warnings for Astro tooling.