{
    "ready": true,
    "site": {
        "id": 0,
        "domain": "timotijhof.net",
        "display_name": "Timo Tijhof",
        "primary_country_code": "",
        "category_name": "Personal: Personal Sites & Homepages"
    },
    "metrics": {
        "global_rank": 11782,
        "country_rank": 5990,
        "category_rank": 54,
        "daily_pageviews_per_visitor": 3.66,
        "daily_time_on_site_seconds": 303,
        "bounce_rate": 35.12,
        "search_visits_percent": 36.34,
        "total_sites_linking_in": 3,
        "monthly_unique_visitors": 138,
        "recorded_at": "2026-03-17 07:37:45"
    },
    "audit": {
        "score": 71
    },
    "traffic_sources": {
        "direct_percent": 28.81,
        "search_percent": 32.71,
        "social_percent": 7.26,
        "referral_percent": 14.33,
        "email_percent": 7.26,
        "paid_percent": 9.63
    },
    "seo_profile": {
        "backlinks_total": 3,
        "referring_domains": 3,
        "dofollow_backlinks_percent": 66.67,
        "organic_keywords": 72,
        "indexed_pages": 27,
        "page_speed_score": 100,
        "mobile_friendliness_score": 68,
        "authority_score": 46,
        "spam_risk_score": 15
    },
    "crawl_report": {
        "robots_status": 200,
        "sitemap_status": 200,
        "sitemap_total_urls": 5,
        "crawl_blocked": false,
        "crawl_blocked_by": "",
        "crawl_blocked_reason": "",
        "notes": [
            "Meta description is missing.",
            "No H1 heading was detected."
        ],
        "created_at": "2026-03-17 07:37:45"
    },
    "keywords": [
        {
            "keyword": "Timo Tijhof",
            "position": 19,
            "search_engine": "Estimated",
            "checked_at": "2026-04-13 16:25:36",
            "is_estimated": true
        },
        {
            "keyword": "Timo Tijhof personal: personal sites & homepages",
            "position": 21,
            "search_engine": "Estimated",
            "checked_at": "2026-04-13 16:25:36",
            "is_estimated": true
        },
        {
            "keyword": "Timo Tijhof reviews",
            "position": 23,
            "search_engine": "Estimated",
            "checked_at": "2026-04-13 16:25:36",
            "is_estimated": true
        },
        {
            "keyword": "timo",
            "position": 25,
            "search_engine": "Estimated",
            "checked_at": "2026-04-13 16:25:36",
            "is_estimated": true
        },
        {
            "keyword": "tijhof",
            "position": 27,
            "search_engine": "Estimated",
            "checked_at": "2026-04-13 16:25:36",
            "is_estimated": true
        },
        {
            "keyword": "timotijhof",
            "position": 29,
            "search_engine": "Estimated",
            "checked_at": "2026-04-13 16:25:36",
            "is_estimated": true
        },
        {
            "keyword": "about",
            "position": 31,
            "search_engine": "Estimated",
            "checked_at": "2026-04-13 16:25:36",
            "is_estimated": true
        },
        {
            "keyword": "about me",
            "position": 33,
            "search_engine": "Estimated",
            "checked_at": "2026-04-13 16:25:36",
            "is_estimated": true
        }
    ],
    "rating": {
        "overall": 64,
        "label": "Healthy",
        "breakdown": [
            {
                "label": "Technical foundation",
                "score": 15,
                "max": 18
            },
            {
                "label": "Authority & trust",
                "score": 14,
                "max": 30
            },
            {
                "label": "Reach & market presence",
                "score": 3,
                "max": 18
            },
            {
                "label": "Search visibility",
                "score": 3,
                "max": 12
            },
            {
                "label": "Engagement & retention",
                "score": 8,
                "max": 10
            },
            {
                "label": "Channels & diversification",
                "score": 4,
                "max": 6
            },
            {
                "label": "Registry stability",
                "score": 6,
                "max": 6
            },
            {
                "label": "Quality system",
                "score": 83,
                "max": 100
            },
            {
                "label": "Reputation system",
                "score": 46,
                "max": 100
            },
            {
                "label": "Safety system",
                "score": 99,
                "max": 100
            },
            {
                "label": "Evidence confidence",
                "score": 100,
                "max": 100
            }
        ],
        "authority_score": 46,
        "quality_score": 83,
        "reputation_score": 46,
        "safety_score": 99,
        "confidence_score": 100,
        "fraud_score": 4,
        "authority_signals": {
            "backlinks": 3,
            "referring_domains": 3,
            "organic_keywords": 72,
            "indexed_pages": 27,
            "monthly_visitors": 138,
            "global_rank": 11782,
            "engagement_score": 76,
            "crawl_quality_score": 93,
            "brand_completeness_score": 44,
            "link_diversity_score": 94,
            "technical_reliability_score": 91,
            "whois_score": 78,
            "whois_age_years": 14.7,
            "whois_stability_score": 100,
            "spam_penalty": 0
        },
        "whois_signals": {
            "age_years": 14.7,
            "days_to_expiry": 107,
            "days_since_last_registry_update": 271,
            "stability_score": 100,
            "registrar_changes": 0,
            "ownership_changes": 0,
            "nameserver_changes": 0,
            "status_changes": 0,
            "history_entries": 1,
            "privacy_protected": false,
            "dnssec_enabled": true,
            "has_registrant_country": false,
            "registrant_country": "",
            "nameserver_count": 2,
            "status_count": 1
        }
    },
    "authority_score": 46,
    "trust_score": 75,
    "domain_tags": {
        "primary_tag": "T",
        "primary_tag_score": 81,
        "primary_candidate": "T",
        "primary_candidate_score": 81,
        "tag_codes": "T,Uncertain",
        "tags": [
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good",
                "description": "Strong trust, stability, and low-risk signals were detected.",
                "reason": "Low spam indicators plus strong trust, quality, registry, and stability signals were detected.",
                "message": "The site shows a reasonably trustworthy and stable profile.",
                "priority": 81,
                "score": 81,
                "match_percent": 81,
                "threshold_band": "strong"
            },
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown",
                "description": "External checks stayed inconclusive, so the model avoided a harder verdict.",
                "reason": "The evidence is mixed or only partially corroborated, so the system avoided a harder automated verdict.",
                "message": "The evidence is materially mixed or partially corroborated, so the model is avoiding a harder verdict.",
                "priority": 68,
                "score": 68,
                "match_percent": 68,
                "threshold_band": "strong"
            }
        ],
        "tag_breakdown": [
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good",
                "description": "Strong trust, stability, and low-risk signals were detected.",
                "reason": "Low spam indicators plus strong trust, quality, registry, and stability signals were detected.",
                "message": "The site shows a reasonably trustworthy and stable profile.",
                "priority": 81,
                "score": 81,
                "match_percent": 81,
                "threshold_band": "strong"
            },
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown",
                "description": "External checks stayed inconclusive, so the model avoided a harder verdict.",
                "reason": "The evidence is mixed or only partially corroborated, so the system avoided a harder automated verdict.",
                "message": "The evidence is materially mixed or partially corroborated, so the model is avoiding a harder verdict.",
                "priority": 68,
                "score": 68,
                "match_percent": 68,
                "threshold_band": "strong"
            },
            {
                "code": "Infra",
                "label": "Risky infrastructure",
                "tone": "caution",
                "description": "The hosting / registrar / nameserver neighbourhood looks unusually risky.",
                "reason": "The infrastructure neighbourhood looks riskier than normal.",
                "message": "There are a few infrastructure-risk signals, but nothing strongly conclusive yet.",
                "priority": 21,
                "score": 21,
                "match_percent": 21,
                "threshold_band": "light"
            },
            {
                "code": "C",
                "label": "Caution",
                "tone": "caution",
                "description": "Signals are mixed or weak, so this domain should be treated carefully.",
                "reason": "Review carefully: mixed trust signals.",
                "message": "The current crawl does not show a meaningful caution match.",
                "priority": 0,
                "score": 0,
                "match_percent": 0,
                "threshold_band": "none"
            },
            {
                "code": "Crypto",
                "label": "Crypto drainer risk",
                "tone": "toxic",
                "description": "Wallet-connect or seed-phrase theft patterns were detected.",
                "reason": "Wallet-connect or seed-phrase theft patterns were detected.",
                "message": "No meaningful crypto-drainer signals were detected.",
                "priority": 0,
                "score": 0,
                "match_percent": 0,
                "threshold_band": "none"
            }
        ],
        "nsfw_score": 0,
        "trust_score": 79,
        "manual": {
            "has_changes": false,
            "verified_status": "",
            "tag_codes": "",
            "rating_delta": 0,
            "authority_delta": 0,
            "trust_delta": 0,
            "note": "",
            "adjusted_by": 0,
            "adjusted_at": "",
            "lock_scores": false,
            "lock_flags": false
        },
        "summary": "Trusted (81% match) because low spam indicators plus strong trust, quality, registry, and stability signals were detected.",
        "external_intel": [],
        "external_decision": [],
        "signal_scores": [
            {
                "label": "Strongest tag heuristic",
                "value": "T · 81%",
                "tone": "good",
                "detail": "The highest raw tag match from the heuristic engine before visibility thresholds and manual overrides."
            },
            {
                "label": "Trust score",
                "value": "79/100",
                "tone": "good",
                "detail": "Confidence derived from authority, crawl quality, stability, and risk signals."
            },
            {
                "label": "Authority score",
                "value": "48/100",
                "tone": "caution",
                "detail": "A higher authority score usually means broader reputation and backlink confidence."
            },
            {
                "label": "Spam risk",
                "value": "0/100",
                "tone": "good",
                "detail": "Lower is better. This blends spam indicators with false-positive protections for legitimate sites."
            },
            {
                "label": "Quality score",
                "value": "75/100",
                "tone": "good",
                "detail": "Based on crawl quality, content completeness, and technical evidence."
            },
            {
                "label": "Safety score",
                "value": "100/100",
                "tone": "good",
                "detail": "Higher is safer. Direct fraud signals can heavily cap this even when SEO signals look strong."
            },
            {
                "label": "Fraud score",
                "value": "1/100",
                "tone": "good",
                "detail": "Lower is better. This reflects phishing, drainer, fake-support, fake-shop, and malware signals."
            },
            {
                "label": "Infrastructure risk",
                "value": "21/100",
                "tone": "good",
                "detail": "Lower is better. This reflects the IP, registrar, and nameserver neighbourhood seen by the crawler."
            },
            {
                "label": "Evidence confidence",
                "value": "100/100",
                "tone": "good",
                "detail": "Higher means the crawler had enough pages and registry evidence to make a stronger call."
            },
            {
                "label": "External evidence",
                "value": "Low",
                "tone": "unknown",
                "detail": "Quality of the structured search and review evidence cluster."
            },
            {
                "label": "External decision",
                "value": "Inconclusive",
                "tone": "unknown",
                "detail": "How third-party evidence compares with the current candidate tag."
            },
            {
                "label": "NSFW score",
                "value": "0/100",
                "tone": "good",
                "detail": "Context-aware adult-content detection with medical / educational false-positive reduction."
            },
            {
                "label": "Registry stability",
                "value": "100/100",
                "tone": "good",
                "detail": "Based on age, expiry runway, and the amount of ownership / registrar churn."
            }
        ],
        "signal_sections": [
            {
                "title": "Registry & ownership",
                "items": [
                    {
                        "label": "Domain age",
                        "value": "14.7 years",
                        "tone": "good",
                        "detail": "Older domains generally carry more historical trust than very new ones."
                    },
                    {
                        "label": "Stability score",
                        "value": "100/100",
                        "tone": "good",
                        "detail": "Penalised by registrar, ownership, and nameserver churn."
                    },
                    {
                        "label": "Days to expiry",
                        "value": "107",
                        "tone": "good",
                        "detail": "Very short renewal windows can be a weak trust signal."
                    },
                    {
                        "label": "Registrar / ownership changes",
                        "value": "0 / 0",
                        "tone": "good",
                        "detail": "Frequent ownership churn can weaken trust."
                    },
                    {
                        "label": "Nameserver changes",
                        "value": "0",
                        "tone": "good",
                        "detail": "Repeated infrastructure changes can indicate instability."
                    },
                    {
                        "label": "DNSSEC / privacy",
                        "value": "DNSSEC on · privacy off",
                        "tone": "good",
                        "detail": "DNSSEC strengthens DNS trust; privacy is neutral on its own."
                    }
                ]
            },
            {
                "title": "Reputation & search evidence",
                "items": [
                    {
                        "label": "Backlinks",
                        "value": "3",
                        "tone": "unknown",
                        "detail": "Broader backlink evidence usually improves confidence."
                    },
                    {
                        "label": "Referring domains",
                        "value": "3",
                        "tone": "unknown",
                        "detail": "Unique linking domains are more useful than raw link volume."
                    },
                    {
                        "label": "Organic keywords",
                        "value": "72",
                        "tone": "caution",
                        "detail": "Search footprint helps distinguish real sites from thin shells."
                    },
                    {
                        "label": "Indexed pages",
                        "value": "27",
                        "tone": "caution",
                        "detail": "Larger index coverage usually means more evidence to classify from."
                    },
                    {
                        "label": "Brand strength",
                        "value": "44/100",
                        "tone": "caution",
                        "detail": "Stronger brand signals reduce false positives for legitimate sites."
                    },
                    {
                        "label": "Risk label",
                        "value": "GOOD",
                        "tone": "unknown",
                        "detail": "This is the raw crawl / heuristic risk label feeding the tag model."
                    }
                ]
            },
            {
                "title": "Crawl, content & technicals",
                "items": [
                    {
                        "label": "HTTP status",
                        "value": "200",
                        "tone": "good",
                        "detail": "Healthy responses make classification more reliable."
                    },
                    {
                        "label": "HTTPS / speed",
                        "value": "HTTPS OK · 96 ms",
                        "tone": "good",
                        "detail": "Slow or broken technical signals weaken confidence."
                    },
                    {
                        "label": "Content words",
                        "value": "274",
                        "tone": "caution",
                        "detail": "Thin pages are harder to trust and easier to manipulate."
                    },
                    {
                        "label": "Schema / structure",
                        "value": "0 schema · no meta · no H1",
                        "tone": "unknown",
                        "detail": "Structured markup and basic on-page hygiene improve quality confidence."
                    },
                    {
                        "label": "Links on page",
                        "value": "35 internal · 2 external",
                        "tone": "good",
                        "detail": "Link patterns help detect thin directories and promo pages."
                    },
                    {
                        "label": "Page speed / mobile",
                        "value": "100/100 · 68/100",
                        "tone": "good",
                        "detail": "Better technical quality generally reduces low-effort site patterns."
                    },
                    {
                        "label": "Crawl access",
                        "value": "Open",
                        "tone": "good",
                        "detail": "The crawler reached the site without an anti-bot challenge."
                    }
                ]
            },
            {
                "title": "External evidence & explainability",
                "items": [
                    {
                        "label": "Decision state",
                        "value": "Inconclusive",
                        "tone": "unknown",
                        "detail": "Structured third-party evidence is still too thin, mixed, or unqualified to force a harder verdict."
                    },
                    {
                        "label": "Evidence quality",
                        "value": "Low",
                        "tone": "unknown",
                        "detail": "Blends source trust, domain matching, evidence diversity, and freshness."
                    },
                    {
                        "label": "Support vs contradiction",
                        "value": "0 / 0",
                        "tone": "unknown",
                        "detail": "Compares how much structured external evidence supports the candidate tag against evidence that contradicts it."
                    },
                    {
                        "label": "Qualified risk sources",
                        "value": "No",
                        "tone": "good",
                        "detail": "Risk tags only promote from external evidence when source diversity or source trust thresholds are met."
                    },
                    {
                        "label": "Uncertainty buffer",
                        "value": "Clear",
                        "tone": "good",
                        "detail": "Prevents thin or mixed external evidence from forcing a stronger tag than the evidence can justify."
                    }
                ]
            }
        ],
        "positives": [
            "Established domain age: 14.7 years.",
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness.",
            "DNSSEC is enabled."
        ],
        "risks": []
    },
    "traffic_confidence": 57,
    "whois": {
        "current": {
            "id": 16408,
            "domain": "timotijhof.net",
            "source_type": "rdap",
            "rdap_url": "https://rdap.verisign.com/net/v1/domain/TIMOTIJHOF.NET",
            "registrar_name": "Hosting Concepts B.V. d/b/a Registrar.eu",
            "registrar_handle": "1647",
            "registrant_name": "",
            "registrant_org": "",
            "registrant_country": "",
            "registrant_email": "",
            "abuse_email": "abuse@registrar.eu",
            "created_date": "2011-07-30 06:01:15",
            "updated_date": "2025-07-16 14:54:38",
            "expires_date": "2026-07-30 06:01:15",
            "nameservers_json": "[\"webhostingserver.g1-dns.com\",\"webhostingserver.g1-dns.one\"]",
            "status_json": "[\"client transfer prohibited\"]",
            "dnssec": "signed",
            "privacy_protected": 0,
            "content_hash": "f0cd89441ccd4f691564842081a848843ff58bb9436acb146027c0a9f1503d40",
            "history_count": 1,
            "last_checked_at": "2026-03-17 07:37:45",
            "last_changed_at": "2026-03-17 07:37:45",
            "created_at": "2026-03-17 07:37:45",
            "updated_at": "2026-03-17 07:37:45"
        },
        "history": [
            {
                "id": 16721,
                "domain": "timotijhof.net",
                "source_type": "rdap",
                "registrar_name": "Hosting Concepts B.V. d/b/a Registrar.eu",
                "registrar_handle": "1647",
                "registrant_name": "",
                "registrant_org": "",
                "registrant_country": "",
                "registrant_email": "",
                "abuse_email": "abuse@registrar.eu",
                "created_date": "2011-07-30 06:01:15",
                "updated_date": "2025-07-16 14:54:38",
                "expires_date": "2026-07-30 06:01:15",
                "nameservers_json": "[\"webhostingserver.g1-dns.com\",\"webhostingserver.g1-dns.one\"]",
                "status_json": "[\"client transfer prohibited\"]",
                "dnssec": "signed",
                "privacy_protected": 0,
                "content_hash": "f0cd89441ccd4f691564842081a848843ff58bb9436acb146027c0a9f1503d40",
                "checked_at": "2026-03-17 07:37:45",
                "change_summary": "Initial WHOIS snapshot captured.",
                "created_at": "2026-03-17 07:37:45"
            }
        ],
        "signals": {
            "age_years": 14.7,
            "days_to_expiry": 107,
            "days_since_last_registry_update": 271,
            "stability_score": 100,
            "registrar_changes": 0,
            "ownership_changes": 0,
            "nameserver_changes": 0,
            "status_changes": 0,
            "history_entries": 1,
            "privacy_protected": false,
            "dnssec_enabled": true,
            "has_registrant_country": false,
            "registrant_country": "",
            "nameserver_count": 2,
            "status_count": 1
        }
    },
    "discovered_domain": {
        "id": 68581,
        "domain": "timotijhof.net",
        "first_seen_at": "2026-03-15 18:57:01",
        "last_crawled_at": "2026-03-17 07:37:45",
        "last_title": "Timo Tijhof",
        "last_http_status": 200,
        "discovered_from_domain": "250kb.club",
        "depth": 0,
        "backlinks_count": 3,
        "rating_cache": 56,
        "spam_score": 24,
        "risk_label": "good",
        "category_name": "Personal: Personal Sites & Homepages",
        "primary_country_code": "",
        "internal_links_count": 35,
        "external_links_count": 2,
        "social_profiles_count": 1,
        "content_word_count": 274,
        "title_quality_score": 79,
        "has_meta_description": 0,
        "has_h1": 0,
        "language_code": "en-GB",
        "response_time_ms": 96,
        "robots_status": 200,
        "sitemap_status": 200,
        "sitemap_total_urls": 5,
        "quality_score": 75,
        "site_name": "",
        "canonical_domain": "",
        "favicon_present": 1,
        "schema_org_count": 0,
        "noindex_detected": 0,
        "feed_links_count": 1,
        "https_working": 1,
        "estimated_authority_score": 36,
        "trust_score": 94,
        "nsfw_score": 0,
        "overall_rank_estimate": 8370,
        "primary_tag": "",
        "tag_codes": "",
        "manual_verified_status": "",
        "manual_tag_codes": "",
        "manual_rating_delta": 0,
        "manual_authority_delta": 0,
        "manual_trust_delta": 0,
        "manual_note": null,
        "manual_adjusted_by": null,
        "manual_adjusted_at": null,
        "manual_lock_scores": 0,
        "manual_lock_flags": 0,
        "crawl_blocked": 0,
        "crawl_blocked_by": "",
        "crawl_blocked_reason": null,
        "safety_score": 99,
        "fraud_score": 4,
        "legitimacy_score": 42,
        "infrastructure_risk_score": 21,
        "score_confidence": 100,
        "tag_confidence": 73,
        "category_confidence": 88,
        "deep_crawl_pages": 39,
        "resolved_ip": "141.138.169.222",
        "category_candidates_json": "[{\"category\":\"Personal: Personal Sites & Homepages\",\"score\":88}]",
        "page_signals_json": "[{\"path\":\"/about\",\"status\":200,\"title\":\"About me – Timo Tijhof\",\"word_count\":251,\"summary_text\":\"About me – Timo Tijhof About me &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon About me I’m Principal Engineer for Wikimedia Foundation, the non-profit behind Wikipedia and its sister projects in the free knowledge and open data space. I focus primarily on architecture and performance of the core MediaWiki application. Wikimedia Foundation I started working with Wikimedia in 2011. I helped build and evolve ResourceLoader (a delivery system for JavaScript, CSS, and localisation), VisualEditor (an HTML5 WYSIWYG editor), and the continuous integration infrastructure for frontend tooling (doc publishing, headless unit testing, integration testing). More about: Wikimedia Site In\",\"classification_terms\":[\"about\",\"about me\",\"help\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/login\",\"status\":200,\"title\":\"Log In ‹ Timo Tijhof — WordPress\",\"word_count\":295,\"summary_text\":\"Log In ‹ Timo Tijhof — WordPress Log In &lsaquo; Timo Tijhof &#8212; WordPress document.body.className = document.body.className.replace('no-js','js'); Log In Powered by WordPress Username or Email Address Password Remember Me Lost your password? function wp_attempt_focus() {setTimeout( function() {try {d = document.getElementById( \\\"user_login\\\" );d.focus(); d.select();} catch( er ) {}}, 200);} wp_attempt_focus(); if ( typeof wpOnload === 'function' ) { wpOnload() } &larr; Go to Timo Tijhof Language English (United States) English (UK) var _zxcvbnSettings = {\\\"src\\\":\\\"https://timotijhof.net/wp-includes/js/zxcvbn.min.js\\\"}; //# sourceURL=zxcvbn-async-js-extra wp.i18n.setLocaleData( { 'text direction\\\\u0004ltr': [ 'ltr' ] } ); //# sourceURL=wp-i18n-js-after var pwsL10n = {\\\"unknown\\\":\\\"Password strength unknown\\\",\\\"short\\\":\\\"Very weak\\\",\",\"classification_terms\":[\"login\",\"address\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/about/\",\"status\":200,\"title\":\"About me – Timo Tijhof\",\"word_count\":251,\"summary_text\":\"About me – Timo Tijhof About me &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon About me I’m Principal Engineer for Wikimedia Foundation, the non-profit behind Wikipedia and its sister projects in the free knowledge and open data space. I focus primarily on architecture and performance of the core MediaWiki application. Wikimedia Foundation I started working with Wikimedia in 2011. I helped build and evolve ResourceLoader (a delivery system for JavaScript, CSS, and localisation), VisualEditor (an HTML5 WYSIWYG editor), and the continuous integration infrastructure for frontend tooling (doc publishing, headless unit testing, integration testing). More about: Wikimedia Site In\",\"classification_terms\":[\"about\",\"about me\",\"help\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2026/john-cleese-on-creativity-transcript/\",\"status\":200,\"title\":\"John Cleese on Creativity (Transcript) – Timo Tijhof\",\"word_count\":4325,\"summary_text\":\"John Cleese on Creativity (Transcript) – Timo Tijhof John Cleese on Creativity (Transcript) &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon John Cleese on Creativity (Transcript) 14 Feb 2026 • 17 min read • Linked The below is transcribed from a 1991 talk by John Cleese titled&nbsp;Creativity in Management. I encourage you to watch&nbsp;the 30-minute recording on YouTube. The delivery is hilarious with great comedic timing that my transcript can&#8217;t begin to do justice. I edited the transcript for brevity, and added headings and links. This speech was given by John Cleese to an international audience linked by satellite at the Grosvenor House Hotel London, 23rd January 1991. What creativity isn&#8217\",\"classification_terms\":[\"posts/2026/john-cleese-on-creativity-transcript\",\"about\",\"links\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2025/unifying-mobile-and-desktop-domains/\",\"status\":200,\"title\":\"📎 Unifying Wikipedia mobile and desktop domains – Timo Tijhof\",\"word_count\":176,\"summary_text\":\"📎 Unifying Wikipedia mobile and desktop domains – Timo Tijhof 📎 Unifying Wikipedia mobile and desktop domains &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon 📎 Unifying Wikipedia mobile and desktop domains 24 Nov 2025 • 1 min read • Linked, Wikipedia Until now, when you visited a wiki (like en.wikipedia.org), the server responded in one of two ways: a desktop page, or a redirect to the equivalent mobile URL (like en.m.wikipedia.org). This mobile URL in turn served the mobile version of the page.All wikis now serve mobile page views on the canonical domain, instead of via a redirect.The changed improved mobile response time by 20% worldwide, un-broke Commons SEO, and fixed a long-standing UX issue with opening sha\",\"classification_terms\":[\"posts/2025/unifying-mobile-and-desktop-domains\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2025/youtube-in-a-feed-reader-is-better/\",\"status\":200,\"title\":\"YouTube in a feed reader is… better? – Timo Tijhof\",\"word_count\":1212,\"summary_text\":\"YouTube in a feed reader is… better? – Timo Tijhof YouTube in a feed reader is&#8230; better? &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon YouTube in a feed reader is&#8230; better? 17 May 2025 • 5 min read Two months ago, I deleted my YouTube subscriptions. I now follow YouTube channels in my feed reader instead (I use the NetNewsWire app). How does that work? Is it better? How to follow a channel Copy link to the YouTube channel. Paste into your feed reader. That&#8217;s it! On desktop, or on the mobile site, copy from the addres bar when on any channel page, or from the share sheet, or copy a link to any channel in the search&nbsp;results (via right-click or long-press). In the YouTube mobile app\",\"classification_terms\":[\"posts/2025/youtube-in-a-feed-reader-is-better\",\"about\",\"news\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2024/lockfiles-for-apps-not-packages-still/\",\"status\":200,\"title\":\"Lockfiles for apps, not packages (still) – Timo Tijhof\",\"word_count\":1612,\"summary_text\":\"Lockfiles for apps, not packages (still) – Timo Tijhof Lockfiles for apps, not packages (still) &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon Lockfiles for apps, not packages (still) 12 Sep 2024 • 7 min read • JavaScript TL;DR: My updated take is Lockfiles for Node.js apps, not for other projects. When you run npm install, after you add or change a dependency in package.json, npm finds and selects the latest compatible version, downloads it, and replaces your package-lock.json file to describe what it found. The npm install command does not consider lockfiles from upstream packages you depend on. This is not a bug. It&#8217;s by design. The npm publish command explicitly omits lockfiles from any package.\",\"classification_terms\":[\"posts/2024/lockfiles-for-apps-not-packages-still\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2023/wikimedia-balances-security-and-openness/\",\"status\":200,\"title\":\"How we balance security and openness at Wikimedia – Timo Tijhof\",\"word_count\":1465,\"summary_text\":\"How we balance security and openness at Wikimedia – Timo Tijhof How we balance security and openness at Wikimedia &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon How we balance security and openness at Wikimedia 19 Oct 2023 • 6 min read • Wikipedia How does an open philosophy jive with best practices in performance and security? In short, we&#8217;re selective in our dependencies and audit our own upstream sources. Progressive enhancement not only makes for a fast and accessible site, I argue it&#8217;s also the cheaper choice in the long run! Background The Wikimedia Foundation is the non-profit that hosts Wikipedia and other free knowledge and open data projects. These projects are made possible by a global commu\",\"classification_terms\":[\"posts/2023/wikimedia-balances-security-and-openness\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2023/an-internet-of-php/\",\"status\":200,\"title\":\"An Internet of PHP – Timo Tijhof\",\"word_count\":2079,\"summary_text\":\"An Internet of PHP – Timo Tijhof An Internet of PHP &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon An Internet of PHP 4 Sep 2023 • 9 min read • PHP PHP is big. The trolls can proclaim its all-but-certain &#8220;death&#8221; until the cows come home, but no amount of heckling changes that the Internet runs on PHP. The evidence is overwhelming. What follows is a loosely organised collection of precisely that evidence. Statistics Anecdotes At scale What about my bubble? Conclusion Statistics PHP as programming language of choice From Language analysis by W3 Techs on the top 10 million websites worldwide: PHP at 77.2%. ASP at 6.9%. Ruby at 5.4%. Content management on PHP The bulk of publ\",\"classification_terms\":[\"posts/2023/an-internet-of-php\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2023/browser-adoption/\",\"status\":200,\"title\":\"Browser adoption rates – Timo Tijhof\",\"word_count\":722,\"summary_text\":\"Browser adoption rates – Timo Tijhof Browser adoption rates &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon Browser adoption rates 16 Feb 2023 • 3 min read • JavaScript, Testing, Wikipedia For two years in 2020 and 2021, I shared Wikipedia&#8217;s worldwide browser statistics on Mastodon under #browserstats. They looked a little something like this: Wikipedia.org and sister projects, browserstats for May 2021: 49%: Chrome + Chrome Mobile 24.7%: Safari + Mobile Safari 5.2%: Firefox + Firefox Mobile 2.8%: Edge 2.5%: Samsung Internet […] 100% = 16.4 billion page views (not including bots) As the data includes the browser&#8217;s major version, I wondered whether I could use this to follow th\",\"classification_terms\":[\"posts/2023/browser-adoption\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2022/http-2-performance-revisited/\",\"status\":200,\"title\":\"HTTP/2 performance revisited – Timo Tijhof\",\"word_count\":1043,\"summary_text\":\"HTTP/2 performance revisited – Timo Tijhof HTTP/2 performance revisited &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon HTTP/2 performance revisited 20 Nov 2022 • 4 min read • Performance, Wikipedia Deploying HTTP/2 support to the Wikimedia CDN significantly changed how browsers negotiate and transfer data during the page load process. We found regressions in performance during the transition and are sharing the lessons we learned. Hello, HTTP/2! In 2016, the Wikimedia Foundation deployed HTTP/2 (or “H2”) support to our CDN. At the time, we used Nginx- for TLS termination and two layers of Varnish for caching. We anticipated a possible speed-up as part of the transition, and also identified opp\",\"classification_terms\":[\"posts/2022/http-2-performance-revisited\",\"about\",\"support\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2022/internet-archive-crawling/\",\"status\":200,\"title\":\"How does Internet Archive know? – Timo Tijhof\",\"word_count\":1496,\"summary_text\":\"How does Internet Archive know? – Timo Tijhof How does Internet Archive know? &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon How does Internet Archive know? 20 Jun 2022 • 6 min read • Wikipedia The Internet Archive discovers in real-time when WordPress blogs publish a new post, and when Wikipedia articles reference new sources. How does that work? Wikipedia Wikipedia, and its sister projects such as Wiktionary and Wikidata, run on the MediaWiki open-source software. One of its core features is “Recent changes”. This enables the Wikipedia community to monitor site activity in real-time. We use it to facilitate anti-spam, counter-vandalism, machine learning, and many more quality and research effor\",\"classification_terms\":[\"posts/2022/internet-archive-crawling\",\"about\",\"blog\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2021/treasure-hunt/\",\"status\":200,\"title\":\"📎 Krinkle Treasure Hunt – Timo Tijhof\",\"word_count\":107,\"summary_text\":\"📎 Krinkle Treasure Hunt – Timo Tijhof 📎 Krinkle Treasure Hunt &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon 📎 Krinkle Treasure Hunt 4 Jun 2021 • 1 min read • Linked I miss the era of very Internet-y things, geocities-style scavenger hunts, with easter eggs and all. So, I devised a treasure hunt of my own! → Enter here Reply via emailTimo Tijhof Principal Engineer, Wikimedia&nbsp;Foundation. if (document.body.matches) { document.body.addEventListener(\\\"ontouchstart\\\" in window ? \\\"dblclick\\\" : \\\"click\\\", e => { if (e.target.nodeName === \\\"IMG\\\" && !e.target.matches(\\\"a img\\\")) { if (e.altKey || e.metaKey) { window.open(e.target.src); } else { location.href = e.target.src; } } }); } {\\\"prefetch\\\":[{\\\"s\",\"classification_terms\":[\"posts/2021/treasure-hunt\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2020/profiling-php-at-scale/\",\"status\":200,\"title\":\"Profiling PHP in production at scale – Timo Tijhof\",\"word_count\":1953,\"summary_text\":\"Profiling PHP in production at scale – Timo Tijhof Profiling PHP in production at scale &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon Profiling PHP in production at scale 11 Dec 2020 • 8 min read • Performance, PHP, Wikipedia At Wikipedia, we built an efficient sampling profiler for PHP, and use it to instrument live requests. The trace logs and flame graphs are powered by a simple setup that involves only free open-source software, and runs at low infrastructure cost. I’d like to demonstrate that profiling doesn’t have to be expensive, and can even be performant enough to run continually in production! The principles in this article should apply to most modern programming languages. We developed Exc\",\"classification_terms\":[\"posts/2020/profiling-php-at-scale\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2020/uses-this/\",\"status\":200,\"title\":\"📎 Interview on Uses This – Timo Tijhof\",\"word_count\":141,\"summary_text\":\"📎 Interview on Uses This – Timo Tijhof 📎 Interview on Uses This &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon 📎 Interview on Uses This 7 Oct 2020 • 1 min read • Linked Daniel’s Uses This interview series has been a long-time resident in my feed reader. The over 1,000 interviews feature everyone from the people behind The IT Crowd, Winamp, Erlang, and Unix; to some of my personal heroes such as Vi Hart, Chris Coyier, Cassidy Williams, John Gruber, and Brendan Gregg. Today, yours truly got to add his bit. → usesthis.com Reply via emailTimo Tijhof Principal Engineer, Wikimedia&nbsp;Foundation. if (document.body.matches) { document.body.addEventListener(\\\"ontouchstart\\\" in window ? \\\"dblclick\\\" :\",\"classification_terms\":[\"posts/2020/uses-this\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2020/substr-substring-slice/\",\"status\":200,\"title\":\"Should I substr(), substring(), or slice()? – Timo Tijhof\",\"word_count\":1005,\"summary_text\":\"Should I substr(), substring(), or slice()? – Timo Tijhof Should I substr(), substring(), or slice()? &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon Should I substr(), substring(), or slice()? 26 Sep 2020 • 4 min read • JavaScript What’s the deal with these string methods, and how are they different? String substr() str.substr(start[, length]) This method takes a start index, and optionally a number of characters to read from that start index with the default being to read until the end of the string. 'foobar'.substr(2, 3); // \\\"oba\\\" The start parameter may be a negative number, for starting relative from the end. Note that only the first parameter of substr() supports negative numbers. This in contrast to mo\",\"classification_terms\":[\"posts/2020/substr-substring-slice\",\"about\",\"support\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2020/many-dots-do-not/\",\"status\":200,\"title\":\"Many dots, do not a query make – Timo Tijhof\",\"word_count\":538,\"summary_text\":\"Many dots, do not a query make – Timo Tijhof Many dots, do not a query make &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon Many dots, do not a query make 9 Jan 2020 • 2 min read • Engineering stories, PHP, Wikipedia How a long sequence of dots allowed a regex to reach its internal stack limit. Premise Wikipedia’s production error logs were reporting an increase in app crashes from the search results page. The internal Logstash error report looked as follows: [RuntimeException] Cannot consume query at offset 0 (need to go to 7296) at mediawiki/…/CirrusSearch: QueryStringRegexParser->nextToken at mediawiki/…/CirrusSearch: QueryStringRegexParser->parse at mediawiki/…/CirrusSearch: SearchQueryBuilde\",\"classification_terms\":[\"posts/2020/many-dots-do-not\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2019/to-throw-or-not/\",\"status\":200,\"title\":\"To throw or not to throw, that is the question – Timo Tijhof\",\"word_count\":1227,\"summary_text\":\"To throw or not to throw, that is the question – Timo Tijhof To throw or not to throw, that is the question &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon To throw or not to throw, that is the question 8 Dec 2019 • 5 min read • Engineering stories, PHP, Wikipedia Why does software accept invalid data? And, at what software layer should we reject it? Also, what are “namespaces” and “special pages” on Wikipedia? Premise One day, our server monitoring was reporting a high frequency of fatal errors from web servers. Over 10,000 an hour. The majority shared a single root cause – The program attempted to find the discussion space for a page that didn’t support discussions. Why was the program trying to do this? And h\",\"classification_terms\":[\"posts/2019/to-throw-or-not\",\"about\",\"support\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2019/tomorrow-may-be-sooner/\",\"status\":200,\"title\":\"Tomorrow, may be sooner than you think – Timo Tijhof\",\"word_count\":351,\"summary_text\":\"Tomorrow, may be sooner than you think – Timo Tijhof Tomorrow, may be sooner than you think &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon Tomorrow, may be sooner than you think 7 Dec 2019 • 2 min read • Engineering stories, PHP, Wikipedia These are short stories from bug hunts and incident investigations at Wikipedia. Impact After developers submit code to Gerrit, they eagerly await the result from Jenkins, an automated test runner. Every day during the 15 minute window before 5 PM in San Francisco, code changes submitted for code review would have mysteriously failing tests. Jenkins would wrongly inform developers that their proposed changes cause a problem with the MergeHistory feature of MediaWiki.\",\"classification_terms\":[\"posts/2019/tomorrow-may-be-sooner\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2019/wikipedia-stories-1/\",\"status\":200,\"title\":\"Missing partitions, disappearing audio players, and extreme packet loss – Timo Tijhof\",\"word_count\":1314,\"summary_text\":\"Missing partitions, disappearing audio players, and extreme packet loss – Timo Tijhof Missing partitions, disappearing audio players, and extreme packet loss &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon Missing partitions, disappearing audio players, and extreme packet loss 6 Dec 2019 • 5 min read • Engineering stories, PHP, Wikipedia These are short stories from bug hunts and incident investigations at Wikipedia. New database partition Mystery of Disappearing Audio Players Losing packets on the way to Logstash New database partition A user reported a timeout error for certain queries from the Public log viewer on commons.wikimedia.org. Database administrator Manuel Aróstegui investigated the underlying query and found that it was sl\",\"classification_terms\":[\"posts/2019/wikipedia-stories-1\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2019/wikipedia-javascript-on-budget/\",\"status\":200,\"title\":\"Wikipedia’s JavaScript initialisation on a budget – Timo Tijhof\",\"word_count\":1098,\"summary_text\":\"Wikipedia’s JavaScript initialisation on a budget – Timo Tijhof Wikipedia&#8217;s JavaScript initialisation on a budget &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon Wikipedia&#8217;s JavaScript initialisation on a budget 18 Sep 2019 • 5 min read • JavaScript, Performance, Wikipedia This week saw the conclusion of a project that I’ve been shepherding on and off since September of last year. The goal was for the initialisation of our asynchronous JavaScript pipeline (at the time, 36 kilobytes in size) to fit within a budget of 28 KB. The above graph shows the transfer size over time. Sizes are after compression (i.e. the net bandwidth cost as perceived from a&nbsp;browser). In total, the year-long effort is saving\",\"classification_terms\":[\"posts/2019/wikipedia-javascript-on-budget\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2019/protect-yourself-from-npm/\",\"status\":200,\"title\":\"How to protect yourself from npm – Timo Tijhof\",\"word_count\":1483,\"summary_text\":\"How to protect yourself from npm – Timo Tijhof How to protect yourself from npm &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon How to protect yourself from npm 12 Sep 2019 • 6 min read • JavaScript, Testing, Wikipedia What’s the worst that could happen after npm&nbsp;install? When you open an app or execute a program from the terminal, that program can do anything that you can do. In a nutshell: Imagine if your computer were to disappear in front of your eyes and re-appear in front of mine. Still open. Still unlocked. What could I do from this moment on? That is what an unknown program could do. What is at&nbsp;stake? How does it compare to other package managers? What can you do about&nbsp;it? Ph\",\"classification_terms\":[\"posts/2019/protect-yourself-from-npm\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2018/twitter-browsehappy/\",\"status\":200,\"title\":\"Six years of BrowseHappy – Timo Tijhof\",\"word_count\":391,\"summary_text\":\"Six years of BrowseHappy – Timo Tijhof Six years of BrowseHappy &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon Six years of BrowseHappy 16 May 2018 • 2 min read • Testing, Wikipedia Six years ago (in 2012), I was looking for a newsletter about browser releases. At the time, my motivation was to remember to regularly check and update the jQuery TestSwarm framework as needed for each new browser release. I found a simple overview at browsehappy.com, run by WordPress. Lacking RSS, I decided to simply check it on a regular basis, and created @browsehappy on Twitter for others also looking to follow browser releases. I decided to pair it with links to relevant blog posts and documentation. Then\",\"classification_terms\":[\"posts/2018/twitter-browsehappy\",\"about\",\"news\",\"blog\",\"links\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2018/measuring-wikipedia-page-load-times/\",\"status\":200,\"title\":\"Measuring Wikipedia page load times – Timo Tijhof\",\"word_count\":1697,\"summary_text\":\"Measuring Wikipedia page load times – Timo Tijhof Measuring Wikipedia page load times &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon Measuring Wikipedia page load times 9 Jan 2018 • 7 min read • JavaScript, Performance, Wikipedia This post shows how we measure and interpret load times on Wikipedia. It also explains what real-user metrics are, and how percentiles work. Navigation Timing When a browser loads a page, the page can include program code (JavaScript). This program will run inside the browser, alongside the page. This makes it possible for a page to become dynamic (more than static text and images). When you search on Wikipedia.org, the suggestions that appear are made with JavaScript. Brows\",\"classification_terms\":[\"posts/2018/measuring-wikipedia-page-load-times\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2015/qunit-anti-patterns/\",\"status\":200,\"title\":\"QUnit anti-patterns – Timo Tijhof\",\"word_count\":436,\"summary_text\":\"QUnit anti-patterns – Timo Tijhof QUnit anti-patterns &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon QUnit anti-patterns 13 Feb 2015 • 2 min read • JavaScript, Testing Today, I’d like to challenge the assert.ok and assert.not* methods. I believe they may’ve become an anti-pattern. assert.ok Using assert.ok() indicates one of two problems: The software, or testing strategy, is unreliable. (Unsure what value to expect.) The author is using it as shortcut for a proper comparison. The former necessitates improvement to the code being tested. The latter comes with two additional caveats: Less debug information. (Inaccurate actual/expected diff). Without an expected value provided, one can’\",\"classification_terms\":[\"posts/2015/qunit-anti-patterns\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2014/phantomjs-for-ci/\",\"status\":200,\"title\":\"PhantomJS for CI (anno 2014) – Timo Tijhof\",\"word_count\":685,\"summary_text\":\"PhantomJS for CI (anno 2014) – Timo Tijhof PhantomJS for CI (anno 2014) &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon PhantomJS for CI (anno 2014) 3 Oct 2014 • 3 min read • JavaScript, Testing How did Apple create Safari, and what is PhantomJS? Safari In January 2003 Apple announced Safari, their new web browser for Mac.[1] The Safari team had just spent 2002 building Safari atop KHTML and KJS,[2] the KDE layout and javascript engines developed for Konqueror. The Safari team kept the codebase somewhat modular. This allowed Apple-branding and other proprietary features to stay separate whilst also having a sustainable open-source project (WebKit) that is standalone and compilable into a fully\",\"classification_terms\":[\"posts/2014/phantomjs-for-ci\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/posts/2013/the-word-rebuke/\",\"status\":200,\"title\":\"The word “rebuke” – Timo Tijhof\",\"word_count\":359,\"summary_text\":\"The word “rebuke” – Timo Tijhof The word “rebuke” &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon The word “rebuke” 18 Dec 2013 • 2 min read • English language re·buke verb express sharp disapproval or criticism of (someone) because of their behavior or actions “she had rebuked him for drinking too much“ “the judge publicly rebuked the jury“ noun an expression of sharp disapproval or criticism “he hadn’t meant it as a rebuke, but Neil flinched“ (from the&nbsp;Oxford English Dictionary) I ran into the word whilst watching an episode of&nbsp;Elementary. The scene continued to feature more rich language. Holmes: I’ve given further consideration to your rebuke regarding my capacity for n\",\"classification_terms\":[\"posts/2013/the-word-rebuke\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/tags/engineering-stories/\",\"status\":200,\"title\":\"Engineering stories – Timo Tijhof\",\"word_count\":174,\"summary_text\":\"Engineering stories – Timo Tijhof Engineering stories &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon Tag: Engineering stories 4 posts • View all posts Many dots, do not a query make 9 Jan 2020 How a long sequence of dots allowed a regex to reach its internal stack limit. To throw or not to throw, that is the question 8 Dec 2019 Why does software accept invalid data? And, at what software layer should we reject it? Also, what are “namespaces” and “special pages” on Wikipedia? Tomorrow, may be sooner than you think 7 Dec 2019 These are short stories from bug hunts and incident investigations at Wikipedia. Missing partitions, disappearing audio players, and extreme packet loss 6 Dec 2019\",\"classification_terms\":[\"tags/engineering-stories\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/tags/english-language/\",\"status\":200,\"title\":\"English language – Timo Tijhof\",\"word_count\":127,\"summary_text\":\"English language – Timo Tijhof English language &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon Tag: English language 1 post • View all posts The word “rebuke” 18 Dec 2013 re·buke verb express sharp disapproval or criticism of (someone) because of their behavior or actions “she had rebuked him for drinking too much“ “the judge publicly rebuked the jury“ noun an expression of sharp disapproval or criticism “he hadn’t meant it as a rebuke, but Neil flinched“ (from the&nbsp;Oxford English Dictionary) I ran into the… if (document.body.matches) { document.body.addEventListener(\\\"ontouchstart\\\" in window ? \\\"dblclick\\\" : \\\"click\\\", e => { if (e.target.nodeName === \\\"IMG\\\" && !e.target.matches(\\\"a\",\"classification_terms\":[\"tags/english-language\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/tags/javascript/\",\"status\":200,\"title\":\"JavaScript – Timo Tijhof\",\"word_count\":352,\"summary_text\":\"JavaScript – Timo Tijhof JavaScript &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon Tag: JavaScript 8 posts • View all posts Lockfiles for apps, not packages (still) 12 Sep 2024 TL;DR: My updated take is Lockfiles for Node.js apps, not for other projects. When you run npm install, after you add or change a dependency in package.json, npm finds and selects the latest compatible version, downloads it, and replaces your package-lock.json file to describe what it found. The npm install command does not consider lockfiles… Browser adoption rates 16 Feb 2023 For two years in 2020 and 2021, I shared Wikipedia&#8217;s worldwide browser statistics on Mastodon under #browserstats. They\",\"classification_terms\":[\"tags/javascript\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/tags/linked/\",\"status\":200,\"title\":\"Linked – Timo Tijhof\",\"word_count\":240,\"summary_text\":\"Linked – Timo Tijhof Linked &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon Tag: Linked 4 posts • View all posts John Cleese on Creativity (Transcript) 14 Feb 2026 The below is transcribed from a 1991 talk by John Cleese titled&nbsp;Creativity in Management. I encourage you to watch&nbsp;the 30-minute recording on YouTube. The delivery is hilarious with great comedic timing that my transcript can&#8217;t begin to do justice. I edited the transcript for brevity, and added headings and links. This speech was given by… 📎 Unifying Wikipedia mobile and desktop domains 24 Nov 2025 Until now, when you visited a wiki (like en.wikipedia.org), the server responded in one of two ways\",\"classification_terms\":[\"tags/linked\",\"about\",\"links\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/tags/performance/\",\"status\":200,\"title\":\"Performance – Timo Tijhof\",\"word_count\":241,\"summary_text\":\"Performance – Timo Tijhof Performance &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon Tag: Performance 4 posts • View all posts HTTP/2 performance revisited 20 Nov 2022 Deploying HTTP/2 support to the Wikimedia CDN significantly changed how browsers negotiate and transfer data during the page load process. We found regressions in performance during the transition and are sharing the lessons we learned. Profiling PHP in production at scale 11 Dec 2020 At Wikipedia, we built an efficient sampling profiler for PHP, and use it to instrument live requests. The trace logs and flame graphs are powered by a simple setup that involves only free open-source software, and runs at low infr\",\"classification_terms\":[\"tags/performance\",\"about\",\"support\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/tags/php/\",\"status\":200,\"title\":\"PHP – Timo Tijhof\",\"word_count\":236,\"summary_text\":\"PHP – Timo Tijhof PHP &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon Tag: PHP 6 posts • View all posts An Internet of PHP 4 Sep 2023 Statistics and anecdotes about PHP at scale. Profiling PHP in production at scale 11 Dec 2020 At Wikipedia, we built an efficient sampling profiler for PHP, and use it to instrument live requests. The trace logs and flame graphs are powered by a simple setup that involves only free open-source software, and runs at low infrastructure cost. Many dots, do not a query make 9 Jan 2020 How a long sequence of dots allowed a regex to reach its internal stack limit. To throw or not to throw, that is the question 8 Dec 2019 Why does software accep\",\"classification_terms\":[\"tags/php\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/tags/testing/\",\"status\":200,\"title\":\"Testing – Timo Tijhof\",\"word_count\":243,\"summary_text\":\"Testing – Timo Tijhof Testing &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon Tag: Testing 5 posts • View all posts Browser adoption rates 16 Feb 2023 For two years in 2020 and 2021, I shared Wikipedia&#8217;s worldwide browser statistics on Mastodon under #browserstats. They looked a little something like this: As the data includes the browser&#8217;s major version, I wondered whether I could use this to follow the adoption rate through each browser&#8217;s release cycle. The short answer is&#8230; Yes! Here… How to protect yourself from npm 12 Sep 2019 What’s the worst that could happen after npm&nbsp;install? Six years of BrowseHappy 16 May 2018 Six years ago (in 2012),\",\"classification_terms\":[\"tags/testing\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/tags/wikipedia/\",\"status\":200,\"title\":\"Wikipedia – Timo Tijhof\",\"word_count\":645,\"summary_text\":\"Wikipedia – Timo Tijhof Wikipedia &#8211; Timo Tijhof img:is([sizes=auto i],[sizes^=\\\"auto,\\\" i]){contain-intrinsic-size:3000px 1500px} /*# sourceURL=wp-img-auto-sizes-contain-inline-css */ Timo Tijhof About &bull; Colophon Tag: Wikipedia 14 posts • View all posts 📎 Unifying Wikipedia mobile and desktop domains 24 Nov 2025 Until now, when you visited a wiki (like en.wikipedia.org), the server responded in one of two ways: a desktop page, or a redirect to the equivalent mobile URL (like en.m.wikipedia.org). This mobile URL in turn served the mobile version of the page. All wikis now serve mobile page views on the canonical domain, instead of… How we balance security and openness at Wikimedia 19 Oct 2023 How does an open philosophy jive with best practices in performance and security? In short, we&#8217;re selective\",\"classification_terms\":[\"tags/wikipedia\",\"about\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/feed/\",\"status\":200,\"title\":\"Timo Tijhof\",\"word_count\":25449,\"summary_text\":\"Timo Tijhof Timo Tijhof https://timotijhof.net Wed, 04 Mar 2026 01:15:49 +0000 en-GB hourly 1 https://wordpress.org/?v=6.9.4 John Cleese on Creativity (Transcript) https://timotijhof.net/posts/2026/john-cleese-on-creativity-transcript/ Sat, 14 Feb 2026 12:00:00 +0000 https://timotijhof.net/?p=1367 The below is transcribed from a 1991 talk by John Cleese titled&nbsp;Creativity in Management. I encourage you to watch&nbsp;the 30-minute recording on YouTube. The delivery is hilarious with great comedic timing that my transcript can&#8217;t begin to do justice. I edited the transcript for brevity, and added headings and links. This speech was given by John Cleese to an international audience linked by satellite at the Grosvenor House Hotel London, 23rd January 1991. What creativity isn&#8217;t A couple of\",\"classification_terms\":[\"feed\",\"links\"],\"external_refs\":[],\"depth\":1},{\"path\":\"/@krinkle\",\"status\":200,\"title\":\"Timo Tijhof (@krinkle@fosstodon.org) - Fosstodon\",\"word_count\":112,\"summary_text\":\"Timo Tijhof (@krinkle@fosstodon.org) - Fosstodon Timo Tijhof (@krinkle@fosstodon.org) - Fosstodon {\\\"meta\\\":{\\\"access_token\\\":null,\\\"activity_api_enabled\\\":true,\\\"admin\\\":null,\\\"domain\\\":\\\"fosstodon.org\\\",\\\"limited_federation_mode\\\":false,\\\"locale\\\":\\\"en-GB\\\",\\\"mascot\\\":null,\\\"profile_directory\\\":true,\\\"registrations_open\\\":false,\\\"repository\\\":\\\"mastodon/mastodon\\\",\\\"search_enabled\\\":true,\\\"single_user_mode\\\":false,\\\"source_url\\\":\\\"https://github.com/mastodon/mastodon\\\",\\\"sso_redirect\\\":null,\\\"status_page_url\\\":\\\"https://status.fosstodon.org/\\\",\\\"streaming_api_base_url\\\":\\\"wss://fosstodon.org\\\",\\\"title\\\":\\\"Fosstodon\\\",\\\"landing_page\\\":\\\"trends\\\",\\\"trends_enabled\\\":true,\\\"version\\\":\\\"4.5.7\\\",\\\"terms_of_service_enabled\\\":false,\\\"local_live_feed_access\\\":\\\"public\\\",\\\"remote_live_feed_access\\\":\\\"public\\\",\\\"local_topic_feed_access\\\":\\\"public\\\",\\\"remote_topic_feed_access\\\":\\\"public\\\",\\\"auto_play_gif\\\":null,\\\"display_media\",\"classification_terms\":[\"@krinkle\",\"privacy\",\"terms\",\"api\"],\"external_refs\":[],\"depth\":2},{\"path\":\"/key.asc\",\"status\":200,\"title\":\"\",\"word_count\":1235,\"summary_text\":\"-----BEGIN PGP PUBLIC KEY BLOCK----- mQINBFhe3rsBEADjfaWlxTukmQEyVFXqAt7uUYCtlzWd1c+NymMZ8f5nZjLfrb3+ J/7zNYb7NF+diL2SfPznVSnJOunxqAe0BFtGZt10qhwfNb/6nCxAJxyZFHv8Zb+t 4ed9uBplNnjUs1ow7tEtNiYnrXb4ByCLkYY+XP90lT6sxGg7WgzP/5LUDEVypeF8 h6DsKrJ0KvYTQKhX7aQ4yq3B37YcyY1gznxsPO2+F54ylhNBGltYJy0rFsF0XHAt M++XURJlqpfRyGg7Ly5MmI3LJj32jaNS8VHsDOrxkpiKsyzOj+e4YtTqFOqJzddc a/AuHjuZuhnHqu5nKXAHzk8ZCDqvNepbYdZaESKLR8gq8CHBBGnXbF5GAIUdqydb xT6DAZWG0wNmxpMH+2qe0hdaA7sEU0NdBZ0xFHjU75vbnMdpMmEVdScyPlt4XE3m FAZFKAe+koSXPRgcHuF7r1joRJ/L5dFXJTYOMBUnHHgjzdujbD03D74L0Ouzo47W JG8dUwCMu4rlH/ev2A7kNwJEqlt/liSmbW0G3v2wow4a0D2J96kwuMnVVG+blo5U EbxZ8gyhGsAeuuePNx4otCQcTo5VWtIitjfPaJZYfIJx10gf25ic5V1r43afYs4j rYwO3UXlB2vgCP7cT4O3b7GADypDLc32a4G8bEw4i1gmj0gVEmyMg0ezEQARAQAB tCJUaW1vIFRpamhvZiA8dGltb3RpamhvZkBnbWFpbC5jb20+\",\"classification_terms\":[\"key.asc\"],\"external_refs\":[],\"depth\":2},{\"path\":\"/wp-login.php\",\"status\":200,\"title\":\"Log In ‹ Timo Tijhof — WordPress\",\"word_count\":295,\"summary_text\":\"Log In ‹ Timo Tijhof — WordPress Log In &lsaquo; Timo Tijhof &#8212; WordPress document.body.className = document.body.className.replace('no-js','js'); Log In Powered by WordPress Username or Email Address Password Remember Me Lost your password? function wp_attempt_focus() {setTimeout( function() {try {d = document.getElementById( \\\"user_login\\\" );d.focus(); d.select();} catch( er ) {}}, 200);} wp_attempt_focus(); if ( typeof wpOnload === 'function' ) { wpOnload() } &larr; Go to Timo Tijhof Language English (United States) English (UK) var _zxcvbnSettings = {\\\"src\\\":\\\"https://timotijhof.net/wp-includes/js/zxcvbn.min.js\\\"}; //# sourceURL=zxcvbn-async-js-extra wp.i18n.setLocaleData( { 'text direction\\\\u0004ltr': [ 'ltr' ] } ); //# sourceURL=wp-i18n-js-after var pwsL10n = {\\\"unknown\\\":\\\"Password strength unknown\\\",\\\"short\\\":\\\"Very weak\\\",\",\"classification_terms\":[\"wp-login.php\",\"login\",\"address\"],\"external_refs\":[],\"depth\":2}]",
        "score_reasons_json": "[]",
        "route_domain": "timotijhof.net",
        "display_domain": "timotijhof.net"
    },
    "explainability": {
        "summary": "timotijhof.net currently scores 64/100. The score is being shaped by a mixed signal profile rather than one dominant factor. Evidence confidence is strong enough for a relatively stable read. This is an estimated profile rather than a manually tracked one. Crawler access looks clean.",
        "badges": [
            {
                "label": "Profile",
                "value": "Estimated profile",
                "tone": "unknown",
                "detail": null
            },
            {
                "label": "Evidence confidence",
                "value": "High confidence",
                "tone": "good",
                "detail": "100/100"
            },
            {
                "label": "Traffic confidence",
                "value": "Moderate confidence",
                "tone": "caution",
                "detail": "57/100"
            },
            {
                "label": "Crawler access",
                "value": "Clean visibility",
                "tone": "good",
                "detail": null
            }
        ],
        "weighted_contributions": [
            {
                "label": "Quality system",
                "points": "+28.2",
                "tone": "good",
                "detail": "Technical quality, crawl depth, page structure, and implementation hygiene. Current subsystem score: 83/100."
            },
            {
                "label": "Reputation system",
                "points": "+15.6",
                "tone": "caution",
                "detail": "Authority, search visibility, reach, engagement, and registry stability. Current subsystem score: 46/100."
            },
            {
                "label": "Safety system",
                "points": "+31.7",
                "tone": "good",
                "detail": "Fraud, spam, and trust signals from infrastructure, crawl, and registry evidence. Current subsystem score: 99/100."
            },
            {
                "label": "Risk clamp",
                "points": "-12.0",
                "tone": "risk",
                "detail": "Safety thresholds capped the final score until the risk profile improves."
            }
        ],
        "evidence_cards": [
            {
                "label": "Authority and trust",
                "value": "46/100 · trust 75/100",
                "tone": "caution",
                "detail": "138 monthly visitors, 72 organic keywords, brand completeness 44/100, engagement 76/100."
            },
            {
                "label": "Backlink and search evidence",
                "value": "3 referring domains",
                "tone": "good",
                "detail": "3 backlinks across 3 referring domains. Diversity 94/100; spam penalty 0."
            },
            {
                "label": "Registry and domain stability",
                "value": "14.7 years old",
                "tone": "good",
                "detail": "Stability 100/100 · age 14.7 years · registrar Hosting Concepts B.V. d/b/a Registrar.eu · expires in 107 days."
            },
            {
                "label": "Safety and fraud posture",
                "value": "Safety 99/100 · fraud 4/100",
                "tone": "good",
                "detail": "Primary tag T · safety 99/100 · fraud 4/100."
            }
        ],
        "positives": [
            "Established domain age: 14.7 years.",
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness.",
            "DNSSEC is enabled.",
            "Registry history looks stable, which supports legitimacy and trust.",
            "The domain has been registered for years, which usually improves trust confidence."
        ],
        "risks": [],
        "freshness": [
            {
                "label": "Crawl evidence",
                "value": "2026-03-17 07:37:45",
                "tone": "risk",
                "detail": "Crawl and page content sample. Age: 27d ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-03-17 07:37:45",
                "tone": "risk",
                "detail": "Registry profile and stability signals. Age: 27d ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-04-13 16:25:36",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-04-13 16:25:36",
                "tone": "good",
                "detail": "Estimated trend derived from current profile and crawl signals. Age: 0s ago."
            },
            {
                "label": "Audience geography",
                "value": "Not captured yet",
                "tone": "unknown",
                "detail": "Audience mix is estimated from available signals rather than first-party audience logs."
            }
        ],
        "section_notes": {
            "audience": "Audience geography is estimated from category, country, traffic mix, and brand signals until first-party audience data is collected.",
            "keywords": "Top keywords are estimated from crawl language, brand, category, and visibility signals until tracked keyword snapshots are stored.",
            "history": "Rank history is estimated from the current profile because no stored history exists for this domain yet."
        },
        "base_weighted_score": 76,
        "fraud_clamp_penalty": 12,
        "final_score": 64
    },
    "insight_snapshot": {
        "version": 1,
        "generated_at": "2026-04-13T16:25:36+00:00",
        "domain": "timotijhof.net",
        "display_name": "Timo Tijhof",
        "is_tracked": false,
        "is_estimated": true,
        "overall_score": 64,
        "authority_score": 46,
        "trust_score": 75,
        "safety_score": 99,
        "fraud_score": 4,
        "confidence_score": 100,
        "traffic_confidence": 57,
        "last_crawled_at": "2026-03-17 07:37:45",
        "crawl_blocked": false,
        "summary": "timotijhof.net currently scores 64/100. The score is being shaped by a mixed signal profile rather than one dominant factor. Evidence confidence is strong enough for a relatively stable read. This is an estimated profile rather than a manually tracked one. Crawler access looks clean.",
        "badges": [
            {
                "label": "Profile",
                "value": "Estimated profile",
                "tone": "unknown",
                "detail": null
            },
            {
                "label": "Evidence confidence",
                "value": "High confidence",
                "tone": "good",
                "detail": "100/100"
            },
            {
                "label": "Traffic confidence",
                "value": "Moderate confidence",
                "tone": "caution",
                "detail": "57/100"
            },
            {
                "label": "Crawler access",
                "value": "Clean visibility",
                "tone": "good",
                "detail": null
            }
        ],
        "top_positive_signals": [
            "Established domain age: 14.7 years.",
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness.",
            "DNSSEC is enabled.",
            "Registry history looks stable, which supports legitimacy and trust."
        ],
        "top_risk_signals": [],
        "freshness": [
            {
                "label": "Crawl evidence",
                "value": "2026-03-17 07:37:45",
                "tone": "risk",
                "detail": "Crawl and page content sample. Age: 27d ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-03-17 07:37:45",
                "tone": "risk",
                "detail": "Registry profile and stability signals. Age: 27d ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-04-13 16:25:36",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-04-13 16:25:36",
                "tone": "good",
                "detail": "Estimated trend derived from current profile and crawl signals. Age: 0s ago."
            },
            {
                "label": "Audience geography",
                "value": "Not captured yet",
                "tone": "unknown",
                "detail": "Audience mix is estimated from available signals rather than first-party audience logs."
            }
        ],
        "top_tags": [
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good"
            },
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown"
            }
        ]
    },
    "is_tracked": false,
    "is_estimated": true,
    "live_state": {
        "status": "processing",
        "status_label": "Cache build running",
        "message": "The refreshed page cache is still being built for this domain.",
        "updated_at": "2026-04-13T17:54:30+00:00"
    },
    "refresh_state": {
        "canRequest": false,
        "queued": true,
        "processing": true,
        "stageKey": "cache-queued",
        "stageLabel": "Cache build running",
        "cooldownUntil": null,
        "message": "The refreshed page cache is still being built for this domain.",
        "action": "/domain/timotijhof.net/refresh",
        "isGuestCooldown": false,
        "cooldownSeconds": 0
    },
    "urlscan_report": {
        "domain": "timotijhof.net",
        "status": "idle",
        "submitted_at": null,
        "completed_at": null,
        "last_checked_at": null,
        "last_error": "",
        "submitted_url": "https://timotijhof.net/",
        "uuid": "",
        "result_url": "",
        "api_result_url": "",
        "visibility": "public",
        "summary": "No urlscan.io report has been requested for this domain yet.",
        "report": [],
        "report_summary": [],
        "is_fresh": false,
        "can_retry": true,
        "poll_after_seconds": 20
    }
}