Skip to content

Release: Nuxt 4 and Node 22 Modernization - #384

Closed
fellnerse wants to merge 31 commits into
mainfrom
dev
Closed

Release: Nuxt 4 and Node 22 Modernization#384
fellnerse wants to merge 31 commits into
mainfrom
dev

Conversation

@fellnerse

Copy link
Copy Markdown
Member

Summary

Production release promoting dev to main.

This rolls out the complete modernization sequence:

Production Deployment Checklist & Operational Notes

1. Static Frontend Deployment (Automated)

  • Merging to main triggers .github/workflows/deployment-live.yml.
  • In deployment-live.yml, NUXT_ENV_LOCAL is unset, automatically configuring:
    • Production PayPal Client ID (AUMWxSZrtBOA1RicR_3nGijYb8yYxyq2lxBjiwoQKfVc-8jfdPr5N7X5EFUackMCLb_K7HiKswnDBUJ8)
    • Production base URL (https://www.whatsanalyze.com)
    • No local functions emulator port (points directly to live Cloud Functions)
  • Nitro prerenders all 58 localized routes and deploys dist (with dist/CNAME pointing to whatsanalyze.com) to the gh-pages branch.
  • Sentry creates a production release for environment: live.

2. Firebase Cloud Functions

  • All 3 production functions (checksubscriberstatus, helloworld, and paypalwebhook) were already deployed and running on Node 22 in Google Cloud Functions (recorded in commit c87e39b).
  • Merging to main aligns the repository source tree with the live deployed functions.
  • If re-deploying functions in the future:
    nix develop --command firebase deploy --only functions
    Requires Google Secret Manager secrets PAYPAL_PASSWORD_PROD (and PAYPAL_PASSWORD_DEV).

3. Verification

  • pnpm run format:check - Clean Prettier formatting
  • pnpm run lint - Clean ESLint
  • pnpm run test - Unit tests pass
  • pnpm run build - Prerendered 58 routes
  • pnpm run test:generated - Verified 9 pages and PWA assets

Sebastian Fellner 💯 and others added 30 commits September 2, 2026 11:41
Establish deterministic frontend checks
Move frontend to Node 22 and final Nuxt 2
- helloworld now also returns the created subscriptionId (additive)
- opt-in Playwright suite (pnpm test:e2e:sandbox) boots the Functions
  emulator + dev server and exercises the real PayPal sandbox; buyer
  approval stays manual by design
- optional GitHub workflow runs it only when PAYPAL_PASSWORD_DEV secret
  is configured; emulator reads it from gitignored functions/.secret.local
- pin TMPDIR=/tmp for the emulator: macOS truncates unix-socket paths at
  ~104 chars, colliding worker sockets and routing requests to the wrong
  function
- raise CI test timeout to 120s and assertion timeout to 15s (nuxt dev
  cold-compiles pages; small runners exceeded Playwright's defaults)
The old sandbox plan had total_cycles=1 (PayPal's default when omitted),
so every subscription became EXPIRED one second after the first payment.
Point the dev config at the new plan P-0KW41015GP654580PNKMT6EY and set
total_cycles: 0 explicitly in createPlan.

Also documented: the sandbox webhook registration was missing
PAYMENT.SALE.COMPLETED (prod subscribes to *); it is now aligned to *.
- pin explicit pwa.workbox.globPatterns: @vite-pwa/nuxt replaces the
  workbox default when payload extraction is active, which left / out of
  the precache manifest and crashed every navigation with
  non-precached-url from createHandlerBoundToURL
- restructure the download dialog: a single activator button binds the
  activator props, pricing cards render outside the overlay. multi-root
  activator slots dropped the props, so the buttons' own @click handlers
  never fired
- markRaw the pdf worker instance so Vue reactivity cannot wrap it
- objectToDictionary converts Date instances to ISO strings; proxied
  dates cannot be structured-cloned and stalled the worker silently
- guard attachment image decoding:InvalidStateError on some WhatsApp
  jpegs now degrades to text rendering instead of killing the pdf run
- guard empty FileReader results and parse errors in zipLoadEndHandler;
  previously they surfaced as an unhandled jszip rejection ("Can't read
  the data of 'the loaded zip file'") with no UI feedback
- document the findings in docs/modernization-runbook.md
@fellnerse

Copy link
Copy Markdown
Member Author

Superseded by release PR with resolved merge baseline

@fellnerse fellnerse closed this Sep 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant