Confidential Document

This document is restricted to RRI leadership.

Incorrect password
DERISK — Remove What Can Kill You
D2

Members Portal Migration (Node 11 → Node 22 LTS)

NOT STARTED Wave 1 · 4-6 weeks

Executive Summary

The Members Portal runs on Node 11, which has been end-of-life since April 2019. It uses abandoned dependencies — kue (last updated 2017) and request (deprecated 2020) — and has committed .env credentials in git history. This is the system where 200K+ customers manage their event tickets, coaching sessions, and product access.

The migration targets Node 22 LTS (not 20 — Node 20 enters Maintenance Oct 2025, Node 22 gives 18 more months of active support). The approach is incremental: rotate credentials first, then replace dependencies one by one, then upgrade the runtime. Never all at once.

The Stripe SDK upgrade from v6 to v17 requires special care: v12 is the API version pinning boundary. Pre-v12 does NOT pin API version, meaning any Stripe rollover silently changes runtime behavior. The upgrade path is v6 → v12 → v17, with verification at each step.

What Needs to Happen

  1. Phase 0: Rotate .env credentials NOW — Pre-UPW, zero code risk. Closes the attack vector before any code changes touch the portal.
  2. Phase 1: CI/CD + smoke tests — Safety net before any migration work. GitHub Actions pipeline with lint, test, and staging deploy.
  3. Phase 2: Dependency migrationsrequest → native fetch() (stable in Node 22), then Stripe SDK v6 → v12 → v17 incrementally, then kue → BullMQ.
  4. Phase 3: Node version upgrade — With parallel CI validation. Node 11 → Node 22 LTS with all dependencies already migrated.
  5. Phase 4: Knowledge transfer — Bus factor reduction. Josh Fuller designated as named backup for the Members Portal.

Kue → BullMQ migration strategy: Run parallel queues with a feature flag. Never cold-cutover a job queue — one missed job is one lost payment.

Claude Code acceleration: Dependency migration (kue → BullMQ, requestfetch, Stripe SDK upgrade) is ideal for AI-assisted code transformation. Claude Code can generate migration scaffolding, write adapter layers, and produce test coverage for each dependency swap. Estimated savings: 2-3 weeks from the original 4-6 week timeline.

Completion Criteria

  • All committed .env credentials rotated and git history purged
  • request library fully replaced with native fetch()
  • Stripe SDK upgraded from v6 to v17 with API version pinning verified at v12 boundary
  • kue replaced with BullMQ — same queue system as order-ingestion (stack standardization)
  • Members Portal running on Node 22 LTS in staging with all smoke tests passing
  • Production deploy completed with zero customer-facing incidents
  • Josh Fuller can independently deploy and operate the Members Portal
  • CI/CD pipeline active with automated test gates blocking merge

Initiative Attributes

D2 — Members Portal Migration
Cost
$4,500-$15,000 (Federico contractor time)
Timeline (Original)
4-6 weeks (Wave 1, starts after D3 completes)
Timeline (With Claude Code)
2-3 weeks
Dependency migration (kue → BullMQ, request → fetch, Stripe upgrade) is ideal for AI
Owner
Federico Del Rio (Nearsure) + Johnny Yarlott (review)
Dependencies
Hard: D3 (must rotate credentials before any code changes). Soft: D7, D8
Unblocks
U3 (SSO Phase 2 requires Node 22 for Cognito OIDC integration)
Revenue at Risk
Security exposure — committed credentials + EOL runtime vulnerabilities
Success Metrics
Portal running on Node 22 in staging by end of April; production deploy May

Tools Required

ToolPurposeCost
BullMQReplaces kue — modern Redis-backed job queue, same as order-ingestion (stack standardization)Free (OSS)
Node 22 LTSTarget runtime — native fetch(), 18 months active support remainingFree
Stripe SDK v17Current Stripe SDK with API version pinning — prevents silent behavior changes on Stripe rolloverFree
GitHub ActionsCI/CD pipeline for automated testing and staging deploysFree (included)
git-filter-repoGit history purge for committed credentialsFree (OSS)

Related Risks

IDRiskSeverityProbabilityMitigation
RF2 Federico contractor departure (Nearsure) HIGH UNKNOWN D8 captures knowledge. Josh Fuller as named backup. H4 Integration Engineer as backstop. Review Nearsure contract notice period this week.