Commit Graph
2048 Commits
Author SHA1 Message Date
Mayank Chotaliya 717356bd7c Feat(connectivity): expand the India import list (#530) 2026-10-24 21:29:30 +08:00
MarioDevandOpenAI Codex e31a9298d1 Feat(connectivity): add Mexico import list (#528)
Add a balanced set of Mexican government, telecom, banking, news, and shopping targets with localized list names and committed favicons.

Co-authored-by: OpenAI Codex <noreply@openai.com>
2026-10-24 21:29:18 +08:00
Thanut Jongteerathanachote 0446364836 Feat(adblocktest): add Truehits to the probe list (#526) 2026-10-24 21:29:07 +08:00
jason5ng32andClaude Fable 5.1 4acf56b593 Feat(footer): add a Contribute entry to the Project column
Links to the repository's GitHub /contribute page, which lists the open
good-first-issues above the contributing guide.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-23 22:03:39 +08:00
jason5ng32andClaude Fable 5.1 c0ae017f89 Feat(connectivity): invite visitors to add their country's import list
Closes the "Import a List" grid with a muted line linking to the open
country-list issue, so a visitor who finds their country missing sees
where to add it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-23 22:03:39 +08:00
jason5ng32andClaude Opus 5.5 f6e979f52d Fix(ci): generate Docker image labels with metadata-action
Multi-line release notes in the labels input split into one label per
line and an empty line aborted buildx. Labels now come from
docker/metadata-action with the version pinned to RELEASE_VERSION, and
version inputs reach the shell through env instead of interpolation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 21:41:04 +08:00
jason5ng32 720c4a1a64 Improvements 2026-10-23 21:09:41 +08:00
Thanut Jongteerathanachote 4b8cceff4d Docs: add Thai README translation (#524) 2026-10-23 21:08:02 +08:00
Thanut Jongteerathanachote 5321720c5f Feat(connectivity): add Thailand import list (#523) 2026-10-23 21:07:48 +08:00
jason5ng32 13af650719 Merge branch 'dev' of https://github.com/jason5ng32/MyIP into dev 2026-10-23 21:01:19 +08:00
Mark David PradoandMark David Prado 72a656d18b Feat(adblocktest): add HubSpot to the probe list (#518)
Co-authored-by: Mark David Prado <rqms40@users.noreply.github.com>
2026-10-23 21:00:50 +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
Jason Ng 29bdac244c Merge pull request #522 from jason5ng32/fix/guard-query-rewrites
Fix(api): make guard query rewrites survive Express 5
2026-10-23 20:31:16 +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
jason5ng32 7fbc782f1d Improvements 2026-10-23 11:24:02 +08:00
jason5ng32andClaude Fable 5.1 9e4a0f5cb6 Improvements
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-22 11:39:44 +08:00
jason5ng32andClaude Fable 5.1 da1f3fe952 Improvements
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-22 11:37:55 +08:00
jason5ng32andClaude Fable 5.1 4c9ab04bc5 Improvements
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-22 11:37:55 +08:00
ylfeid f9f24ca707 Docs(readme): add Albanian README translation (#511) 2026-10-22 11:08:41 +08:00
jason5ng32 11b4160767 Improvements 2026-10-22 11:06:30 +08:00
jason5ng32 9ee262fdc3 Improvements 2026-10-22 10:25:46 +08:00
ylfeid 24380159a4 Feat(connectivity): add Albania import list (#510) 2026-10-22 10:23:32 +08:00
ylfeid 5ecd2ed089 Feat(connectivity): add Kosovo import list (#509) 2026-10-22 10:23:25 +08:00
jason5ng32andClaude Fable 5.1 c350f0d2d9 Feat(ruletest): test twelve proxy rules, not eight
Four more ptest workers are live, so the Rule Test grid grows to
twelve cards and the README rule snippets cover them. The note above
the grid used to spell out the count in every locale; it now takes
the number from the card list, so the next change in count touches
one line. The CrossingTheWall rule keeps its eight-IP threshold.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-22 00:10:16 +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
jason5ng32 d5452c0fce Improvements 2026-10-21 14:31:47 +08:00
jason5ng32andClaude Fable 5.1 e7bc4db293 Feat(analytics): track how the Security Checklist is read and used
GA saw only category switches and resets, so a month of visits could
not say whether anyone read an item's details or ticked one. Four
labels on the existing SecurityChecklist event — ItemInfo and
CategoryIntro when a details panel or intro opens, Check and Ignore
when an item is ticked or set aside — read as a funnel after
ChangeList. Only the positive direction fires; closing and undoing
stay silent.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-21 12:24:21 +08:00
jason5ng32andClaude Fable 5.1 49c3dfa887 Feat(tools): move the Security Checklist into a reference group
The checklist is content to read and work through, not a test that
runs, yet it sat among the network diagnostics where a card promises a
result. A fourth group, 'reference', now closes the Advanced Tools grid
and holds it alone; the group's title lands in every full locale, and
the self-hosted grouping test expects the group to survive the gates.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-21 12:24:21 +08:00
jason5ng32 5cfb73994a Improvements 2026-10-21 11:33:54 +08:00
jason5ng32andClaude Opus 5.5 45f920248f Fix(analytics): one NavClick label per tool, sent once
Tool opens labelled NavClick with the slug's first letter capitalized
('Pingtest'), while keyboard shortcuts sent a second, hand-written label
('PingTest', 'AsnProfile') on top of the one openTool already sent. GA
labels are case-sensitive, so one tool split into two rows and every
shortcut open counted twice. The label is now the slug as-is, the same
id as /tools/<slug>, and shortcuts rely on openTool's event alone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 10:44:56 +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
jason5ng32andClaude Fable 5.1 7a608cb8ce Feat(footer): fold the product links into a four-column footer
The Raycast / curl / Lite badges sat in an unlabelled image row of their
own under the Advanced Tools. The footer now has four columns aligned
with that card grid — brand, Project, Docs & Support, Clients — so the
product entries get a heading and show on every route; the curl
commands keep their dialog. Docs links share one locale-aware helper.
The footer never repeats on-page content, and the fixed footer height
in style.css goes, as the columns size themselves.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-20 18:45:09 +08:00
jason5ng32andClaude Fable 5.1 d28fe239ae Fix(nav): collapse the link row by measured width, not by isMobile
Tablets report a desktop UA, so between 768px and ~1366px the flat
link row rendered and wrapped inside its links; no single breakpoint
fits six locales. use-nav-overflow.js measures the row against the
space beside the brand and actions and collapses to the hamburger
when it doesn't fit. The row stays rendered (invisible, inert) so it
remains measurable. DocsSearch switches to its icon below xl by CSS so
the action group's width never depends on the collapse state.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-20 17:54:46 +08:00
jason5ng32 35e691da6e Improvements 2026-10-19 23:45:41 +08:00
Jason Ng 116a74b1a0 Merge pull request #507 from jason5ng32/feat/adblock-test
Feat: Ad & Tracker Blocking Test
2026-10-19 23:23:34 +08:00
jason5ng32 072a76cae0 Improvements 2026-10-19 23:18:32 +08:00
jason5ng32andClaude Opus 5.5 4cc48d151b Fix(adblocktest): state what the probes cannot tell
A probe is a plain fetch from this page, so a filter rule aimed only at
one request type (e.g. `$script`) can let it through while still
blocking the real script on a website; a line under the list version now
says so. The empty "not blocked only" / "blocked only" views claimed
everything was (or nothing was) blocked even when results had timed out
or were still pending; they now say only that no request was confirmed
in that state.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 23:15:51 +08:00
jason5ng32andClaude Opus 5.5 88423522e3 Feat(report): add the Ad & Tracker Blocking Test to shareable reports
A blocker setup is part of the visitor's own environment, like the
browser info and proxy-rule sections, and is worth handing to whoever
helps debug it. The section stays deliberately small: request counts per
category (blocked / not blocked / no answer / total), no per-address or
per-vendor rows, so a report stays readable and the list can change
without breaking old links. Group ids are capped strings rather than an
enum for the same reason.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 23:04:09 +08:00
jason5ng32andClaude Opus 5.5 1163ea4a13 Docs(readme): list the Ad & Tracker Blocking Test
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 22:53:43 +08:00
jason5ng32andClaude Opus 5.5 06402ce688 Feat(adblocktest): add the Ad & Tracker Blocking Test
People running uBlock Origin, Privacy Badger, a blocking browser, or a
DNS / VPN / router filter had no way here to see what their setup lets
through. The new tool probes a static list of widely used ad, analytics,
social, error-monitoring and device-maker endpoints plus popular tracking
scripts (fetched with no-cors and no cookies or referrer, never run), and
places bait elements for cosmetic filters. Nothing runs until the visitor
starts it; every group starts selected.

A timeout reads as "no answer" and stays out of the score, and every
listed host was checked to resolve, serve valid HTTPS and not redirect to
http:// or in a loop, since any of those would fail like a block. Element
hiding is left out of the score (DNS-level filters can never pass it) and
instead tells browser-level from network-level blocking. The page copy
says outright that blocking everything is not automatically better.

Ships with the x shortcut, locale copy for every full locale and a
changelog entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 22:53:43 +08:00
jason5ng32andClaude Opus 5.5 c2751d37f7 Feat(ui): add the shadcn-vue Alert component
Notices across the tools are hand-rolled boxes; Alert gives new ones the
primitive instead. In this JavaScript setup the CLI imports `cn` from a
bare "cn" module and installs an unrelated npm package of that name, so
the dependency is dropped and the components import from @/lib/utils;
frontend/AGENTS.md records the trap for the next `shadcn-vue add`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 22:53:29 +08:00
jason5ng32andClaude Opus 5.5 b84a1d3764 Refactor(ip-infos): drop the default map images
A card only shows its map once location data has landed, so the bundled
placeholder maps were never meant to be seen, and their labels sat in one
language among many. An empty map URL now renders a same-sized muted box,
which also covers a payload with a country but no coordinates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:35:31 +08:00
jason5ng32andClaude Opus 5.5 6e40a611d3 Fix(api): require a tag-shaped language in the map proxy
Any non-empty language reached Static Maps, so every distinct value was an
uncached upstream call whose answer the edge kept for a year. A tag-shape
check still passes region-tagged UI locales (zh-TW, pt-BR) without an
allow-list, and the handler block now covers both sides.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:35:27 +08:00
Victor SolanoandClaude Opus 5.5 64ace80bf2 Fix(api): accept region-tagged languages in the map proxy (#506)
The UI passes its locale code as the map language, and pt-BR and zh-TW are
registered locales, but /api/map only accepted a bare two-letter code, so
every map request from those two locales answered 400 and the map never
loaded. Pass the tag through like every other ?lang (api/AGENTS.md) and
URL-encode it where the Static Maps URL is built, so the value stays one
query parameter.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 09:27:27 +08:00
jason5ng32andClaude Opus 5.5 79a91171f7 Refactor(probes): take chain options as an object and share version validators
runChain's optional originalSite / accept move into an options object, so a
chain that needs only one no longer passes an `undefined` placeholder.

The per-version validators become isValidIPv4 / isValidIPv6 in
common/valid-ip.js, next to isValidIP: the "Valid" prefix keeps them apart
from the non-validating isIPv6 discriminator.

Tests now run the four single-version entry points against a stubbed fetch,
so dropping or swapping a chain's validator fails the suite.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 23:28:12 +08:00
14649814andAntigravity f4d90fe44c Fix(probes): strictly validate IP version on dedicated v4/v6 chains (#504)
- Require isValidIP && isIPv6 on IPv6-only probes (ipChecking6, cloudflareV6)
- Require isValidIP && !isIPv6 on IPv4-only probes (ipChecking4, cloudflareV4)
- Export isIPv4 and isOnlyIPv6 and add dedicated unit tests in getips.test.js

Co-authored-by: Antigravity <antigravity@google.com>
2026-10-15 23:25:19 +08:00
jason5ng32 70c1cbd2b9 Merge branch 'sponsors-2026-10b' into dev 2026-10-14 18:02:07 +08:00
jason5ng32andClaude Opus 5.5 547e9a1e84 Docs(sponsors): add Proxy-Seller and link sponsor names
Proxy-Seller joins the paid sponsors in all six READMEs and the footer
acknowledgement list. Each sponsor's bold name in the description line now
links to the same destination as its logo, so the copy is clickable too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:01:52 +08:00