- PERFORMANCE#
Automatic image optimization, no more full-screen route loader
Images now serve as WebP/AVIF, sized to your viewport, lazy-loaded by default — page weight drops 2–4× on image-heavy surfaces. The full-screen overlay on every navigation is gone; an inline progress bar in the header replaces it.
Details
- •next/image optimization re-enabled in production (was unoptimized=true legacy)
- •srcset under viewport, lazy-loading by default, automatic format negotiation
- •Most visible on /blockmap, blog cards, hero illustrations
- •Page transitions feel instant — no blocking overlay between routes
- IMPROVED#
Homepage — "MY IP" is the page heading from the first byte
The big "MY IP" label is now the page heading and present in the initial HTML, so screen readers, voice assistants and search engines see the page topic before the fingerprint scan finishes. Identical typography — no visual change.
Details
- •<h1>MY IP</h1> rendered unconditionally in SSR (was <h2> inside a client-side conditional)
- •Same Tailwind classes — text-4xl md:text-5xl lg:text-6xl, no visual diff
- •Removed the duplicate marketing block above the orb so the headline does not compete with itself
- NEW#
Ad blocker test — rebuilt from scratch
73 trackers across 14 categories, with three protection eras (2018 / 2022 / 2026). The test now detects CNAME cloaking and server-side tracking, and reports an honest percentage in every browser instead of always claiming "100% blocked".
Details
- •Categories: ads, analytics, social, fingerprinting, RUM, tag-managers, push, chat-widgets, A/B testing, recommendations, video-players, edge-analytics, marketing-automation, lead-capture
- •Era 2018 — third-party hosts (google-analytics.com, doubleclick, facebook /tr, …)
- •Era 2022 — CNAME cloaking, where a tracker hides under a first-party subdomain that CNAMEs to the tracker
- •Era 2026 — server-side tracking (Server-side GTM honeypot, edge analytics) and browser-mediated tracking-protection detection
- •Classifier keys off Resource Timing entry existence (works for any cross-origin request, no Timing-Allow-Origin header required)
- •Era classifier is null-safe: an unreachable tier is skipped, never demotes the user to a lower era
- NEW#
15 long-form articles on the tools (EN + RU)
Speed Test, DNS Leak Test, WHOIS, Port Scanner, Fingerprint Test, WebRTC Leak, Blacklist Check, IP Lookup, Ping, Ad Profile Test, GPU/WASM Leak, CSS Fingerprint, VPN Crash Test, Ad Blocker Test, Blockmap — each tool now has an article: what it does, how to read the result, what to do next.
Details
- •~17 400 new English words, ~15 400 new Russian words across the tool pages
- •Articles render at full content width below the tool widget
- FIXED#
WHOX SIGIL — "Deep Scan…" no longer hangs on 4 of 5 cards
A race in the streaming fingerprint pipeline left four cards stuck at "Deep Scan…". The browser now retries on incomplete edge-tokens, with no extra latency for the common path.
- IMPROVED#
Search engines: breadcrumbs and unified structured data across the site
Every non-home page now ships a `BreadcrumbList`, the WebApplication graph collapses into a single hierarchy with proper `isPartOf` linkage, the sitemap respects `noindex` flags, and `robots.ts` per-bot blocks no longer let crawlers ignore site-wide disallows.
Details
- •`BreadcrumbList` JSON-LD on all non-home pages
- •Site-level WebApplication carries a stable `@id`; tool pages reference it via `isPartOf` instead of competing as peer entities
- •Sitemap: `lastModified` from page-file mtime (not `Date.now()`), filtered against `noindex`, hreflang alternates on dual-locale blog posts
- •`robots.ts`: per-bot blocks now repeat the SERVICE_PATH_DISALLOW list — RFC 9309 §2.2.1 says a bot with its own block ignores `*`, so disallows on `*` did not inherit
- •BlogPosting: `dateModified` separate from `datePublished` so Google freshness signal works again
- •8 inline JSON-LD blocks collapsed onto helpers (`buildWebPageJsonLd`, `buildSoftwareApplicationJsonLd`, `buildApiReferenceJsonLd`)
- FIXED#
Censorship Diagnostic no longer mistakes a live network for a shutdown
When your internet is up but a specific transport is filtered, the diagnostic now reports `BLOCKED_HIGH (DPI/filter)` or `INCONCLUSIVE` instead of falsely claiming "LIKELY NETWORK SHUTDOWN".
Details
- •STUN-alive guard: if a public STUN server responds, shutdown verdict is rejected outright
- •New DPI-escalation branch routes filtered-but-network-alive cases correctly
- IMPROVED#
Mobile across the board — no more horizontal scroll, cleaner Trust Score orb
Horizontal scroll is gone site-wide. The Trust Score orb has been re-rendered for narrow screens — faster ignite, no fractal artefacts, no bottom gradient bar. Header / footer / blockmap promo card now link to the new Censorship Diagnostic.
- NEW#
Censorship Diagnostic — DNS / TCP / TLS / HTTP / throttling / shutdown
A new tool at /blocks that probes six layers of network blocking, reports a streaming verdict, runs a JA4 self-check to detect TLS-fingerprint substitution by an upstream proxy, and includes an MITM heuristic for corporate / state TLS inspection.
Details
- •Streaming verdict — results arrive as the probe runs, no blocking wait
- •Per-route CSP relaxation lets client-side probes actually reach the outside (DoH, alternative TLS versions, cross-IP probes)
- •~225 unit tests + 20 API e2e tests
- PERFORMANCE#
Censorship map — native SVG instead of a heavy library
Country shapes are now drawn as inline SVG, no `maplibre-gl` dependency. The bundle shrinks and the page becomes interactive faster, especially on mobile.