10 Commits
Author SHA1 Message Date
Shubham Sangle 80e6a5ca1a Feat(service-status): add Bitbucket, DigitalOcean and Reddit (#534) 2026-10-27 11:54:24 +08:00
jason5ng32andClaude Opus 5.5 a98a6c812f Feat(service-status): add Perplexity, Canva and Docker
Reposition the tool from AI services to well-known internet products:
the Note and the tool card copy change in every full locale, with a
v8.0.0 changelog entry. Perplexity and Docker read the incident.io
structure; Canva is a plain Statuspage row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 20:59:34 +08:00
jason5ng32andClaude Opus 5.5 a79e88cbb1 Feat(service-status): add per-provider component rename
A `components.rename: { <id>: '<label>' }` selector relabels upstream rows
by component id after selection, so include / exclude keep matching the
upstream names. npm's "www.npmjs.com website" row now reads "Official
Website".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 20:51:51 +08:00
anux 6fcaadc751 Feat(service-status): add npm (#516)
npm's status page (status.npmjs.org) runs on Atlassian Statuspage and serves
both /api/v2/summary.json and /api/v2/incidents.json, so it is one provider
row plus its card in ServiceStatus.vue. Its six components are all real
services, so no exclude list is needed.

Refs #513
2026-10-23 20:46:37 +08:00
jason5ng32andClaude Opus 5.5 e766bd84ce Fix(api): make guard query rewrites survive Express 5
Express 5 exposes req.query through a getter that re-parses the URL on
every read, so the guards' in-place normalization was silently dropped:
?type=caa reached dns-resolver lowercase, ?asn=AS13335 reached the ASN
handlers unparsed, ?q=as13335 missed whois's AS<n> branch. Guards now pin
the parsed query as an own property before rewriting it, and a regression
block exercises them on a real Express request.

Fixes #521

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 20:24:56 +08:00
jason5ng32andClaude Fable 5.1 938dca96dd Fix(service-status): pick sub-services that say something
Supabase's card showed one region and Cloudflare's read "major
outage" on every visit. Supabase and five other providers are
incident.io pages, whose Statuspage-compatible summary flattens
groups away and, for Supabase, returns one component of 189; those
providers now also read the native /proxy/<host> structure and list
its top-level groups, each rolled up to its worst visible child.
Cloudflare's top level is seven continents that go red whenever one
PoP is re-routed, so its card lists a fixed set of products instead
and takes its light from them, not from the page indicator.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-21 23:59:50 +08:00
jason5ng32andClaude Opus 5.5 50885c6317 Fix(pulse): show cloud-origin outages and drop empty Radar events
Radar files some events against a cloud region (originDetails) rather
than a location or ASN. The feed ignored that subject, so an ongoing
ORIGIN anomaly rendered as a blank first row and escaped dedupe against
its matching outage. Origins are now mapped, shown, and matched in
dedupe; stub annotations with no subject and no text are dropped. The
new PLATFORM outage level gets a translation in every full locale.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 10:42:45 +08:00
jason5ng32 d8426e6017 Improvements 2026-10-05 15:06:00 +08:00
jason5ng32 bbcc53c518 Improvements 2026-10-05 14:59:24 +08:00
jason5ng32andClaude Opus 5.5 c29e48687b Refactor(layout): split backend-only code out of common/, group frontend utils
common/ had become the backend's library: 30 of its 41 modules were
imported by nothing in the frontend, so the name no longer said what
belonged there. It now holds only what the frontend or the build imports
too; backend-only code moved to server/, flat except for datasets/ (the
dataset engine and its readers). The *-db/ dataset directories stay in
common/: self-hosting docs and Docker volumes mount those paths.

frontend/utils/ keeps its app-wide modules at the root and gains ip/
(IP / ASN shaping and validation), report/ (the report pipeline) and
features/ (the pure layer of a single feature). Paths only — no logic
changes. The Dockerfile copies server/, and the AGENTS.md files say where
a new module goes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 13:10:02 +08:00