{
    "ready": true,
    "site": {
        "id": 0,
        "domain": "flemi.ng",
        "display_name": "Will Fleming programs computers.",
        "primary_country_code": "NG",
        "category_name": "Business: Corporate & Professional Services"
    },
    "metrics": {
        "global_rank": 47523,
        "country_rank": 6,
        "category_rank": 16168,
        "daily_pageviews_per_visitor": 3.7,
        "daily_time_on_site_seconds": 275,
        "bounce_rate": 36.92,
        "search_visits_percent": 34.01,
        "total_sites_linking_in": 1,
        "monthly_unique_visitors": 47,
        "recorded_at": "2026-03-19 22:38:48"
    },
    "audit": {
        "score": 78
    },
    "traffic_sources": {
        "direct_percent": 28.64,
        "search_percent": 31.5,
        "social_percent": 7.33,
        "referral_percent": 13.6,
        "email_percent": 7.33,
        "paid_percent": 11.6
    },
    "seo_profile": {
        "backlinks_total": 1,
        "referring_domains": 1,
        "dofollow_backlinks_percent": 100,
        "organic_keywords": 7,
        "indexed_pages": 4,
        "page_speed_score": 81,
        "mobile_friendliness_score": 78,
        "authority_score": 14,
        "spam_risk_score": 34
    },
    "crawl_report": {
        "robots_status": 200,
        "sitemap_status": 404,
        "sitemap_total_urls": 0,
        "crawl_blocked": false,
        "crawl_blocked_by": "",
        "crawl_blocked_reason": "",
        "notes": [
            "Sitemap could not be confirmed."
        ],
        "created_at": "2026-03-19 22:38:48"
    },
    "keywords": [
        {
            "keyword": "Will Fleming programs computers.",
            "position": 31,
            "search_engine": "Estimated",
            "checked_at": "2026-04-18 22:53:35",
            "is_estimated": true
        },
        {
            "keyword": "Will Fleming programs computers. business: corporate & professional services",
            "position": 33,
            "search_engine": "Estimated",
            "checked_at": "2026-04-18 22:53:35",
            "is_estimated": true
        },
        {
            "keyword": "Will Fleming programs computers. reviews",
            "position": 35,
            "search_engine": "Estimated",
            "checked_at": "2026-04-18 22:53:35",
            "is_estimated": true
        },
        {
            "keyword": "will",
            "position": 37,
            "search_engine": "Estimated",
            "checked_at": "2026-04-18 22:53:35",
            "is_estimated": true
        },
        {
            "keyword": "fleming",
            "position": 39,
            "search_engine": "Estimated",
            "checked_at": "2026-04-18 22:53:35",
            "is_estimated": true
        },
        {
            "keyword": "programs",
            "position": 41,
            "search_engine": "Estimated",
            "checked_at": "2026-04-18 22:53:35",
            "is_estimated": true
        },
        {
            "keyword": "computers",
            "position": 43,
            "search_engine": "Estimated",
            "checked_at": "2026-04-18 22:53:35",
            "is_estimated": true
        },
        {
            "keyword": "flemi",
            "position": 45,
            "search_engine": "Estimated",
            "checked_at": "2026-04-18 22:53:35",
            "is_estimated": true
        }
    ],
    "rating": {
        "overall": 64,
        "label": "Healthy",
        "breakdown": [
            {
                "label": "Technical foundation",
                "score": 12,
                "max": 18
            },
            {
                "label": "Authority & trust",
                "score": 4,
                "max": 30
            },
            {
                "label": "Reach & market presence",
                "score": 3,
                "max": 18
            },
            {
                "label": "Search visibility",
                "score": 2,
                "max": 12
            },
            {
                "label": "Engagement & retention",
                "score": 8,
                "max": 10
            },
            {
                "label": "Channels & diversification",
                "score": 4,
                "max": 6
            },
            {
                "label": "Registry stability",
                "score": 3,
                "max": 6
            },
            {
                "label": "Quality system",
                "score": 67,
                "max": 100
            },
            {
                "label": "Reputation system",
                "score": 29,
                "max": 100
            },
            {
                "label": "Safety system",
                "score": 100,
                "max": 100
            },
            {
                "label": "Evidence confidence",
                "score": 100,
                "max": 100
            },
            {
                "label": "External intelligence",
                "score": 52,
                "max": 100
            },
            {
                "label": "API intelligence",
                "score": 54,
                "max": 100
            }
        ],
        "authority_score": 14,
        "quality_score": 67,
        "reputation_score": 29,
        "safety_score": 100,
        "confidence_score": 100,
        "fraud_score": 0,
        "authority_signals": {
            "backlinks": 1,
            "referring_domains": 1,
            "organic_keywords": 7,
            "indexed_pages": 4,
            "monthly_visitors": 47,
            "global_rank": 47523,
            "engagement_score": 76,
            "crawl_quality_score": 83,
            "brand_completeness_score": 53,
            "link_diversity_score": 92,
            "technical_reliability_score": 77,
            "whois_score": 45,
            "whois_age_years": 0,
            "whois_stability_score": 100,
            "spam_penalty": 3
        },
        "whois_signals": {
            "age_years": 0,
            "days_to_expiry": null,
            "days_since_last_registry_update": null,
            "stability_score": 100,
            "registrar_changes": 0,
            "ownership_changes": 0,
            "nameserver_changes": 0,
            "status_changes": 0,
            "history_entries": 1,
            "privacy_protected": false,
            "dnssec_enabled": false,
            "has_registrant_country": false,
            "registrant_country": "",
            "nameserver_count": 0,
            "status_count": 0
        }
    },
    "authority_score": 14,
    "trust_score": 37,
    "domain_tags": {
        "primary_tag": "Uncertain",
        "primary_tag_score": 68,
        "primary_candidate": "Uncertain",
        "primary_candidate_score": 68,
        "tag_codes": "Uncertain,T",
        "tags": [
            {
                "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": "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": 63,
                "score": 63,
                "match_percent": 63,
                "threshold_band": "strong"
            }
        ],
        "tag_breakdown": [
            {
                "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": "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": 63,
                "score": 63,
                "match_percent": 63,
                "threshold_band": "strong"
            },
            {
                "code": "NSFW",
                "label": "NSFW",
                "tone": "nsfw",
                "description": "Adult or explicit content is likely present.",
                "reason": "Adult-content terms, adult-service cues, or explicit-content patterns were detected.",
                "message": "No meaningful NSFW match was detected.",
                "priority": 14,
                "score": 14,
                "match_percent": 14,
                "threshold_band": "none"
            },
            {
                "code": "Spam",
                "label": "Spam",
                "tone": "spam",
                "description": "Manipulative, low-quality, or overly promotional patterns were detected.",
                "reason": "Spam score 34/100 with very thin crawl signals.",
                "message": "No meaningful spam-pattern match was detected.",
                "priority": 12,
                "score": 12,
                "match_percent": 12,
                "threshold_band": "none"
            },
            {
                "code": "D",
                "label": "Dangerous",
                "tone": "toxic",
                "description": "Strong signs of phishing, malware, or other harmful behaviour were detected.",
                "reason": "Very high spam signals were detected alongside suspicious domain or thin-content patterns.",
                "message": "No meaningful dangerous-signal match was detected.",
                "priority": 8,
                "score": 8,
                "match_percent": 8,
                "threshold_band": "none"
            }
        ],
        "nsfw_score": 14,
        "trust_score": 38,
        "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": "Uncertain (68% match) because the evidence is mixed or only partially corroborated, so the system avoided a harder automated verdict.",
        "external_intel": [],
        "external_decision": [],
        "signal_scores": [
            {
                "label": "Strongest tag heuristic",
                "value": "Uncertain · 68%",
                "tone": "unknown",
                "detail": "The highest raw tag match from the heuristic engine before visibility thresholds and manual overrides."
            },
            {
                "label": "Trust score",
                "value": "38/100",
                "tone": "spam",
                "detail": "Confidence derived from authority, crawl quality, stability, and risk signals."
            },
            {
                "label": "Authority score",
                "value": "14/100",
                "tone": "spam",
                "detail": "A higher authority score usually means broader reputation and backlink confidence."
            },
            {
                "label": "Spam risk",
                "value": "34/100",
                "tone": "caution",
                "detail": "Lower is better. This blends spam indicators with false-positive protections for legitimate sites."
            },
            {
                "label": "Quality score",
                "value": "73/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": "0/100",
                "tone": "good",
                "detail": "Lower is better. This reflects phishing, drainer, fake-support, fake-shop, and malware signals."
            },
            {
                "label": "Infrastructure risk",
                "value": "0/100",
                "tone": "good",
                "detail": "Lower is better. This reflects the IP, registrar, and nameserver neighbourhood seen by the crawler."
            },
            {
                "label": "Evidence confidence",
                "value": "99/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": "14/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": "—",
                        "tone": "unknown",
                        "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": "—",
                        "tone": "unknown",
                        "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 off · privacy off",
                        "tone": "caution",
                        "detail": "DNSSEC strengthens DNS trust; privacy is neutral on its own."
                    }
                ]
            },
            {
                "title": "Reputation & search evidence",
                "items": [
                    {
                        "label": "Backlinks",
                        "value": "1",
                        "tone": "unknown",
                        "detail": "Broader backlink evidence usually improves confidence."
                    },
                    {
                        "label": "Referring domains",
                        "value": "1",
                        "tone": "unknown",
                        "detail": "Unique linking domains are more useful than raw link volume."
                    },
                    {
                        "label": "Organic keywords",
                        "value": "7",
                        "tone": "unknown",
                        "detail": "Search footprint helps distinguish real sites from thin shells."
                    },
                    {
                        "label": "Indexed pages",
                        "value": "4",
                        "tone": "unknown",
                        "detail": "Larger index coverage usually means more evidence to classify from."
                    },
                    {
                        "label": "Brand strength",
                        "value": "53/100",
                        "tone": "good",
                        "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 · 764 ms",
                        "tone": "good",
                        "detail": "Slow or broken technical signals weaken confidence."
                    },
                    {
                        "label": "Content words",
                        "value": "20",
                        "tone": "spam",
                        "detail": "Thin pages are harder to trust and easier to manipulate."
                    },
                    {
                        "label": "Schema / structure",
                        "value": "0 schema · meta · H1",
                        "tone": "caution",
                        "detail": "Structured markup and basic on-page hygiene improve quality confidence."
                    },
                    {
                        "label": "Links on page",
                        "value": "1 internal · 2 external",
                        "tone": "caution",
                        "detail": "Link patterns help detect thin directories and promo pages."
                    },
                    {
                        "label": "Page speed / mobile",
                        "value": "81/100 · 78/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": [
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness."
        ],
        "risks": [
            "The crawled page looks unusually thin."
        ]
    },
    "traffic_confidence": 12,
    "whois": {
        "current": {
            "id": 42313,
            "domain": "flemi.ng",
            "source_type": "whois_text",
            "rdap_url": "",
            "registrar_name": "",
            "registrar_handle": "",
            "registrant_name": "",
            "registrant_org": "",
            "registrant_country": "",
            "registrant_email": "",
            "abuse_email": "",
            "created_date": null,
            "updated_date": null,
            "expires_date": null,
            "nameservers_json": "[]",
            "status_json": "[]",
            "dnssec": "unknown",
            "privacy_protected": 0,
            "content_hash": "f7e17c57c5fdd24df1793ece6bff99716369356b90b29c4725ac3ba12a76b72c",
            "history_count": 1,
            "last_checked_at": "2026-03-19 22:38:46",
            "last_changed_at": "2026-03-19 22:38:46",
            "created_at": "2026-03-19 22:38:47",
            "updated_at": "2026-03-19 22:38:47"
        },
        "history": [
            {
                "id": 43202,
                "domain": "flemi.ng",
                "source_type": "whois_text",
                "registrar_name": "",
                "registrar_handle": "",
                "registrant_name": "",
                "registrant_org": "",
                "registrant_country": "",
                "registrant_email": "",
                "abuse_email": "",
                "created_date": null,
                "updated_date": null,
                "expires_date": null,
                "nameservers_json": "[]",
                "status_json": "[]",
                "dnssec": "unknown",
                "privacy_protected": 0,
                "content_hash": "f7e17c57c5fdd24df1793ece6bff99716369356b90b29c4725ac3ba12a76b72c",
                "checked_at": "2026-03-19 22:38:46",
                "change_summary": "Initial WHOIS snapshot captured.",
                "created_at": "2026-03-19 22:38:46"
            }
        ],
        "signals": {
            "age_years": 0,
            "days_to_expiry": null,
            "days_since_last_registry_update": null,
            "stability_score": 100,
            "registrar_changes": 0,
            "ownership_changes": 0,
            "nameserver_changes": 0,
            "status_changes": 0,
            "history_entries": 1,
            "privacy_protected": false,
            "dnssec_enabled": false,
            "has_registrant_country": false,
            "registrant_country": "",
            "nameserver_count": 0,
            "status_count": 0
        }
    },
    "discovered_domain": {
        "id": 146233,
        "domain": "flemi.ng",
        "first_seen_at": "2026-03-16 06:42:53",
        "last_crawled_at": "2026-03-19 22:38:48",
        "last_title": "Will Fleming programs computers.",
        "last_http_status": 200,
        "discovered_from_domain": "namehack.club",
        "depth": 0,
        "backlinks_count": 1,
        "rating_cache": 50,
        "spam_score": 34,
        "risk_label": "good",
        "category_name": "Business: Corporate & Professional Services",
        "primary_country_code": "NG",
        "internal_links_count": 1,
        "external_links_count": 2,
        "social_profiles_count": 1,
        "content_word_count": 20,
        "title_quality_score": 93,
        "has_meta_description": 1,
        "has_h1": 1,
        "language_code": "en",
        "response_time_ms": 764,
        "robots_status": 200,
        "sitemap_status": 404,
        "sitemap_total_urls": 0,
        "quality_score": 73,
        "site_name": "",
        "canonical_domain": "",
        "favicon_present": 0,
        "schema_org_count": 0,
        "noindex_detected": 0,
        "feed_links_count": 1,
        "https_working": 1,
        "estimated_authority_score": 12,
        "trust_score": 67,
        "nsfw_score": 14,
        "overall_rank_estimate": 26252,
        "primary_tag": "Uncertain",
        "tag_codes": "Uncertain",
        "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": 100,
        "fraud_score": 0,
        "legitimacy_score": 36,
        "infrastructure_risk_score": 0,
        "score_confidence": 99,
        "tag_confidence": 71,
        "category_confidence": 24,
        "deep_crawl_pages": 9,
        "resolved_ip": "103.168.172.52",
        "category_candidates_json": "[{\"category\":\"Business: Corporate & Professional Services\",\"score\":22},{\"category\":\"Technology\",\"score\":17},{\"category\":\"Lifestyle: Food & Drink\",\"score\":11},{\"category\":\"Education: Libraries & Research\",\"score\":6}]",
        "page_signals_json": "[{\"path\":\"/posts/2026/01/05/react-missing-hooks/\",\"status\":200,\"title\":\"React's \\\"missing\\\" useOnMount & useOnUpdate hooks\",\"word_count\":453,\"summary_text\":\"React's \\\"missing\\\" useOnMount & useOnUpdate hooks React's \\\"missing\\\" useOnMount & useOnUpdate hooks will.flemi.ng archives React's \\\"missing\\\" useOnMount & useOnUpdate hooks Jan 5, 2026 I have recently been slowly converting some old class-based React components to hooks-based functional components as part of some broader changes, and added some custom hooks to help migrate some legacy patterns that depended on class-component lifecyle methods like componentDidMount and componentDidUpdate. IMHO the kinds of patterns that arise in class-based React components &amp; functional components are often different, but invasive re-writes of large codebases all at once are pretty much never a good idea. Introducing hooks that mimic old patterns makes each component’s rewrite fairly mechanical, which can improve confidence of correctness with less test\",\"classification_terms\":[\"posts/2026/01/05/react-missing-hooks\",\"help\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/posts/archives/\",\"status\":200,\"title\":\"Post archives\",\"word_count\":82,\"summary_text\":\"Post archives Post archives will.flemi.ng archives Post archives React's \\\"missing\\\" useOnMount &amp; useOnUpdate hooks Jan 5, 2026 Shaker side tables Oct 30, 2025 Cometeer Nov 30, 2023 Recent woodworking projects May 6, 2023 iOS to Android and back again Apr 18, 2022 SShing to unpredictable IPs behind a bastion Feb 7, 2022 Dynamically routing ssh to a local or remote address depending on your current Wi-Fi network Aug 12, 2021 Saving keystrokes with aliases &amp; scripts Apr 15, 2017 &copy; Will Fleming RSS Archives\",\"classification_terms\":[\"posts/archives\",\"address\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/posts/2025/10/30/shaker-side-tables/\",\"status\":200,\"title\":\"Shaker side tables\",\"word_count\":269,\"summary_text\":\"Shaker side tables Shaker side tables will.flemi.ng archives Shaker side tables Oct 30, 2025 Years ago, my step-dad made me a walnut side table in a Shaker style (he made all his kids &amp; step-kids different pieces of furniture to remember him by): The walnut side table with my step-dad, Dick. As gifts for my mother, sister, &amp; brother-in-law I made a set of 4 tables built on the same pattern in ash: The tables. The tables, focus on the tops. Drawer detail. These were finished with Tried &amp; True Varnish Oil, which I really liked and will probably use more. Being oil-based, it pops the grain beautifully and has a really nice satin sheen. It’s also (supposedly, I guess I’ll find out) pretty durable, and being made from traditional ingredients like linseed oil and pine resin with some modern twists it d\",\"classification_terms\":[\"posts/2025/10/30/shaker-side-tables\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":3},{\"path\":\"/posts/2023/11/30/cometeer/\",\"status\":200,\"title\":\"Cometeer\",\"word_count\":788,\"summary_text\":\"Cometeer Cometeer will.flemi.ng archives Cometeer Nov 30, 2023 I recently learned about Cometeer, a new take on instant coffee Basically: make a coffee concentrate, rapidly freeze it with liquid nitrogen to maintain flavors &amp; aromas lost with traditional instant, ship you those frozen capsules, and then you dissolve those in hot water and drink. , from a James Hoffman video. I didn’t get to participate in the taste test he organized using Cometeer to ensure consistency across partipants, but I thought it would be an interesting way to try some new roasters that aren’t locally available &amp; also try a wider variety of roast styles than I typically buy, so I ordered a mixed roast box. It arrived yesterday &amp; I’ve now drunk a couple cups. So, is it good? I mean, it’s fine, yeah. It’s way bett\",\"classification_terms\":[\"posts/2023/11/30/cometeer\",\"about\",\"api\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":3},{\"path\":\"/posts/2023/05/06/recent-woodworking-projects/\",\"status\":200,\"title\":\"Recent woodworking projects\",\"word_count\":1905,\"summary_text\":\"Recent woodworking projects Recent woodworking projects will.flemi.ng archives Recent woodworking projects May 6, 2023 I’ve recently (as in “over the last year-ish”) finished several projects I’m somewhat satisfied with. I’m slowly turning an ash tree that used to stand in my family’s yard (and contained my childhood treehouse) into furniture for my own apartment &amp; some for family as well. Living room set For my own apartment, I built a media console last year. I am both a nerd with a lot of digital devices and also somebody who hates the messiness of cords running everywhere, so my main goal here was something that would fit the various devices that connect to my TV, as well as utility devices like my router. I tend to complicate each project I take on by adding one major new technique component I’m not familiar\",\"classification_terms\":[\"posts/2023/05/06/recent-woodworking-projects\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":3},{\"path\":\"/posts/2022/04/18/ios-to-android-and-back-again/\",\"status\":200,\"title\":\"iOS to Android and back again\",\"word_count\":3053,\"summary_text\":\"iOS to Android and back again iOS to Android and back again will.flemi.ng archives iOS to Android and back again Apr 18, 2022 I recently bought an iPhone 13 Mini, and I’m a bit grumpy about it. I owned 5 different iPhones between 2008 and 2017. By 2017, I hadn’t been using OS X I am well aware the operating system is now called macOS: that happened after I stopped using a Mac, and since it was called OS X during the historical period when I was using Macs and that’s what I’m discussing, that’s the name I’m sticking with. for a while (I’d switched back to Linux due to a general frustration with Macs feeling like increasingly locked-down machines on top of a few years of what was widely perceived as a decline in Apple’s software quality): some of those same frustrations also applied to iPhones, and since I was no longer\",\"classification_terms\":[\"posts/2022/04/18/ios-to-android-and-back-again\",\"about\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":5,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":3},{\"path\":\"/posts/2022/02/07/ssh-bastion/\",\"status\":200,\"title\":\"SShing to unpredictable IPs behind a bastion\",\"word_count\":409,\"summary_text\":\"SShing to unpredictable IPs behind a bastion SShing to unpredictable IPs behind a bastion will.flemi.ng archives SShing to unpredictable IPs behind a bastion Feb 7, 2022 A pretty common security measure for cloud infrastructure is an SSH bastion: you have a bunch of servers you may need to SSH to at times, but you obviously don’t want all your servers open to the public Internet, so you designate one server as the SSH bastion, which can be appropriately hardened and is open to public SSH connections for proxying ssh connections into your private network. I recently found myself needing to manage multiple environments (production and staging) like this, and transitioning a legacy configuration with a small number of static servers to a “cattle, not pets” approach where individual servers were coming and going all the time. Under the o\",\"classification_terms\":[\"posts/2022/02/07/ssh-bastion\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":3},{\"path\":\"/posts/2021/08/12/ssh-hostname-wifi/\",\"status\":200,\"title\":\"Dynamically routing ssh to a local or remote address depending on your current Wi-Fi network\",\"word_count\":1256,\"summary_text\":\"Dynamically routing ssh to a local or remote address depending on your current Wi-Fi network Dynamically routing ssh to a local or remote address depending on your current Wi-Fi network will.flemi.ng archives Dynamically routing ssh to a local or remote address depending on your current Wi-Fi network Aug 12, 2021 I have an Intel NUC at home that I use as an HTPC and a sort-of single-machine homelab (which seems to be the in vogue term computer nerds are using for “the machine(s) I run at home for fun”). As an HTPC, it’s connected to my TV and is how I do a lot of film and TV watching. As a homelab, it’s useful for projects I’d prefer not to run on my laptop - because, say, it may involve long-running tasks, and if I have to ensure my laptop is constantly on &amp; connected, it defeats the purpose of having a laptop. My development environment is pretty much Vim and Tmux regardless\",\"classification_terms\":[\"posts/2021/08/12/ssh-hostname-wifi\",\"address\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":3},{\"path\":\"/posts/2017/04/15/saving-keystrokes/\",\"status\":200,\"title\":\"Saving keystrokes with aliases & scripts\",\"word_count\":327,\"summary_text\":\"Saving keystrokes with aliases & scripts Saving keystrokes with aliases & scripts will.flemi.ng archives Saving keystrokes with aliases & scripts Apr 15, 2017 I run git often. Really often. These are the 10 programs I’ve run most often in the past month, and how many times I ran them. Command Count g 1,726 vim 366 ag 250 cd 238 ll 231 sudo 133 hub 87 hr 86 exit 79 make 67 (That’s an average of 56 times a day for g, and I use several computers regularly, so these numbers are slightly lower than the reality.) Of course g is an alias for git. Saving 2 keystrokes on every command might not seem like much, but as you can see from how often I run it, that adds up. Of course, I also do certain operations in Git more often than others. I have fairly standard entries in my gitconfig for these as well, so I can type g c for git commit, g o\",\"classification_terms\":[\"posts/2017/04/15/saving-keystrokes\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":3}]",
        "score_reasons_json": "[]",
        "route_domain": "flemi.ng",
        "display_domain": "flemi.ng"
    },
    "explainability": {
        "summary": "flemi.ng 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": "Low confidence",
                "tone": "risk",
                "detail": "12/100"
            },
            {
                "label": "Crawler access",
                "value": "Clean visibility",
                "tone": "good",
                "detail": null
            }
        ],
        "weighted_contributions": [
            {
                "label": "Quality system",
                "points": "+22.8",
                "tone": "caution",
                "detail": "Technical quality, crawl depth, page structure, and implementation hygiene. Current subsystem score: 67/100."
            },
            {
                "label": "Reputation system",
                "points": "+9.9",
                "tone": "risk",
                "detail": "Authority, search visibility, reach, engagement, and registry stability. Current subsystem score: 29/100."
            },
            {
                "label": "Safety system",
                "points": "+32.0",
                "tone": "good",
                "detail": "Fraud, spam, and trust signals from infrastructure, crawl, and registry evidence. Current subsystem score: 100/100."
            },
            {
                "label": "Risk clamp",
                "points": "-1.0",
                "tone": "risk",
                "detail": "Safety thresholds capped the final score until the risk profile improves."
            }
        ],
        "evidence_cards": [
            {
                "label": "Authority and trust",
                "value": "14/100 · trust 37/100",
                "tone": "risk",
                "detail": "47 monthly visitors, 7 organic keywords, brand completeness 53/100, engagement 76/100."
            },
            {
                "label": "Backlink and search evidence",
                "value": "1 referring domains",
                "tone": "good",
                "detail": "1 backlinks across 1 referring domains. Diversity 92/100; spam penalty 3."
            },
            {
                "label": "Registry and domain stability",
                "value": "0.0 years old",
                "tone": "good",
                "detail": "Stability 100/100 · age 0.0 years."
            },
            {
                "label": "Safety and fraud posture",
                "value": "Safety 100/100 · fraud 0/100",
                "tone": "good",
                "detail": "Primary tag Uncertain · safety 100/100 · fraud 0/100."
            }
        ],
        "positives": [
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness.",
            "Registry history looks stable, which supports legitimacy and trust.",
            "HTTPS is working, so the site clears a basic transport-security check.",
            "Backlink diversity looks broad enough to strengthen authority confidence."
        ],
        "risks": [
            "The crawled page looks unusually thin.",
            "Traffic and reach estimates are still low confidence, so commercial scale signals may move after more evidence is collected."
        ],
        "freshness": [
            {
                "label": "Crawl evidence",
                "value": "2026-03-19 22:38:48",
                "tone": "risk",
                "detail": "Crawl and page content sample. Age: 1mo ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-03-19 22:38:46",
                "tone": "risk",
                "detail": "Registry profile and stability signals. Age: 1mo ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-04-18 22:53:35",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-04-18 22:53:35",
                "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": 65,
        "fraud_clamp_penalty": 1,
        "final_score": 64
    },
    "insight_snapshot": {
        "version": 1,
        "generated_at": "2026-04-18T22:53:35+00:00",
        "domain": "flemi.ng",
        "display_name": "Will Fleming programs computers.",
        "is_tracked": false,
        "is_estimated": true,
        "overall_score": 64,
        "authority_score": 14,
        "trust_score": 37,
        "safety_score": 100,
        "fraud_score": 0,
        "confidence_score": 100,
        "traffic_confidence": 12,
        "last_crawled_at": "2026-03-19 22:38:48",
        "crawl_blocked": false,
        "summary": "flemi.ng 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": "Low confidence",
                "tone": "risk",
                "detail": "12/100"
            },
            {
                "label": "Crawler access",
                "value": "Clean visibility",
                "tone": "good",
                "detail": null
            }
        ],
        "top_positive_signals": [
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness.",
            "Registry history looks stable, which supports legitimacy and trust.",
            "HTTPS is working, so the site clears a basic transport-security check.",
            "Backlink diversity looks broad enough to strengthen authority confidence."
        ],
        "top_risk_signals": [
            "The crawled page looks unusually thin.",
            "Traffic and reach estimates are still low confidence, so commercial scale signals may move after more evidence is collected."
        ],
        "freshness": [
            {
                "label": "Crawl evidence",
                "value": "2026-03-19 22:38:48",
                "tone": "risk",
                "detail": "Crawl and page content sample. Age: 1mo ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-03-19 22:38:46",
                "tone": "risk",
                "detail": "Registry profile and stability signals. Age: 1mo ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-04-18 22:53:35",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-04-18 22:53:35",
                "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": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown"
            },
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good"
            }
        ]
    },
    "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-19T10:41:37+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/flemi.ng/refresh",
        "isGuestCooldown": false,
        "cooldownSeconds": 0
    },
    "urlscan_report": {
        "domain": "flemi.ng",
        "status": "error",
        "submitted_at": "2026-03-19T16:16:34+00:00",
        "completed_at": null,
        "last_checked_at": "2026-03-19T16:16:34+00:00",
        "last_error": "Rate limit for 'public' exceeded. Limit is 5000 per day. Reset in 27804 seconds.",
        "submitted_url": "https://flemi.ng/",
        "uuid": "",
        "result_url": "",
        "api_result_url": "",
        "visibility": "public",
        "summary": "urlscan.io scan submission failed.",
        "report": [],
        "report_summary": [],
        "is_fresh": false,
        "can_retry": true,
        "poll_after_seconds": 20
    }
}