45 Commits
Author SHA1 Message Date
NetworkCats afb5bd4c9b downgrade to Vultr Regular Performance 1vCPU/1GB and tighten resource limits
Switch from High Frequency 2vCPU/2GB ($18/mo) to Regular Performance
1vCPU/1GB ($5/mo). Tighten HAProxy rate limits from 100/50/30 RPM to
60/30/15 RPM with lower global RPS thresholds (200/300 instead of
300/500). Reduce maxconn, socket buffers, file descriptor limits, and
Docker resource settings to fit within 1GB RAM constraints. Update all
user-facing content and translations across 14 locales.
2026-04-03 21:18:09 +08:00
NetworkCats ab66dba48c fix: self-host Simple Line Icons and improve info table spacing
Replace the cdnjs CDN dependency with locally hosted font files and a
minimal CSS file containing only the 4 icons used (check, minus,
magnifier, social-github). Remove the CDN preconnect links.

Also reduce the gap between the IP display and the info table divider,
fix vertical alignment of icon and text rows by switching to
vertical-align: middle, and override the icon line-height to match
table text.
2026-03-23 19:33:55 +08:00
NetworkCats 0ee38b44df fix: ensure city label is available for JS-rendered alt IP rows
When the primary IP lacks city data, the conditional <tr data-label="city">
row is absent from the DOM, so readLabels() cannot scrape the translated
label. Embed translated labels as data-l-* attributes on the <table> element
so they are always available regardless of which rows are rendered.
2026-03-23 18:23:42 +08:00
NetworkCats 991fd289a2 fix: improve accessibility to meet WCAG 2.2 AA/AAA standards
- Remove disruptive alert() on error pages, rely on role="alert" banner
- Add skip navigation link for keyboard users (WCAG 2.4.1)
- Fix heading hierarchy on error page (sr-only status text in h1)
- Add "opens in a new tab" screen reader hint on external links
- Wrap language selector in form with noscript submit button (WCAG 3.2.2)
- Add aria-label to copy-to-clipboard buttons and footer landmarks
- Use h2 for alt-IP section to maintain single h1 per page
- Add persistent underline on links for non-color identification (WCAG 1.4.1)
- Fix footer attribution contrast ratio to ~5.5:1 (WCAG 1.4.3)
- Add aria-busy/role=status loading announcements for skeleton state
- Add translations for new accessibility strings across all 14 locales
- Update integration tests to assert role="alert" instead of alert()
2026-03-22 18:21:29 +08:00
NetworkCats b76410abf4 modernize JS to ES2022+ module and fix CSS logical property consistency
Rewrite script.js from ES5 (IIFEs, var, .then() chains) to modern ES2022+:
const/let, arrow functions, template literals, async/await, optional
chaining, for...of, .includes(), AbortSignal.timeout(), and DOM APIs
for dynamic HTML construction. Fix unhandled clipboard rejection, abort
timeout leak, and global scope pollution. Update script tag to
type="module" and fix CSS: top -> inset-block-start, flex-start -> start,
and indentation in media query block.
2026-03-22 18:01:05 +08:00
NetworkCats 5af03bf9b9 fix: PO parser escape order, proxy endpoint consistency, and accessibility bugs 2026-03-22 17:52:25 +08:00
NetworkCats ab7fb7c3c6 refactor: migrate templates to Askama custom i18n filter syntax
Replace all {{ t_field_name }} template variables with {{ "msgid"|t(locale) }}
filter calls across all 6 template files. This works with the #[askama::filter_fn]
defined in handlers/html.rs, which calls i18n::translate() directly.

