Releases: christiansacks/tipoff
Release list
v0.2.30
Performance
- Status page (
/status) was slow and getting slower over time. It was fetching every raw uptime-check row for the last 90 days into Python for every domain/monitor (up to ~26k rows per item with 5-minute checks) and bucketing them into the daily grid in a Python loop, plus a second unbounded query per item just to get the latest check. Page load time scaled with total check history and with how many domains/monitors were configured. - Daily bucketing now happens in SQL (
GROUP BY date(...)), the latest-check query is now bounded to a single row, and a new composite index on(domain_id, checked_at)/(monitor_id, checked_at)lets both queries use one index. Benchmarked at a representative scale (15 items × 90 days of 5-minute checks, ~389k rows): ~7.4s → ~0.26s.
No visible/behavioral changes — same grid, same percentages, same layout.
v0.2.29
Fixed
- WHOIS expiry lookup always failed for every .uk domain (uk, co.uk, org.uk, etc.), showing "can't determine the expiry date" regardless of registrar. Root cause: the WHOIS library resolves each TLD's authoritative server via an IANA referral lookup, but IANA's record for "uk" doesn't publish one (Nominet points people at a website instead) — so that lookup came back empty every time. Not related to the .uk legacy WHOIS protocol's retirement in Feb 2027; this has been broken all along. Now shells out to the system
whoisbinary (which has its own maintained TLD server table) for the raw lookup, then reuses the existing parser for the actual data.
v0.2.28
Fixed
- WordPress detection false negative behind a WAF/challenge: previously TipOff only checked the homepage for WordPress fingerprints (generator meta tag, wp-content/wp-includes paths) after wp-login.php or /wp-json/ succeeded first. If a WAF (e.g. Cloudflare) challenged both of those endpoints, TipOff reported "no WordPress installation detected" even on a real WordPress site with an unprotected homepage. The homepage check now runs independently as a third detection path.
- Scan requests now send a normal browser User-Agent instead of the default httpx one, since that alone can be enough to trigger a bot-management challenge on some sites.
v0.2.27 — IPv6 segment cards show the right address; even card widths
Solves the "scrambled" IPv6 segment order Deon reported — turned out the sort was correct all along, but the displayed text was wrong. A dual-stack host's card was showing its globally-preferred address (its manually-numbered ULA one) under BOTH prefix groups, including the GUA segment where that address doesn't actually belong — making a correctly-sorted card look out of place. Verified against Deon's real host data before shipping; each affected host now shows its correct address under each segment.
Also fixes ragged card widths on the Network Map (same root cause and same fix as the card-height evenness fix in v0.2.26, just the other axis).
v0.2.26 — even card heights on Network Map
Adds a shared min-height to Network Map cards so a sparse card (just IP + status) doesn't sit noticeably shorter than a fuller one right next to it.
v0.2.25 — map search finds IPv6, connector-line fix
Fixes two related Network Map bugs found together:
- Search only matched IPv4/hostname/MAC — an IPv6 address or fragment (e.g. `::12`) found nothing even though a host had it. Every card now carries its IPv6 addresses for the search filter to check too.
- When a search hid the gateway card, the dashed VPN/routed-subnet connector lines shot off to the top-left corner of the page instead of just not drawing. Caused by measuring a hidden (display:none) element's position, which browsers report as all-zero. Now skips drawing when the reference gateway is hidden.
v0.2.24 — map width fix (By-network/Flat/IPv6)
Fixes narrow, left-pinned layout in three views: By-network mode, Flat mode, and the IPv6 segments section on the Network Map.
These each normally render a single group of cards (no sibling groups beside them), but the 650px width cap added in v0.2.22 to force wrapping in multi-group scenarios (By /24 mode) was being applied there too — leaving the group narrow and stuck against the left edge instead of using the available screen width.
Fixed: a lone group now takes the full row width and its cards wrap/center based on real available space instead of the fixed cap.
v0.2.23 — IPv6 map dedupe fix
Fixes two IPv6 Network Map issues:
- Gateway was appearing twice: once in its own Gateway card, once again mixed into the flat IPv6 segment list below it.
- Infrastructure devices (switches, DRAC, etc) were mixed into that same flat list instead of getting their own row, unlike the IPv4 side.
Both fixed: the flat IPv6 segment grid now only shows regular/remote devices, and infra hosts with an IPv6 address get a dedicated Infrastructure tier — matching IPv4 layout.
v0.2.22 — cap branch width so busy groups wrap instead of one row
Follow-up to v0.2.21, prompted by a screenshot showing the Network Map now requiring horizontal scroll to see everything in one line.
Root cause
v0.2.21's fix (stop host cards from compressing) removed .topo-branch's ability to shrink, but that had a side effect: without any width cap, a busy group's wrapping card container computed its own preferred size as "wide enough to fit every card on one line" — so a subnet with many hosts now stretched into one very long row instead of wrapping onto multiple rows.
Fixed
Added max-width: 650px to .topo-branch — comfortably fits ~3-4 cards per row before wrapping. This works together with the v0.2.21 fix, not instead of it: cards still never compress below natural size, but a busy group now wraps onto new rows once it doesn't fit on one line, rather than growing sideways forever. Horizontal scroll remains the fallback only for the rarer case of many sibling subnet groups side by side.
v0.2.21 — dashboard scan no longer overwrites your schedule, map rendering fix
Two real bugs from Deon, one via echomail and one via Matrix with screenshots.
Fixed: ad-hoc dashboard scan silently overwriting the nightly schedule
Deon's actual workflow was rescanning one LAN segment at a time by typing it into the dashboard's Auto-Discover box — but that box wasn't running a one-off scan, it was silently overwriting the persisted schedule CIDR every time. Worse, the field isn't even pre-filled with the current schedule (it shows an auto-detected guess instead), so there was no way to notice a change was about to happen. The dashboard's Auto-Discover is now a pure one-off action — it runs a scan with whatever you type and never touches Settings. Verified live: set a multi-segment schedule, ran an ad-hoc single-segment scan, confirmed the schedule survived unchanged.
Fixed: Network Map rendering squish in Chromium-based browsers
Reported via a squashed-looking screenshot from Vivaldi that didn't reproduce in Safari. Root cause was real and browser-independent: subnet-group branches had flex-shrink enabled, so when several groups' worth of host cards didn't fit the viewport, everything compressed instead of scrolling. Also dropped justify-content: safe center (a CSS keyword with a genuinely inconsistent support history across engines) for plain flex-start, removing any dependency on how a given browser interprets "safe" alignment.
Re-investigated: the "10.1.3.246 under the wrong subnet" report
Turns out there was no logic regression at all — re-ran the actual grouping code against Deon's real configured ranges and it's still exactly correct. The adjacent group-label pills were rendering with no visible gap in the squashed view, which is almost certainly what caused the original misread.