{
    "ready": true,
    "site": {
        "id": 0,
        "domain": "jasonthai.me",
        "display_name": "Jason's Notes",
        "primary_country_code": "",
        "category_name": "Personal"
    },
    "metrics": {
        "global_rank": 1818997,
        "country_rank": 618459,
        "category_rank": 291040,
        "daily_pageviews_per_visitor": 4.69,
        "daily_time_on_site_seconds": 422,
        "bounce_rate": 22.26,
        "search_visits_percent": 41.97,
        "total_sites_linking_in": 2,
        "monthly_unique_visitors": 545,
        "recorded_at": "2026-05-01 08:17:15"
    },
    "audit": {
        "score": 96
    },
    "traffic_sources": {
        "direct_percent": 29.1,
        "search_percent": 37.43,
        "social_percent": 4.82,
        "referral_percent": 12.97,
        "email_percent": 6.74,
        "paid_percent": 8.94
    },
    "seo_profile": {
        "backlinks_total": 2,
        "referring_domains": 2,
        "dofollow_backlinks_percent": 50,
        "organic_keywords": 86,
        "indexed_pages": 105,
        "page_speed_score": 98,
        "mobile_friendliness_score": 93,
        "authority_score": 46,
        "spam_risk_score": 15
    },
    "crawl_report": {
        "robots_status": 200,
        "sitemap_status": 200,
        "sitemap_total_urls": 105,
        "crawl_blocked": false,
        "crawl_blocked_by": "",
        "crawl_blocked_reason": "",
        "notes": [],
        "created_at": "2026-05-01 08:17:15"
    },
    "keywords": [
        {
            "keyword": "Jason's Notes",
            "position": 19,
            "search_engine": "Estimated",
            "checked_at": "2026-06-23 23:31:23",
            "is_estimated": true
        },
        {
            "keyword": "Jason's Notes personal",
            "position": 21,
            "search_engine": "Estimated",
            "checked_at": "2026-06-23 23:31:23",
            "is_estimated": true
        },
        {
            "keyword": "Jason's Notes reviews",
            "position": 23,
            "search_engine": "Estimated",
            "checked_at": "2026-06-23 23:31:23",
            "is_estimated": true
        },
        {
            "keyword": "jason",
            "position": 25,
            "search_engine": "Estimated",
            "checked_at": "2026-06-23 23:31:23",
            "is_estimated": true
        },
        {
            "keyword": "notes",
            "position": 27,
            "search_engine": "Estimated",
            "checked_at": "2026-06-23 23:31:23",
            "is_estimated": true
        },
        {
            "keyword": "jasonthai",
            "position": 29,
            "search_engine": "Estimated",
            "checked_at": "2026-06-23 23:31:23",
            "is_estimated": true
        },
        {
            "keyword": "posts",
            "position": 31,
            "search_engine": "Estimated",
            "checked_at": "2026-06-23 23:31:23",
            "is_estimated": true
        }
    ],
    "rating": {
        "overall": 49,
        "label": "Average",
        "breakdown": [
            {
                "label": "Technical foundation",
                "score": 18,
                "max": 18
            },
            {
                "label": "Authority & trust",
                "score": 14,
                "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": 3,
                "max": 6
            },
            {
                "label": "Quality system",
                "score": 100,
                "max": 100
            },
            {
                "label": "Reputation system",
                "score": 45,
                "max": 100
            },
            {
                "label": "Safety system",
                "score": 100,
                "max": 100
            },
            {
                "label": "Evidence confidence",
                "score": 100,
                "max": 100
            }
        ],
        "authority_score": 46,
        "quality_score": 100,
        "reputation_score": 45,
        "safety_score": 100,
        "confidence_score": 100,
        "fraud_score": 0,
        "authority_signals": {
            "backlinks": 2,
            "referring_domains": 2,
            "organic_keywords": 86,
            "indexed_pages": 105,
            "monthly_visitors": 545,
            "global_rank": 1818997,
            "engagement_score": 90,
            "crawl_quality_score": 100,
            "brand_completeness_score": 78,
            "link_diversity_score": 93,
            "technical_reliability_score": 97,
            "whois_score": 45,
            "whois_age_years": 0,
            "whois_stability_score": 100,
            "spam_penalty": 0
        },
        "whois_signals": {
            "age_years": 0,
            "days_to_expiry": null,
            "days_since_last_registry_update": null,
            "stability_score": 100,
            "registrar_changes": 0,
            "ownership_changes": 0,
            "nameserver_changes": 0,
            "status_changes": 0,
            "history_entries": 2,
            "privacy_protected": false,
            "dnssec_enabled": false,
            "has_registrant_country": false,
            "registrant_country": "",
            "nameserver_count": 0,
            "status_count": 0
        }
    },
    "community_ratings": {
        "votes": [],
        "recent_notes": [],
        "positive_weight": 0,
        "negative_weight": 0,
        "positive_count": 0,
        "negative_count": 0,
        "authenticated_count": 0,
        "anonymous_count": 0,
        "community_delta": 0,
        "community_score": 50,
        "confidence_score": 0,
        "notice": null,
        "positive_notice": false,
        "negative_notice": false,
        "neutral_count": 0,
        "total_votes": 0
    },
    "authority_score": 46,
    "trust_score": 77,
    "domain_tags": {
        "primary_tag": "",
        "primary_tag_score": 85,
        "primary_candidate": "T",
        "primary_candidate_score": 85,
        "tag_codes": "",
        "tags": [],
        "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": 85,
                "score": 85,
                "match_percent": 85,
                "threshold_band": "strong"
            },
            {
                "code": "Billing",
                "label": "Deceptive billing risk",
                "tone": "scam",
                "description": "Subscription, renewal, charge, or cancellation-abuse signals were detected.",
                "reason": "Subscription, renewal, charge, or cancellation-risk signals were detected.",
                "message": "No meaningful deceptive-billing signals were detected.",
                "priority": 0,
                "score": 0,
                "match_percent": 0,
                "threshold_band": "none"
            },
            {
                "code": "C",
                "label": "Caution",
                "tone": "caution",
                "description": "Signals are mixed or weak, so this domain should be treated carefully.",
                "reason": "Review carefully: mixed trust signals.",
                "message": "The current crawl does not show a meaningful caution match.",
                "priority": 0,
                "score": 0,
                "match_percent": 0,
                "threshold_band": "none"
            },
            {
                "code": "Crypto",
                "label": "Crypto drainer risk",
                "tone": "toxic",
                "description": "Wallet-connect or seed-phrase theft patterns were detected.",
                "reason": "Wallet-connect or seed-phrase theft patterns were detected.",
                "message": "No meaningful crypto-drainer signals were detected.",
                "priority": 0,
                "score": 0,
                "match_percent": 0,
                "threshold_band": "none"
            },
            {
                "code": "D",
                "label": "Dangerous",
                "tone": "toxic",
                "description": "Strong signs of phishing, malware, or other harmful behaviour were detected.",
                "reason": "Multiple high-risk signals pushed this domain into the dangerous range.",
                "message": "No meaningful dangerous-signal match was detected.",
                "priority": 0,
                "score": 0,
                "match_percent": 0,
                "threshold_band": "none"
            }
        ],
        "nsfw_score": 0,
        "trust_score": 78,
        "manual": {
            "has_changes": false,
            "verified_status": "",
            "tag_codes": "",
            "rating_delta": 0,
            "authority_delta": 0,
            "trust_delta": 0,
            "note": "",
            "adjusted_by": 0,
            "adjusted_at": "",
            "lock_scores": false,
            "lock_flags": false
        },
        "summary": "No public risk or trust tag is currently supported by the calibrated evidence.",
        "external_intel": [],
        "external_decision": [],
        "signal_scores": [
            {
                "label": "Strongest tag heuristic",
                "value": "T - 85%",
                "tone": "good",
                "detail": "The highest raw tag match from the heuristic engine before visibility thresholds and manual overrides."
            },
            {
                "label": "Trust score",
                "value": "78/100",
                "tone": "good",
                "detail": "Confidence derived from authority, crawl quality, stability, and risk signals."
            },
            {
                "label": "Authority score",
                "value": "46/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": "96/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": "-",
                        "tone": "unknown",
                        "detail": "Older domains generally carry more historical trust than very new ones."
                    },
                    {
                        "label": "Stability score",
                        "value": "100/100",
                        "tone": "good",
                        "detail": "Penalised by registrar, ownership, and nameserver churn."
                    },
                    {
                        "label": "Days to expiry",
                        "value": "-",
                        "tone": "unknown",
                        "detail": "Very short renewal windows can be a weak trust signal."
                    },
                    {
                        "label": "Registrar / ownership changes",
                        "value": "0 / 0",
                        "tone": "good",
                        "detail": "Frequent ownership churn can weaken trust."
                    },
                    {
                        "label": "Nameserver changes",
                        "value": "0",
                        "tone": "good",
                        "detail": "Repeated infrastructure changes can indicate instability."
                    },
                    {
                        "label": "DNSSEC / privacy",
                        "value": "DNSSEC off - privacy off",
                        "tone": "caution",
                        "detail": "DNSSEC strengthens DNS trust; privacy is neutral on its own."
                    }
                ]
            },
            {
                "title": "Reputation & search evidence",
                "items": [
                    {
                        "label": "Backlinks",
                        "value": "2",
                        "tone": "unknown",
                        "detail": "Broader backlink evidence usually improves confidence."
                    },
                    {
                        "label": "Referring domains",
                        "value": "2",
                        "tone": "unknown",
                        "detail": "Unique linking domains are more useful than raw link volume."
                    },
                    {
                        "label": "Organic keywords",
                        "value": "86",
                        "tone": "caution",
                        "detail": "Search footprint helps distinguish real sites from thin shells."
                    },
                    {
                        "label": "Indexed pages",
                        "value": "105",
                        "tone": "good",
                        "detail": "Larger index coverage usually means more evidence to classify from."
                    },
                    {
                        "label": "Brand strength",
                        "value": "78/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 - 443 ms",
                        "tone": "good",
                        "detail": "Slow or broken technical signals weaken confidence."
                    },
                    {
                        "label": "Content words",
                        "value": "900",
                        "tone": "good",
                        "detail": "Thin pages are harder to trust and easier to manipulate."
                    },
                    {
                        "label": "Schema / structure",
                        "value": "1 schema - meta - H1",
                        "tone": "caution",
                        "detail": "Structured markup and basic on-page hygiene improve quality confidence."
                    },
                    {
                        "label": "Links on page",
                        "value": "78 internal - 1 external",
                        "tone": "good",
                        "detail": "Link patterns help detect thin directories and promo pages."
                    },
                    {
                        "label": "Page speed / mobile",
                        "value": "98/100 - 93/100",
                        "tone": "good",
                        "detail": "Better technical quality generally reduces low-effort site patterns."
                    },
                    {
                        "label": "Crawl access",
                        "value": "Open",
                        "tone": "good",
                        "detail": "The crawler reached the site without an anti-bot challenge."
                    }
                ]
            },
            {
                "title": "External evidence & explainability",
                "items": [
                    {
                        "label": "Decision state",
                        "value": "Inconclusive",
                        "tone": "unknown",
                        "detail": "Structured third-party evidence is still too thin, mixed, or unqualified to force a harder verdict."
                    },
                    {
                        "label": "Evidence quality",
                        "value": "Low",
                        "tone": "unknown",
                        "detail": "Blends source trust, domain matching, evidence diversity, and freshness."
                    },
                    {
                        "label": "Support vs contradiction",
                        "value": "0 / 0",
                        "tone": "unknown",
                        "detail": "Compares how much structured external evidence supports the candidate tag against evidence that contradicts it."
                    },
                    {
                        "label": "Qualified risk sources",
                        "value": "No",
                        "tone": "good",
                        "detail": "Risk tags only promote from external evidence when source diversity or source trust thresholds are met."
                    },
                    {
                        "label": "Uncertainty buffer",
                        "value": "Clear",
                        "tone": "good",
                        "detail": "Prevents thin or mixed external evidence from forcing a stronger tag than the evidence can justify."
                    }
                ]
            }
        ],
        "positives": [
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness.",
            "Search evidence is broad enough to classify with better confidence."
        ],
        "risks": []
    },
    "traffic_confidence": 64,
    "whois": {
        "current": {
            "id": 20643,
            "domain": "jasonthai.me",
            "source_type": "whois_text",
            "rdap_url": "",
            "registrar_name": "",
            "registrar_handle": "",
            "registrant_name": "",
            "registrant_org": "",
            "registrant_country": "",
            "registrant_email": "",
            "abuse_email": "",
            "created_date": null,
            "updated_date": null,
            "expires_date": null,
            "nameservers_json": "[]",
            "status_json": "[]",
            "dnssec": "unknown",
            "privacy_protected": 0,
            "content_hash": "f7e17c57c5fdd24df1793ece6bff99716369356b90b29c4725ac3ba12a76b72c",
            "history_count": 2,
            "last_checked_at": "2026-05-01 08:17:14",
            "last_changed_at": "2026-05-01 08:17:14",
            "created_at": "2026-03-18 15:00:02",
            "updated_at": "2026-05-01 08:17:14"
        },
        "history": [
            {
                "id": 91398,
                "domain": "jasonthai.me",
                "source_type": "whois_text",
                "registrar_name": "",
                "registrar_handle": "",
                "registrant_name": "",
                "registrant_org": "",
                "registrant_country": "",
                "registrant_email": "",
                "abuse_email": "",
                "created_date": null,
                "updated_date": null,
                "expires_date": null,
                "nameservers_json": "[]",
                "status_json": "[]",
                "dnssec": "unknown",
                "privacy_protected": 0,
                "content_hash": "f7e17c57c5fdd24df1793ece6bff99716369356b90b29c4725ac3ba12a76b72c",
                "checked_at": "2026-05-01 08:17:14",
                "change_summary": "Periodic WHOIS snapshot refreshed with no major field changes.",
                "created_at": "2026-05-01 08:17:14"
            },
            {
                "id": 20987,
                "domain": "jasonthai.me",
                "source_type": "whois_text",
                "registrar_name": "",
                "registrar_handle": "",
                "registrant_name": "",
                "registrant_org": "",
                "registrant_country": "",
                "registrant_email": "",
                "abuse_email": "",
                "created_date": null,
                "updated_date": null,
                "expires_date": null,
                "nameservers_json": "[]",
                "status_json": "[]",
                "dnssec": "unknown",
                "privacy_protected": 0,
                "content_hash": "f7e17c57c5fdd24df1793ece6bff99716369356b90b29c4725ac3ba12a76b72c",
                "checked_at": "2026-03-18 15:00:02",
                "change_summary": "Initial WHOIS snapshot captured.",
                "created_at": "2026-03-18 15:00:02"
            }
        ],
        "signals": {
            "age_years": 0,
            "days_to_expiry": null,
            "days_since_last_registry_update": null,
            "stability_score": 100,
            "registrar_changes": 0,
            "ownership_changes": 0,
            "nameserver_changes": 0,
            "status_changes": 0,
            "history_entries": 2,
            "privacy_protected": false,
            "dnssec_enabled": false,
            "has_registrant_country": false,
            "registrant_country": "",
            "nameserver_count": 0,
            "status_count": 0
        }
    },
    "discovered_domain": {
        "id": 95559,
        "domain": "jasonthai.me",
        "first_seen_at": "2026-03-15 21:47:10",
        "last_crawled_at": "2026-05-01 08:17:15",
        "last_title": "Posts | Jason’s Notes",
        "last_http_status": 200,
        "discovered_from_domain": "512kb.club",
        "depth": 0,
        "backlinks_count": 2,
        "rating_cache": 49,
        "spam_score": 24,
        "risk_label": "good",
        "category_name": "Personal",
        "primary_country_code": "",
        "internal_links_count": 78,
        "external_links_count": 1,
        "social_profiles_count": 0,
        "content_word_count": 900,
        "title_quality_score": 93,
        "has_meta_description": 1,
        "has_h1": 1,
        "language_code": "en",
        "response_time_ms": 443,
        "robots_status": 200,
        "sitemap_status": 200,
        "sitemap_total_urls": 105,
        "quality_score": 96,
        "site_name": "Jason’s Notes",
        "canonical_domain": "",
        "favicon_present": 1,
        "schema_org_count": 1,
        "noindex_detected": 0,
        "feed_links_count": 1,
        "https_working": 1,
        "estimated_authority_score": 38,
        "trust_score": 83,
        "nsfw_score": 0,
        "overall_rank_estimate": 1826809,
        "primary_tag": "",
        "tag_codes": "T",
        "manual_verified_status": "",
        "manual_tag_codes": "",
        "manual_rating_delta": 0,
        "manual_authority_delta": 0,
        "manual_trust_delta": 0,
        "manual_note": null,
        "manual_adjusted_by": null,
        "manual_adjusted_at": null,
        "manual_lock_scores": 0,
        "manual_lock_flags": 0,
        "crawl_blocked": 0,
        "crawl_blocked_by": "",
        "crawl_blocked_reason": null,
        "safety_score": 100,
        "fraud_score": 0,
        "legitimacy_score": 51,
        "infrastructure_risk_score": 0,
        "score_confidence": 100,
        "tag_confidence": 72,
        "category_confidence": 30,
        "deep_crawl_pages": 50,
        "resolved_ip": "173.249.207.47",
        "category_candidates_json": "[{\"category\":\"Personal\",\"score\":28},{\"category\":\"Business\",\"score\":22},{\"category\":\"Personal\",\"score\":22},{\"category\":\"Technology\",\"score\":22}]",
        "page_signals_json": "[{\"path\":\"/about\",\"status\":200,\"title\":\"About | Jason’s Notes\",\"word_count\":531,\"summary_text\":\"About | Jason’s Notes About | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"WebSite\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2025-05-11T09:50:14-07:00\\\",\\\"description\\\":\\\"Hey I’m Jason. You can find more about me in about page.\\\",\\\"headline\\\":\\\"About\\\",\\\"name\\\":\\\"Jason’s Notes\\\",\\\"url\\\":\\\"https://jasonthai.me/about/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color: #C00021; --red-bg-color: #FFDAD7; --green-color: #dae5e1; --green-link-color: #00dec9; --green-bg-color: #101918; --orange-color: #2d1600; --orange-link-color: #8b5000; --orange-bg-color: #ffdcbe; --yellow-color: #E7E3D0; --yellow-link-color: #f5e700; --yellow-bg-co\",\"classification_terms\":[\"about\",\"about me\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/about/\",\"status\":200,\"title\":\"About | Jason’s Notes\",\"word_count\":531,\"summary_text\":\"About | Jason’s Notes About | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"WebSite\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2025-05-11T09:50:14-07:00\\\",\\\"description\\\":\\\"Hey I’m Jason. You can find more about me in about page.\\\",\\\"headline\\\":\\\"About\\\",\\\"name\\\":\\\"Jason’s Notes\\\",\\\"url\\\":\\\"https://jasonthai.me/about/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color: #C00021; --red-bg-color: #FFDAD7; --green-color: #dae5e1; --green-link-color: #00dec9; --green-bg-color: #101918; --orange-color: #2d1600; --orange-link-color: #8b5000; --orange-bg-color: #ffdcbe; --yellow-color: #E7E3D0; --yellow-link-color: #f5e700; --yellow-bg-co\",\"classification_terms\":[\"about\",\"about me\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/archives/\",\"status\":200,\"title\":\"Archives | Jason’s Notes\",\"word_count\":811,\"summary_text\":\"Archives | Jason’s Notes Archives | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"WebPage\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-08-20T21:25:28-07:00\\\",\\\"description\\\":\\\"Jason Thai’s personal page\\\",\\\"headline\\\":\\\"Archives\\\",\\\"url\\\":\\\"https://jasonthai.me/archives/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color: #C00021; --red-bg-color: #FFDAD7; --green-color: #dae5e1; --green-link-color: #00dec9; --green-bg-color: #101918; --orange-color: #2d1600; --orange-link-color: #8b5000; --orange-bg-color: #ffdcbe; --yellow-color: #E7E3D0; --yellow-link-color: #f5e700; --yellow-bg-color: #19180d; } @media (prefers-color-scheme\",\"classification_terms\":[\"archives\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":6,\"depth\":1},{\"path\":\"/visited-places/\",\"status\":200,\"title\":\"Footprints | Jason’s Notes\",\"word_count\":506,\"summary_text\":\"Footprints | Jason’s Notes Footprints | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"WebPage\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-08-11T14:03:14-07:00\\\",\\\"description\\\":\\\"A list of places I have visited\\\",\\\"headline\\\":\\\"Footprints\\\",\\\"url\\\":\\\"https://jasonthai.me/visited-places/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color: #C00021; --red-bg-color: #FFDAD7; --green-color: #dae5e1; --green-link-color: #00dec9; --green-bg-color: #101918; --orange-color: #2d1600; --orange-link-color: #8b5000; --orange-bg-color: #ffdcbe; --yellow-color: #E7E3D0; --yellow-link-color: #f5e700; --yellow-bg-color: #19180d; } @media (prefe\",\"classification_terms\":[\"visited-places\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2025/05/03/doing-simple-things/\",\"status\":200,\"title\":\"Doing simple things | Jason’s Notes\",\"word_count\":921,\"summary_text\":\"Doing simple things | Jason’s Notes Doing simple things | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2025-05-03T13:06:45-07:00\\\",\\\"datePublished\\\":\\\"2025-05-03T00:00:00-07:00\\\",\\\"description\\\":\\\"I value simplicity, not complexity. That’s probably why I’ve been running for a few years. Running is one of the simplest activities anyone can do. Unlike other sports, it requires very little - a pair of shoes, a set of clothes, and an open space. Then you put one foot in front of the other, and repeat. It’s wonderfully simple. People sometimes confuse simple with easy, perhaps because simple and easy don’t sound very impressive or challenging. When you actually do it, day in and day out, you’ll probably feel the difference between simple and easy. Any\",\"classification_terms\":[\"blog/2025/05/03/doing-simple-things\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2023/11/06/boba-our-neighbor-dog/\",\"status\":200,\"title\":\"Boba - Our Neighbor’s Dog | Jason’s Notes\",\"word_count\":2286,\"summary_text\":\"Boba - Our Neighbor’s Dog | Jason’s Notes Boba - Our Neighbor’s Dog | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-11-06T12:15:32-08:00\\\",\\\"datePublished\\\":\\\"2023-11-06T00:00:00-08:00\\\",\\\"description\\\":\\\"Vy and I have been taking care of Boba, our neighbor’s dog for a few days now and I decided to write a little note about our experience of welcoming him to our family. About Boba We got to know him maybe a bit more than a year ago when walking around a nearby park. Boba was walking along with our neighbor and Yuna got sight of him. Up until then, Yuna had not played with too many of her kind. She and Boba got along quickly. We weren’t too sure about letting her off leash in the park but decided to let her roam freely with Boba for a few minutes. B\",\"classification_terms\":[\"blog/2023/11/06/boba-our-neighbor-dog\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2023/10/16/self-reflection-1/\",\"status\":200,\"title\":\"Self Reflection #1 | Jason’s Notes\",\"word_count\":782,\"summary_text\":\"Self Reflection #1 | Jason’s Notes Self Reflection #1 | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-10-16T14:12:12-07:00\\\",\\\"datePublished\\\":\\\"2023-10-16T00:00:00-07:00\\\",\\\"description\\\":\\\"I’ve walked the paths many have walked. I’m solving problems many people have solved. I’m living in a house a few people have called home. I do not grow the food I eat Or make the clothes I wear The technology that I use is invented by someone. I once knew some people whose names I no longer remember. I once knew some people who no longer exist. I know some people with whom I’ve lost touch. I know some people who no longer remember me. I know some people that I’m hesitant to talk to. Every now and then, I think of them and wonder if anyone still thinks o\",\"classification_terms\":[\"blog/2023/10/16/self-reflection-1\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2023/10/04/2023-san-jose-half-marathon/\",\"status\":200,\"title\":\"2023 San Jose Half Marathon Recap | Jason’s Notes\",\"word_count\":1631,\"summary_text\":\"2023 San Jose Half Marathon Recap | Jason’s Notes 2023 San Jose Half Marathon Recap | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-10-12T15:16:52-07:00\\\",\\\"datePublished\\\":\\\"2023-10-04T00:00:00-07:00\\\",\\\"description\\\":\\\"Race Information Name: Rock’n’Roll San Jose Marathon Date: October 1, 2023 Distance: 13.1 miles Location: San Jose, CA Website: https://www.runrocknroll.com/san-jose Time: 1:43:52 Goals Goal Description Completed? A Finish Yes B Sub 1:50 Yes C Sub 1:45 Yes D Sub 1:40 No Splits Mile Time Pace 3.1 23:33 7:35 5 36:42 6:57 8 1:01:55 8:25 10 1:18:02 8:04 13.1 1:43:52 8:21 Training I made a goal to run a sub 2-hour half marathon after the race last year and started running pretty consistently. I realized I needed to work on my endurance more so\",\"classification_terms\":[\"blog/2023/10/04/2023-san-jose-half-marathon\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":3,\"depth\":1},{\"path\":\"/blog/2023/09/25/chaining-wireguard-tunnels/\",\"status\":200,\"title\":\"Chaining Wireguard Tunnels | Jason’s Notes\",\"word_count\":1034,\"summary_text\":\"Chaining Wireguard Tunnels | Jason’s Notes Chaining Wireguard Tunnels | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-09-27T09:00:07-07:00\\\",\\\"datePublished\\\":\\\"2023-09-25T00:00:00-07:00\\\",\\\"description\\\":\\\"Use Wireguard to route home network traffic to VPN\\\",\\\"headline\\\":\\\"Chaining Wireguard Tunnels\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2023/09/25/chaining-wireguard-tunnels/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2023/09/25/chaining-wireguard-tunnels/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color: #C00021; --red-bg-color: #FFDAD7; --green-color: #dae5e1\",\"classification_terms\":[\"blog/2023/09/25/chaining-wireguard-tunnels\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":8,\"depth\":1},{\"path\":\"/blog/2023/09/15/on-vy-birthday/\",\"status\":200,\"title\":\"On Vy’s Birthday | Jason’s Notes\",\"word_count\":846,\"summary_text\":\"On Vy’s Birthday | Jason’s Notes On Vy’s Birthday | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-09-15T17:03:12-07:00\\\",\\\"datePublished\\\":\\\"2023-09-15T00:00:00-07:00\\\",\\\"description\\\":\\\"Another year means another piece of poetry for you. I hope you enjoy this piece. On your birthday, I just want to say I’m grateful for your being with me, for who you are, and for the thoughts that you have shared with me. I’m lucky to be the one to listen to your stories, to be able to laugh along your side, and also to be able to see the tears from your eyes. There’s something that I’d like you to do starting now. That is to foster your inner child, to be able to grow inward and be in touch with your emotions. I hope you and I can do some soul-searching\",\"classification_terms\":[\"blog/2023/09/15/on-vy-birthday\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2023/09/05/cloudflare-pages-jekyll-last-modified-at/\",\"status\":200,\"title\":\"Using jekyll-last-modified-at on Cloudflare Pages | Jason’s Notes\",\"word_count\":496,\"summary_text\":\"Using jekyll-last-modified-at on Cloudflare Pages | Jason’s Notes Using jekyll-last-modified-at on Cloudflare Pages | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-09-05T22:45:44-07:00\\\",\\\"datePublished\\\":\\\"2023-09-05T00:00:00-07:00\\\",\\\"description\\\":\\\"I ran into the problem where jekyll-last-modified-at plugin did not work properly on Cloudflare pages. Luckily, I found the solution via Github issue. The fix for this issue is to update the Build command to be git fetch --unshallow &amp;&amp; bundle exec jekyll build. Also a quick update: I’m testing hosting running this site on a VPS instead of Cloudflare. Let’s see how it affects the uptime.\\\",\\\"headline\\\":\\\"Using jekyll-last-modified-at on Cloudflare Pages\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/b\",\"classification_terms\":[\"blog/2023/09/05/cloudflare-pages-jekyll-last-modified-at\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2023/09/01/nextcloud-disaster-recovery-attempt/\",\"status\":200,\"title\":\"Nextcloud Restore Attempt | Jason’s Notes\",\"word_count\":1780,\"summary_text\":\"Nextcloud Restore Attempt | Jason’s Notes Nextcloud Restore Attempt | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-09-01T17:12:48-07:00\\\",\\\"datePublished\\\":\\\"2023-09-01T00:00:00-07:00\\\",\\\"description\\\":\\\"I have my own instance of Nextcloud running on docker at home and have been using borgmatic to back up this service for a while now. Yesterday, I attempted my occasional disaster recovery routine and ran into some surprises. Below is a recap of what happened. Borgmatic Config If you are not familiar with Borgmatic, it’s a configuration-file driven wrapper for BorgBackup. Think of it as docker-compose with respect to docker. A snippet of my configuration: $ cat /etc/borgmatic/config.yaml location: # List of source directories to backup. source_dire\",\"classification_terms\":[\"blog/2023/09/01/nextcloud-disaster-recovery-attempt\",\"blog\",\"store\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":34,\"depth\":1},{\"path\":\"/blog/2023/08/21/recipes-for-a-tired-day/\",\"status\":200,\"title\":\"Recipes for a Tired Day | Jason’s Notes\",\"word_count\":1105,\"summary_text\":\"Recipes for a Tired Day | Jason’s Notes Recipes for a Tired Day | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-08-23T14:18:34-07:00\\\",\\\"datePublished\\\":\\\"2023-08-21T00:00:00-07:00\\\",\\\"description\\\":\\\"Have you ever felt so exhausted at the end of the day that you fell asleep as soon as your head hit the pillow? I’m not talking about the usual kind of tired that comes from a long day at work or school. I’m talking about the kind of tired that makes your whole body feel heavy and your eyelids droop. I don’t usually get this kind of tired, given that I have a very sedentary work style. Even daily exercises such as running don’t tire me out as much as they used to anymore. But, there are a few occasions where I feel drained at the end of the day, whi\",\"classification_terms\":[\"blog/2023/08/21/recipes-for-a-tired-day\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2023/08/15/art-of-not-giving-a-fck/\",\"status\":200,\"title\":\"Art of Not Giving a F*ck | Jason’s Notes\",\"word_count\":1059,\"summary_text\":\"Art of Not Giving a F*ck | Jason’s Notes Art of Not Giving a F*ck | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-09-02T07:52:06-07:00\\\",\\\"datePublished\\\":\\\"2023-08-15T00:00:00-07:00\\\",\\\"description\\\":\\\"Edited Sep 02 2023: Vy pointed out the response should be “so what” rather than “then what”. I agree this is more accurate and have updated the article accordingly. Today I came across a Youtube video called “The miracle of not giving a fuck”, in which JV, the author of the video, covers the topic in a humorous but enlighting way about how to not let other people’s judgment affect us in negative ways. I am not sure whether this is an original idea. Still, his point is that the response we should give to any negative statement towards us is “So what\",\"classification_terms\":[\"blog/2023/08/15/art-of-not-giving-a-fck\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2023/08/13/a-visit-from-a-friend/\",\"status\":200,\"title\":\"A Visit from a Friend | Jason’s Notes\",\"word_count\":1100,\"summary_text\":\"A Visit from a Friend | Jason’s Notes A Visit from a Friend | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-08-13T17:58:08-07:00\\\",\\\"datePublished\\\":\\\"2023-08-13T00:00:00-07:00\\\",\\\"description\\\":\\\"Last night a friend of Vy and mine stopped by our place. It was T, who is our high school friend, along with her husband K and their baby M. They had visited their relatives beforehand and thought of dropping by to hang out with us. It doesn’t seem so special to have friends visit us, but there is a reason I want to write about it. They remembered that we were nearby and wanted to see us. There’s a heartwarming feeling to know that someone thought about you and wanted to see you. When we saw them a few weeks ago, Yuna and M. seemed to form a bond. We’\",\"classification_terms\":[\"blog/2023/08/13/a-visit-from-a-friend\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2023/08/11/moving-to-sourcehut/\",\"status\":200,\"title\":\"Moving to Sourcehut | Jason’s Notes\",\"word_count\":934,\"summary_text\":\"Moving to Sourcehut | Jason’s Notes Moving to Sourcehut | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-08-16T13:42:31-07:00\\\",\\\"datePublished\\\":\\\"2023-08-11T00:00:00-07:00\\\",\\\"description\\\":\\\"For quite a while, this site has been posted on Cloudflare Pages (before that it was on Github Page). I don’t really have any complaint about it as the uptime is great (perfect 100%). I found out Sourcehut not long ago and the dedication for open source just clicks with me. This is why I decided to support the ecosystem by using their ecosystem to host the blog. I also found out how to move one git repo to another from a stackoverflow post. There is some clean up to do such as removing the config file for CircleCI as Sourcehut has their own build system\",\"classification_terms\":[\"blog/2023/08/11/moving-to-sourcehut\",\"about\",\"support\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2023/08/09/what-would-you-be/\",\"status\":200,\"title\":\"What would you be? | Jason’s Notes\",\"word_count\":766,\"summary_text\":\"What would you be? | Jason’s Notes What would you be? | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-08-10T17:15:34-07:00\\\",\\\"datePublished\\\":\\\"2023-08-09T00:00:00-07:00\\\",\\\"description\\\":\\\"fun conversation I had with co-workers\\\",\\\"headline\\\":\\\"What would you be?\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2023/08/09/what-would-you-be/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2023/08/09/what-would-you-be/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color: #C00021; --red-bg-color: #FFDAD7; --green-color: #dae5e1; --green-link-color: #00dec9; --green-bg-colo\",\"classification_terms\":[\"blog/2023/08/09/what-would-you-be\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2023/08/07/1000-miles-and-counting-on-feet/\",\"status\":200,\"title\":\"1000 Miles and Counting on Feet | Jason’s Notes\",\"word_count\":421,\"summary_text\":\"1000 Miles and Counting on Feet | Jason’s Notes 1000 Miles and Counting on Feet | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-08-07T12:00:30-07:00\\\",\\\"datePublished\\\":\\\"2023-08-07T00:00:00-07:00\\\",\\\"description\\\":\\\"A milestone unlocked\\\",\\\"headline\\\":\\\"1000 Miles and Counting on Feet\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2023/08/07/1000-miles-and-counting-on-feet/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2023/08/07/1000-miles-and-counting-on-feet/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color: #C00021; --red-bg-color: #FFDAD7; --green-color: #dae5e1; --green-\",\"classification_terms\":[\"blog/2023/08/07/1000-miles-and-counting-on-feet\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2023/04/30/21st-birthday-gift-from-vy/\",\"status\":200,\"title\":\"21st Birthday Gift, From Vy | Jason’s Notes\",\"word_count\":970,\"summary_text\":\"21st Birthday Gift, From Vy | Jason’s Notes 21st Birthday Gift, From Vy | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-04-30T12:49:07-07:00\\\",\\\"datePublished\\\":\\\"2023-04-30T00:00:00-07:00\\\",\\\"description\\\":\\\"A curated playlist as a birthday gift from Vy\\\",\\\"headline\\\":\\\"21st Birthday Gift, From Vy\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2023/04/30/21st-birthday-gift-from-vy/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2023/04/30/21st-birthday-gift-from-vy/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color: #C00021; --red-bg-color: #FFDAD7; --green-color: #dae5e1; -\",\"classification_terms\":[\"blog/2023/04/30/21st-birthday-gift-from-vy\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2022/11/06/2022-rock-n-roll-san-jose-half-marathon/\",\"status\":200,\"title\":\"2022 Rock ‘n’ Roll San Jose Half Marathon | Jason’s Notes\",\"word_count\":815,\"summary_text\":\"2022 Rock ‘n’ Roll San Jose Half Marathon | Jason’s Notes 2022 Rock ‘n’ Roll San Jose Half Marathon | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2022-11-06T21:09:21-08:00\\\",\\\"datePublished\\\":\\\"2022-11-06T00:00:00-07:00\\\",\\\"description\\\":\\\"A look back in 2022 Rock ‘n’ Roll San Jose Half Marathon\\\",\\\"headline\\\":\\\"2022 Rock ‘n’ Roll San Jose Half Marathon\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2022/11/06/2022-rock-n-roll-san-jose-half-marathon/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2022/11/06/2022-rock-n-roll-san-jose-half-marathon/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-c\",\"classification_terms\":[\"blog/2022/11/06/2022-rock-n-roll-san-jose-half-marathon\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2022/07/28/have-you-had-kids-yet/\",\"status\":200,\"title\":\"Have you had kids yet? | Jason’s Notes\",\"word_count\":1310,\"summary_text\":\"Have you had kids yet? | Jason’s Notes Have you had kids yet? | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2022-07-28T17:04:20-07:00\\\",\\\"datePublished\\\":\\\"2022-07-28T00:00:00-07:00\\\",\\\"description\\\":\\\"The answer is no.\\\",\\\"headline\\\":\\\"Have you had kids yet?\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2022/07/28/have-you-had-kids-yet/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2022/07/28/have-you-had-kids-yet/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color: #C00021; --red-bg-color: #FFDAD7; --green-color: #dae5e1; --green-link-color: #00dec9; --green-bg-color: #1\",\"classification_terms\":[\"blog/2022/07/28/have-you-had-kids-yet\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2022/07/25/we-all-live-at-our-own-pace/\",\"status\":200,\"title\":\"We All Live at Our Own Pace | Jason’s Notes\",\"word_count\":1273,\"summary_text\":\"We All Live at Our Own Pace | Jason’s Notes We All Live at Our Own Pace | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2022-07-27T15:41:38-07:00\\\",\\\"datePublished\\\":\\\"2022-07-25T00:00:00-07:00\\\",\\\"description\\\":\\\"Where is the finish line?\\\",\\\"headline\\\":\\\"We All Live at Our Own Pace\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2022/07/25/we-all-live-at-our-own-pace/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2022/07/25/we-all-live-at-our-own-pace/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color: #C00021; --red-bg-color: #FFDAD7; --green-color: #dae5e1; --green-link-color:\",\"classification_terms\":[\"blog/2022/07/25/we-all-live-at-our-own-pace\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2022/07/15/plum-villages-five-mindfulness-training/\",\"status\":200,\"title\":\"Plum Village’s Five Mindfulness Trainings | Jason’s Notes\",\"word_count\":1539,\"summary_text\":\"Plum Village’s Five Mindfulness Trainings | Jason’s Notes Plum Village’s Five Mindfulness Trainings | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2022-07-15T14:26:29-07:00\\\",\\\"datePublished\\\":\\\"2022-07-15T00:00:00-07:00\\\",\\\"description\\\":\\\"A guide to a more mindful life\\\",\\\"headline\\\":\\\"Plum Village’s Five Mindfulness Trainings\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2022/07/15/plum-villages-five-mindfulness-training/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2022/07/15/plum-villages-five-mindfulness-training/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color: #C00021; --red-bg-co\",\"classification_terms\":[\"blog/2022/07/15/plum-villages-five-mindfulness-training\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2022/07/07/jt0-domain-and-other-stuff/\",\"status\":200,\"title\":\"I bought a new domain | Jason’s Notes\",\"word_count\":491,\"summary_text\":\"I bought a new domain | Jason’s Notes I bought a new domain | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2022-07-07T15:01:02-07:00\\\",\\\"datePublished\\\":\\\"2022-07-07T00:00:00-07:00\\\",\\\"description\\\":\\\"What to do with jt0.dev?\\\",\\\"headline\\\":\\\"I bought a new domain\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2022/07/07/jt0-domain-and-other-stuff/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2022/07/07/jt0-domain-and-other-stuff/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color: #C00021; --red-bg-color: #FFDAD7; --green-color: #dae5e1; --green-link-color: #00dec9; --gre\",\"classification_terms\":[\"blog/2022/07/07/jt0-domain-and-other-stuff\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2022/07/06/theme-buttons/\",\"status\":200,\"title\":\"Link Color Switcher | Jason’s Notes\",\"word_count\":742,\"summary_text\":\"Link Color Switcher | Jason’s Notes Link Color Switcher | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-08-12T19:49:06-07:00\\\",\\\"datePublished\\\":\\\"2022-07-06T00:00:00-07:00\\\",\\\"description\\\":\\\"I added some customization to the site.\\\",\\\"headline\\\":\\\"Link Color Switcher\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2022/07/06/theme-buttons/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2022/07/06/theme-buttons/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color: #C00021; --red-bg-color: #FFDAD7; --green-color: #dae5e1; --green-link-color: #00dec9; --green-bg-color: #1\",\"classification_terms\":[\"blog/2022/07/06/theme-buttons\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2022/07/01/my-new-philosophy-on-blogging/\",\"status\":200,\"title\":\"My new philosophy on blogging | Jason’s Notes\",\"word_count\":709,\"summary_text\":\"My new philosophy on blogging | Jason’s Notes My new philosophy on blogging | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2022-07-01T16:46:24-07:00\\\",\\\"datePublished\\\":\\\"2022-07-01T00:00:00-07:00\\\",\\\"description\\\":\\\"What’s the point of this blog anyway?\\\",\\\"headline\\\":\\\"My new philosophy on blogging\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2022/07/01/my-new-philosophy-on-blogging/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2022/07/01/my-new-philosophy-on-blogging/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color: #C00021; --red-bg-color: #FFDAD7; --green-color: #dae5e1;\",\"classification_terms\":[\"blog/2022/07/01/my-new-philosophy-on-blogging\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2022/06/26/site-really-simplified/\",\"status\":200,\"title\":\"Jason’s Notes Even More Simplified | Jason’s Notes\",\"word_count\":526,\"summary_text\":\"Jason’s Notes Even More Simplified | Jason’s Notes Jason’s Notes Even More Simplified | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2022-06-26T22:58:20-07:00\\\",\\\"datePublished\\\":\\\"2022-06-26T00:00:00-07:00\\\",\\\"description\\\":\\\"This site really lost some weight!\\\",\\\"headline\\\":\\\"Jason’s Notes Even More Simplified\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2022/06/26/site-really-simplified/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2022/06/26/site-really-simplified/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color: #C00021; --red-bg-color: #FFDAD7; --green-color: #dae5e1; --gree\",\"classification_terms\":[\"blog/2022/06/26/site-really-simplified\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2022/06/24/on-making-the-site-color-blind-friendly/\",\"status\":200,\"title\":\"On making the site color blind friendly | Jason’s Notes\",\"word_count\":543,\"summary_text\":\"On making the site color blind friendly | Jason’s Notes On making the site color blind friendly | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2022-06-26T21:24:43-07:00\\\",\\\"datePublished\\\":\\\"2022-06-24T00:00:00-07:00\\\",\\\"description\\\":\\\"Making the site more accessible for color blind users.\\\",\\\"headline\\\":\\\"On making the site color blind friendly\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2022/06/24/on-making-the-site-color-blind-friendly/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2022/06/24/on-making-the-site-color-blind-friendly/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color:\",\"classification_terms\":[\"blog/2022/06/24/on-making-the-site-color-blind-friendly\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2022/06/20/about-games/\",\"status\":200,\"title\":\"About Games | Jason’s Notes\",\"word_count\":522,\"summary_text\":\"About Games | Jason’s Notes About Games | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2022-06-21T12:42:24-07:00\\\",\\\"datePublished\\\":\\\"2022-06-20T00:00:00-07:00\\\",\\\"description\\\":\\\"Hello games.\\\",\\\"headline\\\":\\\"About Games\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2022/06/20/about-games/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2022/06/20/about-games/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color: #C00021; --red-bg-color: #FFDAD7; --green-color: #dae5e1; --green-link-color: #00dec9; --green-bg-color: #101918; --orange-color: #2d1600; --orange-link-c\",\"classification_terms\":[\"blog/2022/06/20/about-games\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2022/06/17/jasons-notes-simplified/\",\"status\":200,\"title\":\"Jason’s Notes Simplified | Jason’s Notes\",\"word_count\":903,\"summary_text\":\"Jason’s Notes Simplified | Jason’s Notes Jason’s Notes Simplified | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2022-06-26T21:24:43-07:00\\\",\\\"datePublished\\\":\\\"2022-06-17T00:00:00-07:00\\\",\\\"description\\\":\\\"A cleaner and more minimal Jason’s Notes\\\",\\\"headline\\\":\\\"Jason’s Notes Simplified\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2022/06/17/jasons-notes-simplified/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2022/06/17/jasons-notes-simplified/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color: #C00021; --red-bg-color: #FFDAD7; --green-color: #dae5e1; --green-link-color\",\"classification_terms\":[\"blog/2022/06/17/jasons-notes-simplified\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2022/05/20/notes-on-setting-up-ryzen-home-server/\",\"status\":200,\"title\":\"Notes on Setting Up Ryzen Home Server | Jason’s Notes\",\"word_count\":539,\"summary_text\":\"Notes on Setting Up Ryzen Home Server | Jason’s Notes Notes on Setting Up Ryzen Home Server | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2022-06-20T10:03:57-07:00\\\",\\\"datePublished\\\":\\\"2022-05-20T00:00:00-07:00\\\",\\\"description\\\":\\\"Setting up Debian on Beelink SER3\\\",\\\"headline\\\":\\\"Notes on Setting Up Ryzen Home Server\\\",\\\"image\\\":\\\"https://jasonthai.me/assets/img/beelink.jpg\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2022/05/20/notes-on-setting-up-ryzen-home-server/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2022/05/20/notes-on-setting-up-ryzen-home-server/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #5\",\"classification_terms\":[\"blog/2022/05/20/notes-on-setting-up-ryzen-home-server\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2022/04/30/connect-to-localhost-mysql-from-docker-container/\",\"status\":200,\"title\":\"Connect to Localhost MySQL from Docker Container | Jason’s Notes\",\"word_count\":578,\"summary_text\":\"Connect to Localhost MySQL from Docker Container | Jason’s Notes Connect to Localhost MySQL from Docker Container | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2022-04-30T16:36:43-07:00\\\",\\\"datePublished\\\":\\\"2022-04-30T00:00:00-07:00\\\",\\\"description\\\":\\\"How to connect to localhost mysql from docker container.\\\",\\\"headline\\\":\\\"Connect to Localhost MySQL from Docker Container\\\",\\\"image\\\":\\\"https://jasonthai.me/assets/img/homepage-docker-logo.png\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2022/04/30/connect-to-localhost-mysql-from-docker-container/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2022/04/30/connect-to-localhost-mysql-from-docker-container/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-co\",\"classification_terms\":[\"blog/2022/04/30/connect-to-localhost-mysql-from-docker-container\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":6,\"depth\":1},{\"path\":\"/blog/2020/08/26/nginx-reverse-proxy-template/\",\"status\":200,\"title\":\"Nginx Reverse Proxy Template | Jason’s Notes\",\"word_count\":474,\"summary_text\":\"Nginx Reverse Proxy Template | Jason’s Notes Nginx Reverse Proxy Template | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-09-06T10:15:45-07:00\\\",\\\"datePublished\\\":\\\"2020-08-26T00:00:00-07:00\\\",\\\"description\\\":\\\"Nginx reverse proxy template\\\",\\\"headline\\\":\\\"Nginx Reverse Proxy Template\\\",\\\"image\\\":\\\"https://jasonthai.me/assets/img/nginx.png\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2020/08/26/nginx-reverse-proxy-template/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2020/08/26/nginx-reverse-proxy-template/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --default-bg-color: #FFF; --red-color: #584140; --red-link-color: #C00021; --red-bg-\",\"classification_terms\":[\"blog/2020/08/26/nginx-reverse-proxy-template\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":3,\"depth\":1},{\"path\":\"/blog/2020/08/23/jasons-notes-ipv6-support-and-services-page-enhancement/\",\"status\":200,\"title\":\"Jason’s Notes: IPv6 Support and Services Page Enhancement | Jason’s Notes\",\"word_count\":439,\"summary_text\":\"Jason’s Notes: IPv6 Support and Services Page Enhancement | Jason’s Notes Jason’s Notes: IPv6 Support and Services Page Enhancement | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2022-06-17T15:09:36-07:00\\\",\\\"datePublished\\\":\\\"2020-08-23T00:00:00-07:00\\\",\\\"description\\\":\\\"Jason’s Notes website is IPv6 ready\\\",\\\"headline\\\":\\\"Jason’s Notes: IPv6 Support and Services Page Enhancement\\\",\\\"image\\\":\\\"https://jasonthai.me/assets/img/ipv6.png\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2020/08/23/jasons-notes-ipv6-support-and-services-page-enhancement/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2020/08/23/jasons-notes-ipv6-support-and-services-page-enhancement/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color:\",\"classification_terms\":[\"blog/2020/08/23/jasons-notes-ipv6-support-and-services-page-enhancement\",\"support\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2020/07/24/set-up-nginx-varnish-for-high-traffic-websites/\",\"status\":200,\"title\":\"Set Up Nginx + Varnish for High Traffic Websites | Jason’s Notes\",\"word_count\":1082,\"summary_text\":\"Set Up Nginx + Varnish for High Traffic Websites | Jason’s Notes Set Up Nginx + Varnish for High Traffic Websites | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2022-06-17T15:09:36-07:00\\\",\\\"datePublished\\\":\\\"2020-07-24T00:00:00-07:00\\\",\\\"description\\\":\\\"How to set up Nginx + Varnish for high traffic websites\\\",\\\"headline\\\":\\\"Set Up Nginx + Varnish for High Traffic Websites\\\",\\\"image\\\":\\\"https://jasonthai.me/assets/img/NginxVarnish.png\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2020/07/24/set-up-nginx-varnish-for-high-traffic-websites/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2020/07/24/set-up-nginx-varnish-for-high-traffic-websites/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --\",\"classification_terms\":[\"blog/2020/07/24/set-up-nginx-varnish-for-high-traffic-websites\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":15,\"depth\":1},{\"path\":\"/blog/2020/07/13/high-availability-series-part-iv-example-setup-of-distributed-load-balancing-wallabag-with-data-tier-clustering/\",\"status\":200,\"title\":\"[Series] PART IV: Example Setup of Distributed Load Balancing Wallabag with Data Tier Clustering | Jason’s Notes\",\"word_count\":1304,\"summary_text\":\"[Series] PART IV: Example Setup of Distributed Load Balancing Wallabag with Data Tier Clustering | Jason’s Notes [Series] PART IV: Example Setup of Distributed Load Balancing Wallabag with Data Tier Clustering | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2022-06-26T21:24:43-07:00\\\",\\\"datePublished\\\":\\\"2020-07-13T00:00:00-07:00\\\",\\\"description\\\":\\\"High Availability Series: Example Setup of Distributed Load Balancing Wallabag with Data Tier Clustering. How to set up a highly available Wallabag with docker-compose powered by HAProxy, Apache2 and Galera cluster.\\\",\\\"headline\\\":\\\"[Series] PART IV: Example Setup of Distributed Load Balancing Wallabag with Data Tier Clustering\\\",\\\"image\\\":\\\"https://jasonthai.me/assets/img/ha-cluster.png\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2020/07/13/high-availabilit\",\"classification_terms\":[\"blog/2020/07/13/high-availability-series-part-iv-example-setup-of-distributed-load-balancing-wallabag-with-data-tier-clustering\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":11,\"depth\":1},{\"path\":\"/blog/2020/07/03/high-availability-series-part-iii-high-availability-galera-cluster-with-haproxy-and-stunnel/\",\"status\":200,\"title\":\"[Series] PART III: High Availability Galera Cluster with HAProxy and Stunnel | Jason’s Notes\",\"word_count\":1513,\"summary_text\":\"[Series] PART III: High Availability Galera Cluster with HAProxy and Stunnel | Jason’s Notes [Series] PART III: High Availability Galera Cluster with HAProxy and Stunnel | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2022-06-26T21:24:43-07:00\\\",\\\"datePublished\\\":\\\"2020-07-03T00:00:00-07:00\\\",\\\"description\\\":\\\"High Availability Series: High Availability Galera Cluster with HAProxy and Stunnel\\\",\\\"headline\\\":\\\"[Series] PART III: High Availability Galera Cluster with HAProxy and Stunnel\\\",\\\"image\\\":\\\"https://jasonthai.me/assets/img/haproxy-galera.png\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2020/07/03/high-availability-series-part-iii-high-availability-galera-cluster-with-haproxy-and-stunnel/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2020/07/03/high-availability-series-part-iii-high-availa\",\"classification_terms\":[\"blog/2020/07/03/high-availability-series-part-iii-high-availability-galera-cluster-with-haproxy-and-stunnel\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":19,\"depth\":1},{\"path\":\"/blog/2020/06/20/high-availability-series-part-ii-configure-and-secure-a-3-node-galera-cluster/\",\"status\":200,\"title\":\"[Series] PART II: Configure and Secure a 3-node Galera Cluster | Jason’s Notes\",\"word_count\":1509,\"summary_text\":\"[Series] PART II: Configure and Secure a 3-node Galera Cluster | Jason’s Notes [Series] PART II: Configure and Secure a 3-node Galera Cluster | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2022-06-26T21:24:43-07:00\\\",\\\"datePublished\\\":\\\"2020-06-20T00:00:00-07:00\\\",\\\"description\\\":\\\"High Availability Series: How to configure and secure a 3-node Galera cluster\\\",\\\"headline\\\":\\\"[Series] PART II: Configure and Secure a 3-node Galera Cluster\\\",\\\"image\\\":\\\"https://jasonthai.me/assets/img/galera_small.png\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2020/06/20/high-availability-series-part-ii-configure-and-secure-a-3-node-galera-cluster/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2020/06/20/high-availability-series-part-ii-configure-and-secure-a-3-node-galera-cluster/\\\"} * { color-sche\",\"classification_terms\":[\"blog/2020/06/20/high-availability-series-part-ii-configure-and-secure-a-3-node-galera-cluster\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":8,\"depth\":1},{\"path\":\"/blog/2020/06/08/high-availability-series-part-i-set-up-and-secure-mariadb-on-debian-servers/\",\"status\":200,\"title\":\"[Series] PART I: Set Up and Use SSL to Secure MariaDB on Debian Servers | Jason’s Notes\",\"word_count\":2113,\"summary_text\":\"[Series] PART I: Set Up and Use SSL to Secure MariaDB on Debian Servers | Jason’s Notes [Series] PART I: Set Up and Use SSL to Secure MariaDB on Debian Servers | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2022-06-26T21:24:43-07:00\\\",\\\"datePublished\\\":\\\"2020-06-08T00:00:00-07:00\\\",\\\"description\\\":\\\"High Availability Series: How to set up and use SSL to secure MariaDB on Debian servers.\\\",\\\"headline\\\":\\\"[Series] PART I: Set Up and Use SSL to Secure MariaDB on Debian Servers\\\",\\\"image\\\":\\\"https://jasonthai.me/assets/img/galera_small.png\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2020/06/08/high-availability-series-part-i-set-up-and-secure-mariadb-on-debian-servers/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2020/06/08/high-availability-series-part-i-set-up-and-secure-mariadb-on-debian-\",\"classification_terms\":[\"blog/2020/06/08/high-availability-series-part-i-set-up-and-secure-mariadb-on-debian-servers\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2020/05/01/how-to-setup-wireguard-pi-hole-on-debian-10-ubuntu-1804/\",\"status\":200,\"title\":\"How to Setup Wireguard + Pi-hole on Debian 10 / Ubuntu 18.04 | Jason’s Notes\",\"word_count\":1176,\"summary_text\":\"How to Setup Wireguard + Pi-hole on Debian 10 / Ubuntu 18.04 | Jason’s Notes How to Setup Wireguard + Pi-hole on Debian 10 / Ubuntu 18.04 | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2023-09-26T15:49:34-07:00\\\",\\\"datePublished\\\":\\\"2020-05-01T00:00:00-07:00\\\",\\\"description\\\":\\\"How to Setup an Ad-free VPN with Wireguard + Pi-hole on Debian 10 / Ubuntu 18.04\\\",\\\"headline\\\":\\\"How to Setup Wireguard + Pi-hole on Debian 10 / Ubuntu 18.04\\\",\\\"image\\\":\\\"https://jasonthai.me/assets/img/openvpn-pihole.png\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2020/05/01/how-to-setup-wireguard-pi-hole-on-debian-10-ubuntu-1804/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2020/05/01/how-to-setup-wireguard-pi-hole-on-debian-10-ubuntu-1804/\\\"} * { color-scheme: light dark } :root { --color: #584140;\",\"classification_terms\":[\"blog/2020/05/01/how-to-setup-wireguard-pi-hole-on-debian-10-ubuntu-1804\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":5,\"depth\":1},{\"path\":\"/blog/2020/03/14/donate-compute-power-to-foldinghome-to-cures-for-covid-19/\",\"status\":200,\"title\":\"Donate Compute Power to Folding@Home to Find Cures For Covid-19 | Jason’s Notes\",\"word_count\":468,\"summary_text\":\"Donate Compute Power to Folding@Home to Find Cures For Covid-19 | Jason’s Notes Donate Compute Power to Folding@Home to Find Cures For Covid-19 | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2020-03-14T00:22:11-07:00\\\",\\\"datePublished\\\":\\\"2020-03-14T00:00:00-07:00\\\",\\\"description\\\":\\\"Donate your compute power at folding@home to help. against Covid-19\\\",\\\"headline\\\":\\\"Donate Compute Power to Folding@Home to Find Cures For Covid-19\\\",\\\"image\\\":\\\"https://jasonthai.me/assets/img/foldingathome.png\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2020/03/14/donate-compute-power-to-foldinghome-to-cures-for-covid-19/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2020/03/14/donate-compute-power-to-foldinghome-to-cures-for-covid-19/\\\"} * { color-scheme: light dark } :root { --color: #584140; --li\",\"classification_terms\":[\"blog/2020/03/14/donate-compute-power-to-foldinghome-to-cures-for-covid-19\",\"help\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2020/02/27/some-notes-on-apache-spark-memory-management/\",\"status\":200,\"title\":\"Some Notes on Apache Spark Memory Management | Jason’s Notes\",\"word_count\":672,\"summary_text\":\"Some Notes on Apache Spark Memory Management | Jason’s Notes Some Notes on Apache Spark Memory Management | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2020-02-28T09:22:34-08:00\\\",\\\"datePublished\\\":\\\"2020-02-27T00:00:00-08:00\\\",\\\"description\\\":\\\"Some notes on Apache Spark Memory management\\\",\\\"headline\\\":\\\"Some Notes on Apache Spark Memory Management\\\",\\\"image\\\":\\\"https://jasonthai.me/assets/img/spark.png\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2020/02/27/some-notes-on-apache-spark-memory-management/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2020/02/27/some-notes-on-apache-spark-memory-management/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-color: #000; --default-link-color: #000; --de\",\"classification_terms\":[\"blog/2020/02/27/some-notes-on-apache-spark-memory-management\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/blog/2020/02/19/better-ssh-keys-management-with-authorizedkeyscommand/\",\"status\":200,\"title\":\"Better SSH Keys Management with AuthorizedKeysCommand | Jason’s Notes\",\"word_count\":582,\"summary_text\":\"Better SSH Keys Management with AuthorizedKeysCommand | Jason’s Notes Better SSH Keys Management with AuthorizedKeysCommand | Jason’s Notes {\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BlogPosting\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Jason Thai\\\"},\\\"dateModified\\\":\\\"2020-02-19T13:42:42-08:00\\\",\\\"datePublished\\\":\\\"2020-02-19T00:00:00-08:00\\\",\\\"description\\\":\\\"Use AuthorizedKeysCommand to better manage SSH keys\\\",\\\"headline\\\":\\\"Better SSH Keys Management with AuthorizedKeysCommand\\\",\\\"image\\\":\\\"https://jasonthai.me/assets/img/ssh.jpg\\\",\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://jasonthai.me/blog/2020/02/19/better-ssh-keys-management-with-authorizedkeyscommand/\\\"},\\\"url\\\":\\\"https://jasonthai.me/blog/2020/02/19/better-ssh-keys-management-with-authorizedkeyscommand/\\\"} * { color-scheme: light dark } :root { --color: #584140; --link-color: #C00021; --bg-color: #FFDAD7; --default-colo\",\"classification_terms\":[\"blog/2",
        "score_reasons_json": "[\"Category confidence was reduced, so the classifier fell back to the broader parent category.\",\"Clean low-risk signals now remain neutral instead of receiving a caution tag from low confidence alone.\",\"Backfill preserved the existing category because replacement evidence was broad and low confidence.\"]",
        "estimated_monthly_visitors": 1102,
        "route_domain": "jasonthai.me",
        "display_domain": "jasonthai.me"
    },
    "explainability": {
        "summary": "jasonthai.me currently scores 49/100. Technical and crawl-quality evidence are doing most of the lifting for the score. 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": "caution",
                "detail": "64/100"
            },
            {
                "label": "Crawler access",
                "value": "Clean visibility",
                "tone": "good",
                "detail": null
            }
        ],
        "weighted_contributions": [
            {
                "label": "Quality system",
                "points": "+34.0",
                "tone": "good",
                "detail": "Technical quality, crawl depth, page structure, and implementation hygiene. Current subsystem score: 100/100."
            },
            {
                "label": "Reputation system",
                "points": "+15.3",
                "tone": "caution",
                "detail": "Authority, search visibility, reach, engagement, and registry stability. Current subsystem score: 45/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": "-32.0",
                "tone": "risk",
                "detail": "Safety thresholds capped the final score until the risk profile improves."
            }
        ],
        "evidence_cards": [
            {
                "label": "Authority and trust",
                "value": "46/100 · trust 77/100",
                "tone": "caution",
                "detail": "545 monthly visitors, 86 organic keywords, brand completeness 78/100, engagement 90/100."
            },
            {
                "label": "Backlink and search evidence",
                "value": "2 referring domains",
                "tone": "good",
                "detail": "2 backlinks across 2 referring domains. Diversity 93/100; spam penalty 0."
            },
            {
                "label": "Registry and domain stability",
                "value": "0.0 years old",
                "tone": "good",
                "detail": "Stability 100/100 · age 0.0 years."
            },
            {
                "label": "Safety and fraud posture",
                "value": "Safety 100/100 · fraud 0/100",
                "tone": "good",
                "detail": "Safety 100/100 · fraud 0/100."
            }
        ],
        "positives": [
            "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.",
            "Registry history looks stable, which supports legitimacy and trust.",
            "HTTPS is working, so the site clears a basic transport-security check.",
            "Backlink diversity looks broad enough to strengthen authority confidence."
        ],
        "risks": [],
        "freshness": [
            {
                "label": "Crawl evidence",
                "value": "2026-05-01 08:17:15",
                "tone": "risk",
                "detail": "Crawl and page content sample. Age: 1mo ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-05-01 08:17:14",
                "tone": "risk",
                "detail": "Registry profile and stability signals. Age: 1mo ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-06-23 23:31:23",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-06-23 23:31:23",
                "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": 32,
        "final_score": 49
    },
    "insight_snapshot": {
        "version": 1,
        "generated_at": "2026-06-23T23:31:23+00:00",
        "domain": "jasonthai.me",
        "display_name": "Jason's Notes",
        "is_tracked": false,
        "is_estimated": true,
        "overall_score": 49,
        "authority_score": 46,
        "trust_score": 77,
        "safety_score": 100,
        "fraud_score": 0,
        "confidence_score": 100,
        "traffic_confidence": 64,
        "last_crawled_at": "2026-05-01 08:17:15",
        "crawl_blocked": false,
        "summary": "jasonthai.me currently scores 49/100. Technical and crawl-quality evidence are doing most of the lifting for the score. 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": "caution",
                "detail": "64/100"
            },
            {
                "label": "Crawler access",
                "value": "Clean visibility",
                "tone": "good",
                "detail": null
            }
        ],
        "top_positive_signals": [
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness.",
            "Search evidence is broad enough to classify with better confidence.",
            "Registry history looks stable, which supports legitimacy and trust.",
            "HTTPS is working, so the site clears a basic transport-security check."
        ],
        "top_risk_signals": [],
        "freshness": [
            {
                "label": "Crawl evidence",
                "value": "2026-05-01 08:17:15",
                "tone": "risk",
                "detail": "Crawl and page content sample. Age: 1mo ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-05-01 08:17:14",
                "tone": "risk",
                "detail": "Registry profile and stability signals. Age: 1mo ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-06-23 23:31:23",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-06-23 23:31:23",
                "tone": "good",
                "detail": "Estimated trend derived from current profile and crawl signals. Age: 0s ago."
            },
            {
                "label": "Audience geography",
                "value": "Not captured yet",
                "tone": "unknown",
                "detail": "Audience mix is estimated from available signals rather than first-party audience logs."
            }
        ],
        "top_tags": []
    },
    "is_tracked": false,
    "is_estimated": true,
    "live_state": {
        "status": "processing",
        "status_label": "Cache build running",
        "message": "The refreshed page cache is still being built for this domain.",
        "updated_at": "2026-06-24T01:30:06+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/jasonthai.me/refresh",
        "isGuestCooldown": false,
        "cooldownSeconds": 0
    },
    "urlscan_report": {
        "domain": "jasonthai.me",
        "status": "idle",
        "submitted_at": null,
        "completed_at": null,
        "last_checked_at": null,
        "last_error": "",
        "submitted_url": "https://jasonthai.me/",
        "uuid": "",
        "result_url": "",
        "api_result_url": "",
        "visibility": "public",
        "summary": "No urlscan.io report has been requested for this domain yet.",
        "report": [],
        "report_summary": [],
        "is_fresh": false,
        "can_retry": true,
        "poll_after_seconds": 20
    }
}