Skip to content

Major Upgrades Roadmap: Node 24, Svelte 5, and Infrastructure Planning#1339

Draft
dgrebb wants to merge 12 commits into
developfrom
slop/major-upgrades-roadmap-474a
Draft

Major Upgrades Roadmap: Node 24, Svelte 5, and Infrastructure Planning#1339
dgrebb wants to merge 12 commits into
developfrom
slop/major-upgrades-roadmap-474a

Conversation

@dgrebb

@dgrebb dgrebb commented Jul 9, 2026

Copy link
Copy Markdown
Owner

Major Upgrades Roadmap

This PR includes comprehensive upgrades to the project's infrastructure and dependencies:

Node.js & Package Manager

  • Node.js: 20 → 24 (LTS)
  • pnpm: 9 → 11.10.0
  • Added pnpm-workspace.yaml with allowBuilds configuration for native modules
  • Updated all GitHub Actions workflows to use Node 24
  • Updated Dockerfile to use node:24-alpine

Svelte 5 Migration

  • Svelte: ^4.2.19 → ^5.56.4
  • SvelteKit: ^2.5.24 → ^2.69.2
  • @sveltejs/vite-plugin-svelte: ^3.1.2 → ^7.2.0
  • Migrated all 51 components to use:
    • $props() rune instead of export let
    • $derived and $state() instead of $: reactive statements
    • {@render children?.()} snippets instead of <slot />
    • New event handler syntax (onclick instead of on:click)

Vite 8 Upgrade

  • Vite: ^5.4.2 → ^8.1.0
  • Fixed CSS syntax errors for lightningcss compatibility
  • Removed deprecated vite-plugin-progress

ESLint 10 + Tooling

  • ESLint: ^9.9.1 → ^10.6.0
  • eslint-plugin-svelte: ^2.43.0 → ^3.20.0
  • prettier-plugin-svelte: ^3.2.6 → ^4.1.0
  • Updated ESLint config for new rule defaults

