{
    "ready": true,
    "site": {
        "id": 0,
        "domain": "elver.me",
        "display_name": "elver.me",
        "primary_country_code": "",
        "category_name": "Personal: Portfolios & CVs"
    },
    "metrics": {
        "global_rank": 29655,
        "country_rank": 15632,
        "category_rank": 41,
        "daily_pageviews_per_visitor": 3.72,
        "daily_time_on_site_seconds": 278,
        "bounce_rate": 35.02,
        "search_visits_percent": 38.21,
        "total_sites_linking_in": 1,
        "monthly_unique_visitors": 75,
        "recorded_at": "2026-03-19 19:03:28"
    },
    "audit": {
        "score": 79
    },
    "traffic_sources": {
        "direct_percent": 26.96,
        "search_percent": 34.46,
        "social_percent": 7.01,
        "referral_percent": 12.99,
        "email_percent": 9.29,
        "paid_percent": 9.29
    },
    "seo_profile": {
        "backlinks_total": 1,
        "referring_domains": 1,
        "dofollow_backlinks_percent": 100,
        "organic_keywords": 60,
        "indexed_pages": 306,
        "page_speed_score": 97,
        "mobile_friendliness_score": 74,
        "authority_score": 25,
        "spam_risk_score": 27
    },
    "crawl_report": {
        "robots_status": 404,
        "sitemap_status": 200,
        "sitemap_total_urls": 306,
        "crawl_blocked": false,
        "crawl_blocked_by": "",
        "crawl_blocked_reason": "",
        "notes": [
            "No H1 heading was detected.",
            "robots.txt could not be confirmed."
        ],
        "created_at": "2026-03-19 19:03:28"
    },
    "keywords": [
        {
            "keyword": "elver.me",
            "position": 25,
            "search_engine": "Estimated",
            "checked_at": "2026-04-15 22:39:37",
            "is_estimated": true
        },
        {
            "keyword": "elver.me personal: portfolios & cvs",
            "position": 27,
            "search_engine": "Estimated",
            "checked_at": "2026-04-15 22:39:37",
            "is_estimated": true
        },
        {
            "keyword": "elver.me reviews",
            "position": 29,
            "search_engine": "Estimated",
            "checked_at": "2026-04-15 22:39:37",
            "is_estimated": true
        },
        {
            "keyword": "elver",
            "position": 31,
            "search_engine": "Estimated",
            "checked_at": "2026-04-15 22:39:37",
            "is_estimated": true
        }
    ],
    "rating": {
        "overall": 64,
        "label": "Healthy",
        "breakdown": [
            {
                "label": "Technical foundation",
                "score": 13,
                "max": 18
            },
            {
                "label": "Authority & trust",
                "score": 8,
                "max": 30
            },
            {
                "label": "Reach & market presence",
                "score": 3,
                "max": 18
            },
            {
                "label": "Search visibility",
                "score": 4,
                "max": 12
            },
            {
                "label": "Engagement & retention",
                "score": 8,
                "max": 10
            },
            {
                "label": "Channels & diversification",
                "score": 4,
                "max": 6
            },
            {
                "label": "Registry stability",
                "score": 3,
                "max": 6
            },
            {
                "label": "Quality system",
                "score": 72,
                "max": 100
            },
            {
                "label": "Reputation system",
                "score": 37,
                "max": 100
            },
            {
                "label": "Safety system",
                "score": 100,
                "max": 100
            },
            {
                "label": "Evidence confidence",
                "score": 100,
                "max": 100
            },
            {
                "label": "External intelligence",
                "score": 52,
                "max": 100
            },
            {
                "label": "API intelligence",
                "score": 54,
                "max": 100
            }
        ],
        "authority_score": 25,
        "quality_score": 72,
        "reputation_score": 37,
        "safety_score": 100,
        "confidence_score": 100,
        "fraud_score": 1,
        "authority_signals": {
            "backlinks": 1,
            "referring_domains": 1,
            "organic_keywords": 60,
            "indexed_pages": 306,
            "monthly_visitors": 75,
            "global_rank": 29655,
            "engagement_score": 76,
            "crawl_quality_score": 89,
            "brand_completeness_score": 47,
            "link_diversity_score": 92,
            "technical_reliability_score": 78,
            "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": 1,
            "privacy_protected": false,
            "dnssec_enabled": false,
            "has_registrant_country": false,
            "registrant_country": "",
            "nameserver_count": 0,
            "status_count": 0
        }
    },
    "authority_score": 34,
    "trust_score": 57,
    "domain_tags": {
        "primary_tag": "T",
        "primary_tag_score": 75,
        "primary_candidate": "T",
        "primary_candidate_score": 75,
        "tag_codes": "T,Uncertain",
        "tags": [
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good",
                "description": "Strong trust, stability, and low-risk signals were detected.",
                "reason": "Low spam indicators plus strong trust, quality, registry, and stability signals were detected.",
                "message": "The site shows a reasonably trustworthy and stable profile.",
                "priority": 75,
                "score": 75,
                "match_percent": 75,
                "threshold_band": "strong"
            },
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown",
                "description": "External checks stayed inconclusive, so the model avoided a harder verdict.",
                "reason": "The evidence is mixed or only partially corroborated, so the system avoided a harder automated verdict.",
                "message": "The evidence is materially mixed or partially corroborated, so the model is avoiding a harder verdict.",
                "priority": 68,
                "score": 68,
                "match_percent": 68,
                "threshold_band": "strong"
            }
        ],
        "tag_breakdown": [
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good",
                "description": "Strong trust, stability, and low-risk signals were detected.",
                "reason": "Low spam indicators plus strong trust, quality, registry, and stability signals were detected.",
                "message": "The site shows a reasonably trustworthy and stable profile.",
                "priority": 75,
                "score": 75,
                "match_percent": 75,
                "threshold_band": "strong"
            },
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown",
                "description": "External checks stayed inconclusive, so the model avoided a harder verdict.",
                "reason": "The evidence is mixed or only partially corroborated, so the system avoided a harder automated verdict.",
                "message": "The evidence is materially mixed or partially corroborated, so the model is avoiding a harder verdict.",
                "priority": 68,
                "score": 68,
                "match_percent": 68,
                "threshold_band": "strong"
            },
            {
                "code": "NSFW",
                "label": "NSFW",
                "tone": "nsfw",
                "description": "Adult or explicit content is likely present.",
                "reason": "Adult-content terms, adult-service cues, or explicit-content patterns were detected.",
                "message": "No meaningful NSFW match was detected.",
                "priority": 9,
                "score": 9,
                "match_percent": 9,
                "threshold_band": "none"
            },
            {
                "code": "Infra",
                "label": "Risky infrastructure",
                "tone": "caution",
                "description": "The hosting / registrar / nameserver neighbourhood looks unusually risky.",
                "reason": "The infrastructure neighbourhood looks riskier than normal.",
                "message": "Infrastructure risk does not currently stand out.",
                "priority": 3,
                "score": 3,
                "match_percent": 3,
                "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"
            }
        ],
        "nsfw_score": 9,
        "trust_score": 58,
        "manual": {
            "has_changes": false,
            "verified_status": "",
            "tag_codes": "",
            "rating_delta": 0,
            "authority_delta": 0,
            "trust_delta": 0,
            "note": "",
            "adjusted_by": 0,
            "adjusted_at": "",
            "lock_scores": false,
            "lock_flags": false
        },
        "summary": "Trusted (75% match) because low spam indicators plus strong trust, quality, registry, and stability signals were detected.",
        "external_intel": [],
        "external_decision": [],
        "signal_scores": [
            {
                "label": "Strongest tag heuristic",
                "value": "T · 75%",
                "tone": "good",
                "detail": "The highest raw tag match from the heuristic engine before visibility thresholds and manual overrides."
            },
            {
                "label": "Trust score",
                "value": "58/100",
                "tone": "caution",
                "detail": "Confidence derived from authority, crawl quality, stability, and risk signals."
            },
            {
                "label": "Authority score",
                "value": "34/100",
                "tone": "spam",
                "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": "79/100",
                "tone": "good",
                "detail": "Based on crawl quality, content completeness, and technical evidence."
            },
            {
                "label": "Safety score",
                "value": "100/100",
                "tone": "good",
                "detail": "Higher is safer. Direct fraud signals can heavily cap this even when SEO signals look strong."
            },
            {
                "label": "Fraud score",
                "value": "1/100",
                "tone": "good",
                "detail": "Lower is better. This reflects phishing, drainer, fake-support, fake-shop, and malware signals."
            },
            {
                "label": "Infrastructure risk",
                "value": "3/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": "9/100",
                "tone": "good",
                "detail": "Context-aware adult-content detection with medical / educational false-positive reduction."
            },
            {
                "label": "Registry stability",
                "value": "100/100",
                "tone": "good",
                "detail": "Based on age, expiry runway, and the amount of ownership / registrar churn."
            }
        ],
        "signal_sections": [
            {
                "title": "Registry & ownership",
                "items": [
                    {
                        "label": "Domain age",
                        "value": "—",
                        "tone": "unknown",
                        "detail": "Older domains generally carry more historical trust than very new ones."
                    },
                    {
                        "label": "Stability score",
                        "value": "100/100",
                        "tone": "good",
                        "detail": "Penalised by registrar, ownership, and nameserver churn."
                    },
                    {
                        "label": "Days to expiry",
                        "value": "—",
                        "tone": "unknown",
                        "detail": "Very short renewal windows can be a weak trust signal."
                    },
                    {
                        "label": "Registrar / ownership changes",
                        "value": "0 / 0",
                        "tone": "good",
                        "detail": "Frequent ownership churn can weaken trust."
                    },
                    {
                        "label": "Nameserver changes",
                        "value": "0",
                        "tone": "good",
                        "detail": "Repeated infrastructure changes can indicate instability."
                    },
                    {
                        "label": "DNSSEC / privacy",
                        "value": "DNSSEC off · privacy off",
                        "tone": "caution",
                        "detail": "DNSSEC strengthens DNS trust; privacy is neutral on its own."
                    }
                ]
            },
            {
                "title": "Reputation & search evidence",
                "items": [
                    {
                        "label": "Backlinks",
                        "value": "1",
                        "tone": "unknown",
                        "detail": "Broader backlink evidence usually improves confidence."
                    },
                    {
                        "label": "Referring domains",
                        "value": "1",
                        "tone": "unknown",
                        "detail": "Unique linking domains are more useful than raw link volume."
                    },
                    {
                        "label": "Organic keywords",
                        "value": "60",
                        "tone": "caution",
                        "detail": "Search footprint helps distinguish real sites from thin shells."
                    },
                    {
                        "label": "Indexed pages",
                        "value": "306",
                        "tone": "good",
                        "detail": "Larger index coverage usually means more evidence to classify from."
                    },
                    {
                        "label": "Brand strength",
                        "value": "47/100",
                        "tone": "caution",
                        "detail": "Stronger brand signals reduce false positives for legitimate sites."
                    },
                    {
                        "label": "Risk label",
                        "value": "GOOD",
                        "tone": "unknown",
                        "detail": "This is the raw crawl / heuristic risk label feeding the tag model."
                    }
                ]
            },
            {
                "title": "Crawl, content & technicals",
                "items": [
                    {
                        "label": "HTTP status",
                        "value": "200",
                        "tone": "good",
                        "detail": "Healthy responses make classification more reliable."
                    },
                    {
                        "label": "HTTPS / speed",
                        "value": "HTTPS OK · 327 ms",
                        "tone": "good",
                        "detail": "Slow or broken technical signals weaken confidence."
                    },
                    {
                        "label": "Content words",
                        "value": "37",
                        "tone": "spam",
                        "detail": "Thin pages are harder to trust and easier to manipulate."
                    },
                    {
                        "label": "Schema / structure",
                        "value": "0 schema · meta · no H1",
                        "tone": "caution",
                        "detail": "Structured markup and basic on-page hygiene improve quality confidence."
                    },
                    {
                        "label": "Links on page",
                        "value": "7 internal · 3 external",
                        "tone": "good",
                        "detail": "Link patterns help detect thin directories and promo pages."
                    },
                    {
                        "label": "Page speed / mobile",
                        "value": "97/100 · 74/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": 34,
    "whois": {
        "current": {
            "id": 40518,
            "domain": "elver.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": 1,
            "last_checked_at": "2026-03-19 19:03:25",
            "last_changed_at": "2026-03-19 19:03:25",
            "created_at": "2026-03-19 19:03:26",
            "updated_at": "2026-03-19 19:03:26"
        },
        "history": [
            {
                "id": 41390,
                "domain": "elver.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-19 19:03:25",
                "change_summary": "Initial WHOIS snapshot captured.",
                "created_at": "2026-03-19 19:03:25"
            }
        ],
        "signals": {
            "age_years": 0,
            "days_to_expiry": null,
            "days_since_last_registry_update": null,
            "stability_score": 100,
            "registrar_changes": 0,
            "ownership_changes": 0,
            "nameserver_changes": 0,
            "status_changes": 0,
            "history_entries": 1,
            "privacy_protected": false,
            "dnssec_enabled": false,
            "has_registrant_country": false,
            "registrant_country": "",
            "nameserver_count": 0,
            "status_count": 0
        }
    },
    "discovered_domain": {
        "id": 136529,
        "domain": "elver.me",
        "first_seen_at": "2026-03-16 03:50:03",
        "last_crawled_at": "2026-03-19 19:03:28",
        "last_title": "elver.me",
        "last_http_status": 200,
        "discovered_from_domain": "uses.tech",
        "depth": 0,
        "backlinks_count": 1,
        "rating_cache": 52,
        "spam_score": 34,
        "risk_label": "good",
        "category_name": "Personal: Portfolios & CVs",
        "primary_country_code": "",
        "internal_links_count": 7,
        "external_links_count": 3,
        "social_profiles_count": 1,
        "content_word_count": 37,
        "title_quality_score": 65,
        "has_meta_description": 1,
        "has_h1": 0,
        "language_code": "en-GB",
        "response_time_ms": 327,
        "robots_status": 404,
        "sitemap_status": 200,
        "sitemap_total_urls": 306,
        "quality_score": 79,
        "site_name": "",
        "canonical_domain": "",
        "favicon_present": 0,
        "schema_org_count": 0,
        "noindex_detected": 0,
        "feed_links_count": 8,
        "https_working": 1,
        "estimated_authority_score": 34,
        "trust_score": 85,
        "nsfw_score": 9,
        "overall_rank_estimate": 23124,
        "primary_tag": "",
        "tag_codes": "",
        "manual_verified_status": "",
        "manual_tag_codes": "",
        "manual_rating_delta": 0,
        "manual_authority_delta": 0,
        "manual_trust_delta": 0,
        "manual_note": null,
        "manual_adjusted_by": null,
        "manual_adjusted_at": null,
        "manual_lock_scores": 0,
        "manual_lock_flags": 0,
        "crawl_blocked": 0,
        "crawl_blocked_by": "",
        "crawl_blocked_reason": null,
        "safety_score": 100,
        "fraud_score": 1,
        "legitimacy_score": 34,
        "infrastructure_risk_score": 3,
        "score_confidence": 100,
        "tag_confidence": 72,
        "category_confidence": 88,
        "deep_crawl_pages": 50,
        "resolved_ip": "35.157.26.135",
        "category_candidates_json": "[{\"category\":\"Personal: Portfolios & CVs\",\"score\":88}]",
        "page_signals_json": "[{\"path\":\"/weeknotes/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":1959,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes Weeknotes 246: See some Pandas 15th March, 2026 Weeknotes 245: Stranded 8th March, 2026 Weeknotes 244: Context bloat 1st March, 2026 Weeknotes 243: Pretty big re-organisation 22nd February, 2026 Weeknotes 242: Happening regardless 15th February, 2026 Weeknotes 241: My DNS problem 8th February, 2026 Weeknotes 240: Always use hot glue 1st February, 2026 Weeknotes 239: Inevitable to some degree 25th January, 2026 Weeknotes 238: Filament backup 18th January, 2026 Weeknotes 237: aka paving slab 11th January, 2026 Weeknotes 236: ACME challenge 4th January, 2026 Weeknotes 235: Magnets 28th December, 2025 Weeknotes 234: Background sounds 21st December, 2025 Weeknotes 233: Joe Pesci 14th December, 2025 Weeknotes 232: Your blog is dead to\",\"classification_terms\":[\"weeknotes\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/blog/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":491,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Blog Running custom Ruby with Cypress 30th April, 2021 TIL about Markdown reference style links 13th March, 2021 Converting ebook formats with ebook-convert 28th February, 2021 Combine PDFs on the command line with pdfunite 30th January, 2021 Project specific .gemrc files using the GEMRC environment variable 6th December, 2020 Vim plugins don&#39;t have to be hard 20th November, 2020 RSpec-like doc format output in Elixir tests 24th October, 2020 Using gitattributes to improve git output 30th September, 2020 How to get a list of filenames from a Plex playlist 31st August, 2020 Renaming files Vim-style 12th July, 2020 Get video URLs from a YouTube playlist 11th June, 2020 Fixing commits with git commit --fixup and git rebase --autosquash 4t\",\"classification_terms\":[\"blog\",\"about\",\"links\"],\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/projects/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":17,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Projects Canon LP-E5 battery holder for Gridfinity Touch ID Trackpad build\",\"classification_terms\":[\"projects\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/uses/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":854,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses /Uses *Last updated: 14th December 2025* I really enjoy reading about other people&rsquo;s setups. I read uses this for years (when it was called The Setup) and ZSA Technology Labs (makers of the ErgoDox EZ) also have a similar &ldquo;people&rdquo; page where they interview users of their keyboards. And, of course, Wes Bos popularized the /uses page idea. Here is mine. Hardware COMPUTER &ndash; Apple MacBook Pro M4 14&quot; with 48GB memory and 2TB disk in Space Black. MONITOR &ndash; Apple Studio Display with regular glass. Almost everything I&rsquo;ve been waiting for since 2016. Time to get rid of the disappointing ASUS PB279Q. The speakers are very good, but it&rsquo;s true, the webcam is not. KEYBOARD &ndash; Vortexgear Pok3r keyboard\",\"classification_terms\":[\"uses\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/feeds/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":36,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Feeds Subscribe to everything or individual sections. Everything RSS Atom JSON Feed weeknotes only RSS Atom JSON Feed blog only RSS Atom JSON Feed uses changelog RSS Atom JSON Feed\",\"classification_terms\":[\"feeds\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/weeknotes/246-see-some-pandas/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":421,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 246 15th March, 2026“See some Pandas” A is back! I drove down to Heathrow on Saturday to collect her and her friend. Thank god that is over. Travelling via Bangladesh (Dhaka) and then China (Kunming and Chengdu) is not the traditional way to get back to the UK from Sri Lanka, but getting home safely whilst avoiding the Middle East, and seeing some Pandas as part of the process made the journey worthwhile I&rsquo;m told. FontCrafter &ndash; Make a font from your handwriting. Now the text on my computer is unreadable too. I spent a little time this week looking at &ldquo;map stuff&rdquo; which mostly comprised Leaflet.js and OpenStreetMap. Both impressive feats of time and energy. OpenStreetMap in particular astonished me with all\",\"classification_terms\":[\"weeknotes/246-see-some-pandas\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/weeknotes/245-stranded/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":826,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 245 8th March, 2026“Stranded” You&rsquo;ll be glad to know I&rsquo;ve had neither the time nor headspace to worry about AI this week. This week has been another shit one. After all hell broke lose in the Middle East last Saturday, A, who was meant to get home from her holiday on Wednesday, became stranded instead. This was very stressful as flights became few and expensive due to the closed air space in the region. The worst part is the not knowing. Oh, and don&rsquo;t rely rely on anyone you&rsquo;ve paid to help or even give the slightest shit either. ATOL protection will be getting tested when she eventually gets back. Happy Birthday to me 🥳 I installed Dockhand this week to give me a better overview of my Docker containers. I\",\"classification_terms\":[\"weeknotes/245-stranded\",\"about\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/244-context-bloat/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":654,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 244 1st March, 2026“Context bloat” I discovered that not only is Oban Web now free but it also works with the fairly recent SQLite support. This is cool because for small side projects I&rsquo;ve been increasingly interested in using SQLite. And having a web interface to jobs is a massive help. Speaking of SQLite. I am increasingly of the opinion that almost all &ldquo;self-hosted&rdquo; software should start with SQLite and offer other databases as an alternative. It makes deployment easier. Backups are easier. Who wants to run a single instance of MySQL just for that one thing? The First Release Candidate of Expert, the Elixir LSP. Excited to try this out! treekei &ndash; &ldquo;A file tree with line counts&rdquo; Another tree\",\"classification_terms\":[\"weeknotes/244-context-bloat\",\"support\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/243-pretty-big-re-organisation/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":831,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 243 22nd February, 2026“Pretty big re-organisation” You may or may not have noticed that I shipped a pretty big re-organisation of my &ldquo;web presence&rdquo; this week. The separate weeknotes website where you would&rsquo;ve been reading this before is no more. That is now a section on here at elver.me/weeknotes/. The blog from jordanelver.co.uk has also been consolidated here. Leaving that website as more of a work/calling card kind of thing. I intend to use https://elver.me for the majority of the stuff I publish online. I&rsquo;ve added redirects for everything I could think of, but it is of course possible I missed one (thank you Harry for pointing one out already!). If you are subscribed to any feeds and you got duplicate\",\"classification_terms\":[\"weeknotes/243-pretty-big-re-organisation\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/242-happening-regardless/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":1271,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 242 15th February, 2026“Happening regardless” This week is very AI/LLM heavy for which I apologise. It feels as if it is dominating my life. That&rsquo;s not even hyperbole. Every conversation I have seems to end up talking about it some how, even with &ldquo;normal&rdquo; people who don&rsquo;t have skin in the game. It&rsquo;s amazing. It&rsquo;s awful. It&rsquo;s happening regardless. This week&rsquo;s project was to setup SSO (Single Sign-on) for my services at home. I have ignored Single Sign-on for years, not having really had to deal or come into contact with it at all. The name seems fairly self-describing, but it is also quite a nebulous term for software that allows you to authenticate a user and have them &ldquo;logged\",\"classification_terms\":[\"weeknotes/242-happening-regardless\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":2},{\"path\":\"/weeknotes/241-my-dns-problem/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":1147,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 241 8th February, 2026“My DNS problem” My DNS problem took a step forward when I realised that I might be able to solve it, again perhaps temporarily, without having to actually setup a proper DNS server &ndash; which I seem to be constantly putting off. That fix is NextDNS. NextDNS protects you from all kinds of security threats, blocks ads and trackers on websites and in apps and provides a safe and supervised Internet for kids — on all devices and on all networks. I&rsquo;ve been a NextDNS user on and off for a few years. I never really fully committed to it though despite being impressed by the whole idea and implementation. The &ldquo;fix&rdquo; is that NextDNS has a feature called Rewrites which are basically DNS mappings f\",\"classification_terms\":[\"weeknotes/241-my-dns-problem\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":2},{\"path\":\"/weeknotes/240-always-use-hot-glue/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":825,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 240 1st February, 2026“Always use hot glue” The Mecha Comet looks like a cool little handheld computer which I would never use. Make Ghostty look as much like iTerm as possible Thanks to help from my mate Claude, I now have Ghostty configured to match iTerm with only a tiny difference (that I&rsquo;ve noticed so far) so I&rsquo;m moving over to give it a proper try. typr Most Beautiful Typing practice plugin for Neovim with dashboard This does look very nice. An unfortunate event: bleach on my new black hoodie 🙀 First I attempted to colour it in using black sharpie. That resulted in the coloured in bit being too black. So I resorted to dyeing it. No cigar. It is now a gym hoodie. I &ldquo;fixed&rdquo; my Soundcore speaker again.\",\"classification_terms\":[\"weeknotes/240-always-use-hot-glue\",\"help\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":1,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/239-inevitable-to-some-degree/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":1340,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 239 25th January, 2026“Inevitable to some degree” Remember I was going to try a try a lo-fi approach to using a proper domain on my home network? Well I have now got that working, and with a little sprinkle of DNS-01 ACME challenge I&rsquo;ve also got legit Let&rsquo;s Encrypt certificates for all my services, which will just work everywhere (but, at the moment, you know, just on this computer). I chose the simplest option for moving forward with this which was to get myself a brand spanking new domain name. After many fraught hours trying to find something not shit I bit the bullet and registered a new domain with our friends Porkbun. I wasn&rsquo;t intending to set everything up straight away but I suddenly realised out of nowh\",\"classification_terms\":[\"weeknotes/239-inevitable-to-some-degree\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/238-filament-backup/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":1324,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 238 18th January, 2026“Filament backup” Although I now have a slight reluctance to print for fear of something going wrong I decided to go ahead and print a AMS Lite top mount. This is so that you can mount the AMS above the printer, to save space. This is a long print with multiple plates, so I got to test out the automatic filament switching capabilities of the AMS Lite and A1 for the first time as the spool I was using did not have enough filament on it to complete the job. How this is supposed to work is that if you have another spool of the exact same material and colour on the AMS Lite it will automatically switch once the current one is used up. This required enabling &ldquo;AMS filament backup&rdquo; in the AMS settings.\",\"classification_terms\":[\"weeknotes/238-filament-backup\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/237-aka-paving-slab/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":891,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 237 11th January, 2026“aka paving slab” Monday came, back to work for many. I too, was glad to be back into my normal routine, for as long as that can last. Hive by Basic Apple Guy &ndash; new year, new wallpaper. Not only does it make your computer look nice but it also saves money as setting a new wallpaper feels like getting a new computer. Elon&rsquo;s Spies by Tortoise Investigates &ndash; You know, I think this Elon guy might not be a good person. If the Nazi salute wasn&rsquo;t enough for you, maybe this will be. There have been many reports on Reddit of Bambu A1s doing a tiny bit of melting 🔥 This is apparently caused by a faulty NTC thermister component which likes to get very hot and has, on occasion, melted through the\",\"classification_terms\":[\"weeknotes/237-aka-paving-slab\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/236-acme-challenge/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":1129,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 236 4th January, 2026“ACME challenge” A thousand apologies to those whose Monday back at work was unbearable without these weeknotes. I am but human. The converter for my Kaweco Brass Sport arrived as did a broader nib and I&rsquo;m now much happier writing with this pen. Starlink to Shift LEO Ultrafast Broadband Satellites into a Lower Orbit By the end of July 2025 Starlink&rsquo;s global network had 6 million customers and 110,000 of those were in the UK (up from 87,000 in 2024) – mostly in rural areas. I was surprised at how many customers Starlink has in the UK. CartoArt &ndash; this is cool to create high-quality map posters. Year Compass New year&rsquo;s resolutions don&rsquo;t work. YearCompass does - for more than a milli\",\"classification_terms\":[\"weeknotes/236-acme-challenge\",\"cart\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/235-magnets/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":651,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 235 28th December, 2025“Magnets” Christmas again. It was fine. Glad it&rsquo;s over. So is my credit card. ISS IN REAL TIME A real-time journey onboard the International Space Station This is crazily detailed. Very cool. CAD is not something I&rsquo;ve ever done with the possible exception of 1 module at College when I was 18 or 19 (although the memory is so vague that I question if it actually happened or not!). However, it has become clear that I will need to learn some sort of CAD software if I want to take this 3D printing malarkey somewhere other than download and print. There are many, many, options. I seem to have started with the most difficult option. OpenSCAD is &ldquo;The Programmers Solid 3D CAD Modeller&rdquo;, so in\",\"classification_terms\":[\"weeknotes/235-magnets\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/234-background-sounds/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":644,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 234 21st December, 2025“Background sounds” Another brief sojourn to Sheffield this week. Good times ✅ When setting up Home Assistant there are two integration choices when it comes to Zigbee connectivity: Zigbee Home Automation (ZHA), which is the &ldquo;official&rdquo; integration from the Home Assistant people, or Zigbee2MQTT (Z2M) (with the MQTT integration), which is a third party integration but has supposedly better device support, and more flexibility. I decided upon Z2M. Zigbee2MQTT requires more setup but I&rsquo;m happy to tinker to get things working. Z2M requires a separate MQTT broker &ndash; Mosquitto is the oft recommended choice, which I went with. But I did not setup authentication, because authentication is how\",\"classification_terms\":[\"weeknotes/234-background-sounds\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/233-joe-pesci/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":1226,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 233 14th December, 2025“Joe Pesci” Brick Borrow &ndash; This seems like a really good idea? I&rsquo;ve often thought that I&rsquo;d like to build some Lego sets, but I don&rsquo;t know what I&rsquo;d do with them afterwards. I don&rsquo;t particularly want a house full of Lego. Because I&rsquo;m such selfless nice guy I volunteered to take a look at someone&rsquo;s &ldquo;slow&rdquo; laptop running Windows 10. It became clear fairly quickly that wiping this thing and reinstalling Windows could only take it so far. I decided the best thing for it was an upgrade from 1TB spinning disk to 120GB SSD (only ~60GB was being used anyway). I bought a SSD for £15.49! I was thinking about buying second-hand from eBay or Vinted where they ca\",\"classification_terms\":[\"weeknotes/233-joe-pesci\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/232-your-blog-is-dead-to-me/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":1057,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 232 7th December, 2025“Your blog is dead to me” If your blog doesn&rsquo;t have a feed it is dead to me. That&rsquo;s a shame because I would like to read your blog. We picked our Christmas tree on Wednesday afternoon and it was delivered Friday evening ready to be decorated, which I cannot be arsed to do. Ho, ho, ho. I added a handy dandy Raycast script command to start 3D cameras. Once I plucked up the courage (pathetic!) to figure out how to change out half-used filament spools, for example to change to a different colour, it became clear that this was going to be a constant pain. You have to carefully tape up the filament so it doesn&rsquo;t unravel into a big disastrous mess when removing it from a spool, which is time consu\",\"classification_terms\":[\"weeknotes/232-your-blog-is-dead-to-me\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":2},{\"path\":\"/weeknotes/231-on-a-roll/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":1217,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 231 30th November, 2025“On a roll” The replacement screen for which I raised a PayPal dispute was received and works, that&rsquo;s the end of that particular saga. Now that the coin batteries in my home automation devices are starting to run out, and after reading about that impressive project to build a sensor from scratch (which uses a AAA battery) I&rsquo;m starting to realise that rechargeable AAA batteries may be the way forward, if possible. Coin batteries seem cheaper, but if you buy decent ones it adds up, and marketplaces seem full of junk. Star Trek: U.S.S. Enterprise NCC-1701-D™ - Christmas is coming, and if you need some ideas, I&rsquo;m just saying. The button on the speaker I fixed seems to be playing up again. I&rs\",\"classification_terms\":[\"weeknotes/231-on-a-roll\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":2},{\"path\":\"/weeknotes/230-broken-web/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":735,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 230 23rd November, 2025“Broken web” My advice, never get sick. Another example of a broken web. Why do you go to IKEA&rsquo;s website? Is it to read the latest news on the world famous IKEA meatball (that is a real example!)? No, it’s to browse and purchase the products IKEA sell. Which part of the home page loads last on ikea.com? You guessed it, the link to their online store. Absolute madness. Once again, you are welcome. I purchased a Tapo C110 camera this week for £16.99. I was astonished at how cheap it was. I wasn&rsquo;t expecting much, but it&rsquo;s genuinely fantastic for the money. It was easy to set-up, streams great via their app, has night vision, and you can access the camera streams via RTSP should be so inclined\",\"classification_terms\":[\"weeknotes/230-broken-web\",\"news\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/229-wildly-inefficient/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":415,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 229 16th November, 2025“Wildly inefficient” No Game Boy news this week. Waiting on parts. You&rsquo;re welcome. Would you like to own a muppet? (via Simple Bits). We had cause to use the NHS this week. The first doctor we saw was fantastic. She was empathetic, and seemed to really care. The system seems wildly inefficient though. The doctor navigated the bureaucracy in order to arrange an ultrasound, which necessitated moving departments, which meant giving all the same information a second time, and performing all the same tests again. And then no scan. We will have to wait and see what happens 😬 As a nation, we accept wild inefficiency readily. Like a national past time. The NHS is something to be very proud of, but you can lov\",\"classification_terms\":[\"weeknotes/229-wildly-inefficient\",\"news\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/228-all-my-friends/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":650,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 228 9th November, 2025“All my friends” My latest trip down South was successful and restorative &ndash; LCD Soundsystem were right. My usual anxiety about the journey to and fro once again proved to be incorrect &ndash; it was fine, with the exception of the upper back soreness I got from all the driving. I&rsquo;m looking forward to visiting for the final time this year around Christmas time. Springs and Bounces in Native CSS The magic of the linear() timing function. I&rsquo;ve been manually uploading torrent files to my web client, one at a time, for far too long. So this week I decided I&rsquo;d had enough and wanted an easy way to perform this task. Ideally I wanted something at the macOS system level where you could right c\",\"classification_terms\":[\"weeknotes/228-all-my-friends\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/227-game-boy-week/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":1653,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 227 2nd November, 2025“Game Boy week” Google pulls the plug on first and second gen Nest Thermostats Affected devices have been unpaired and removed from the Nest app I have a 3rd Generation model so I guess I&rsquo;m next. From Helen Lewis: I Watched Stand-Up in Saudi Arabia Burr’s words reflect the bland incuriosity that accrues with wealth. As I ate dinner one night at the Ritz-Carlton, in a Chinese restaurant overlooking the indoor swimming pool, I reflected that the promise of a five-star hotel is insulation, a cocoon against the outside world. A rich person—a successful comedian, say—could glide from the business-class lounge to the front of the aircraft to an air-conditioned limo to a luxury hotel where your dinner is inte\",\"classification_terms\":[\"weeknotes/227-game-boy-week\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/226-am-i-a-real-boy/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":1172,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 226 26th October, 2025“Am I a real boy?” We went to see The Divine Comedy as planned. They were fantastic and played most of the hits I wanted to hear 👏 Our friends visited as planned and we took the opportunity to take them to Whitby for the day. We hadn&rsquo;t been there before either. It was very windy and very cold, which did somewhat dampen our experience. Still, it was nice enough and we had fish and chips which is the law when you visit Whitby. Comparing GPS coordinates in Elixir When working with GPS data, comparing two coordinates directly is unreliable. Due to natural precision loss and device variations, even two readings from the same spot can differ slightly in latitude and longitude. Instead of checking for equalit\",\"classification_terms\":[\"weeknotes/226-am-i-a-real-boy\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/225-vat-of-bolognaise/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":504,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 225 19th October, 2025“Vat of Bolognaise” The car seems to have developed &ldquo;a noise&rdquo; since going to garage. Good times. Never try. My Approach to Building Large Technical Projects &ndash; Writing a terminal emulator from scratch has got to be up there in terms of both large and complex. Impressive. Such is the progress of the LLM landscape, that as soon as I&rsquo;d finished reading How I&rsquo;m using coding agents in September, 2025 I moved straight onto Superpowers: How I&rsquo;m using coding agents in October 2025 and it had progressed even more. I find that AI models are especially prone to handing me walls of text when they think they&rsquo;re &ldquo;done&rdquo;. Me too. I really need to work on prompting Claude\",\"classification_terms\":[\"weeknotes/225-vat-of-bolognaise\",\"terms\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/224-one-for-my-therapist/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":533,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 224 12th October, 2025“One for my therapist” This is probably one for my therapist, but I genuinely screamed at my printer this week. A proper, guttural, scream. You&rsquo;ve guessed it, it would not print. It wouldn&rsquo;t print because it was not connected to the network. I couldn&rsquo;t work out why until the next day when I noticed that my Kindle was also offline. The printer and Kindle would not connect to the network but all the other devices in the house seemed to be fine &ndash; strange. Then I realised that those two devices only work on 2.4GHz WiFi, whilst the everything else can work on both 2.4GHz and 5GHz. 2.4GHz WiFi was not working for some reason. A reboot of the router fixed the issue. Computers, man. Vibing a\",\"classification_terms\":[\"weeknotes/224-one-for-my-therapist\",\"api\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/223-now-there-are-graphs/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":1053,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 223 5th October, 2025“Now there are graphs” I had to reboot my Apple TV remote again, same issue as last time, the volume buttons stopped working. It had a good 832 days to be fair. DataGrip Is Now Free for Non-Commercial Use &ndash; I remember liking DataGrip when I used a trial a few years ago. Might be worth a look. Coverband A gem to measure production code usage, showing a counter for the number of times each line of code is executed. Coverband allows easy configuration to collect and report on production code usage. It reports in the background via a thread, can be used as Rack middleware, or can be manually configured to meet any need. I always forget this tool exists, so noting it here to remember. Package Managers are Ev\",\"classification_terms\":[\"weeknotes/223-now-there-are-graphs\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/222-humble-tumble/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":718,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 222 28th September, 2025“Humble tumble” &ldquo;Where Does Book Data Come from?&rdquo; &ndash; I expected that this question would be fairly involved, and it is. My Virgin Media broadband contract came up for renewal 🙀 I&rsquo;ve been anticipating this moment since we signed our first contract. Unfortunately, we had little choice. They are the only viable choice choice on our street. Openreach and City Fibre are constantly &ldquo;planning&rdquo; but have failed to &ldquo;build&rdquo; so far. Surprisingly, Virgin were not quite as bad I had anticipated, still the cost to carry on without entering a new contract would have gone up to £83.84 per month from £48.37 😢 The renewal offered for a new contract was ~£47 a month. I managed to\",\"classification_terms\":[\"weeknotes/222-humble-tumble\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/221-firm-grip/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":820,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 221 21st September, 2025“Firm grip” The DHH Problem — Remains as relevant today as when it was first given. More so in fact. I don&rsquo;t think I was ready to hear this back in 2014. Maybe I wasn&rsquo;t paying attention. Maybe I didn&rsquo;t fully grasp the situation. I have a firm grip now. Rust is making baby steps into the git codebase My broken tooth was finally fixed yesterday. I&rsquo;m £240 down, but happy that it seems to be sorted albeit with some lingering discomfort. A deep dive into Cloudflare’s September 12, 2025 dashboard and API outage The API calls were managed by a React useEffect hook, but we mistakenly included a problematic object in its dependency array. Because this object was recreated on every state or p\",\"classification_terms\":[\"weeknotes/221-firm-grip\",\"api\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/220-fountain-pen-guy/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":838,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 220 14th September, 2025“Fountain pen guy” Workflow, workflow, workflow &ndash; I&rsquo;ve now moved over to Snacks.picker from Telescope and I&rsquo;m already 110% more productive, and ready for AI to take my job. My flat went up for sale and not a single viewing so far. I wasn&rsquo;t expecting it to exactly fly off the shelf, but I was expecting at least one viewing by now. I guess it&rsquo;s always a waiting game with selling houses and/or it&rsquo;s overpriced. I will need to give it some time at least before making any changes. My visit to the West Country was a successful one. The drive both up and down were uneventful, which is how drives should be. I did a surprising amount of driving whilst there too, especially compare\",\"classification_terms\":[\"weeknotes/220-fountain-pen-guy\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/219-differentiators/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":907,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 219 7th September, 2025“Differentiators” The Nemotode army and sticky traps are having some effect. Things were said: After my initial excitement over Alien: Earth I think I reluctantly need to admit to myself that it isn&rsquo;t holding together as I had hoped. I was wrong. Very wrong. Episode 5 is excellent. I&rsquo;d like to take this opportunity to apologise to all involved. Lexxy: A new rich text editor for Rails When I exit a tmux session (usually by CTRL-d) tmux detaches from all sessions. I always have several sessions running at one time so I then need to to run tmux a to reattach &ndash; it&rsquo;s pretty annoying and has been bugging me for years. Well, no more. This week, I made this life changing commit. set-option -\",\"classification_terms\":[\"weeknotes/219-differentiators\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/218-botulism-opportunity/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":880,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 218 31st August, 2025“Botulism opportunity” Giving away a mattress for free is harder than you&rsquo;d think. Is a page with 218 links on it too many links? Part of me thinks I should start paginating the home page of this here website, and the other part simply cannot be arsed. The page is 5.4kB, loads fast, and renders fast &ndash; who cares? Base &ndash; &ldquo;The best SQLite database editor for macOS&rdquo; I&rsquo;ve been looking for a decent GUI SQLite tool. HTTP is not simple I often hear or see people claim that HTTP is a simple protocol. Primarily of course from people without much experience or familiarity with actual implementations. I think I personally also had thoughts in that style back when I started working with\",\"classification_terms\":[\"weeknotes/218-botulism-opportunity\",\"blog\",\"links\"],\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/217-half-assed-idea/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":610,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 217 24th August, 2025“Half-assed idea” Macrowave &ndash; &ldquo;Turn Your Mac Into a Private Radio Station&rdquo;. I realised that all of my &ldquo;ideas&rdquo; for &ldquo;apps&rdquo; are actually just single feature ideas that require me to build a whole other app in order to implement them. Not very time efficient 😆 For example, I use Callsheet to track what TV or Movies I want to watch, and it works well for that, but it doesn&rsquo;t let me view the movies on a calendar, which is what I would also like. So I did an internet code. I decided that instead of using Callsheet I would use the TMDB watchlist feature and then use their API to pull the watchlist items and output an ical which I could subscribe to. This was quite a hal\",\"classification_terms\":[\"weeknotes/217-half-assed-idea\",\"api\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/216-legally-purchased-media/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":1124,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 216 17th August, 2025“Legally purchased media” ChatGPT 5 was released last week so I gave it a try. It&rsquo;s increasingly difficult to keep up with the various different models, their versions, and how good or bad they are at various tasks, but it seems &ldquo;good&rdquo; I suppose. I was downloading some legally purchased media and had a text file of URLs to download (which I had to manually collate, will no one think of the children!) but my new AI overlord did help me out somewhat even offering to parallelize everything. cat vids.txt | parallel -j4 yt-dlp \\\\ -f &#34;bv[height=2160]+ba/best&#34; \\\\ --merge-output-format mp4 \\\\ --remux-video mp4 \\\\ --no-fixup all \\\\ -o &#39;{#}-%\\\\(title\\\\).80s.%\\\\(ext\\\\)s&#39; {} I&rsquo;ve never used\",\"classification_terms\":[\"weeknotes/216-legally-purchased-media\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/215-slopsquatting/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":696,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 215 10th August, 2025“Slopsquatting” I received a cheque (ask your parents) in the post this week. A cheque! slopsquatting A new term called slopsquatting, a form of cybersquatting where users register non-existent package names hallucinated by LLMs for unsuspecting users to install It&rsquo;s important to improve one&rsquo;s vocabulary. Via Self-Host Weekly (8 August 2025). George Arrowsmith: QA is about to become a huge bottleneck in software development. AI lets us churn out HUGE amounts of code extremely fast, but you still need to make sure it works. AI can help with testing too, but if you really want to be sure it works, you need the reassurance of human eyes on it. And human eyes don&rsquo;t scale. &ldquo;churn&rdquo; bei\",\"classification_terms\":[\"weeknotes/215-slopsquatting\",\"about\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/214-a-bit-of-care-a-bit-of-craft/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":1234,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 214 3rd August, 2025“A bit of care. A bit of craft.” August? Unacceptable. We had the misfortune of catching some of War of the Worlds with Ice Cube this week. The part where he uses &ldquo;View Source&rdquo; was my personal highlight before we turned it off. How would you transfer 1.7GB of photos to your partners computer? We&rsquo;re both on the same WiFi network, and there&rsquo;s no central shared file storage available. AirDrop is a reasonable approach isn&rsquo;t it? Peer-to-peer transfer, job done. Nope. AirDrop would consistently work until about halfway, and then just stall forever. This sort of thing makes me feel completely incompetent as both a computer person and human. In the end we used WeTransfer. That&rsquo;s rig\",\"classification_terms\":[\"weeknotes/214-a-bit-of-care-a-bit-of-craft\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":3,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/213-here-we-go-again/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":578,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 213 27th July, 2025“Here we go again” After moaning about Castro (to myself, then to friends, and here) I decided to contact their support over a weird issue I&rsquo;ve been having when using it via CarPlay. They said they were going to revisit. We&rsquo;ll see. Coding with LLMs in the summer of 2025 (an update) The fundamental requirement for the LLM to be used is: don&rsquo;t use agents or things like editor with integrated coding agents. This is interesting as it goes directly against how most people are recommending getting the most out of AI, but I find myself also leaning towards this way of working. Maybe I&rsquo;m a control freak, but unscrambling and trying to understand why the agent has done can take me longer than ste\",\"classification_terms\":[\"weeknotes/213-here-we-go-again\",\"about\",\"contact\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/212-bungie-cords/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":494,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 212 20th July, 2025“Bungie cords” Am I Becoming Irrelevant? I bought a second-hand armchair for my office on eBay. We pick it up tomorrow, and it borderline won&rsquo;t fit in my car, so that should be fun. I&rsquo;ve acquired some bungie cords which will hopefully help me bend the laws of physics. Tailwind is the worst form of CSS, except for all the others I&rsquo;m happy to report that my Monstera cuttings are doing unexpectedly well having all started to grow very nice roots. Searls of Wisdom for June 2025 We all live in prisons of our own design, and it&rsquo;s worth pondering whether being liberated from all constraints would result in true freedom or in the installation of new constraints. Christopher MacArthur Boyd | Scar\",\"classification_terms\":[\"weeknotes/212-bungie-cords\",\"help\",\"cart\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/211-10-litres-of-shower-gel/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":373,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 211 13th July, 2025“10 litres of shower gel” We travelled back from dahn sahf on Tuesday. The journey back was far less pleasant and included a surprise appearance from the low oil level warning light on my car, and a fair bit of traffic, which meant it took 6 hours instead 4. Still, the trip was a successful one having completed all the tasks we needed to do, including 8 different appointments. Some decisions to be made now. I even managed a trip to the gym one day, and to balance everything, a meal at our favourite restaurant. The trip was all much worse in my head than in reality. As usual. Have you even been anywhere if you don&rsquo;t stress about it for a couple of weeks beforehand? The recent Amazon Prime Day sale got me b\",\"classification_terms\":[\"weeknotes/211-10-litres-of-shower-gel\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/210-sorry-i-m-sweaty-it-s-genetic/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":633,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 210 6th July, 2025“Sorry I&#39;m sweaty, it&#39;s genetic!” Three more meetings with builders this week&hellip;it&rsquo;s a surprising amount of work meeting with builders and discussing extensions you can&rsquo;t really afford. Started off the week with yet another escape into the cinema, this time The Ballad of Wallis Island. I cannot say enough good things about this film. It simply doesn&rsquo;t put a foot wrong. I&rsquo;ve been a fan of Tim Key for quite a while but Tom Basden was fairly unknown to me &ndash; what a talented pair they are. Tom Basden wrote a whole album of songs for the film as well as co-writing and starring. Sian Clifford delivers as she usually does too. Loved it. On Thursday we both went to see Jurassic\",\"classification_terms\":[\"weeknotes/210-sorry-i-m-sweaty-it-s-genetic\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/209-twenty-minute-episode/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":680,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 209 29th June, 2025“Twenty minute episode” GUItignore &ndash; handy for creating your .gitignore file. MACOS ICON HISTORY &ndash; I&rsquo;ll leave it you to decide whether things have gotten better or worse. Two films at the cinema this week, very unusual. These days I&rsquo;m often reluctant to go to the cinema due to people. Leaving the house is apparently good for you though, alas. First up was 28 Years Later — I&rsquo;ve been waiting for this to come out for some time being a big fan of 28 Days Later. There are so many wangs in this film. No spoilers, but the ending was unexpected to say the least. Shout out to Cheddar Gorge (if you&rsquo;ve never been it&rsquo;s absolutely fantastic). Second was Mission: Impossible - The Fin\",\"classification_terms\":[\"weeknotes/209-twenty-minute-episode\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/208-hangxiety/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":400,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 208 22nd June, 2025“Hangxiety” I finished Station Eleven &ndash; very good indeed. A week dominated by Brighton Ruby as you&rsquo;d expect. Despite my haven&rsquo;t-been-on-a-train-in-ages anxiety the journey to and from Brighton passed without incident. Brighton remains the same; once a year is plenty. There weren&rsquo;t any &ldquo;bad talks&rdquo; from my point of view this year, but conversely nothing surprised or interested me very much either. I&rsquo;m sure that says more about me than the conference. It was great to meetup with various folk and chat about the despise demise of our profession. I was very glad that most managed to make it. As usual I came away with a feeling similar to that of &ldquo;hangxiety&rdquo; despit\",\"classification_terms\":[\"weeknotes/208-hangxiety\",\"about\",\"about me\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/207-pilgrimage/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":536,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 207 15th June, 2025“Pilgrimage” The yearly pilgrimage to Brighton for Brighton Ruby is happening next week. I&rsquo;m not particularly interested in the content (despite knowing how much works goes into organising an event like this, for which I&rsquo;m grateful). As usual it&rsquo;s an excuse to spend time with Ruby friends instead. I&rsquo;m glad that many of the usual gang are making it this year, but I need to set my expectations to avoid disappointment. People move on, jobs change, groups shift. Everything changes. I&rsquo;ve been watching Black Summer this week. If you like zombies and shooting with very little in the way of discernible story, you’ll love this. A couple of weeks ago, after talking about my side project with\",\"classification_terms\":[\"weeknotes/207-pilgrimage\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/206-powerful-and-overwhelming/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":351,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 206 8th June, 2025“Powerful and overwhelming” We met the first of our short-listed builders this week, and also visited our neighbours up the road who have had similar work done by the same company, and graciously let us have a look around. Now we nervously wait to see what the quote looks like. More meetings planned for next week. Elixir Outreach stipend for speakers and trainers &ndash; great idea! Our diet has been fairly boring for a while, necessarily so in some ways, but I decided to cook something new this week &ndash; Baked Butter Paneer (from Meera Sodha&rsquo;s Dinner). I&rsquo;m still not enamoured with Paneer (it&rsquo;s absolutely fine), but overall the dish came out well and I will likely make it again, maybe with s\",\"classification_terms\":[\"weeknotes/206-powerful-and-overwhelming\",\"company\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/205-mostly-what-i-m-watching/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":341,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 205 1st June, 2025“Mostly what I&#39;m watching” Tenderlove is at it again: Fast Allocations in Ruby 3.5. Letter to Arc members 2025 In the meantime, please know this: we’re not trying to shut Arc down. We know you use it and rely on it. Many of our family and friends do, too. This doesn&rsquo;t surprise me but at least Arc will be receiving regular updates, for now. We finally made a shortlist of builders, and contacted a number of them this week. Months and months of procrastination solved in a few hours. Love, Death &amp; Robots Season 4 got better thankfully, but still underwhelming compared to previous seasons. Recommended episodes: Zeke Found Religion, The Other Large Thing, and For He Can Creep. The Last of Us Season 2 end\",\"classification_terms\":[\"weeknotes/205-mostly-what-i-m-watching\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/204-randomly-joined/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":359,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 204 25th May, 2025“Randomly joined” Still waiting on parcels. I live for parcels. I was bored and retail therapy was the solution. Instead of doing something productive I spent the time trawling eBay and Vinted for the perfect Game Boy games. They will arrive, I&rsquo;ll test them, and then never pick them up again. TIL I learnt that you easily define a custom exception and have Phoenix automatically return a 404 for it. Define the exception module. defmodule Foo do defmodule BarError do defexception [:message] end end And then implement Plug.Exception for it. defimpl Plug.Exception, for: Foo.BarError do def status(_exception), do: 404 def actions(_exception), do: [] end Now when Foo.BarError is raised it will result in a 404 pag\",\"classification_terms\":[\"weeknotes/204-randomly-joined\",\"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\":[\"plausible.io\"],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/weeknotes/203-bug-ridden-forms/\",\"status\":200,\"title\":\"elver.me\",\"word_count\":798,\"summary_text\":\"elver.me elver.me elver.me /weeknotes /blog /projects /uses Weeknotes 203 18th May, 2025“Bug-ridden forms” Still no closer to getting my parcel. Can you believe I&rsquo;ve placed a third order because I&rsquo;m just sick of waiting and there&rsquo;s no way to retrieve my parcel. I&rsquo;m aware it will now almost certainly be delivered. A quick look at LiveView&rsquo;s LiveDebugger! &ndash; cool projec",
        "score_reasons_json": "[]",
        "route_domain": "elver.me",
        "display_domain": "elver.me"
    },
    "explainability": {
        "summary": "elver.me currently scores 64/100. The score is being shaped by a mixed signal profile rather than one dominant factor. Evidence confidence is strong enough for a relatively stable read. This is an estimated profile rather than a manually tracked one. Crawler access looks clean.",
        "badges": [
            {
                "label": "Profile",
                "value": "Estimated profile",
                "tone": "unknown",
                "detail": null
            },
            {
                "label": "Evidence confidence",
                "value": "High confidence",
                "tone": "good",
                "detail": "100/100"
            },
            {
                "label": "Traffic confidence",
                "value": "Low confidence",
                "tone": "risk",
                "detail": "34/100"
            },
            {
                "label": "Crawler access",
                "value": "Clean visibility",
                "tone": "good",
                "detail": null
            }
        ],
        "weighted_contributions": [
            {
                "label": "Quality system",
                "points": "+24.5",
                "tone": "good",
                "detail": "Technical quality, crawl depth, page structure, and implementation hygiene. Current subsystem score: 72/100."
            },
            {
                "label": "Reputation system",
                "points": "+12.6",
                "tone": "risk",
                "detail": "Authority, search visibility, reach, engagement, and registry stability. Current subsystem score: 37/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": "-5.0",
                "tone": "risk",
                "detail": "Safety thresholds capped the final score until the risk profile improves."
            }
        ],
        "evidence_cards": [
            {
                "label": "Authority and trust",
                "value": "34/100 · trust 57/100",
                "tone": "caution",
                "detail": "75 monthly visitors, 60 organic keywords, brand completeness 47/100, engagement 76/100."
            },
            {
                "label": "Backlink and search evidence",
                "value": "1 referring domains",
                "tone": "good",
                "detail": "1 backlinks across 1 referring domains. Diversity 92/100; spam penalty 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 1/100",
                "tone": "good",
                "detail": "Primary tag T · safety 100/100 · fraud 1/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": [
            "Traffic and reach estimates are still low confidence, so commercial scale signals may move after more evidence is collected."
        ],
        "freshness": [
            {
                "label": "Crawl evidence",
                "value": "2026-03-19 19:03:28",
                "tone": "risk",
                "detail": "Crawl and page content sample. Age: 27d ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-03-19 19:03:25",
                "tone": "risk",
                "detail": "Registry profile and stability signals. Age: 27d ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-04-15 22:39:37",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-04-15 22:39:37",
                "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": 69,
        "fraud_clamp_penalty": 5,
        "final_score": 64
    },
    "insight_snapshot": {
        "version": 1,
        "generated_at": "2026-04-15T22:39:37+00:00",
        "domain": "elver.me",
        "display_name": "elver.me",
        "is_tracked": false,
        "is_estimated": true,
        "overall_score": 64,
        "authority_score": 34,
        "trust_score": 57,
        "safety_score": 100,
        "fraud_score": 1,
        "confidence_score": 100,
        "traffic_confidence": 34,
        "last_crawled_at": "2026-03-19 19:03:28",
        "crawl_blocked": false,
        "summary": "elver.me currently scores 64/100. The score is being shaped by a mixed signal profile rather than one dominant factor. Evidence confidence is strong enough for a relatively stable read. This is an estimated profile rather than a manually tracked one. Crawler access looks clean.",
        "badges": [
            {
                "label": "Profile",
                "value": "Estimated profile",
                "tone": "unknown",
                "detail": null
            },
            {
                "label": "Evidence confidence",
                "value": "High confidence",
                "tone": "good",
                "detail": "100/100"
            },
            {
                "label": "Traffic confidence",
                "value": "Low confidence",
                "tone": "risk",
                "detail": "34/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": [
            "Traffic and reach estimates are still low confidence, so commercial scale signals may move after more evidence is collected."
        ],
        "freshness": [
            {
                "label": "Crawl evidence",
                "value": "2026-03-19 19:03:28",
                "tone": "risk",
                "detail": "Crawl and page content sample. Age: 27d ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-03-19 19:03:25",
                "tone": "risk",
                "detail": "Registry profile and stability signals. Age: 27d ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-04-15 22:39:37",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-04-15 22:39:37",
                "tone": "good",
                "detail": "Estimated trend derived from current profile and crawl signals. Age: 0s ago."
            },
            {
                "label": "Audience geography",
                "value": "Not captured yet",
                "tone": "unknown",
                "detail": "Audience mix is estimated from available signals rather than first-party audience logs."
            }
        ],
        "top_tags": [
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good"
            },
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown"
            }
        ]
    },
    "is_tracked": false,
    "is_estimated": true,
    "live_state": {
        "status": "processing",
        "status_label": "Cache build running",
        "message": "The refreshed page cache is still being built for this domain.",
        "updated_at": "2026-04-16T02:21:59+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/elver.me/refresh",
        "isGuestCooldown": false,
        "cooldownSeconds": 0
    },
    "urlscan_report": {
        "domain": "elver.me",
        "status": "error",
        "submitted_at": "2026-03-19T19:03:25+00:00",
        "completed_at": null,
        "last_checked_at": "2026-03-19T19:03:25+00:00",
        "last_error": "Rate limit for 'public' exceeded. Limit is 5000 per day. Reset in 17793 seconds.",
        "submitted_url": "https://elver.me/",
        "uuid": "",
        "result_url": "",
        "api_result_url": "",
        "visibility": "public",
        "summary": "urlscan.io scan submission failed.",
        "report": [],
        "report_summary": [],
        "is_fresh": false,
        "can_retry": true,
        "poll_after_seconds": 20
    }
}