{
    "ready": true,
    "site": {
        "id": 0,
        "domain": "claytonwramsey.com",
        "display_name": "Clayton's Website",
        "primary_country_code": "",
        "category_name": "Education: Schools & Universities"
    },
    "metrics": {
        "global_rank": 3366007,
        "country_rank": 1144442,
        "category_rank": 538561,
        "daily_pageviews_per_visitor": 4.28,
        "daily_time_on_site_seconds": 418,
        "bounce_rate": 24.6,
        "search_visits_percent": 46.46,
        "total_sites_linking_in": 1,
        "monthly_unique_visitors": 234,
        "recorded_at": "2026-04-20 16:31:57"
    },
    "audit": {
        "score": 92
    },
    "traffic_sources": {
        "direct_percent": 25.19,
        "search_percent": 40.95,
        "social_percent": 6.21,
        "referral_percent": 13.53,
        "email_percent": 7.06,
        "paid_percent": 7.06
    },
    "seo_profile": {
        "backlinks_total": 1,
        "referring_domains": 1,
        "dofollow_backlinks_percent": 100,
        "organic_keywords": 53,
        "indexed_pages": 31,
        "page_speed_score": 100,
        "mobile_friendliness_score": 89,
        "authority_score": 33,
        "spam_risk_score": 25
    },
    "crawl_report": {
        "robots_status": 200,
        "sitemap_status": 200,
        "sitemap_total_urls": 31,
        "crawl_blocked": false,
        "crawl_blocked_by": "",
        "crawl_blocked_reason": "",
        "notes": [],
        "created_at": "2026-04-20 16:31:57"
    },
    "keywords": [
        {
            "keyword": "Clayton's Website",
            "position": 23,
            "search_engine": "Estimated",
            "checked_at": "2026-06-25 04:34:30",
            "is_estimated": true
        },
        {
            "keyword": "Clayton's Website education: schools & universities",
            "position": 25,
            "search_engine": "Estimated",
            "checked_at": "2026-06-25 04:34:30",
            "is_estimated": true
        },
        {
            "keyword": "Clayton's Website reviews",
            "position": 27,
            "search_engine": "Estimated",
            "checked_at": "2026-06-25 04:34:30",
            "is_estimated": true
        },
        {
            "keyword": "clayton",
            "position": 29,
            "search_engine": "Estimated",
            "checked_at": "2026-06-25 04:34:30",
            "is_estimated": true
        },
        {
            "keyword": "website",
            "position": 31,
            "search_engine": "Estimated",
            "checked_at": "2026-06-25 04:34:30",
            "is_estimated": true
        },
        {
            "keyword": "claytonwramsey",
            "position": 33,
            "search_engine": "Estimated",
            "checked_at": "2026-06-25 04:34:30",
            "is_estimated": true
        },
        {
            "keyword": "about",
            "position": 35,
            "search_engine": "Estimated",
            "checked_at": "2026-06-25 04:34:30",
            "is_estimated": true
        },
        {
            "keyword": "about me",
            "position": 37,
            "search_engine": "Estimated",
            "checked_at": "2026-06-25 04:34:30",
            "is_estimated": true
        }
    ],
    "rating": {
        "overall": 47,
        "label": "Average",
        "breakdown": [
            {
                "label": "Technical foundation",
                "score": 17,
                "max": 18
            },
            {
                "label": "Authority & trust",
                "score": 10,
                "max": 30
            },
            {
                "label": "Reach & market presence",
                "score": 3,
                "max": 18
            },
            {
                "label": "Search visibility",
                "score": 2,
                "max": 12
            },
            {
                "label": "Engagement & retention",
                "score": 9,
                "max": 10
            },
            {
                "label": "Channels & diversification",
                "score": 4,
                "max": 6
            },
            {
                "label": "Registry stability",
                "score": 3,
                "max": 6
            },
            {
                "label": "Quality system",
                "score": 94,
                "max": 100
            },
            {
                "label": "Reputation system",
                "score": 38,
                "max": 100
            },
            {
                "label": "Safety system",
                "score": 100,
                "max": 100
            },
            {
                "label": "Evidence confidence",
                "score": 100,
                "max": 100
            }
        ],
        "authority_score": 33,
        "quality_score": 94,
        "reputation_score": 38,
        "safety_score": 100,
        "confidence_score": 100,
        "fraud_score": 1,
        "authority_signals": {
            "backlinks": 1,
            "referring_domains": 1,
            "organic_keywords": 53,
            "indexed_pages": 31,
            "monthly_visitors": 234,
            "global_rank": 3366007,
            "engagement_score": 86,
            "crawl_quality_score": 100,
            "brand_completeness_score": 62,
            "link_diversity_score": 92,
            "technical_reliability_score": 96,
            "whois_score": 63,
            "whois_age_years": 2.1,
            "whois_stability_score": 100,
            "spam_penalty": 0
        },
        "whois_signals": {
            "age_years": 2.1,
            "days_to_expiry": 2867,
            "days_since_last_registry_update": 784,
            "stability_score": 100,
            "registrar_changes": 0,
            "ownership_changes": 0,
            "nameserver_changes": 0,
            "status_changes": 0,
            "history_entries": 2,
            "privacy_protected": false,
            "dnssec_enabled": false,
            "has_registrant_country": false,
            "registrant_country": "",
            "nameserver_count": 4,
            "status_count": 2
        }
    },
    "community_ratings": {
        "votes": [],
        "recent_notes": [],
        "positive_weight": 0,
        "negative_weight": 0,
        "positive_count": 0,
        "negative_count": 0,
        "authenticated_count": 0,
        "anonymous_count": 0,
        "community_delta": 0,
        "community_score": 50,
        "confidence_score": 0,
        "notice": null,
        "positive_notice": false,
        "negative_notice": false,
        "neutral_count": 0,
        "total_votes": 0
    },
    "authority_score": 33,
    "trust_score": 57,
    "domain_tags": {
        "primary_tag": "",
        "primary_tag_score": 0,
        "primary_candidate": "Infra",
        "primary_candidate_score": 5,
        "tag_codes": "",
        "tags": [],
        "tag_breakdown": [
            {
                "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": "Infrastructure risk does not currently stand out.",
                "priority": 5,
                "score": 5,
                "match_percent": 5,
                "threshold_band": "none"
            },
            {
                "code": "Billing",
                "label": "Deceptive billing risk",
                "tone": "scam",
                "description": "Subscription, renewal, charge, or cancellation-abuse signals were detected.",
                "reason": "Subscription, renewal, charge, or cancellation-risk signals were detected.",
                "message": "No meaningful deceptive-billing signals were detected.",
                "priority": 0,
                "score": 0,
                "match_percent": 0,
                "threshold_band": "none"
            },
            {
                "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"
            },
            {
                "code": "D",
                "label": "Dangerous",
                "tone": "toxic",
                "description": "Strong signs of phishing, malware, or other harmful behaviour were detected.",
                "reason": "Multiple high-risk signals pushed this domain into the dangerous range.",
                "message": "No meaningful dangerous-signal match was detected.",
                "priority": 0,
                "score": 0,
                "match_percent": 0,
                "threshold_band": "none"
            }
        ],
        "nsfw_score": 0,
        "trust_score": 58,
        "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": "No tag crossed the alert threshold. The closest heuristic match was Risky infrastructure at 5%.",
        "external_intel": [],
        "external_decision": [],
        "signal_scores": [
            {
                "label": "Strongest tag heuristic",
                "value": "Infra - 5%",
                "tone": "caution",
                "detail": "The highest raw tag match from the heuristic engine before visibility thresholds and manual overrides."
            },
            {
                "label": "Trust score",
                "value": "58/100",
                "tone": "caution",
                "detail": "Confidence derived from authority, crawl quality, stability, and risk signals."
            },
            {
                "label": "Authority score",
                "value": "33/100",
                "tone": "spam",
                "detail": "A higher authority score usually means broader reputation and backlink confidence."
            },
            {
                "label": "Spam risk",
                "value": "3/100",
                "tone": "good",
                "detail": "Lower is better. This blends spam indicators with false-positive protections for legitimate sites."
            },
            {
                "label": "Quality score",
                "value": "89/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": "5/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": "2.1 years",
                        "tone": "caution",
                        "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": "2,867",
                        "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 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": "53",
                        "tone": "caution",
                        "detail": "Search footprint helps distinguish real sites from thin shells."
                    },
                    {
                        "label": "Indexed pages",
                        "value": "31",
                        "tone": "caution",
                        "detail": "Larger index coverage usually means more evidence to classify from."
                    },
                    {
                        "label": "Brand strength",
                        "value": "62/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 - 148 ms",
                        "tone": "good",
                        "detail": "Slow or broken technical signals weaken confidence."
                    },
                    {
                        "label": "Content words",
                        "value": "316",
                        "tone": "caution",
                        "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": "7 internal - 9 external",
                        "tone": "good",
                        "detail": "Link patterns help detect thin directories and promo pages."
                    },
                    {
                        "label": "Page speed / mobile",
                        "value": "100/100 - 89/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": []
    },
    "traffic_confidence": 48,
    "whois": {
        "current": {
            "id": 34694,
            "domain": "claytonwramsey.com",
            "source_type": "rdap",
            "rdap_url": "https://rdap.verisign.com/com/v1/domain/CLAYTONWRAMSEY.COM",
            "registrar_name": "Porkbun LLC",
            "registrar_handle": "1861",
            "registrant_name": "",
            "registrant_org": "",
            "registrant_country": "",
            "registrant_email": "",
            "abuse_email": "abuse@porkbun.com",
            "created_date": "2024-05-01 18:14:19",
            "updated_date": "2024-05-01 18:28:28",
            "expires_date": "2034-05-01 18:14:19",
            "nameservers_json": "[\"curitiba.ns.porkbun.com\",\"fortaleza.ns.porkbun.com\",\"maceio.ns.porkbun.com\",\"salvador.ns.porkbun.com\"]",
            "status_json": "[\"client delete prohibited\",\"client transfer prohibited\"]",
            "dnssec": "unsigned",
            "privacy_protected": 0,
            "content_hash": "d431471281873b2445363cf6ce668909f3c888c893a1809e61b84f2c21faae0e",
            "history_count": 2,
            "last_checked_at": "2026-04-20 16:31:54",
            "last_changed_at": "2026-04-20 16:31:54",
            "created_at": "2026-03-19 09:32:10",
            "updated_at": "2026-04-20 16:31:55"
        },
        "history": [
            {
                "id": 85881,
                "domain": "claytonwramsey.com",
                "source_type": "rdap",
                "registrar_name": "Porkbun LLC",
                "registrar_handle": "1861",
                "registrant_name": "",
                "registrant_org": "",
                "registrant_country": "",
                "registrant_email": "",
                "abuse_email": "abuse@porkbun.com",
                "created_date": "2024-05-01 18:14:19",
                "updated_date": "2024-05-01 18:28:28",
                "expires_date": "2034-05-01 18:14:19",
                "nameservers_json": "[\"curitiba.ns.porkbun.com\",\"fortaleza.ns.porkbun.com\",\"maceio.ns.porkbun.com\",\"salvador.ns.porkbun.com\"]",
                "status_json": "[\"client delete prohibited\",\"client transfer prohibited\"]",
                "dnssec": "unsigned",
                "privacy_protected": 0,
                "content_hash": "d431471281873b2445363cf6ce668909f3c888c893a1809e61b84f2c21faae0e",
                "checked_at": "2026-04-20 16:31:54",
                "change_summary": "Periodic WHOIS snapshot refreshed with no major field changes.",
                "created_at": "2026-04-20 16:31:54"
            },
            {
                "id": 35496,
                "domain": "claytonwramsey.com",
                "source_type": "rdap",
                "registrar_name": "Porkbun LLC",
                "registrar_handle": "1861",
                "registrant_name": "",
                "registrant_org": "",
                "registrant_country": "",
                "registrant_email": "",
                "abuse_email": "abuse@porkbun.com",
                "created_date": "2024-05-01 18:14:19",
                "updated_date": "2024-05-01 18:28:28",
                "expires_date": "2034-05-01 18:14:19",
                "nameservers_json": "[\"curitiba.ns.porkbun.com\",\"fortaleza.ns.porkbun.com\",\"maceio.ns.porkbun.com\",\"salvador.ns.porkbun.com\"]",
                "status_json": "[\"client delete prohibited\",\"client transfer prohibited\"]",
                "dnssec": "unsigned",
                "privacy_protected": 0,
                "content_hash": "d431471281873b2445363cf6ce668909f3c888c893a1809e61b84f2c21faae0e",
                "checked_at": "2026-03-19 09:32:09",
                "change_summary": "Initial WHOIS snapshot captured.",
                "created_at": "2026-03-19 09:32:09"
            }
        ],
        "signals": {
            "age_years": 2.1,
            "days_to_expiry": 2867,
            "days_since_last_registry_update": 784,
            "stability_score": 100,
            "registrar_changes": 0,
            "ownership_changes": 0,
            "nameserver_changes": 0,
            "status_changes": 0,
            "history_entries": 2,
            "privacy_protected": false,
            "dnssec_enabled": false,
            "has_registrant_country": false,
            "registrant_country": "",
            "nameserver_count": 4,
            "status_count": 2
        }
    },
    "discovered_domain": {
        "id": 75139,
        "domain": "claytonwramsey.com",
        "first_seen_at": "2026-03-15 19:50:49",
        "last_crawled_at": "2026-04-20 16:31:57",
        "last_title": "Clayton's Website",
        "last_http_status": 200,
        "discovered_from_domain": "tombrandis.uk",
        "depth": 0,
        "backlinks_count": 1,
        "rating_cache": 47,
        "spam_score": 24,
        "risk_label": "good",
        "category_name": "Education: Schools & Universities",
        "primary_country_code": "",
        "internal_links_count": 7,
        "external_links_count": 9,
        "social_profiles_count": 1,
        "content_word_count": 316,
        "title_quality_score": 79,
        "has_meta_description": 1,
        "has_h1": 1,
        "language_code": "en",
        "response_time_ms": 148,
        "robots_status": 200,
        "sitemap_status": 200,
        "sitemap_total_urls": 31,
        "quality_score": 89,
        "site_name": "",
        "canonical_domain": "",
        "favicon_present": 1,
        "schema_org_count": 0,
        "noindex_detected": 0,
        "feed_links_count": 0,
        "https_working": 1,
        "estimated_authority_score": 31,
        "trust_score": 79,
        "nsfw_score": 0,
        "overall_rank_estimate": 3139815,
        "primary_tag": "",
        "tag_codes": "T",
        "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": 1,
        "legitimacy_score": 53,
        "infrastructure_risk_score": 5,
        "score_confidence": 100,
        "tag_confidence": 72,
        "category_confidence": 75,
        "deep_crawl_pages": 35,
        "resolved_ip": "185.199.110.153",
        "category_candidates_json": "[{\"category\":\"Education: Schools & Universities\",\"score\":67},{\"category\":\"Personal: Blogs & Journals\",\"score\":28},{\"category\":\"Personal: Personal Sites & Homepages\",\"score\":22},{\"category\":\"Personal: Portfolios & CVs\",\"score\":22}]",
        "page_signals_json": "[{\"path\":\"/about\",\"status\":200,\"title\":\"About Me\",\"word_count\":318,\"summary_text\":\"About Me About Me Clayton's WebsiteHomeAboutCVBlogRecipes About Me Hi! I’m Clayton Ramsey, a Ph.D. student studying computer science at Rice University. My research focuses on algorithms for robotics, specifically in planning. I’m especially interested in applications of hardware acceleration for planning algorithms: how can we use already-existing hardware to get the most out of our computers? The long-term goal of my work is to develop algorithms for reactive planning; that is, ways for robots to replan on the fly as the world changes around them. Right now, I’m looking at applications in task and motion planning: large, complex problems with massive long-horizon constraints. On the side, I also like to play with high-performance programming, especially for automating games. I don’t have much tim\",\"classification_terms\":[\"about\",\"about me\",\"blog\"],\"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\":\"/cv\",\"status\":200,\"title\":\"CV\",\"word_count\":473,\"summary_text\":\"CV CV Clayton's WebsiteHomeAboutCVBlogRecipes Clayton W. Ramsey claytonwramsey@gmail.com · claytonwramsey.com · /in/claytonwramsey Education Ph.D., Computer Science (in progress), Rice University, Houston, TX. Aug 2023 - Present Advised by Dr. Lydia E. Kavraki B.A., Computer Science; B.S., Electrical Engineering, Rice University, Houston, TX. Aug 2019 - May 2023 Professional Experience Doctoral Student, Rice University, Houston, TX. Aug 2023 - Present Advised by Dr. Lydia E. Kavraki Visiting Technologist, NASA Johnson Space Center, Houston, TX. May 2025 - Aug 2025 Undergraduate Researcher, Rice University, Houston, TX. May 2021 - Aug 2022 Advised by Dr. Lydia E. Kavraki Embedded Systems Intern, Stellar Solutions, Palo Alto, CA. May 2020 - Aug 2020 Mechanical Design Intern, Stellar Solutions,\",\"classification_terms\":[\"cv\",\"about\",\"blog\"],\"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\":1,\"depth\":1},{\"path\":\"/blog\",\"status\":200,\"title\":\"Blog\",\"word_count\":154,\"summary_text\":\"Blog Blog Clayton's WebsiteHomeAboutCVBlogRecipes Blog This is my blog. I don’t have a publication schedule or a fixed topic – I just write about what interests me whenever I find the time. If you like to use RSS, you can follow me via my blog’s RSS feed. 2026 Soft lock picking in real life 2025 Garbage collection in Rust got a little better My second year of grad school: reflections I&#x27;d rather read the prompt How I make figures No longer writing my own damn HTML 2024 Solving 20 billion Wordle problems per second Effect polymorphism fixes dependency inversion Reflections on a year of grad school Making robots plan faster with SIMD and Rust 2023 Things I learned from teaching Writing my own damn HTML One line of code cost me 9.2% of my matches I built a garbage collector for a language that\",\"classification_terms\":[\"blog\",\"about\"],\"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\":\"/recipes\",\"status\":200,\"title\":\"Recipes\",\"word_count\":57,\"summary_text\":\"Recipes Recipes Clayton's WebsiteHomeAboutCVBlogRecipes Recipes This is where I keep my recipes. If you make one, feel free to email me a picture and tell me how it tastes. Ben&#x27;s Pumpkin Cookies Chicken Tikka Masla Chocolate Chip Cookies Cinnamon Roll Cookies Greg&#x27;s Pie Crust Jambalaya Jared&#x27;s Banana Bread Lemon Bars Lemon Roll Cake Peanut Butter Cookies Tomato Sauce\",\"classification_terms\":[\"recipes\",\"about\",\"blog\"],\"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\":\"/blog/captree\",\"status\":200,\"title\":\"Making robots plan faster with SIMD and Rust\",\"word_count\":7220,\"summary_text\":\"Making robots plan faster with SIMD and Rust Making robots plan faster with SIMD and Rust Clayton's WebsiteHomeAboutCVBlogRecipes Making robots plan faster with SIMD and Rust Clayton Ramsey - 2024-06-08 Systems programming and data structures meet to make instant collision-checking. I’m now wrapping up the first “real” research project of my Ph.D., which is both exciting and very stressful at the same time. I got to experiment with a lot of really cool things, but most of them didn’t actually work. I’m writing this blog post as a chance to explain all the things I tried that didn’t work out, as well as to share the untold story of the paper. Special thanks to my collaborators at the Kavraki Lab: Zak Kingston, Wil Thomason, and my advisor Lydia Kavraki. If you want to skip straight to just reading the final paper (which we’ll be prese\",\"classification_terms\":[\"blog/captree\",\"about\",\"blog\"],\"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\":4,\"depth\":1},{\"path\":\"/blog/prompt\",\"status\":200,\"title\":\"I'd rather read the prompt\",\"word_count\":2015,\"summary_text\":\"I'd rather read the prompt I'd rather read the prompt Clayton's WebsiteHomeAboutCVBlogRecipes I'd rather read the prompt Clayton Ramsey - 2025-05-03 When I grade students’ assignments, I sometimes see answers like this: Utilizing Euler angles for rotation representation could have the following possible downsides: Gimbal lock: In certain positions, orientations can reach a singularity, which prevents them from continuously rotating without a sudden change in the coordinate values. Numeric instability: Using Euler angles could cause numeric computations to be less precise, which can add up and produce inaccuracies if used often. Non-unique coordinates: Another downside of Euler angles is that some rotations do not have a unique representation in Euler angles, particularly at singularities. The downsides of Euler angl\",\"classification_terms\":[\"blog/prompt\",\"about\",\"blog\"],\"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\":1,\"depth\":1},{\"path\":\"/blog/soft-lock-picking/\",\"status\":200,\"title\":\"Soft lock picking in real life\",\"word_count\":697,\"summary_text\":\"Soft lock picking in real life Soft lock picking in real life Clayton's WebsiteHomeAboutCVBlogRecipes Soft lock picking in real life Clayton Ramsey - 2026-03-27 Last weekend, I played a fun little indie game called Real Life Soft Lock Picking. To play, just lose your phone, wallet, and keys all at the same time. You will then be soft locked: despite every system in the world working as intended, you’ll be locked out of your home, unable to make any progress or even feed yourself. The only way out is by soft lock picking, where you have to escape from a soft lock with a mix of cleverness and extraordinary patience. Homeward bound Once soft locked, your first problem is going to be finding some way to eat and sleep. Having locked your front door, you can’t get into your home. I live alone, so there were no spare copies of\",\"classification_terms\":[\"blog/soft-lock-picking\",\"about\",\"wallet\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":1,\"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\":1,\"depth\":2},{\"path\":\"/blog/dumpster2/\",\"status\":200,\"title\":\"Garbage collection in Rust got a little better\",\"word_count\":1479,\"summary_text\":\"Garbage collection in Rust got a little better Garbage collection in Rust got a little better Clayton's WebsiteHomeAboutCVBlogRecipes Garbage collection in Rust got a little better Clayton Ramsey - 2025-12-28 Every language attempts to expand until it can be Java. Those languages which cannot so expand are replaced by ones which can. some smart programmer, probably A long time ago, I wrote a garbage collector, called dumpster, in Rust. If I may say so myself, it was a delightful garbage collector. However, I think it was imperfect, so I’m writing up this blog post to write about new improvements coming to dumpster after two years in the wild. For this post, I selected just a couple of the cooler changes to dumpster, mostly to share the joy of working on this project. I’ll try my best to explain the changes for those without much expert\",\"classification_terms\":[\"blog/dumpster2\",\"about\",\"blog\"],\"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\":1,\"depth\":2},{\"path\":\"/blog/second-year/\",\"status\":200,\"title\":\"My second year of grad school: reflections\",\"word_count\":1391,\"summary_text\":\"My second year of grad school: reflections My second year of grad school: reflections Clayton's WebsiteHomeAboutCVBlogRecipes My second year of grad school: reflections Clayton Ramsey - 2025-08-17 Two years of Ph.D. study have made me twice as smart as before! Well, not really. But I’ve still grown a lot, and I’ve added up a lot of achievements. Admittedly, there hasn’t been much outward change, since I’ve no more publications than last year, but I think I’m in a far better shape than the last time I wrote a reflection. I’ve pushed my prior work in front of loads of eyeballs, especially since I presented it at a number of places, from on campus at Rice to two different workshops at ICRA. Meanwhile, my long-running ongoing project in task in motion planning is finally wrapping up, so I am now getting ready to publish a paper requiri\",\"classification_terms\":[\"blog/second-year\",\"about\",\"blog\",\"shop\"],\"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\":1,\"depth\":2},{\"path\":\"/blog/prompt/\",\"status\":200,\"title\":\"I'd rather read the prompt\",\"word_count\":2015,\"summary_text\":\"I'd rather read the prompt I'd rather read the prompt Clayton's WebsiteHomeAboutCVBlogRecipes I'd rather read the prompt Clayton Ramsey - 2025-05-03 When I grade students’ assignments, I sometimes see answers like this: Utilizing Euler angles for rotation representation could have the following possible downsides: Gimbal lock: In certain positions, orientations can reach a singularity, which prevents them from continuously rotating without a sudden change in the coordinate values. Numeric instability: Using Euler angles could cause numeric computations to be less precise, which can add up and produce inaccuracies if used often. Non-unique coordinates: Another downside of Euler angles is that some rotations do not have a unique representation in Euler angles, particularly at singularities. The downsides of Euler angl\",\"classification_terms\":[\"blog/prompt\",\"about\",\"blog\"],\"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\":1,\"depth\":2},{\"path\":\"/blog/drawings/\",\"status\":200,\"title\":\"How I make figures\",\"word_count\":439,\"summary_text\":\"How I make figures How I make figures Clayton's WebsiteHomeAboutCVBlogRecipes How I make figures Clayton Ramsey - 2025-05-02 As a grad student, I have to give a lot of presentations, and all those presentations have to look good. Inevitably this means that I have to make a lot of pictures. This is a short little post about how I make “explanatory” figures: diagrams and models and such. I prefer to make my own figures, since I’m always disappointed to see AI-generated stock photos. To be honest, I’d rather they just tell me what prompt they gave to the model, rather than the output. In some presentations I might also borrow figures from others’ work (with attribution, of course), but most of the time, I just make my own. For this article, I’ll walk through the creation process for one figure. The details aren\",\"classification_terms\":[\"blog/drawings\",\"about\",\"blog\"],\"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\":1,\"depth\":2},{\"path\":\"/blog/no-html/\",\"status\":200,\"title\":\"No longer writing my own damn HTML\",\"word_count\":760,\"summary_text\":\"No longer writing my own damn HTML No longer writing my own damn HTML Clayton's WebsiteHomeAboutCVBlogRecipes No longer writing my own damn HTML Clayton Ramsey - 2025-02-11 I’ve (mostly) given up on hand-writing HTML for my personal blog. Previously, I wrote all the HTML for this site by hand Over the past few days, I recently ported my whole blog from HTML to Zola. I’m writing this post partly to explain why and how I did it, and in part as a response to other posts about writing a blog using spartan tooling. Papercuts So, why change over? In short, I just got sick of it. I stand by my original claims from when I ported from Jekyll to HTML: namely, handwriting HTML is honestly not that hard. However, writing every post added a few small papercuts that made writing harder than it had to be. To write a new article, I’d have\",\"classification_terms\":[\"blog/no-html\",\"about\",\"blog\"],\"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\":1,\"depth\":2},{\"path\":\"/blog/simd-wordle/\",\"status\":200,\"title\":\"Solving 20 billion Wordle problems per second\",\"word_count\":4860,\"summary_text\":\"Solving 20 billion Wordle problems per second Solving 20 billion Wordle problems per second Clayton's WebsiteHomeAboutCVBlogRecipes Solving 20 billion Wordle problems per second Clayton Ramsey - 2024-11-25 Wordle is a mostly-solved problem, but we can mostly-solve it faster. Every so often, I get caught with the puzzle automation mind virus, and feel a burning need to write an engine for solving a pointless little game or puzzle. This time, I got caught by Wordle. To my knowledge, I’ve implemented the fastest implementation of a word grader out there. Of course, I’m nearly three years late to the party, but I had fun writing all this, which is all that matters to me. If you don’t care about the journey as much as me, you can check out the source code here. What even is Wordle? In case you lived under a rock around 3 years ago, Wordle\",\"classification_terms\":[\"blog/simd-wordle\",\"about\",\"blog\",\"source code\"],\"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\":39,\"depth\":2},{\"path\":\"/blog/effect-polymorphism/\",\"status\":200,\"title\":\"Effect polymorphism fixes dependency inversion\",\"word_count\":1797,\"summary_text\":\"Effect polymorphism fixes dependency inversion Effect polymorphism fixes dependency inversion Clayton's WebsiteHomeAboutCVBlogRecipes Effect polymorphism fixes dependency inversion Clayton Ramsey - 2024-10-05 TL;DR: Local programmer is inconvenienced by error-handling boilerplate, writes uninformed article about experimental programming language features. More at 11. I’ve encountered lots of pain points when dependency-inverting things, especially when working with combinators. Most recently, I’ve been thinking about how I might expose Python bindings for a half-baked motion planning library I’m building. The chief problem is that I want users to provide their own configuration spaces, samplers, robots, and collision checkers. If those are implemented in Python, they can throw an exception at any time, yielding an error in the correspo\",\"classification_terms\":[\"blog/effect-polymorphism\",\"about\",\"blog\"],\"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\":1,\"depth\":2},{\"path\":\"/blog/first-year/\",\"status\":200,\"title\":\"Reflections on a year of grad school\",\"word_count\":1226,\"summary_text\":\"Reflections on a year of grad school Reflections on a year of grad school Clayton's WebsiteHomeAboutCVBlogRecipes Reflections on a year of grad school Clayton Ramsey - 2024-08-15 I’m no wiser than last year, but at least I know a few more things. August 15 marks one year of Ph.D. research, so I’m writing up my experience with grad school for the sake of prospective grad students and also as a time capsule for myself. Overall, my experience so far was a huge success! I’ve had a lot of fun, made new friends, and produced surprisingly good work, and I’m excited for the future. As a brief greatest-hits list, I’ll note some of the big milestones I achieved in the past year below — some personal and some professional. I won two fellowships (NASA NSTGRO and DOD NDSEG). I wrote a whole conference paper for a project and presented it\",\"classification_terms\":[\"blog/first-year\",\"about\",\"blog\"],\"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\":1,\"depth\":2},{\"path\":\"/blog/captree/\",\"status\":200,\"title\":\"Making robots plan faster with SIMD and Rust\",\"word_count\":7220,\"summary_text\":\"Making robots plan faster with SIMD and Rust Making robots plan faster with SIMD and Rust Clayton's WebsiteHomeAboutCVBlogRecipes Making robots plan faster with SIMD and Rust Clayton Ramsey - 2024-06-08 Systems programming and data structures meet to make instant collision-checking. I’m now wrapping up the first “real” research project of my Ph.D., which is both exciting and very stressful at the same time. I got to experiment with a lot of really cool things, but most of them didn’t actually work. I’m writing this blog post as a chance to explain all the things I tried that didn’t work out, as well as to share the untold story of the paper. Special thanks to my collaborators at the Kavraki Lab: Zak Kingston, Wil Thomason, and my advisor Lydia Kavraki. If you want to skip straight to just reading the final paper (which we’ll be prese\",\"classification_terms\":[\"blog/captree\",\"about\",\"blog\"],\"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\":4,\"depth\":2},{\"path\":\"/blog/learned-from-teaching/\",\"status\":200,\"title\":\"Things I learned from teaching\",\"word_count\":1551,\"summary_text\":\"Things I learned from teaching Things I learned from teaching Clayton's WebsiteHomeAboutCVBlogRecipes Things I learned from teaching Clayton Ramsey - 2023-12-05 This spring, I taught an undergraduate class on chess engines. I probably learned more than any of my students. As a senior in college, I was the instructor, lecturer, grader, master of ceremonies, and grand poobah of COLL 110: Artificial Intelligence for Chess, 6-7 P.M. every Tuesday for the whole semester. In theory, I had a faculty advisor, but he was busy most of the time, so at the end of the day, it was my rodeo and I got to figure it all out on my own. I thought it was a great experience! I’m writing this post for a few reasons: first, I want to write down the things I wish that I had known before I started teaching, in the hopes that other soon-to-be tea\",\"classification_terms\":[\"blog/learned-from-teaching\",\"about\",\"blog\"],\"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\":1,\"depth\":2},{\"path\":\"/blog/own-html/\",\"status\":200,\"title\":\"Writing my own damn HTML\",\"word_count\":1174,\"summary_text\":\"Writing my own damn HTML Writing my own damn HTML Clayton's WebsiteHomeAboutCVBlogRecipes Writing my own damn HTML Clayton Ramsey - 2023-10-07 The future of the web doesn’t have to be webapp frameworks and cookie prompts. This week, I rewrote my website from scratch. Earlier, I had used Jekyll to generate my website, but I had gotten sick of it. In particular, I didn’t like having to add hack upon hack to get things to render the way I wanted to, I didn’t like the hacky build system, and I didn’t like having to debug the mishmash of mismatched versions, outdated documentation, and broken Ruby environments. In all, I think it’s been a really fun experience! To be completely honest, I think that building this site in vanilla HTML was easier than doing it with Jekyll. The only thing I really miss is writing up my blo\",\"classification_terms\":[\"blog/own-html\",\"about\",\"blog\"],\"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\":1,\"depth\":2},{\"path\":\"/blog/sixty-four-elo/\",\"status\":200,\"title\":\"One line of code cost me 9.2% of my matches\",\"word_count\":2007,\"summary_text\":\"One line of code cost me 9.2% of my matches One line of code cost me 9.2% of my matches Clayton's WebsiteHomeAboutCVBlogRecipes One line of code cost me 9.2% of my matches Clayton Ramsey - 2023-09-21 I can either write a hundred lines of code for one or two Elo or find one or two wrong lines of code for a hundred Elo. Such is life. My long-running slow-burn side project is Fiddler, a chess engine. The last time I wrote about it, I wrote about 300 lines of code to get a 6 Elo improvement, equivalent to a 1% improvement to its match performance. This time, I’m writing about a more recent development, when I edited one line of code to get a 64 Elo improvement, for about a 9.2% improvement in match performance. To avoid clickbaiting you, here’s the line in question. if best_score &gt;= beta { BoundType::Upper } else { BoundType::Lower }\",\"classification_terms\":[\"blog/sixty-four-elo\",\"about\",\"blog\"],\"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\":4,\"depth\":2},{\"path\":\"/blog/dumpster/\",\"status\":200,\"title\":\"I built a garbage collector for a language that doesn't need one\",\"word_count\":6099,\"summary_text\":\"I built a garbage collector for a language that doesn't need one I built a garbage collector for a language that doesn't need one Clayton's WebsiteHomeAboutCVBlogRecipes I built a garbage collector for a language that doesn't need one Clayton Ramsey - 2023-08-14 If carcinization happens when languages evolve to be more like Rust, then what do you call it when Rust evolves to be more like Java? Caffeination? Over this summer, I’ve had a decent amount of time to kill. What better way to spend a beautiful hot summer than sitting inside, staring at core dumps in a supposedly memory-safe language? I built a garbage collector - in short, a piece of software that manages allocations for another, more exciting piece of software. The cool part: I made it in Rust, for Rust - a language designed to eliminate garbage collection and which provides few facilities for\",\"classification_terms\":[\"blog/dumpster\",\"about\",\"blog\"],\"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\":1,\"depth\":2},{\"path\":\"/blog/fiddler-const-magic/\",\"status\":200,\"title\":\"Blowing up my compile times for dubious benefits\",\"word_count\":3923,\"summary_text\":\"Blowing up my compile times for dubious benefits Blowing up my compile times for dubious benefits Clayton's WebsiteHomeAboutCVBlogRecipes Blowing up my compile times for dubious benefits Clayton Ramsey - 2023-06-19 The tree of useless optimization yields questionable fruit. For the last two years, I’ve been building a chess engine called Fiddler. It’s not very good by chess engine standards, but that’s not the point - I mostly work on it for funsies. Right now, I’m reworking my move generator to more heavily use static, precomputed data rather than runtime generation. Most recently, I’m moving from dynamically generating and heap-allocating the magic move generation table to making it a statically allocated constant. Along the way, I’ll take this opportunity to explain how magic move generation works, and hopefully have a little fun. Upd\",\"classification_terms\":[\"blog/fiddler-const-magic\",\"about\",\"blog\"],\"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\":21,\"depth\":2},{\"path\":\"/recipes/bens-pumpkin-cookies/\",\"status\":200,\"title\":\"Ben's Pumpkin Cookies\",\"word_count\":184,\"summary_text\":\"Ben's Pumpkin Cookies Ben's Pumpkin Cookies Clayton's WebsiteHomeAboutCVBlogRecipes Ben's Pumpkin Cookies A really nice recipe for soft, tasty pumpkin cookies. I adapted it from one I found on Ben Overmyer’s website with a few modifications. those clayton cookies hit so hard 😭 i need them again frfr One of my friends after trying them This recipe is scaled to make around 50 cookies and takes about 1 hour. Ingredients 1 15oz can pureed pumpkin 2 cups white sugar 1 cup vegetable oil 2 eggs 4 cups flour 4 tsp cinnamon 1 tsp nutmeg 1 tsp salt 4 tsp baking powder 2 tsp baking soda 2 tsp milk 2 tbsp vanilla extract 2 cups dark chocolate chips Directions Combine all ingredients except chocolate chips. The resulting dough should be noticeably softer and wetter than normal cookie dough. Seal in a plastic bag and let res\",\"classification_terms\":[\"recipes/bens-pumpkin-cookies\",\"about\",\"blog\"],\"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\":\"/recipes/chicken-tikka-masala/\",\"status\":200,\"title\":\"Chicken Tikka Masla\",\"word_count\":234,\"summary_text\":\"Chicken Tikka Masla Chicken Tikka Masla Clayton's WebsiteHomeAboutCVBlogRecipes Chicken Tikka Masla An easy way to feed a lot of people. I developed this recipe while in undergrad as a way of making dinner without having too many dirty dishes to clean up at the end. This recipe is scaled to make around 6 servings and takes about 45 minutes. Ingredients Olive oil 1 medium onion, chopped 2 tbsp ginger, minced 4 cloves garlic, minced 1 tbsp garam masala 1 tbsp salt 1.5 tbsp cumin 1 tsp paprika 1 tsp black pepper 1 tsp cayenne pepper 0.25 tsp cinnamon 3 chicken breasts (2-3lb total), cut into 0.75“ cubes 2 serrano peppers, diced 15 oz canned tomato sauce 1/3 cup water 1 tbsp cornstarch 1 cup heavy cream 2 cups rice (dry) or ~6 cups cooked Directions Add all the spices to a small bowl. Begin cooking rice. To a lar\",\"classification_terms\":[\"recipes/chicken-tikka-masala\",\"about\",\"blog\"],\"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\":\"/recipes/chocolate-chip-cookies/\",\"status\":200,\"title\":\"Chocolate Chip Cookies\",\"word_count\":169,\"summary_text\":\"Chocolate Chip Cookies Chocolate Chip Cookies Clayton's WebsiteHomeAboutCVBlogRecipes Chocolate Chip CookiesChocolate chip cookies. What more do you want? This recipe is scaled to make around 40 cookies and takes about 1 hour. Ingredients 2.75 cups flour 1 tsp baking soda 1 tsp baking powder 1.5 tsp salt 2 sticks (8 oz) butter, softened 1.75 cups brown sugar 2 eggs 2 tsp vanilla extract 1 lb dark chocolate chips Directions Combine all ingredients except chocolate chips. Seal in a plastic bag and let rest in the refrigerator at least 30 minutes; preferably overnight. Preheat oven to 350° F. Mix chocolate chips into the dough. Cover a pan with parchment paper. Spoon out dough into medium-size balls, roughly 2 inches apart. Bake 15 minutes in the middle rack. Notes If you add a little extra salt, the cookies will t\",\"classification_terms\":[\"recipes/chocolate-chip-cookies\",\"about\",\"blog\"],\"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\":\"/recipes/cinnamon-roll-cookies/\",\"status\":200,\"title\":\"Cinnamon Roll Cookies\",\"word_count\":223,\"summary_text\":\"Cinnamon Roll Cookies Cinnamon Roll Cookies Clayton's WebsiteHomeAboutCVBlogRecipes Cinnamon Roll Cookies These aren’t really cinnamon rolls, but they aren’t really cookies either. This recipe is scaled to make around 36 cookies and takes about 2 hours. Ingredients Dough 2 sticks butter, at room temperature 1 cup sugar 0.5 tsp salt 1 tbsp vanilla extract 1 egg 2.5 cups flour Filling 1 stick butter 0.5 cup brown sugar 4 tsp cinnamon 4 tsp cocoa powder 4 tsp flour 0.5 tsp salt 2 tsp vanilla extract Directions Combine the dough ingredients in a large bowl until mixed thoroughly and stretchy. Cover and let rest in the refrigerator for at least 1 hour. Combine the filling ingredients. The filling should be wet and sticky. Preheat oven to 350 F. Retrieve dough from the refrigerator. Roll out into a flat sheet, roughl\",\"classification_terms\":[\"recipes/cinnamon-roll-cookies\",\"about\",\"blog\"],\"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\":\"/recipes/gregs-pie-crust/\",\"status\":200,\"title\":\"Greg's Pie Crust\",\"word_count\":286,\"summary_text\":\"Greg's Pie Crust Greg's Pie Crust Clayton's WebsiteHomeAboutCVBlogRecipes Greg's Pie Crust A simple crust that can be used for any dessert pie that you like. I originally got this recipe from Greg, who was an RA at my dorm when I was in undegrad. This recipe should be enough to make at least one pie, but could even be enough for two if you have a small tin. It takes roughly 2 hours to make. Ingredients 2.5 cups flour 0.25 cups sugar 1 tsp salt 1 cup cold butter, cubed 0.5 cups + 1 tsp buttermilk 1 egg Directions Mix flour, salt, sugar, and butter until mixture resembles coarse meal. Mix in 0.5 cups buttermilk. Flatten into two disks, each roughly 1/4“ thick. Store in refrigerator at least 1 hour; preferably overnight. Preheat oven to 425° F. Prepare your preferred filling. Roll out the dough into a flat sh\",\"classification_terms\":[\"recipes/gregs-pie-crust\",\"about\",\"blog\",\"store\"],\"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\":\"/recipes/jambalaya/\",\"status\":200,\"title\":\"Jambalaya\",\"word_count\":256,\"summary_text\":\"Jambalaya Jambalaya Clayton's WebsiteHomeAboutCVBlogRecipes Jambalaya A spicy jambalaya recipe. I got the base for this recipe from Matt and Bobby, who were RAs for my dorm in undergrad, but I’ve made my own modifications. This recipe makes about 8 to 10 servings. It takes roughly 2 hours to make. Ingredients 2 tbsp bacon fat 1.5 lb chicken, cubed 1.5 lb pork butt, cubed 1 lb andouille sausage, sliced 8 tbsp ground paprika 6 tbsp ground cayenne pepper 5 tbsp ground black pepper 6 tbsp garlic powder 3 tbsp onion powder 6 tbsp salt 2.5 tbsp dried oregano 2.5 tbsp dried thyme 1 onion, chopped 1 head celery, chopped 2 bell peppers, chopped 1/4 cup garlic, minced 7 cups chicken stock 1 cup green onions, sliced 0.5 cup parsley, chopped 4 cups long grain rice, dry Directions In a large mixing bowl, combine\",\"classification_terms\":[\"recipes/jambalaya\",\"about\",\"blog\"],\"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\":\"/recipes/banana-bread/\",\"status\":200,\"title\":\"Jared's Banana Bread\",\"word_count\":175,\"summary_text\":\"Jared's Banana Bread Jared's Banana Bread Clayton's WebsiteHomeAboutCVBlogRecipes Jared's Banana Bread I got this recipe from my friend and labmate Jared, who in turn got it from his grandmother. You can see the original written recipe above. Ingredients 0.5 cups margarine (or butter) 1 cup sugar 2 eggs 1 cup mashed bananas 1/3 cup milk 1 tsp lemon juice 2 cups flour 0.5 tsp baking powder 0.5 tsp baking soda 0.25 tsp salt 0.5 cups nuts (typically pecans, chopped) Directions Preheat oven to 350 F. Cream margarine and sugar together. Add eggs and beat well. Add bananas, milk, and juice. Add dry ingredients and fold. Do not overmix. Pour batter into a bread mold. Bake for 1 hour, until a toothpick driven through the center comes out clean and the mold sounds hollow when knocked on the bottom. Notes The bananas mu\",\"classification_terms\":[\"recipes/banana-bread\",\"about\",\"blog\"],\"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\":\"/recipes/lemon-bars/\",\"status\":200,\"title\":\"Lemon Bars\",\"word_count\":232,\"summary_text\":\"Lemon Bars Lemon Bars Clayton's WebsiteHomeAboutCVBlogRecipes Lemon BarsA dessert with a shortbread base and lemon custard topping. It’s based on Clara Le’s modification of Barry’s lime bars, but I have translated it into imperial units and slightly modified it. This recipe is scaled to make around 20 bars and takes about 1 hour. Ingredients Shortbread 2 cups flour 0.5 cups sugar 2 sticks (1 cup total) butter Custard 0.75 cups lemon juice; approx. 5 small or 3 large lemons Lemon zest 0.25 cups flour 1 heaping cup sugar 4 eggs Powdered sugar Directions Preheat oven to 325 F. Mix shortbread ingredients until it reaches the texture of coarse meal. In a greased, parchment-lined 9x13“ pan, pack the shortbread into an even layer. Bake the shortbread 20-25m or until starting to brown. While the shortbread b\",\"classification_terms\":[\"recipes/lemon-bars\",\"about\",\"api\",\"blog\"],\"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\":\"/recipes/lemon-roll-cake/\",\"status\":200,\"title\":\"Lemon Roll Cake\",\"word_count\":392,\"summary_text\":\"Lemon Roll Cake Lemon Roll Cake Clayton's WebsiteHomeAboutCVBlogRecipes Lemon Roll CakeIt’s really just sponge cake, but the spiral shape makes it seem more refined. 10 servings, roughly 2-3 hours (mostly downtime). Ingredients Cake 1 cup flour 0.25 tsp salt 1.5 tsp baking powder Zest of 1 lemon 0.5 cups (1 stick) unsalted butter 1 cup sugar 4 large eggs 1 tsp vanilla extract Juice of 1/2 lemon Powdered sugar for decoration Filling 1.5 cup heavy whipping cream 0.5 cups powdered sugar 1 tsp vanilla extract Directions Preheat oven to 350 F. In one bowl, combine flour, salt, baking powder, and lemon zest. Mix until combined. In a separate bowl, beat butter and sugar until creamy, then add eggs, vanilla extract, and lemon juice. Mix until combined. Combine wet and dry ingredients gently into a batter; do not\",\"classification_terms\":[\"recipes/lemon-roll-cake\",\"about\",\"blog\"],\"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\":\"/recipes/peanut-butter-cookies/\",\"status\":200,\"title\":\"Peanut Butter Cookies\",\"word_count\":286,\"summary_text\":\"Peanut Butter Cookies Peanut Butter Cookies Clayton's WebsiteHomeAboutCVBlogRecipes Peanut Butter Cookies Like snickerdoodles for peanut butter eaters. Yields 60 cookies, 2-3 hours. Ingredients 1 and 2/3 cups flour 1 tsp baking soda 0.5 tsp salt 1 cup (2 sticks) butter, softened 1 cup brown sugar 1/2 cup granulated sugar, plus extra 2 eggs 1.5 cups creamy peanut butter 2 tsp vanilla extract Cinnamon and other aromatic spices to taste 12 oz dark chocolate Directions In a large mixing bowl, combine all ingredients except cinnamon, spices, and chocolate. The dough will be very soft - this is normal. Pack dough into a ball and refrigerate at least 1 hour. Preheat oven to 350° F. Pour sugar, cinnamon, and other spices into a small bowl until you have a thin layer on the bottom. Roll dough into roughly 1“ diameter ba\",\"classification_terms\":[\"recipes/peanut-butter-cookies\",\"about\",\"blog\"],\"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\":\"/recipes/tomato-sauce/\",\"status\":200,\"title\":\"Tomato Sauce\",\"word_count\":155,\"summary_text\":\"Tomato Sauce Tomato Sauce Clayton's WebsiteHomeAboutCVBlogRecipes Tomato SauceMy mothers recipe for tomato sauce. It’s quite hearty, and, more importantly, quite cheap. This recipe makes about 8 to 10 servings. It takes roughly 1 hour to make. Ingredients Olive oil 1 onion, chopped 4 sticks celery, chopped 2 bell peppers, chopped 2 tbsp garlic, minced 1 lb ground Italian sausage 32 oz canned diced tomatoes 16 oz canned tomato sauce 6 oz canned tomato paste Salt Pepper Italian seasoning Directions Heat a large pot on the stove. Sauté onion, celery, bell peppers, and garlic in oil until clear. Add sausage, slicing with a spatula until mixed and mostly cooked, approx. 5 min. Add tomatoes, tomato sauce, and tomato paste. Bring to a simmer, the longer the better. Add seasonings to taste. Serve over pasta. N\",\"classification_terms\":[\"recipes/tomato-sauce\",\"about\",\"blog\"],\"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\":\"/blog/dumpster\",\"status\":200,\"title\":\"I built a garbage collector for a language that doesn't need one\",\"word_count\":6099,\"summary_text\":\"I built a garbage collector for a language that doesn't need one I built a garbage collector for a language that doesn't need one Clayton's WebsiteHomeAboutCVBlogRecipes I built a garbage collector for a language that doesn't need one Clayton Ramsey - 2023-08-14 If carcinization happens when languages evolve to be more like Rust, then what do you call it when Rust evolves to be more like Java? Caffeination? Over this summer, I’ve had a decent amount of time to kill. What better way to spend a beautiful hot summer than sitting inside, staring at core dumps in a supposedly memory-safe language? I built a garbage collector - in short, a piece of software that manages allocations for another, more exciting piece of software. The cool part: I made it in Rust, for Rust - a language designed to eliminate garbage collection and which provides few facilities for\",\"classification_terms\":[\"blog/dumpster\",\"about\",\"blog\"],\"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\":1,\"depth\":3},{\"path\":\"/blog/first-year\",\"status\":200,\"title\":\"Reflections on a year of grad school\",\"word_count\":1226,\"summary_text\":\"Reflections on a year of grad school Reflections on a year of grad school Clayton's WebsiteHomeAboutCVBlogRecipes Reflections on a year of grad school Clayton Ramsey - 2024-08-15 I’m no wiser than last year, but at least I know a few more things. August 15 marks one year of Ph.D. research, so I’m writing up my experience with grad school for the sake of prospective grad students and also as a time capsule for myself. Overall, my experience so far was a huge success! I’ve had a lot of fun, made new friends, and produced surprisingly good work, and I’m excited for the future. As a brief greatest-hits list, I’ll note some of the big milestones I achieved in the past year below — some personal and some professional. I won two fellowships (NASA NSTGRO and DOD NDSEG). I wrote a whole conference paper for a project and presented it\",\"classification_terms\":[\"blog/first-year\",\"about\",\"blog\"],\"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\":1,\"depth\":3},{\"path\":\"/blog/fiddler-const-magic\",\"status\":200,\"title\":\"Blowing up my compile times for dubious benefits\",\"word_count\":3923,\"summary_text\":\"Blowing up my compile times for dubious benefits Blowing up my compile times for dubious benefits Clayton's WebsiteHomeAboutCVBlogRecipes Blowing up my compile times for dubious benefits Clayton Ramsey - 2023-06-19 The tree of useless optimization yields questionable fruit. For the last two years, I’ve been building a chess engine called Fiddler. It’s not very good by chess engine standards, but that’s not the point - I mostly work on it for funsies. Right now, I’m reworking my move generator to more heavily use static, precomputed data rather than runtime generation. Most recently, I’m moving from dynamically generating and heap-allocating the magic move generation table to making it a statically allocated constant. Along the way, I’ll take this opportunity to explain how magic move generation works, and hopefully have a little fun. Upd\",\"classification_terms\":[\"blog/fiddler-const-magic\",\"about\",\"blog\"],\"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\":21,\"depth\":3}]",
        "score_reasons_json": "[\"Clean low-risk signals now remain neutral instead of receiving a caution tag from low confidence alone.\"]",
        "estimated_monthly_visitors": 305,
        "route_domain": "claytonwramsey.com",
        "display_domain": "claytonwramsey.com"
    },
    "explainability": {
        "summary": "claytonwramsey.com currently scores 47/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": "48/100"
            },
            {
                "label": "Crawler access",
                "value": "Clean visibility",
                "tone": "good",
                "detail": null
            }
        ],
        "weighted_contributions": [
            {
                "label": "Quality system",
                "points": "+32.0",
                "tone": "good",
                "detail": "Technical quality, crawl depth, page structure, and implementation hygiene. Current subsystem score: 94/100."
            },
            {
                "label": "Reputation system",
                "points": "+12.9",
                "tone": "risk",
                "detail": "Authority, search visibility, reach, engagement, and registry stability. Current subsystem score: 38/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": "-30.0",
                "tone": "risk",
                "detail": "Safety thresholds capped the final score until the risk profile improves."
            }
        ],
        "evidence_cards": [
            {
                "label": "Authority and trust",
                "value": "33/100 · trust 57/100",
                "tone": "caution",
                "detail": "234 monthly visitors, 53 organic keywords, brand completeness 62/100, engagement 86/100."
            },
            {
                "label": "Backlink and search evidence",
                "value": "1 referring domains",
                "tone": "good",
                "detail": "1 backlinks across 1 referring domains. Diversity 92/100; spam penalty 0."
            },
            {
                "label": "Registry and domain stability",
                "value": "2.1 years old",
                "tone": "good",
                "detail": "Stability 100/100 · age 2.1 years · registrar Porkbun LLC · expires in 2,867 days."
            },
            {
                "label": "Safety and fraud posture",
                "value": "Safety 100/100 · fraud 1/100",
                "tone": "good",
                "detail": "Safety 100/100 · fraud 1/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": [],
        "freshness": [
            {
                "label": "Crawl evidence",
                "value": "2026-04-20 16:31:57",
                "tone": "risk",
                "detail": "Crawl and page content sample. Age: 2mo ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-04-20 16:31:54",
                "tone": "risk",
                "detail": "Registry profile and stability signals. Age: 2mo ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-06-25 04:34:30",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-06-25 04:34:30",
                "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": 77,
        "fraud_clamp_penalty": 30,
        "final_score": 47
    },
    "insight_snapshot": {
        "version": 1,
        "generated_at": "2026-06-25T04:34:30+00:00",
        "domain": "claytonwramsey.com",
        "display_name": "Clayton's Website",
        "is_tracked": false,
        "is_estimated": true,
        "overall_score": 47,
        "authority_score": 33,
        "trust_score": 57,
        "safety_score": 100,
        "fraud_score": 1,
        "confidence_score": 100,
        "traffic_confidence": 48,
        "last_crawled_at": "2026-04-20 16:31:57",
        "crawl_blocked": false,
        "summary": "claytonwramsey.com currently scores 47/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": "48/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": [],
        "freshness": [
            {
                "label": "Crawl evidence",
                "value": "2026-04-20 16:31:57",
                "tone": "risk",
                "detail": "Crawl and page content sample. Age: 2mo ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-04-20 16:31:54",
                "tone": "risk",
                "detail": "Registry profile and stability signals. Age: 2mo ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-06-25 04:34:30",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-06-25 04:34:30",
                "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": []
    },
    "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-06-25T06:40:25+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/claytonwramsey.com/refresh",
        "isGuestCooldown": false,
        "cooldownSeconds": 0
    },
    "urlscan_report": {
        "domain": "claytonwramsey.com",
        "status": "idle",
        "submitted_at": null,
        "completed_at": null,
        "last_checked_at": null,
        "last_error": "",
        "submitted_url": "https://claytonwramsey.com/",
        "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
    }
}