{
    "ready": true,
    "site": {
        "id": 0,
        "domain": "chameth.com",
        "display_name": "About · Chameth.com",
        "primary_country_code": "",
        "category_name": "Personal"
    },
    "metrics": {
        "global_rank": 3151,
        "country_rank": 1601,
        "category_rank": 11,
        "daily_pageviews_per_visitor": 3.89,
        "daily_time_on_site_seconds": 323,
        "bounce_rate": 31.84,
        "search_visits_percent": 39.19,
        "total_sites_linking_in": 3,
        "monthly_unique_visitors": 283,
        "recorded_at": "2026-04-04 23:58:49"
    },
    "audit": {
        "score": 87
    },
    "traffic_sources": {
        "direct_percent": 28.12,
        "search_percent": 34.4,
        "social_percent": 6.86,
        "referral_percent": 13.54,
        "email_percent": 7.98,
        "paid_percent": 9.1
    },
    "seo_profile": {
        "backlinks_total": 3,
        "referring_domains": 3,
        "dofollow_backlinks_percent": 100,
        "organic_keywords": 87,
        "indexed_pages": 416,
        "page_speed_score": 100,
        "mobile_friendliness_score": 81,
        "authority_score": 52,
        "spam_risk_score": 27
    },
    "crawl_report": {
        "robots_status": 200,
        "sitemap_status": 200,
        "sitemap_total_urls": 416,
        "crawl_blocked": false,
        "crawl_blocked_by": "",
        "crawl_blocked_reason": "",
        "notes": [
            "Meta description is missing."
        ],
        "created_at": "2026-04-04 23:58:49"
    },
    "keywords": [
        {
            "keyword": "About · Chameth.com",
            "position": 17,
            "search_engine": "Estimated",
            "checked_at": "2026-04-13 17:54:59",
            "is_estimated": true
        },
        {
            "keyword": "About · Chameth.com personal",
            "position": 19,
            "search_engine": "Estimated",
            "checked_at": "2026-04-13 17:54:59",
            "is_estimated": true
        },
        {
            "keyword": "About · Chameth.com reviews",
            "position": 21,
            "search_engine": "Estimated",
            "checked_at": "2026-04-13 17:54:59",
            "is_estimated": true
        },
        {
            "keyword": "about",
            "position": 23,
            "search_engine": "Estimated",
            "checked_at": "2026-04-13 17:54:59",
            "is_estimated": true
        },
        {
            "keyword": "chameth",
            "position": 25,
            "search_engine": "Estimated",
            "checked_at": "2026-04-13 17:54:59",
            "is_estimated": true
        }
    ],
    "rating": {
        "overall": 64,
        "label": "Healthy",
        "breakdown": [
            {
                "label": "Technical foundation",
                "score": 17,
                "max": 18
            },
            {
                "label": "Authority & trust",
                "score": 16,
                "max": 30
            },
            {
                "label": "Reach & market presence",
                "score": 3,
                "max": 18
            },
            {
                "label": "Search visibility",
                "score": 4,
                "max": 12
            },
            {
                "label": "Engagement & retention",
                "score": 9,
                "max": 10
            },
            {
                "label": "Channels & diversification",
                "score": 4,
                "max": 6
            },
            {
                "label": "Registry stability",
                "score": 6,
                "max": 6
            },
            {
                "label": "Quality system",
                "score": 94,
                "max": 100
            },
            {
                "label": "Reputation system",
                "score": 51,
                "max": 100
            },
            {
                "label": "Safety system",
                "score": 100,
                "max": 100
            },
            {
                "label": "Evidence confidence",
                "score": 100,
                "max": 100
            }
        ],
        "authority_score": 54,
        "quality_score": 94,
        "reputation_score": 51,
        "safety_score": 100,
        "confidence_score": 100,
        "fraud_score": 0,
        "authority_signals": {
            "backlinks": 3,
            "referring_domains": 3,
            "organic_keywords": 87,
            "indexed_pages": 416,
            "monthly_visitors": 283,
            "global_rank": 3151,
            "engagement_score": 79,
            "crawl_quality_score": 100,
            "brand_completeness_score": 57,
            "link_diversity_score": 94,
            "technical_reliability_score": 94,
            "whois_score": 78,
            "whois_age_years": 12.1,
            "whois_stability_score": 100,
            "spam_penalty": 0
        },
        "whois_signals": {
            "age_years": 12.1,
            "days_to_expiry": 315,
            "days_since_last_registry_update": 94,
            "stability_score": 100,
            "registrar_changes": 0,
            "ownership_changes": 0,
            "nameserver_changes": 0,
            "status_changes": 0,
            "history_entries": 1,
            "privacy_protected": false,
            "dnssec_enabled": true,
            "has_registrant_country": false,
            "registrant_country": "",
            "nameserver_count": 4,
            "status_count": 2
        }
    },
    "authority_score": 54,
    "trust_score": 80,
    "domain_tags": {
        "primary_tag": "T",
        "primary_tag_score": 87,
        "primary_candidate": "T",
        "primary_candidate_score": 87,
        "tag_codes": "T,Uncertain",
        "tags": [
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good",
                "description": "Strong trust, stability, and low-risk signals were detected.",
                "reason": "Low spam indicators plus strong trust, quality, registry, and stability signals were detected.",
                "message": "The site shows a reasonably trustworthy and stable profile.",
                "priority": 87,
                "score": 87,
                "match_percent": 87,
                "threshold_band": "strong"
            },
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown",
                "description": "External checks stayed inconclusive, so the model avoided a harder verdict.",
                "reason": "External checks stayed inconclusive, so the system kept an uncertainty buffer.",
                "message": "The evidence is materially mixed or partially corroborated, so the model is avoiding a harder verdict.",
                "priority": 68,
                "score": 68,
                "match_percent": 68,
                "threshold_band": "strong"
            }
        ],
        "tag_breakdown": [
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good",
                "description": "Strong trust, stability, and low-risk signals were detected.",
                "reason": "Low spam indicators plus strong trust, quality, registry, and stability signals were detected.",
                "message": "The site shows a reasonably trustworthy and stable profile.",
                "priority": 87,
                "score": 87,
                "match_percent": 87,
                "threshold_band": "strong"
            },
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown",
                "description": "External checks stayed inconclusive, so the model avoided a harder verdict.",
                "reason": "External checks stayed inconclusive, so the system kept an uncertainty buffer.",
                "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": "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": 84,
        "manual": {
            "has_changes": false,
            "verified_status": "",
            "tag_codes": "",
            "rating_delta": 0,
            "authority_delta": 0,
            "trust_delta": 0,
            "note": "",
            "adjusted_by": 0,
            "adjusted_at": "",
            "lock_scores": false,
            "lock_flags": false
        },
        "summary": "Trusted (87% match) because low spam indicators plus strong trust, quality, registry, and stability signals were detected.",
        "external_intel": {
            "domain": "chameth.com",
            "candidate_tag": "T",
            "checked_at": "2026-04-13T17:54:59+00:00",
            "status": "queued",
            "snapshot_version": 9,
            "summary": "External intelligence is now manual-only. Use Refresh data to trigger search and review intelligence gathering for this domain.",
            "search_intelligence": {
                "queries": [],
                "providers": [],
                "results_found": 0,
                "results": [],
                "source_mix": [],
                "entity_coverage_score": 0
            },
            "review_intelligence": {
                "documents_fetched": 0,
                "documents": [],
                "facts": [],
                "ignored_candidates": [],
                "source_diversity": 0,
                "elapsed_ms": 0,
                "candidates_considered": 0,
                "fetch_success_rate": 0,
                "avg_source_trust": 0,
                "avg_entity_score": 0
            },
            "evidence": {
                "scores": [],
                "counts": [],
                "tag_support": [],
                "top_supporting_facts": [],
                "top_positive_facts": []
            },
            "quality": {
                "source_diversity_score": 0,
                "entity_coverage_score": 0,
                "freshness_score": 0,
                "confidence": 0,
                "documents_fetched": 0,
                "fact_count": 0,
                "avg_source_trust": 0,
                "avg_entity_score": 0,
                "fetch_success_rate": 0,
                "exact_match_score": 0,
                "query_coverage_score": 0
            },
            "decision": {
                "state": "insufficient",
                "uncertainty": true,
                "candidate_support": 0,
                "candidate_contradiction": 0,
                "supports": [],
                "evidence_quality": "low",
                "state_label": "Inconclusive",
                "state_reason": "Search and review intelligence has not produced enough qualified evidence yet to harden the verdict."
            },
            "signals": {
                "scores": [],
                "counts": [],
                "candidate_support": 0,
                "candidate_contradiction": 0,
                "highlights": []
            },
            "citations": [],
            "urlscan": [],
            "provider_enrichment": {
                "providers": [],
                "facts": [],
                "citations": [],
                "highlights": [],
                "quality": {
                    "provider_diversity_score": 0,
                    "provider_confidence_score": 0,
                    "provider_fact_count": 0
                }
            },
            "eligibility": [],
            "cooldown": [],
            "debug": []
        },
        "external_decision": {
            "state": "insufficient",
            "uncertainty": true,
            "candidate_support": 0,
            "candidate_contradiction": 0,
            "supports": [],
            "evidence_quality": "low",
            "state_label": "Inconclusive",
            "state_reason": "Search and review intelligence has not produced enough qualified evidence yet to harden the verdict."
        },
        "signal_scores": [
            {
                "label": "Strongest tag heuristic",
                "value": "T · 87%",
                "tone": "good",
                "detail": "The highest raw tag match from the heuristic engine before visibility thresholds and manual overrides."
            },
            {
                "label": "Trust score",
                "value": "84/100",
                "tone": "good",
                "detail": "Confidence derived from authority, crawl quality, stability, and risk signals."
            },
            {
                "label": "Authority score",
                "value": "56/100",
                "tone": "caution",
                "detail": "A higher authority score usually means broader reputation and backlink confidence."
            },
            {
                "label": "Spam risk",
                "value": "0/100",
                "tone": "good",
                "detail": "Lower is better. This blends spam indicators with false-positive protections for legitimate sites."
            },
            {
                "label": "Quality score",
                "value": "91/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": "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": "12.1 years",
                        "tone": "good",
                        "detail": "Older domains generally carry more historical trust than very new ones."
                    },
                    {
                        "label": "Stability score",
                        "value": "100/100",
                        "tone": "good",
                        "detail": "Penalised by registrar, ownership, and nameserver churn."
                    },
                    {
                        "label": "Days to expiry",
                        "value": "315",
                        "tone": "good",
                        "detail": "Very short renewal windows can be a weak trust signal."
                    },
                    {
                        "label": "Registrar / ownership changes",
                        "value": "0 / 0",
                        "tone": "good",
                        "detail": "Frequent ownership churn can weaken trust."
                    },
                    {
                        "label": "Nameserver changes",
                        "value": "0",
                        "tone": "good",
                        "detail": "Repeated infrastructure changes can indicate instability."
                    },
                    {
                        "label": "DNSSEC / privacy",
                        "value": "DNSSEC on · privacy off",
                        "tone": "good",
                        "detail": "DNSSEC strengthens DNS trust; privacy is neutral on its own."
                    }
                ]
            },
            {
                "title": "Reputation & search evidence",
                "items": [
                    {
                        "label": "Backlinks",
                        "value": "3",
                        "tone": "unknown",
                        "detail": "Broader backlink evidence usually improves confidence."
                    },
                    {
                        "label": "Referring domains",
                        "value": "3",
                        "tone": "unknown",
                        "detail": "Unique linking domains are more useful than raw link volume."
                    },
                    {
                        "label": "Organic keywords",
                        "value": "87",
                        "tone": "caution",
                        "detail": "Search footprint helps distinguish real sites from thin shells."
                    },
                    {
                        "label": "Indexed pages",
                        "value": "416",
                        "tone": "good",
                        "detail": "Larger index coverage usually means more evidence to classify from."
                    },
                    {
                        "label": "Brand strength",
                        "value": "57/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 · 247 ms",
                        "tone": "good",
                        "detail": "Slow or broken technical signals weaken confidence."
                    },
                    {
                        "label": "Content words",
                        "value": "520",
                        "tone": "caution",
                        "detail": "Thin pages are harder to trust and easier to manipulate."
                    },
                    {
                        "label": "Schema / structure",
                        "value": "0 schema · no meta · H1",
                        "tone": "caution",
                        "detail": "Structured markup and basic on-page hygiene improve quality confidence."
                    },
                    {
                        "label": "Links on page",
                        "value": "24 internal · 8 external",
                        "tone": "good",
                        "detail": "Link patterns help detect thin directories and promo pages."
                    },
                    {
                        "label": "Page speed / mobile",
                        "value": "100/100 · 81/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": "Search and review intelligence has not produced enough qualified evidence yet to harden the 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": "Active",
                        "tone": "caution",
                        "detail": "Prevents thin or mixed external evidence from forcing a stronger tag than the evidence can justify."
                    }
                ]
            }
        ],
        "positives": [
            "Established domain age: 12.1 years.",
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness.",
            "Search evidence is broad enough to classify with better confidence.",
            "DNSSEC is enabled."
        ],
        "risks": [
            "External evidence was mixed or sparse, so the tag model keeps an uncertainty buffer instead of overcommitting."
        ]
    },
    "traffic_confidence": 72,
    "whois": {
        "current": {
            "id": 16621,
            "domain": "chameth.com",
            "source_type": "rdap",
            "rdap_url": "https://rdap.verisign.com/com/v1/domain/CHAMETH.COM",
            "registrar_name": "Porkbun LLC",
            "registrar_handle": "1861",
            "registrant_name": "",
            "registrant_org": "",
            "registrant_country": "",
            "registrant_email": "",
            "abuse_email": "abuse@porkbun.com",
            "created_date": "2014-02-23 16:04:20",
            "updated_date": "2026-01-09 04:32:45",
            "expires_date": "2027-02-23 16:04:20",
            "nameservers_json": "[\"ns1.mydnshost.co.uk\",\"ns2.mydnshost.co.uk\",\"ns3.mydnshost.co.uk\",\"ns4.mydnshost.co.uk\"]",
            "status_json": "[\"client delete prohibited\",\"client transfer prohibited\"]",
            "dnssec": "signed",
            "privacy_protected": 0,
            "content_hash": "ba7784c8261fec7db8c96979ab65dff9f37f8d6fc78fde72b48f3f9dda4618e5",
            "history_count": 1,
            "last_checked_at": "2026-04-04 23:58:40",
            "last_changed_at": "2026-03-17 07:42:32",
            "created_at": "2026-03-17 07:42:33",
            "updated_at": "2026-04-04 23:58:40"
        },
        "history": [
            {
                "id": 16934,
                "domain": "chameth.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": "2014-02-23 16:04:20",
                "updated_date": "2026-01-09 04:32:45",
                "expires_date": "2027-02-23 16:04:20",
                "nameservers_json": "[\"ns1.mydnshost.co.uk\",\"ns2.mydnshost.co.uk\",\"ns3.mydnshost.co.uk\",\"ns4.mydnshost.co.uk\"]",
                "status_json": "[\"client delete prohibited\",\"client transfer prohibited\"]",
                "dnssec": "signed",
                "privacy_protected": 0,
                "content_hash": "ba7784c8261fec7db8c96979ab65dff9f37f8d6fc78fde72b48f3f9dda4618e5",
                "checked_at": "2026-03-17 07:42:32",
                "change_summary": "Initial WHOIS snapshot captured.",
                "created_at": "2026-03-17 07:42:32"
            }
        ],
        "signals": {
            "age_years": 12.1,
            "days_to_expiry": 315,
            "days_since_last_registry_update": 94,
            "stability_score": 100,
            "registrar_changes": 0,
            "ownership_changes": 0,
            "nameserver_changes": 0,
            "status_changes": 0,
            "history_entries": 1,
            "privacy_protected": false,
            "dnssec_enabled": true,
            "has_registrant_country": false,
            "registrant_country": "",
            "nameserver_count": 4,
            "status_count": 2
        }
    },
    "discovered_domain": {
        "id": 81328,
        "domain": "chameth.com",
        "first_seen_at": "2026-03-15 20:25:04",
        "last_crawled_at": "2026-04-04 23:58:49",
        "last_title": "About · Chameth.com",
        "last_http_status": 200,
        "discovered_from_domain": "personalsit.es",
        "depth": 0,
        "backlinks_count": 3,
        "rating_cache": 48,
        "spam_score": 24,
        "risk_label": "good",
        "category_name": "Personal",
        "primary_country_code": "",
        "internal_links_count": 24,
        "external_links_count": 8,
        "social_profiles_count": 1,
        "content_word_count": 520,
        "title_quality_score": 79,
        "has_meta_description": 0,
        "has_h1": 1,
        "language_code": "en",
        "response_time_ms": 247,
        "robots_status": 200,
        "sitemap_status": 200,
        "sitemap_total_urls": 416,
        "quality_score": 91,
        "site_name": "",
        "canonical_domain": "",
        "favicon_present": 1,
        "schema_org_count": 0,
        "noindex_detected": 0,
        "feed_links_count": 3,
        "https_working": 1,
        "estimated_authority_score": 42,
        "trust_score": 92,
        "nsfw_score": 0,
        "overall_rank_estimate": 1792158,
        "primary_tag": "C",
        "tag_codes": "C,T,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": 65,
        "infrastructure_risk_score": 0,
        "score_confidence": 100,
        "tag_confidence": 72,
        "category_confidence": 30,
        "deep_crawl_pages": 50,
        "resolved_ip": "135.181.62.48",
        "category_candidates_json": "[{\"category\":\"Personal\",\"score\":28},{\"category\":\"Business\",\"score\":22},{\"category\":\"News & Media\",\"score\":17},{\"category\":\"Social Media\",\"score\":17}]",
        "page_signals_json": "[{\"path\":\"/about\",\"status\":200,\"title\":\"About · Chameth.com\",\"word_count\":520,\"summary_text\":\"About · Chameth.com About · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Name: Chris Smith Class: Programmer Type: Human HP: 929 ✪✪ Yak Shave After attacking, add 1d6 side project tokens to this card. ✪✪✪ Side project Multiply all damage by number of side project tokens. 01/001 Chameth.com Hello :) Hello! I'm Chris, a software developer from the UK. Welcome to my personal website. The site is mostly organised around a bunch of slash pages: /posts is where all my blog posts live /projects lists my various side projects /interests is a big ol' list of things I'm into /films logs films I've seen and my reviews of them /uses has an overview of the software, hardware, services, and so on, that I use /contact provides a way to drop me an e-mail /colophon details a bit ab\",\"classification_terms\":[\"about\",\"contact\",\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/contact\",\"status\":200,\"title\":\"Contact me · Chameth.com\",\"word_count\":267,\"summary_text\":\"Contact me · Chameth.com Contact me · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Contact me Fill in the form to send me an e-mail. I'm happy to receive your thoughts, comments, corrections, random chats, etc. I try to reply to most messages, but make no promises about timeliness! One small caveat: if you need help with something, I'd much prefer you ask publicly somewhere first (e.g.: on Stack Overflow, a relevant mailing list, forum, etc.). Feel free to then link me to the question. Helping people in private doesn't scale! Send! nod Liked this page? Just want to declare that you reached the end? Like pressing buttons? Give me a nod to let me know you were here. No tracking, no counters, etc, just a nod in passing. Recent posts Monthly Meanderings: March 2026 Apr 1, 2\",\"classification_terms\":[\"contact\",\"about\",\"help\",\"forum\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/posts/\",\"status\":200,\"title\":\"Posts · Chameth.com\",\"word_count\":4756,\"summary_text\":\"Posts · Chameth.com Posts · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Posts Here are all the posts I've written on this blog, from most recent to the earliest. There's an RSS feed available if you want to keep up-to-date. Monthly Meanderings: March 2026 Since last month&rsquo;s update I&rsquo;ve been unpleasantly reminded that I&rsquo;m middle aged, through the medium of a dodgy knee. There&rsquo;s nothing quite like not being able to stand up without groaning to underscore that you&rsquo;re not young any more. The ongoing game of &ldquo;will this seemingly mundane activity make my knee go funny again?&rdquo; is a delight to play, too. I&rsquo;m ... Modern CSS is fun I&rsquo;ve been doing a bunch of CSS tweaking recently, and keep being surprised by how nice mod\",\"classification_terms\":[\"posts\",\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/projects/\",\"status\":200,\"title\":\"Projects · Chameth.com\",\"word_count\":1264,\"summary_text\":\"Projects · Chameth.com Projects · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Projects These are some of the open-source side-projects I've worked on recently. You can find more on my GitHub profile. Self-hosting I like to self-host things as much as I can, and that requires some infrastructure. There&#39;s a lot of ready-made software that fills that gap, but sometimes none of it quite works how I want it to. Centauri A reverse proxy that&rsquo;s super easy to configure, obtains certificates automatically from an ACME provider like Let&rsquo;s Encrypt, and can even expose services over Tailscale instead of the public Internet. GitHub project Documentation Goplum A simple, self-hosted monitoring service. Periodically runs checks and sends notifications when things go\",\"classification_terms\":[\"projects\",\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/snippets/\",\"status\":200,\"title\":\"Snippets · Chameth.com\",\"word_count\":458,\"summary_text\":\"Snippets · Chameth.com Snippets · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Snippets / How-tos These are small snippets of code or other instructions that I find useful. Android Enable SQLite logging CSS Dark mode selectorLighten or darken coloursText area resizing Docker Find container that owns a volumeVolumes in a rootless container Eleventy Deploy assets in page bundlesRender templates in shortcodes and filtersUse ES modules Firefox Register domains as secure contextsStop searching for single word domainsStop using certain local fonts Git Ignore revisions in git-blameList creation dates of tagsRewrite history after enabling transcryptStop LFS requiring multiple security key touchesTidy up merged branches Go Alternative YAML representationsCheck if a string is a\",\"classification_terms\":[\"snippets\",\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/uses/\",\"status\":200,\"title\":\"Things I Use · Chameth.com\",\"word_count\":1654,\"summary_text\":\"Things I Use · Chameth.com Things I Use · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Things I Use In the vein of uses this and following on from my post about how I get things done, this is a list of things I use that I&rsquo;ll try to keep up-to-date. Last updated: 1st February 2026 Computer hardware I built a new PC in March 2025. I use it for both work and gaming. It travels with me to LAN events, so it&rsquo;s as small as I can make it. The build is: Component Product Specs Case Fractal Design Terra Silver Processor AMD Ryzen 7 9800X3D 8-core, 104MB cache, up to 5.2GHz Cooler Thermalright AXP90 X47 Full Fan replaced with a Noctua NF-A9 Graphics Gigabyte Radeon RX 9070XT PCI-E 5, 16GB GDDR6, 3060MHz Memory Corsair Vengeance 64GB, 6600MHz, CL32 Storage Crucial T705 NV\",\"classification_terms\":[\"uses\",\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/sitemap/\",\"status\":200,\"title\":\"Sitemap · Chameth.com\",\"word_count\":2709,\"summary_text\":\"Sitemap · Chameth.com Sitemap · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Sitemap This is a list of more-or-less every page on the site, for quick and easy navigation. Primary pages About Colophon Contact me Feeds Films My interests Posts 3D Prints Projects Sitemap &larr; you are here Snippets Things I use Feeds Keep up-to-date with things I write by subscribing to one of these feeds in an RSS reader. See the feeds page for more information. All posts Short format posts Long format posts Poems Snippets Film reviews Blog posts Everything I've written on the site. See the posts page for a nicer overview. Monthly Meanderings: March 2026 Apr 1, 2026 Modern CSS is fun Mar 17, 2026 The longest way to represent a date Mar 14, 2026 Monthly Meanderings: February 2026 Mar 1\",\"classification_terms\":[\"sitemap\",\"about\",\"contact\",\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/posts\",\"status\":200,\"title\":\"Posts · Chameth.com\",\"word_count\":4756,\"summary_text\":\"Posts · Chameth.com Posts · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Posts Here are all the posts I've written on this blog, from most recent to the earliest. There's an RSS feed available if you want to keep up-to-date. Monthly Meanderings: March 2026 Since last month&rsquo;s update I&rsquo;ve been unpleasantly reminded that I&rsquo;m middle aged, through the medium of a dodgy knee. There&rsquo;s nothing quite like not being able to stand up without groaning to underscore that you&rsquo;re not young any more. The ongoing game of &ldquo;will this seemingly mundane activity make my knee go funny again?&rdquo; is a delight to play, too. I&rsquo;m ... Modern CSS is fun I&rsquo;ve been doing a bunch of CSS tweaking recently, and keep being surprised by how nice mod\",\"classification_terms\":[\"posts\",\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/projects\",\"status\":200,\"title\":\"Projects · Chameth.com\",\"word_count\":1264,\"summary_text\":\"Projects · Chameth.com Projects · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Projects These are some of the open-source side-projects I've worked on recently. You can find more on my GitHub profile. Self-hosting I like to self-host things as much as I can, and that requires some infrastructure. There&#39;s a lot of ready-made software that fills that gap, but sometimes none of it quite works how I want it to. Centauri A reverse proxy that&rsquo;s super easy to configure, obtains certificates automatically from an ACME provider like Let&rsquo;s Encrypt, and can even expose services over Tailscale instead of the public Internet. GitHub project Documentation Goplum A simple, self-hosted monitoring service. Periodically runs checks and sends notifications when things go\",\"classification_terms\":[\"projects\",\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/interests\",\"status\":200,\"title\":\"My interests · Chameth.com\",\"word_count\":1161,\"summary_text\":\"My interests · Chameth.com My interests · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap My interests Raindrops on roses and whiskers on kittens Bright copper kettles and warm woolen mittens Brown paper packages tied up with strings These are a few of my favourite things Inspired by Chris Burnell, this page lists things I&rsquo;m currently interested in, in no particular order. I&rsquo;m doing this to give people an idea about the person behind the website (this is a personal site, after all!). If anything here catches your attention and you want to geek out about it, drop me a message. Last updated: 3rd March 2026 The open web I love the web. I miss the days when it wasn&rsquo;t so dominated by corporations and social media: when everything didn&rsquo;t have to seem so pol\",\"classification_terms\":[\"interests\",\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/films\",\"status\":200,\"title\":\"Films · Chameth.com\",\"word_count\":549,\"summary_text\":\"Films · Chameth.com Films · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Films Since the end of 2024 I&rsquo;ve been logging and writing short reviews for all the films I watch. Originally I did this on my Letterboxd profile, but in the spirit of owning my own data I&rsquo;ve switched to using my website as the primary source and copying them over to Letterboxd afterwards. If you&rsquo;re looking for a particular film, you can search by title: JavaScript required for film search Here are the most recent films I&rsquo;ve watched. Click through to see my comments: 2026-04-01 2026-03-18 2026-02-17 2026-02-14 2026-02-13 2026-02-13 2026-02-12 2026-02-11 2026-02-10 2026-02-07 2026-02-04 2026-02-03 2026-02-02 2026-01-26 2026-01-21 Everyone has different meanings for star\",\"classification_terms\":[\"films\",\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/uses\",\"status\":200,\"title\":\"Things I Use · Chameth.com\",\"word_count\":1654,\"summary_text\":\"Things I Use · Chameth.com Things I Use · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Things I Use In the vein of uses this and following on from my post about how I get things done, this is a list of things I use that I&rsquo;ll try to keep up-to-date. Last updated: 1st February 2026 Computer hardware I built a new PC in March 2025. I use it for both work and gaming. It travels with me to LAN events, so it&rsquo;s as small as I can make it. The build is: Component Product Specs Case Fractal Design Terra Silver Processor AMD Ryzen 7 9800X3D 8-core, 104MB cache, up to 5.2GHz Cooler Thermalright AXP90 X47 Full Fan replaced with a Noctua NF-A9 Graphics Gigabyte Radeon RX 9070XT PCI-E 5, 16GB GDDR6, 3060MHz Memory Corsair Vengeance 64GB, 6600MHz, CL32 Storage Crucial T705 NV\",\"classification_terms\":[\"uses\",\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/colophon\",\"status\":200,\"title\":\"Colophon · Chameth.com\",\"word_count\":905,\"summary_text\":\"Colophon · Chameth.com Colophon · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Colophon This website has been hand-made using open source tools. This page explains a bit about how it all works, and lets me give credit to those tools. Last updated: 31st January 2026 Overview The site is powered by a custom Go backend I wrote. It&rsquo;s open source, because why not? The backend is fairly simple: mostly just pulling data out of the database and rendering it. It employs the following libraries: sqlx for database utility functions pq for connecting to the PostgreSQL database golang-migrate for handling database schema migration pgvector-go for dealing with vector types goldmark for rendering markdown into HTML chroma for syntax highlighting some of my own libraries for ut\",\"classification_terms\":[\"colophon\",\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/snippets\",\"status\":200,\"title\":\"Snippets · Chameth.com\",\"word_count\":458,\"summary_text\":\"Snippets · Chameth.com Snippets · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Snippets / How-tos These are small snippets of code or other instructions that I find useful. Android Enable SQLite logging CSS Dark mode selectorLighten or darken coloursText area resizing Docker Find container that owns a volumeVolumes in a rootless container Eleventy Deploy assets in page bundlesRender templates in shortcodes and filtersUse ES modules Firefox Register domains as secure contextsStop searching for single word domainsStop using certain local fonts Git Ignore revisions in git-blameList creation dates of tagsRewrite history after enabling transcryptStop LFS requiring multiple security key touchesTidy up merged branches Go Alternative YAML representationsCheck if a string is a\",\"classification_terms\":[\"snippets\",\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/sitemap\",\"status\":200,\"title\":\"Sitemap · Chameth.com\",\"word_count\":2709,\"summary_text\":\"Sitemap · Chameth.com Sitemap · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Sitemap This is a list of more-or-less every page on the site, for quick and easy navigation. Primary pages About Colophon Contact me Feeds Films My interests Posts 3D Prints Projects Sitemap &larr; you are here Snippets Things I use Feeds Keep up-to-date with things I write by subscribing to one of these feeds in an RSS reader. See the feeds page for more information. All posts Short format posts Long format posts Poems Snippets Film reviews Blog posts Everything I've written on the site. See the posts page for a nicer overview. Monthly Meanderings: March 2026 Apr 1, 2026 Modern CSS is fun Mar 17, 2026 The longest way to represent a date Mar 14, 2026 Monthly Meanderings: February 2026 Mar 1\",\"classification_terms\":[\"sitemap\",\"about\",\"contact\",\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/monthly-meanderings-2026-03/\",\"status\":200,\"title\":\"Monthly Meanderings: March 2026 · Chameth.com\",\"word_count\":1478,\"summary_text\":\"Monthly Meanderings: March 2026 · Chameth.com Monthly Meanderings: March 2026 · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Monthly Meanderings: March 2026 Published on Apr 1, 2026 Since last month&rsquo;s update I&rsquo;ve been unpleasantly reminded that I&rsquo;m middle aged, through the medium of a dodgy knee. There&rsquo;s nothing quite like not being able to stand up without groaning to underscore that you&rsquo;re not young any more. The ongoing game of &ldquo;will this seemingly mundane activity make my knee go funny again?&rdquo; is a delight to play, too. I&rsquo;m great at it. Website updates Two new blog posts this month: the longest way to represent a date is a short thought experiment on absurd date formats, and modern CSS is fun goes through some neat new CSS features I&rsquo\",\"classification_terms\":[\"monthly-meanderings-2026-03\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/modern-css-is-fun/\",\"status\":200,\"title\":\"Modern CSS is fun · Chameth.com\",\"word_count\":2438,\"summary_text\":\"Modern CSS is fun · Chameth.com Modern CSS is fun · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Modern CSS is fun Published on Mar 17, 2026 I&rsquo;ve been doing a bunch of CSS tweaking recently, and keep being surprised by how nice modern CSS is to work with. As someone grey-haired enough to remember writing HTML without CSS, it&rsquo;s amazing to think how far along web technology has come1. I wanted to demonstrate some of the handy bits and pieces I&rsquo;ve used recently. :has The :has selector allows you to effectively query for child elements. While a span will match a &lt;span&gt; within an &lt;a&gt;, a:has(span) will match an &lt;a&gt; that contains a &lt;span&gt;. This really shines when combined with more complex selectors, for example: input { border-radius: var(--\",\"classification_terms\":[\"modern-css-is-fun\",\"about\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/the-longest-way-to-represent-a-date/\",\"status\":200,\"title\":\"The longest way to represent a date · Chameth.com\",\"word_count\":1047,\"summary_text\":\"The longest way to represent a date · Chameth.com The longest way to represent a date · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap The longest way to represent a date Published on Mar 14, 2026 The other day, someone on IRC posed this question: &ldquo;What is the longest way to represent a date using any means possible that isn&rsquo;t just repeated filler?&rdquo; Some people jumped for writing the date out in languages that had longer translations. My immediate reaction was instead to suggest an obnoxious string-based representation of a unix timestamp: &ldquo;one second after one second after one second after &hellip; midnight on January 1st 1970&rdquo;. It&rsquo;s very repetitive, but it&rsquo;s not filler: taking out any of the repetitions would change the value. Effectively it&rsquo;s a s\",\"classification_terms\":[\"the-longest-way-to-represent-a-date\",\"about\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":6,\"depth\":1},{\"path\":\"/monthly-meanderings-2026-02/\",\"status\":200,\"title\":\"Monthly Meanderings: February 2026 · Chameth.com\",\"word_count\":1729,\"summary_text\":\"Monthly Meanderings: February 2026 · Chameth.com Monthly Meanderings: February 2026 · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Monthly Meanderings: February 2026 Published on Mar 1, 2026 It doesn&rsquo;t feel like a whole month has gone past since I wrote the last instalment of Monthly Meanderings, even allowing for how short a month February is. For more context on this series, you can check out the introduction to the first edition. Website updates I only wrote one new blog post this month: Just a nod, which is about the &ldquo;nod&rdquo; button I added to the bottom of most pages. I did a lot of other little bits and pieces, though: My blog posts are now automatically posted to a dedicated Bluesky account, and posts now include syndication links at the bottom. The site now tracks how lo\",\"classification_terms\":[\"monthly-meanderings-2026-02\",\"about\",\"blog\",\"links\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/interests/\",\"status\":200,\"title\":\"My interests · Chameth.com\",\"word_count\":1161,\"summary_text\":\"My interests · Chameth.com My interests · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap My interests Raindrops on roses and whiskers on kittens Bright copper kettles and warm woolen mittens Brown paper packages tied up with strings These are a few of my favourite things Inspired by Chris Burnell, this page lists things I&rsquo;m currently interested in, in no particular order. I&rsquo;m doing this to give people an idea about the person behind the website (this is a personal site, after all!). If anything here catches your attention and you want to geek out about it, drop me a message. Last updated: 3rd March 2026 The open web I love the web. I miss the days when it wasn&rsquo;t so dominated by corporations and social media: when everything didn&rsquo;t have to seem so pol\",\"classification_terms\":[\"interests\",\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/films/\",\"status\":200,\"title\":\"Films · Chameth.com\",\"word_count\":549,\"summary_text\":\"Films · Chameth.com Films · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Films Since the end of 2024 I&rsquo;ve been logging and writing short reviews for all the films I watch. Originally I did this on my Letterboxd profile, but in the spirit of owning my own data I&rsquo;ve switched to using my website as the primary source and copying them over to Letterboxd afterwards. If you&rsquo;re looking for a particular film, you can search by title: JavaScript required for film search Here are the most recent films I&rsquo;ve watched. Click through to see my comments: 2026-04-01 2026-03-18 2026-02-17 2026-02-14 2026-02-13 2026-02-13 2026-02-12 2026-02-11 2026-02-10 2026-02-07 2026-02-04 2026-02-03 2026-02-02 2026-01-26 2026-01-21 Everyone has different meanings for star\",\"classification_terms\":[\"films\",\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/colophon/\",\"status\":200,\"title\":\"Colophon · Chameth.com\",\"word_count\":905,\"summary_text\":\"Colophon · Chameth.com Colophon · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Colophon This website has been hand-made using open source tools. This page explains a bit about how it all works, and lets me give credit to those tools. Last updated: 31st January 2026 Overview The site is powered by a custom Go backend I wrote. It&rsquo;s open source, because why not? The backend is fairly simple: mostly just pulling data out of the database and rendering it. It employs the following libraries: sqlx for database utility functions pq for connecting to the PostgreSQL database golang-migrate for handling database schema migration pgvector-go for dealing with vector types goldmark for rendering markdown into HTML chroma for syntax highlighting some of my own libraries for ut\",\"classification_terms\":[\"colophon\",\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/feeds/\",\"status\":200,\"title\":\"Feeds · Chameth.com\",\"word_count\":298,\"summary_text\":\"Feeds · Chameth.com Feeds · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Feeds I publish various feeds for content on this site. Feeds are a way for you to subscribe to see new content. It&rsquo;s a bit like a newsletter, but instead of having to give lots of sites your e-mail address, the sites give you a feed address. You then use a program called a feed reader to see all the updates. For more information see aboutfeeds.com. Current feeds The following feeds are available: all blog posts long format blog posts short format blog posts poems snippets film reviews These are all atom feeds, but I may add alternative formats in the future. If you have opinions, drop me a note. nod Liked this page? Just want to declare that you reached the end? Like pressing buttons? G\",\"classification_terms\":[\"feeds\",\"about\",\"address\",\"news\",\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/contact/\",\"status\":200,\"title\":\"Contact me · Chameth.com\",\"word_count\":267,\"summary_text\":\"Contact me · Chameth.com Contact me · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Contact me Fill in the form to send me an e-mail. I'm happy to receive your thoughts, comments, corrections, random chats, etc. I try to reply to most messages, but make no promises about timeliness! One small caveat: if you need help with something, I'd much prefer you ask publicly somewhere first (e.g.: on Stack Overflow, a relevant mailing list, forum, etc.). Feel free to then link me to the question. Helping people in private doesn't scale! Send! nod Liked this page? Just want to declare that you reached the end? Like pressing buttons? Give me a nod to let me know you were here. No tracking, no counters, etc, just a nod in passing. Recent posts Monthly Meanderings: March 2026 Apr 1, 2\",\"classification_terms\":[\"contact\",\"about\",\"help\",\"forum\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/just-a-nod/\",\"status\":200,\"title\":\"Just a nod · Chameth.com\",\"word_count\":1321,\"summary_text\":\"Just a nod · Chameth.com Just a nod · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Just a nod Published on Feb 11, 2026 Last month I added a new feature to the bottom of almost all pages on this site: a &ldquo;nod&rdquo; button. It&rsquo;s a bit like the upvote buttons you see on bear blog posts, or the ubiquitous like button you get on social media, with one key difference: it doesn&rsquo;t track or count anything. Before I get into the whys and hows, this is what it currently looks like: The nod button in all its glory. If you want a clickable version you&rsquo;ll need to scroll a bit more. So why bother? I like hearing from people who have looked at my website. I have a contact form that&rsquo;s also embedded at the bottom of all my blog posts; it&rsquo;s always a de\",\"classification_terms\":[\"just-a-nod\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/monthly-meanderings-2026-01/\",\"status\":200,\"title\":\"Monthly Meanderings: January 2026 · Chameth.com\",\"word_count\":1548,\"summary_text\":\"Monthly Meanderings: January 2026 · Chameth.com Monthly Meanderings: January 2026 · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Monthly Meanderings: January 2026 Published on Feb 1, 2026 Welcome to the second edition of my monthly meanderings. For a bit of context, you can check out the introduction to the first edition. Website updates It&rsquo;s been a pretty busy month for chameth.com. Three blog posts: The Meaning of Life &mdash; an entry into the IndieWeb carnival where I mostly review a book on Stoicism &mdash; Surge Protectors: Marketing vs Reality which is a dump of a research rabbit hole I fell into, and An Interesting Tailscale + Docker Gotcha which documents a fun problem I encountered. I&rsquo;ve also made a new films section, which is basically my Letterboxd data but free range\",\"classification_terms\":[\"monthly-meanderings-2026-01\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":2},{\"path\":\"/tailscale-docker-gotcha/\",\"status\":200,\"title\":\"An interesting Tailscale + Docker gotcha · Chameth.com\",\"word_count\":1567,\"summary_text\":\"An interesting Tailscale + Docker gotcha · Chameth.com An interesting Tailscale &#43; Docker gotcha · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap An interesting Tailscale &#43; Docker gotcha Published on Jan 29, 2026 As I&rsquo;ve written about before, I use Tailscale for a lot of things. I thought I had it set up in a reasonably secure manner, but I recently noticed a problem. I use Tailscale&rsquo;s ACLs to limit what each node can access, based on the tags I apply to it. So an app node can&rsquo;t access anything via Tailscale, while an integration or server node can access things tagged with either app or integration. This is expressed pretty simply in the Tailscale ACL JSON: { &#34;tagOwners&#34;: { // Servers that can be SSH&#39;d into &#34;tag:server&#34;: [], // Applications that are expose\",\"classification_terms\":[\"tailscale-docker-gotcha\",\"about\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":8,\"depth\":2},{\"path\":\"/surge-protectors-marketing-vs-reality/\",\"status\":200,\"title\":\"Surge protectors: marketing vs reality · Chameth.com\",\"word_count\":1986,\"summary_text\":\"Surge protectors: marketing vs reality · Chameth.com Surge protectors: marketing vs reality · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Surge protectors: marketing vs reality Published on Jan 24, 2026 A while back I went down a deep rabbit hole looking into surge protectors, and what all the different numbers mean, and how that affects things in case of a voltage spike. Then I didn&rsquo;t really do anything with the information, other than bore a few friends, and look around in despair at all the shockingly bad products out there. Time to fix that! I&rsquo;m coming at this from the angle of a computer user in a country with very good electrical regulations. If you&rsquo;re protecting something else, or live somewhere that doesn&rsquo;t believe in grounding things, your mileage may vary. Buildi\",\"classification_terms\":[\"surge-protectors-marketing-vs-reality\",\"about\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/the-meaning-of-life/\",\"status\":200,\"title\":\"The meaning of life · Chameth.com\",\"word_count\":2193,\"summary_text\":\"The meaning of life · Chameth.com The meaning of life · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap The meaning of life Published on Jan 18, 2026 Now that&rsquo;s a grandiose title for a blog post! Blame Jeremiah Lee, who selected it as the theme for January&rsquo;s IndieWeb Carnival. I&rsquo;ve not taken part in this before, but it&rsquo;s basically a shared writing prompt. One person selects a theme, other people write about it on their own sites, and then the host does a round-up linking to all the various responses. I&rsquo;ve come across it a few times before, but the topics have never really engaged me; they don&rsquo;t feel like the sort of thing I&rsquo;d write about. But&hellip; why not? A Guide to the Good Life The thing that actually tipped the scales for this partic\",\"classification_terms\":[\"the-meaning-of-life\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/monthly-meanderings-2025-12/\",\"status\":200,\"title\":\"Monthly Meanderings: December 2025 · Chameth.com\",\"word_count\":1714,\"summary_text\":\"Monthly Meanderings: December 2025 · Chameth.com Monthly Meanderings: December 2025 · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Monthly Meanderings: December 2025 Published on Jan 1, 2026 For a while I&rsquo;ve been idly thinking about a way to get smaller bits of content onto my website without it being too annoying for me, or too hard to consume. Things like interesting links, small project updates, and so on. I didn&rsquo;t immediately come up with anything I was happy with, so just sat on it. Ignoring the problem seems to work surprisingly well for things like this. I&rsquo;d been meaning to redesign the about page for a while, but wasn&rsquo;t sure what to do with all the interests I wanted to list. After ignoring the problem for a while I came across the interests directory and realis\",\"classification_terms\":[\"monthly-meanderings-2025-12\",\"about\",\"links\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/exposing-game-servers-over-tailscale/\",\"status\":200,\"title\":\"Exposing game servers over Tailscale · Chameth.com\",\"word_count\":873,\"summary_text\":\"Exposing game servers over Tailscale · Chameth.com Exposing game servers over Tailscale · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Exposing game servers over Tailscale Published on Dec 7, 2025 I&rsquo;ve recently been playing a lot of Factorio with a friend. I&rsquo;ve been hosting, but my desktop computer is behind far too many layers of NAT, and I can&rsquo;t be bothered dealing with setting up port forwards. Up until today we made do with Steam&rsquo;s networking support, which in our case ended up relaying the connection via one of their servers. This is amazing as a free, no-hassle service, but the performance was so-so. We&rsquo;d get random lag spikes, or the initial map download would crawl along at about 1/100th of the speed we should be able to get. We&rsquo;re both fans of Tailsca\",\"classification_terms\":[\"exposing-game-servers-over-tailscale\",\"about\",\"support\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":2},{\"path\":\"/securing-all-the-things-with-1password/\",\"status\":200,\"title\":\"Securing all the things with 1Password · Chameth.com\",\"word_count\":2848,\"summary_text\":\"Securing all the things with 1Password · Chameth.com Securing all the things with 1Password · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Securing all the things with 1Password Published on Nov 26, 2025 For many years I&rsquo;ve been a keen user of Bitwarden. Recently I&rsquo;ve had a lot of small paper-cut problems. The browser extension was redesigned and just doesn&rsquo;t quite work how I expect any more. The prompt to save new login info misfired more than it worked. The mobile app stopped background refreshing properly. No one issue was enough to make me want to leave Bitwarden, but it definitely wasn&rsquo;t sparking joy. Then there were rumblings about a price increase. I don&rsquo;t think they&rsquo;ve announced anything, but the numbers I saw were a jump from $10/year to $24/year. A nea\",\"classification_terms\":[\"securing-all-the-things-with-1password\",\"about\",\"login\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":2},{\"path\":\"/thinking-more-about-backups/\",\"status\":200,\"title\":\"Thinking more about backups · Chameth.com\",\"word_count\":1034,\"summary_text\":\"Thinking more about backups · Chameth.com Thinking more about backups · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Thinking more about backups Published on Nov 1, 2025 The Backblaze logo Almost a year ago I wrote about how I do backups with Restic and Hetzner. That system has been ticking along well ever since, but recently I had some&hellip; thoughts. These backups are all well and good if I accidentally delete a file, or a database gets corrupted, or something, but there are two glaring issues: Firstly, I&rsquo;m backing up my Hetzner server to Hetzner cloud storage. If something happens to Hetzner &mdash; or my Hetzner account &mdash; then all my eggs go down with that basket. Obviously Hetzner are a big organisation and aren&rsquo;t likely to just vanish overnight, but I&rsquo;m l\",\"classification_terms\":[\"thinking-more-about-backups\",\"about\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/moving-back-to-a-dynamic-website/\",\"status\":200,\"title\":\"Moving back to a dynamic website · Chameth.com\",\"word_count\":806,\"summary_text\":\"Moving back to a dynamic website · Chameth.com Moving back to a dynamic website · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Moving back to a dynamic website Published on Oct 28, 2025 For the past few weeks I&rsquo;ve been working on converting chameth.com from a static site into a dynamically generated site backed by a database. This is the exact opposite process to one I went through maybe a decade ago. So why the change, and what&rsquo;s different? I&rsquo;d actually been toying with the idea of switching for a while. Every now and then I&rsquo;d have a thought along the lines of &ldquo;it would be nice if I could add X to my website&hellip; but how would that work with static site generation?&rdquo;. Comments, private drafts, dynamic themes based on the date, and many more little bits\",\"classification_terms\":[\"moving-back-to-a-dynamic-website\",\"about\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/avoiding-the-consequences-of-dumb-laws-with-tailscale/\",\"status\":200,\"title\":\"Avoiding the Consequences of Dumb Laws with Tailscale · Chameth.com\",\"word_count\":1031,\"summary_text\":\"Avoiding the Consequences of Dumb Laws with Tailscale · Chameth.com Avoiding the Consequences of Dumb Laws with Tailscale · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Avoiding the Consequences of Dumb Laws with Tailscale Published on Sep 30, 2025 More and more sites are implementing privacy-invading age checks or just completely blocking the UK thanks to the Online Safety Act. Protecting kids from some content online is certainly a noble goal, but the asinine guidance from Ofcom, threats of absolutely disproportionate fines, and the stupidly broad categories of content have resulted in companies just giving up or going through a tick-box exercise that offers very little protection but lots of inconvenience and a complete invasion of privacy. Instead of uploading my ID to some third party company, I&rsquo;ve ta\",\"classification_terms\":[\"avoiding-the-consequences-of-dumb-laws-with-tailscale\",\"about\",\"privacy\",\"company\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/further-adventures-in-music-organisation/\",\"status\":200,\"title\":\"Further Adventures in Music Organisation · Chameth.com\",\"word_count\":2374,\"summary_text\":\"Further Adventures in Music Organisation · Chameth.com Further Adventures in Music Organisation · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Further Adventures in Music Organisation Published on Sep 21, 2025 I wrote before about how I&rsquo;d dropped Spotify in favour of locally stored music, but things have advanced a bit since. I had a few issues: Tauon would occasionally manage to lose its database and along with it all my carefully constructed playlists and song ratings1, and the experience on my phone was not very fun. I had to manually sync the music by plugging my phone in to the computer, and sometimes it just refused to mount the right partition. I don&rsquo;t think there&rsquo;s really a good way to debug an Apple phone not behaving properly when connected to a Linux desktop. Then I star\",\"classification_terms\":[\"further-adventures-in-music-organisation\",\"about\",\"store\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/blogging-and-the-imaginary-quality-bar/\",\"status\":200,\"title\":\"Blogging and the Imaginary Quality Bar · Chameth.com\",\"word_count\":698,\"summary_text\":\"Blogging and the Imaginary Quality Bar · Chameth.com Blogging and the Imaginary Quality Bar · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Blogging and the Imaginary Quality Bar Published on Sep 18, 2025 Recently I realised that I&rsquo;ve developed a self-imposed quality bar for blog posts. They need to be a certain length, and have a certain substance to them. They need to be generally useful in some way I can&rsquo;t quite define, to some imagined future audience. They need to have images to break up the page, and opengraph data for when they&rsquo;re linked to on social media. But… maybe they don&rsquo;t? Those things all make sense for longer &ldquo;article&rdquo; type posts, but not so much for a personal blog. I&rsquo;ve done some fiddling so that I can make posts without all that extra stu\",\"classification_terms\":[\"blogging-and-the-imaginary-quality-bar\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/10-weeks-with-an-apple-watch-10/\",\"status\":200,\"title\":\"10 Weeks with an Apple Watch 10 · Chameth.com\",\"word_count\":3009,\"summary_text\":\"10 Weeks with an Apple Watch 10 · Chameth.com 10 Weeks with an Apple Watch 10 · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap 10 Weeks with an Apple Watch 10 Published on Sep 9, 2025 My watch. Yes, I am available for wrist modelling opportunities. Around ten weeks ago1 I picked up an Apple Watch 10, and have been wearing it almost constantly since. It&rsquo;s not my first Apple Watch — I had a Series 5 for a bit back in 2020 — but it&rsquo;s the first time I&rsquo;ve actually stuck with it. Ten weeks seems like an apt time to reflect on it. Firstly, why did I even bother? Well, for a couple of years I&rsquo;d been wearing a Xiaomi Smart Band 7, mainly to monitor my sleep stats and set alarms that won&rsquo;t wake up everyone else nearby. Its battery life was fantastic — with notifications an\",\"classification_terms\":[\"10-weeks-with-an-apple-watch-10\",\"about\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":2},{\"path\":\"/making-a-font-of-my-handwriting/\",\"status\":200,\"title\":\"Making a font of my handwriting · Chameth.com\",\"word_count\":2435,\"summary_text\":\"Making a font of my handwriting · Chameth.com Making a font of my handwriting · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Making a font of my handwriting Published on Aug 8, 2025 Recently I&rsquo;ve been on a small campaign to try to make my personal website more… personal. Little ways to make it obvious it&rsquo;s mine and personal, not just another piece of the boring corporate dystopia that is most of the web these days. I don&rsquo;t quite want to fully regress to the Geocities era and fill the screen with animated under construction GIFs, but I do want to capture some of that vibe. I&rsquo;d added some bits and pieces along those lines: floating images in articles now look like they&rsquo;re stuck to the page with sellotape, related post links have a wavy border that animates when y\",\"classification_terms\":[\"making-a-font-of-my-handwriting\",\"about\",\"under construction\",\"links\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/fixing-a-loud-psu-fan-without-dying/\",\"status\":200,\"title\":\"Fixing a loud PSU fan without dying · Chameth.com\",\"word_count\":1898,\"summary_text\":\"Fixing a loud PSU fan without dying · Chameth.com Fixing a loud PSU fan without dying · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Fixing a loud PSU fan without dying Published on Jul 30, 2025 Three months after I built my new computer, it started annoying me. There would occasionally be a noise that sounded like a fan was catching on a cable, but there weren&rsquo;t any loose cables to be a problem. Over the course of a few weeks, the sound got progressively worse to the extent that I didn&rsquo;t want to use the computer without headphones on. I measured the sound at 63 dB, which is about the sound of someone talking. That may not sound terrible, but it&rsquo;s a constant, nasty noise coming from something that sits about 40cm from my head. After some investigating1, I identified the PSU fa\",\"classification_terms\":[\"fixing-a-loud-psu-fan-without-dying\",\"about\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/escaping-spotify-the-hard-way/\",\"status\":200,\"title\":\"Escaping Spotify the hard way · Chameth.com\",\"word_count\":2850,\"summary_text\":\"Escaping Spotify the hard way · Chameth.com Escaping Spotify the hard way · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Escaping Spotify the hard way Published on Jul 25, 2025 I realised my media consumption was too close to this for comfort. For the longest time I used Spotify for all my music needs. And I listen to a lot of music: sometimes actively, but mostly passively as background noise. I cancelled my premium subscription last December, and stopped using the service entirely. Why? There&rsquo;s a bunch of reasons. Let&rsquo;s talk about the money first. Spotify launched at £9.99/month, and stayed that way for over a decade. Then in 2023 it went up to £10.99/month. That&rsquo;s probably fair: the economy was in the toilet, and they haven&rsquo;t changed their price in so long. Then\",\"classification_terms\":[\"escaping-spotify-the-hard-way\",\"about\",\"api\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/how-tech-companies-failed-to-build-the-star-trek-computer/\",\"status\":200,\"title\":\"How tech companies failed to build the Star Trek computer · Chameth.com\",\"word_count\":1799,\"summary_text\":\"How tech companies failed to build the Star Trek computer · Chameth.com How tech companies failed to build the Star Trek computer · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap How tech companies failed to build the Star Trek computer Published on Jul 16, 2025 A computer core room on the Enterprise-D In most Star Trek series, the ship or station computer is ever-present in the background, waiting to be called on by the main characters1. It nearly always does exactly the right thing, and there&rsquo;s little limit to the functions it can perform. Take this mundane example from DS9: KIRA: Computer, establish link with the Bajoran Medical Index for the Northwestern District. COMPUTER: Link established. KIRA: Access all information on Doctor Surmak Ren. COMPUTER: There are no records matching that name. KIRA: Try the No\",\"classification_terms\":[\"how-tech-companies-failed-to-build-the-star-trek-computer\",\"about\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/finding-an-awkward-bug-with-claude-code/\",\"status\":200,\"title\":\"Finding an awkward bug with Claude Code · Chameth.com\",\"word_count\":3883,\"summary_text\":\"Finding an awkward bug with Claude Code · Chameth.com Finding an awkward bug with Claude Code · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap Finding an awkward bug with Claude Code Published on Jun 30, 2025 The many times Claude thought it was right… I recently encountered a bug in one of my projects that I couldn&rsquo;t immediately figure out. It was an issue in Centauri, my reverse proxy. After its config was updated, I noticed1 it stopped serving responses. Looking at the logs, I could see it was obtaining new certificates from Let&rsquo;s Encrypt for a couple of domains, but I&rsquo;d designed it so that wouldn&rsquo;t block requests (or so I thought). After a few minutes of confusion, everything went back to working. It felt like an issue with locking, but a quick glance didn&rsquo;t show me\",\"classification_terms\":[\"finding-an-awkward-bug-with-claude-code\",\"about\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":37,\"depth\":2},{\"path\":\"/how-i-use-tailscale/\",\"status\":200,\"title\":\"How I use Tailscale · Chameth.com\",\"word_count\":2566,\"summary_text\":\"How I use Tailscale · Chameth.com How I use Tailscale · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap How I use Tailscale Published on Jun 25, 2025 The Tailscale logo I&rsquo;ve been using Tailscale for around four years to connect my disparate devices, servers and apps together. I wanted to talk a bit about how I use it, some cool features you might not know about, and some stumbling blocks I encountered. I&rsquo;m not sure Tailscale needs an introduction for the likely audience of this blog, but I&rsquo;ll give one anyway. Tailscale is basically a WireGuard1 orchestration service, with lots of nice features sprinkled on top. It&rsquo;s a subscription product, but it has an insanely generous free tier that covers basically anything you&rsquo;d ever want to do as an individual. T\",\"classification_terms\":[\"how-i-use-tailscale\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/the-ethics-of-llms/\",\"status\":200,\"title\":\"The Ethics of LLMs · Chameth.com\",\"word_count\":2599,\"summary_text\":\"The Ethics of LLMs · Chameth.com The Ethics of LLMs · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap The Ethics of LLMs Published on Jun 22, 2025 I&rsquo;ve written about LLMs a few times recently, carefully dodging the issue of ethics each time. I didn&rsquo;t want to bog down the other posts with it, and I wanted some time to think over the issues. Now I&rsquo;ve had time to think, it&rsquo;s time to remove my head from the sand. There are a lot of different angles to consider, and a lot of it is more nuanced than is often presented. It&rsquo;s not all doom and gloom, and it&rsquo;s also not the most amazing thing since sliced bread. Who would have thought? It&rsquo;s worth noting that I&rsquo;m just setting out my position here. I&rsquo;m not trying to convince you to change y\",\"classification_terms\":[\"the-ethics-of-llms\",\"about\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/if-all-you-have-is-a-hammer/\",\"status\":200,\"title\":\"If all you have is a hammer… · Chameth.com\",\"word_count\":2144,\"summary_text\":\"If all you have is a hammer… · Chameth.com If all you have is a hammer… · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap If all you have is a hammer… Published on Jun 18, 2025 This, dear reader, is a hammer. It is almost entirely irrelevant to the article. Enjoy. I presume everyone is familiar with the idiom &ldquo;if all you have is a hammer, everything looks like a nail&rdquo;. If not, well, there it is. It&rsquo;s generally used pejoratively about being single-minded, but I think it also gives a glimpse into something more interesting: mental and perceptual sets. Before I explain, let me tell you a story about a person who bought a 3D printer1. When they were first thinking about getting one, they weren&rsquo;t sure if it was worth it. They could print a few board game accessories, but\",\"classification_terms\":[\"if-all-you-have-is-a-hammer\",\"about\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":1,\"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\":[\"c5h.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/an-app-can-be-a-ready-meal/\",\"status\":200,\"title\":\"An app can be a ready meal · Chameth.com\",\"word_count\":1874,\"summary_text\":\"An app can be a ready meal · Chameth.com An app can be a ready meal · Chameth.com // Personal website of Chris Smith About Posts Projects Snippets Uses Sitemap An app can be a ready meal Published on Jun 11, 2025 It&rsquo;s not a home-cooked meal, but it does the job sometimes. Three years ago I read &ldquo;an app can be a home-cooked meal&rdquo; by R",
        "score_reasons_json": "[\"Category confidence was reduced, so the classifier fell back to the broader parent category.\",\"Category evidence stayed thin, so the output was softened to a broader classification.\",\"Trusted status now requires clean crawl access and stronger confidence, so this result was downgraded to caution.\"]",
        "route_domain": "chameth.com",
        "display_domain": "chameth.com"
    },
    "explainability": {
        "summary": "chameth.com 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": "Solid confidence",
                "tone": "good",
                "detail": "72/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": "+17.3",
                "tone": "caution",
                "detail": "Authority, search visibility, reach, engagement, and registry stability. Current subsystem score: 51/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": "-17.0",
                "tone": "risk",
                "detail": "Safety thresholds capped the final score until the risk profile improves."
            }
        ],
        "evidence_cards": [
            {
                "label": "Authority and trust",
                "value": "54/100 · trust 80/100",
                "tone": "caution",
                "detail": "283 monthly visitors, 87 organic keywords, brand completeness 57/100, engagement 79/100."
            },
            {
                "label": "Backlink and search evidence",
                "value": "3 referring domains",
                "tone": "good",
                "detail": "3 backlinks across 3 referring domains. Diversity 94/100; spam penalty 0."
            },
            {
                "label": "Registry and domain stability",
                "value": "12.1 years old",
                "tone": "good",
                "detail": "Stability 100/100 · age 12.1 years · registrar Porkbun LLC · expires in 315 days."
            },
            {
                "label": "Safety and fraud posture",
                "value": "Safety 100/100 · fraud 0/100",
                "tone": "good",
                "detail": "Primary tag T · safety 100/100 · fraud 0/100."
            }
        ],
        "positives": [
            "Established domain age: 12.1 years.",
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness.",
            "Search evidence is broad enough to classify with better confidence.",
            "DNSSEC is enabled.",
            "Registry history looks stable, which supports legitimacy and trust."
        ],
        "risks": [
            "External evidence was mixed or sparse, so the tag model keeps an uncertainty buffer instead of overcommitting."
        ],
        "freshness": [
            {
                "label": "Crawl evidence",
                "value": "2026-04-04 23:58:49",
                "tone": "risk",
                "detail": "Crawl and page content sample. Age: 8d ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-04-04 23:58:40",
                "tone": "risk",
                "detail": "Registry profile and stability signals. Age: 8d ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-04-13 17:54:59",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-04-13 17:54:59",
                "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": 81,
        "fraud_clamp_penalty": 17,
        "final_score": 64
    },
    "insight_snapshot": {
        "version": 1,
        "generated_at": "2026-04-13T17:54:59+00:00",
        "domain": "chameth.com",
        "display_name": "About · Chameth.com",
        "is_tracked": false,
        "is_estimated": true,
        "overall_score": 64,
        "authority_score": 54,
        "trust_score": 80,
        "safety_score": 100,
        "fraud_score": 0,
        "confidence_score": 100,
        "traffic_confidence": 72,
        "last_crawled_at": "2026-04-04 23:58:49",
        "crawl_blocked": false,
        "summary": "chameth.com 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": "Solid confidence",
                "tone": "good",
                "detail": "72/100"
            },
            {
                "label": "Crawler access",
                "value": "Clean visibility",
                "tone": "good",
                "detail": null
            }
        ],
        "top_positive_signals": [
            "Established domain age: 12.1 years.",
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness.",
            "Search evidence is broad enough to classify with better confidence.",
            "DNSSEC is enabled."
        ],
        "top_risk_signals": [
            "External evidence was mixed or sparse, so the tag model keeps an uncertainty buffer instead of overcommitting."
        ],
        "freshness": [
            {
                "label": "Crawl evidence",
                "value": "2026-04-04 23:58:49",
                "tone": "risk",
                "detail": "Crawl and page content sample. Age: 8d ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-04-04 23:58:40",
                "tone": "risk",
                "detail": "Registry profile and stability signals. Age: 8d ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-04-13 17:54:59",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-04-13 17:54:59",
                "tone": "good",
                "detail": "Estimated trend derived from current profile and crawl signals. Age: 0s ago."
            },
            {
                "label": "Audience geography",
                "value": "Not captured yet",
                "tone": "unknown",
                "detail": "Audience mix is estimated from available signals rather than first-party audience logs."
            }
        ],
        "top_tags": [
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good"
            },
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown"
            }
        ]
    },
    "is_tracked": false,
    "is_estimated": true,
    "live_state": {
        "status": "processing",
        "status_label": "Cache build running",
        "message": "The refreshed page cache is still being built for this domain.",
        "updated_at": "2026-04-13T19:31: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/chameth.com/refresh",
        "isGuestCooldown": false,
        "cooldownSeconds": 0
    },
    "urlscan_report": {
        "domain": "chameth.com",
        "status": "error",
        "submitted_at": "2026-03-20T10:06:40+00:00",
        "completed_at": null,
        "last_checked_at": "2026-03-20T10:06:40+00:00",
        "last_error": "Rate limit for 'public' exceeded. Limit is 60 per minute. Reset in 78 seconds.",
        "submitted_url": "https://chameth.com/",
        "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
    }
}