Skip to content

fix: handle non-JSON Squeak API responses in community widgets#18115

Draft
posthog[bot] wants to merge 1 commit into
masterfrom
posthog-code/newbies-widget-error-handling
Draft

fix: handle non-JSON Squeak API responses in community widgets#18115
posthog[bot] wants to merge 1 commit into
masterfrom
posthog-code/newbies-widget-error-handling

Conversation

@posthog

@posthog posthog Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Changes

The community page's Newbies, Anniversaries, and WIP widgets fetched profiles/team-updates from the Squeak API and piped the response straight into res.json() with no res.ok check and no .catch(). When the upstream returned an HTML error page (a 404/500/gateway error starting with <!DOCTYPE ...), res.json() threw an unhandled SyntaxError: Unexpected token '<', loading never flipped to false, and the skeleton spinner was stuck forever.

Each widget now:

  • Checks res.ok before parsing and throws on a bad status.
  • Catches any fetch/parse error, sets loading to false, and degrades gracefully — empty list for Newbies/Anniversaries, render nothing for WIP.

WIP.tsx additionally had its loading state gated entirely on a truthy response, so even a successful empty response (not just an error) left it hanging; loading now always resolves via .finally(), and the render bails out cleanly when there's no update.

No visual change in the happy path; the fix only affects the previously-broken error path.

Checklist

  • I've read the docs and/or content style guides.
  • Words are spelled using American English
  • Use relative URLs for internal links
  • I've checked the pages added or changed in the Vercel preview build
  • If I moved a page, I added a redirect in vercel.json

Created with PostHog Code from an inbox report.

The Newbies, Anniversaries, and WIP widgets fetched from the Squeak API
and piped the response straight into res.json() with no res.ok check and
no .catch(). When the upstream returned an HTML error page, res.json()
threw an unhandled SyntaxError and loading never flipped to false,
leaving the skeleton spinner stuck forever.

Now each widget checks res.ok before parsing and catches errors, degrading
to an empty list (Newbies, Anniversaries) or rendering nothing (WIP)
instead of hanging on the skeleton.

Generated-By: PostHog Code
Task-Id: 537aa304-78e6-4ffe-8458-cd099ec8f1fb
@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Deploy preview

Status Details Updated (UTC)
🟢 Ready View preview Jul 02, 2026 01:00AM

@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Bundle report

Total JS (gzip)

6.29 MiB (+0.1 KiB / +0.0%)

Eager graph (static-import closure per entrypoint)

Entrypoint Eager size Budget Modules
app 24.21 MiB (no change) report-only 5516
Largest modules in the app closure
Module Size
css ./node_modules/.pnpm/css-loader@5.2.7_webpack@5.101.3/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[8].oneOf[1].use[1]!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.5.6_webpack@5.101.3/node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[8].oneOf[1].use[2]!./src/styles/global.css 708.0 KiB
./src/components/Stickers/Stickers.tsx 696.4 KiB
./.cache/caches/gatsby-plugin-mdx/mdx-scopes-dir/31a094f140f119e73085d847ae81b99b.js + 2 modules 579.3 KiB
./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.3.1/node_modules/@radix-ui/react-icons/dist/react-icons.esm.js 481.4 KiB
./node_modules/.pnpm/@codemirror+view@6.38.2/node_modules/@codemirror/view/dist/index.js 458.1 KiB
./node_modules/.pnpm/rehype-raw@7.0.0/node_modules/rehype-raw/lib/index.js + 29 modules 395.1 KiB
./node_modules/.pnpm/@posthog+icons@0.36.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.cjs.js 364.8 KiB
./node_modules/.pnpm/@posthog+icons@0.36.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js 354.8 KiB
./src/hooks/useCustomers.tsx + 54 modules 353.9 KiB
./node_modules/.pnpm/react-markdown@8.0.7_@types+react@16.14.66_react@18.3.1/node_modules/react-markdown/lib/react-markdown.js + 88 modules 351.4 KiB
./node_modules/.pnpm/cloudinary-core@2.14.0_lodash@4.17.21/node_modules/cloudinary-core/cloudinary-core.js 281.9 KiB
./src/components/ProductComparisonTable/index.tsx + 116 modules 267.6 KiB
./node_modules/.pnpm/@codesandbox+sandpack-react@2.20.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@codesandbox/sandpack-react/dist/index.mjs 266.6 KiB
./node_modules/.pnpm/d3@7.9.0/node_modules/d3/src/index.js + 208 modules 247.4 KiB
./src/components/Pricing/PricingSlider/Slider.tsx + 87 modules 239.9 KiB

Eager-graph budgets are report-only until a baseline is established. Sizes are gzip of public/**/*.js; eager size is webpack module source bytes.

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.

0 participants