QA

What to verify on Angular 18

Walk this list on a QA SSR build before merge. A miss here is an 18 regression unless this page says it is old behavior. Implementation diffs live in Angular 18 upgrade explained.

How to run it

Put nvm Node 20.19.6 first. Serve dist/TopFans/server/server.mjs after npm run prerender-all-qa, or the qa --prerender=false output. Do not use npm run build-dev. Do not use Docker. Do not treat ng lint or ng test as gates.

Hit Express URL parse first: trailing slash, unknown route, then ?key=. Product clicks come after that. Angular 17 is signed off. Do not reopen 17 bugs on this list.

PR shape

Check Pass when On this branch
Source diff Only create-plan radio lines, server.ts CSR shell, DOMPurify import, wallet ngx-mask IConfig drop, angular.json localize polyfill, plus packages. Prefetch files and environment.ts are still dirty. Restore them before commit.
Kept on purpose PrimeNG 17.18.15. HttpClientModule still imported. No hydration. No provideHttpClient. Material still indigo-pink. Matches the tree
prerender-existing script Dropped from package.json, or kept on purpose. Present. Not required for 18.

SSR and marketing

Check Pass when On this branch
Client shell After prerender, both dist/TopFans/browser/index.html and index.csr.html exist. Live SSR uses the CSR file as the engine document. Smoked
Trailing slash /login/ or a known public path with a trailing slash returns 301 to the same path without the slash. Query string is kept. Smoked on Express
Unknown route A garbage path returns HTTP 404, not a 200 empty shell. Smoked
Referral query /creators?key= (or /creator?key=) is SSR-rendered, not the static prerender page that drops the key. Smoked
/music Browser lands on /music-artists. Smoked
Login and forgot password /auth/login and /auth/forgot-password render. Styles and form chrome are present. Smoked render. Submit success was not the gate.

Logged-in product

Check Pass when On this branch
Wallet bank-details URL /wallet/add-bank-details redirects to /wallet/current-balance. Unauthenticated hits still stop on AuthGuard. Routing smoked. Logged-in wallet UI still needs a session.
Wallet phone / mask Current-balance and payout fields that use ngx-mask still accept input. ngx-mask 18 dropped IConfig; provideNgxMask() stayed. Compile only. Type a value in a masked field.
Toasts Success and error toasts still appear and dismiss. ngx-toastr 19 made the toast OnPush. Not smoked after the bump
Overlays Open and close a ngx-bootstrap modal, a Material bottom sheet (share / comments / tip), and an image overlay carousel. Content is current, not empty or from the previous open. Styles survive destroy. Stacked dialogs still work. Unauthenticated overlay chrome smoked. Stacked logged-in sheets were not.
Phone inputs ngx-intl-tel-input still 15. Country dropdown and number entry work on contact, advertise, personal info, or a dynamic mobile field. Kept on 15. Needs a human type-in.
Create Plan radios Add New Plan. Free DMs chips still select. Unlimited maps to -1. Binding compile-fixed. Re-click on QA.
Create Plan button Name + Plan Benefit + open 1 Month + Total Price of 1 or more enables Create Plan. Same fill with Total Price empty stays disabled. Disable-when-empty is old behavior. Enable-when-priced still needs a QA pass.
Stripe checkout A real payment or connect flow completes. ngx-stripe is 18.1.0. Not run. Needs a logged-in session.
Audio player A portfolio / music track plays. Player stayed on 17.1.0. Compile only. Needs a logged-in session.
Video A video.js post or welcome modal plays. Close and reopen does not leave a dead player. Compile only. Needs a logged-in session.

White-label

Generator copies TopFans build config, then appends the tenant theme. Prove one QA tenant, then restore generator artifacts. Do not commit them.

Check Pass when On this branch
One QA tenant qa --prerender=false build succeeds. SSR title and theme match the tenant. Login stays branded. doug-h smoked. Theme #8b5cf6. Artifacts restored after that smoke; prefetch files are dirty again from later prerender.
Cover vs creators Tenant /creators behavior matches 17 (cover page stayed on cover for doug-h). Smoked once. Re-check if the generator is re-run for sign-off.

Do not file as an 18 bug

Still required for sign-off: logged-in wallet mask, a toast, stacked overlays, Create Plan with a filled Total Price, live Stripe, audio, and video. Everything else on this page was smoked once on 15 Sep 2026 and should be re-checked on the build that actually ships.