Templates updated: index.html, error_alert.html, error_page.html,
_footer.html, _footer_lang.html, _search_form.html
2026-03-22 17:33:55 +08:00
NetworkCats cefdceab2c feat: add dismissible noscript notification banner
Show a fixed bottom banner for users with JavaScript disabled,
using CSS checkbox hack for dismissal without requiring JS.
2026-03-22 16:30:30 +08:00
NetworkCats bf3d96ac9c fix: use semantic data-label keys for alt-IP table row labels
The JS used fragile numeric indices to look up localized labels from the
server-rendered table. When optional rows (ASN, Org, Country, City) were
missing for the primary IP, the indices shifted, causing 'Proxy' to appear
as the City label. Add data-label attributes to each <tr> in the template
and key the label map by name instead of position.
2026-03-22 16:23:14 +08:00
NetworkCats d236302b09 fix: skip alt-IP detection when querying another IP address
The detectAltIp() function was unconditionally fetching the viewer's own
IPv6/IPv4 address and displaying it alongside queried IP results. Pass
the is_query flag to the client via a data attribute and guard the
alt-IP detection so it only runs when viewing your own IP.
2026-03-22 11:58:44 +08:00
NetworkCats ec91cd7738 refactor: remove FAQPage JSON-LD structured data block 2026-03-20 06:20:50 +08:00
NetworkCats 1872142bbb feat: add JS dual-stack IP detection with full info display 2026-03-11 04:40:05 +08:00
NetworkCats 21249e1717 fix: use window.URL to avoid document.URL shadowing in inline handler 2026-03-08 04:16:32 +08:00
NetworkCats 8595420139 fix: prevent DOM text reinterpretation as HTML in lang select 2026-03-07 20:16:49 +08:00
NetworkCats 2ed0bf3b6d feat: add click-to-copy IP address with localized tooltip 2026-03-07 03:56:05 +08:00
NetworkCats 30b65d5b25 refactor: extract inline JS into external static file with versioned caching 2026-03-07 03:28:23 +08:00
NetworkCats 42ec19bac8 fix: preserve IP query parameter when switching languages 2026-03-07 03:20:18 +08:00
NetworkCats 79161773b6 feat: add JSON-LD and Microdata structured data for SEO 2026-03-06 21:03:19 +08:00
NetworkCats afc64ca809 feat: add Open Graph and Twitter image meta tags 2026-03-06 20:52:14 +08:00
NetworkCats 5c3ba28495 feat: add favicon, icon meta tags, and PWA manifest 2026-03-06 20:46:39 +08:00
NetworkCats 512455bf72 feat: add noindex meta tag to IP query result pages 2026-03-06 20:28:03 +08:00
NetworkCats d256834dd2 feat: link ASN to bgp.tools page 2026-03-06 05:27:49 +08:00
NetworkCats 42aa256f43 css 2026-03-06 04:24:32 +08:00
NetworkCats 8935e5f7c0 feat: reject non-public IP queries on both backend and frontend 2026-03-05 01:37:30 +08:00
NetworkCats 199384a280 fix: resolve trailing slash 404 and untranslated escaped-quote strings 2026-03-04 20:48:59 +08:00
NetworkCats 17ea2a4c6a style: move language selector to right side of footer layout 2026-03-04 20:34:13 +08:00
NetworkCats 7e5a05b35a feat: add full i18n support for 14 languages with gettext PO translations
- Add i18n module with Locale enum, PO parser, and Accept-Language negotiation
- Create gettext .po translation files for en, es, de, ja, ko, id, fr, ru, pt, it, zh-Hant, zh-Hans, nl, ar
- Route HTML pages under /{lang}/ prefix using IETF language tags
- Auto-detect browser language and redirect from / to /{lang}/
- Add language selector dropdown in footer
- Localize geo names (country, city) from MMDB where available
- Add hreflang alternate links and multilingual sitemap for SEO
- Support RTL layout for Arabic
- Update integration tests for new routing structure
2026-03-04 20:11:16 +08:00
NetworkCats 503cb15674 edit html 2026-03-04 19:41:43 +08:00
NetworkCats 0f1d894d36 fix: hide empty IP info fields in HTML output 2026-03-04 03:41:23 +08:00
NetworkCats a7899354c1 refactor: extract base template, search form, and footer partials to eliminate duplication 2026-03-04 03:27:22 +08:00
NetworkCats 6fbfe15b08 feat: add HTML error pages with browser alert popup for IP query errors 2026-03-04 03:21:32 +08:00
NetworkCats 71c4c902c4 edit footer 2026-03-04 03:00:07 +08:00
NetworkCats cd762b33ab style: add GitHub icons to footer repository links 2026-03-04 01:44:20 +08:00
NetworkCats 675c8d3c2c feat: add site footer with license, repo links, and data attribution 2026-03-04 01:41:39 +08:00
NetworkCats 8e3bd95676 feat: add collapsible FAQ section to home page 2026-03-04 01:10:37 +08:00
NetworkCats a068e382ae feat: add security headers, caching headers, and static file versioning 2026-03-03 03:36:22 +08:00
NetworkCats e1570ddfbf perf: add preconnect hint for cdnjs.cloudflare.com 2026-03-03 03:22:35 +08:00
NetworkCats 5bc601e6e5 feat: improve SEO meta tags, robots.txt, sitemap.xml, and table accessibility 2026-03-03 03:14:40 +08:00
NetworkCats f480131809 style: modernize CSS with light-dark(), nesting, logical props, and fix a11y 2026-03-03 03:04:51 +08:00
NetworkCats b45e44c8e3 style: refine layout, soften dark mode colors, and lighten IP font 2026-03-03 02:56:33 +08:00
NetworkCats 3284c0281a refactor: remove search submit button in favor of Enter key 2026-03-03 02:20:35 +08:00
NetworkCats 4a19f9dd70 feat: adopt Apple color palette, dark mode, icons, and Google Fonts 2026-03-03 02:00:51 +08:00
NetworkCats 4415ed3ddc feat: update page title to static descriptive text 2026-03-03 01:25:14 +08:00
NetworkCats bfc1e213b9 fix: capitalize boolean values in HTML to match mockup 2026-03-02 20:14:55 +08:00
NetworkCats 9f3b38acac feat: add route handlers, router, SSR template, and CSS 2026-03-02 20:02:45 +08:00