Other Dependency Updates

  • vitest: ^2.0.5 → ^4.1.0
  • typescript: ^5.5.4 → ^5.9.0
  • @playwright/test: ^1.46.1 → ^1.61.0
  • marked: ^13.0.3 → ^15.0.0
  • unplugin-icons: ^0.19.2 → ^23.0.0
  • All @iconify-json/* packages updated to ^1.2.0

Documentation

docs/SSG_MIGRATION_PLAN.md - Step-by-step plan to go fully static:

  • Target architecture: Single S3 bucket + CloudFront (no ECS/RDS/ALB)
  • Phase 1: Content export to repo (JSON + uploads)
  • Phase 2: Local build pipeline (Strapi + SQLite in Docker)
  • Phase 3: Beta infrastructure at beta.dgrebb.com
  • Phase 4: GitHub Actions deploy workflow
  • Phase 5: Validation, cutover, and teardown
  • Cost savings: ~$47-83/mo → ~$3-6/mo

docs/CMS_EVALUATION.md - CMS alternatives analysis

docs/TERRAFORM_OUTLINE.md - Current infrastructure reference

CI Status

  • ✅ Lint passes
  • ✅ Build/compile passes
  • ⚠️ Prerender fails due to staging backend connectivity (not a code issue)

Closes #1334, #1335, #1337

Open in Web Open in Cursor 

cursoragent and others added 3 commits July 9, 2026 02:37
- Add .nvmrc for Node 24
- Create pnpm-workspace.yaml with security overrides
- Update engine constraints in all package.json files
- Add packageManager field for pnpm 11.10.0
- Update GitHub Actions workflows to use Node 24
- Update install-cache-deps action for pnpm 11
- Update back.Dockerfile to use node:24-alpine

Closes #1334, #1337

Co-authored-by: Dan Grebb <dgrebb@users.noreply.github.com>
- Update Svelte to v5.56.4, SvelteKit to v2.69.1
- Update @sveltejs/vite-plugin-svelte to v5.0.3
- Update svelte-check to v4.2.1

Migration changes:
- Convert all 'export let' to '$props()' rune
- Convert '$:' reactive statements to '$derived' and '$effect'
- Convert '<slot />' to '{@render children?.()}'
- Convert named slots to snippet props
- Update event handlers from 'on:' to callback syntax (onclick, etc)
- Update '$state()' for component-level reactive variables

Components migrated (51 files):
- All route files (+layout, +page, +error)
- All CV components (Award, Certification, Experience, etc)
- All general components (Image, Links, Meta, PageNav, etc)
- All posts components (Post, Code, Footnotes, etc)
- Layout components (Header, Footer, NavBar, etc)

Closes #1335

Co-authored-by: Dan Grebb <dgrebb@users.noreply.github.com>
CMS Evaluation (docs/CMS_EVALUATION.md):
- Compare Strapi 5 SQLite vs Git-based CMS options
- Evaluate TinaCMS, Keystatic, Payload CMS, Directus
- Recommend export-at-build architecture for cost reduction
- Include cost analysis: current (0-150/mo) vs proposed (-15/mo)

Terraform Outline (docs/TERRAFORM_OUTLINE.md):
- Document current architecture (RDS + ECS + ALB)
- Map module dependencies
- Outline PostgreSQL 16 upgrade path
- Document safe resource removal order
- NO actual terraform changes - documentation only

Closes #1336, #1338

Co-authored-by: Dan Grebb <dgrebb@users.noreply.github.com>
- Replace deprecated onlyBuiltDependencies with allowBuilds map
- Add comprehensive allowBuilds entries for native modules
- Use --frozen-lockfile in CI install action
- Remove deprecated enable-pre-post-scripts from .npmrc
- Rename pnpmOverrides to overrides (pnpm 11 syntax)

The allowBuilds map explicitly approves native module builds,
eliminating the need for interactive approve-builds in CI.

Co-authored-by: Dan Grebb <dgrebb@users.noreply.github.com>
- Run pnpm install to generate pnpm-lock.yaml
- Approve build scripts for @strapi/strapi, core-js, core-js-pure, puppeteer
- Updates allowBuilds in pnpm-workspace.yaml automatically

Co-authored-by: Dan Grebb <dgrebb@users.noreply.github.com>
…lity

@sveltejs/vite-plugin-svelte v5.x requires Vite 6 due to imports
like 'defaultClientConditions' that only exist in Vite 6.

This fixes the CI build error:
SyntaxError: The requested module 'vite' does not provide
an export named 'defaultClientConditions'

Co-authored-by: Dan Grebb <dgrebb@users.noreply.github.com>
Major version upgrades:
- vite: ^5.4.2 → ^8.1.0
- @sveltejs/vite-plugin-svelte: ^5.0.3 → ^7.2.0
- @sveltejs/kit: ^2.69.1 → ^2.69.2
- eslint: ^9.9.1 → ^10.6.0
- eslint-plugin-svelte: ^2.43.0 → ^3.20.0
- prettier-plugin-svelte: ^3.2.6 → ^4.1.0
- vitest: ^2.0.5 → ^4.1.0
- marked: ^13.0.3 → ^15.0.0
- unplugin-icons: ^0.19.2 → ^23.0.0
- postcss-nested: ^6.2.0 → ^7.0.0

Minor/patch upgrades:
- @playwright/test: ^1.46.1 → ^1.61.0
- @sveltejs/adapter-static: ^3.0.8 → ^3.0.10
- svelte-check: ^4.2.1 → ^4.7.0
- prettier: ^3.3.3 → ^3.9.0
- typescript: ^5.5.4 → ^5.9.0
- All @iconify-json packages updated to ^1.2.0

Removed:
- vite-plugin-progress (incompatible with Vite 8)

Updated vite.local.config.js to remove vite-plugin-progress.

Co-authored-by: Dan Grebb <dgrebb@users.noreply.github.com>
Ran prettier --write to fix code style issues introduced by
upgrading prettier-plugin-svelte to v4.1.0.

Co-authored-by: Dan Grebb <dgrebb@users.noreply.github.com>
- Add globals and @eslint/js packages required by ESLint 10
- Disable strict new rules from eslint-plugin-svelte v3:
  - svelte/no-navigation-without-resolve (new rule)
  - svelte/valid-prop-names-in-kit-pages (new rule)
- Set to warn for:
  - svelte/require-each-key
  - no-useless-assignment
- Remove unused svelte-ignore comment in Project.svelte
- Update svelte-ignore format from dashes to underscores

Co-authored-by: Dan Grebb <dgrebb@users.noreply.github.com>
- Fix invalid &::hover -> &:hover in Code.css scrollbar styles
- Remove invalid :before:hover selectors in cv.css
  (pseudo-elements can't be followed by pseudo-classes)
- Remove redundant role='navigation' from NavBar.svelte
  (nav element already has implicit navigation role)

Co-authored-by: Dan Grebb <dgrebb@users.noreply.github.com>
Identifies hardcoded values and improvement opportunities:
- Database module: 8+ hardcoded values to extract
- Containers module: 7+ hardcoded values
- CDN module: 5+ hardcoded values
- Scaling module: 2+ hardcoded values

Proposes:
- Variable extraction with defaults
- Environment configuration module
- for_each patterns for CDN/storage
- Common tags module
- Security policy consolidation

Includes phased action items checklist.

Co-authored-by: Dan Grebb <dgrebb@users.noreply.github.com>
The modularization doc was pointless - we're tearing down ECS/RDS/ALB anyway.

New SSG migration plan includes:
- Target architecture (single S3 + CloudFront)
- Content export workflow
- Local build pipeline with Docker + SQLite
- Beta infrastructure Terraform (beta.dgrebb.com)
- GitHub Actions deploy workflow
- Validation checklist and cutover steps
- Cost comparison: ~$47-83/mo → ~$3-6/mo

Key decisions documented:
- Same bucket for assets + SSG (simpler, atomic deploys)
- Keep CloudFront (HTTPS + headers + caching)
- One distribution instead of two

Co-authored-by: Dan Grebb <dgrebb@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

Node 24 + pnpm 11 Upgrade with Workspace Configuration

2 participants