{
    "ready": true,
    "site": {
        "id": 0,
        "domain": "abandon.ie",
        "display_name": "Abban Dunne",
        "primary_country_code": "IE",
        "category_name": "E-commerce"
    },
    "metrics": {
        "global_rank": 40864,
        "country_rank": 79,
        "category_rank": 297,
        "daily_pageviews_per_visitor": 4.51,
        "daily_time_on_site_seconds": 317,
        "bounce_rate": 36.34,
        "search_visits_percent": 36.41,
        "total_sites_linking_in": 2,
        "monthly_unique_visitors": 62,
        "recorded_at": "2026-03-18 23:18:48"
    },
    "audit": {
        "score": 79
    },
    "traffic_sources": {
        "direct_percent": 26.92,
        "search_percent": 32.63,
        "social_percent": 8.42,
        "referral_percent": 8.47,
        "email_percent": 10,
        "paid_percent": 13.56
    },
    "seo_profile": {
        "backlinks_total": 2,
        "referring_domains": 2,
        "dofollow_backlinks_percent": 100,
        "organic_keywords": 60,
        "indexed_pages": 88,
        "page_speed_score": 100,
        "mobile_friendliness_score": 77,
        "authority_score": 20,
        "spam_risk_score": 48
    },
    "crawl_report": {
        "robots_status": 404,
        "sitemap_status": 200,
        "sitemap_total_urls": 88,
        "crawl_blocked": false,
        "crawl_blocked_by": "",
        "crawl_blocked_reason": "",
        "notes": [
            "Meta description is missing.",
            "robots.txt could not be confirmed."
        ],
        "created_at": "2026-03-18 23:18:48"
    },
    "keywords": [
        {
            "keyword": "Abban Dunne",
            "position": 26,
            "search_engine": "Estimated",
            "checked_at": "2026-04-17 10:41:44",
            "is_estimated": true
        },
        {
            "keyword": "Abban Dunne e-commerce",
            "position": 28,
            "search_engine": "Estimated",
            "checked_at": "2026-04-17 10:41:44",
            "is_estimated": true
        },
        {
            "keyword": "Abban Dunne reviews",
            "position": 30,
            "search_engine": "Estimated",
            "checked_at": "2026-04-17 10:41:44",
            "is_estimated": true
        },
        {
            "keyword": "abban",
            "position": 32,
            "search_engine": "Estimated",
            "checked_at": "2026-04-17 10:41:44",
            "is_estimated": true
        },
        {
            "keyword": "dunne",
            "position": 34,
            "search_engine": "Estimated",
            "checked_at": "2026-04-17 10:41:44",
            "is_estimated": true
        },
        {
            "keyword": "abandon",
            "position": 36,
            "search_engine": "Estimated",
            "checked_at": "2026-04-17 10:41:44",
            "is_estimated": true
        },
        {
            "keyword": "fix",
            "position": 38,
            "search_engine": "Estimated",
            "checked_at": "2026-04-17 10:41:44",
            "is_estimated": true
        },
        {
            "keyword": "your",
            "position": 40,
            "search_engine": "Estimated",
            "checked_at": "2026-04-17 10:41:44",
            "is_estimated": true
        }
    ],
    "rating": {
        "overall": 42,
        "label": "Average",
        "breakdown": [
            {
                "label": "Technical foundation",
                "score": 13,
                "max": 18
            },
            {
                "label": "Authority & trust",
                "score": 6,
                "max": 30
            },
            {
                "label": "Reach & market presence",
                "score": 3,
                "max": 18
            },
            {
                "label": "Search visibility",
                "score": 3,
                "max": 12
            },
            {
                "label": "Engagement & retention",
                "score": 9,
                "max": 10
            },
            {
                "label": "Channels & diversification",
                "score": 4,
                "max": 6
            },
            {
                "label": "Registry stability",
                "score": 3,
                "max": 6
            },
            {
                "label": "Quality system",
                "score": 72,
                "max": 100
            },
            {
                "label": "Reputation system",
                "score": 34,
                "max": 100
            },
            {
                "label": "Safety system",
                "score": 100,
                "max": 100
            },
            {
                "label": "Evidence confidence",
                "score": 100,
                "max": 100
            },
            {
                "label": "External intelligence",
                "score": 50,
                "max": 100
            }
        ],
        "authority_score": 20,
        "quality_score": 72,
        "reputation_score": 34,
        "safety_score": 100,
        "confidence_score": 100,
        "fraud_score": 0,
        "authority_signals": {
            "backlinks": 2,
            "referring_domains": 2,
            "organic_keywords": 60,
            "indexed_pages": 88,
            "monthly_visitors": 62,
            "global_rank": 40864,
            "engagement_score": 83,
            "crawl_quality_score": 93,
            "brand_completeness_score": 62,
            "link_diversity_score": 93,
            "technical_reliability_score": 84,
            "whois_score": 45,
            "whois_age_years": 0,
            "whois_stability_score": 100,
            "spam_penalty": 6
        },
        "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": 20,
    "trust_score": 36,
    "domain_tags": {
        "primary_tag": "Uncertain",
        "primary_tag_score": 68,
        "primary_candidate": "Uncertain",
        "primary_candidate_score": 68,
        "tag_codes": "Uncertain,T,C",
        "tags": [
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown",
                "description": "External checks stayed inconclusive, so the model avoided a harder verdict.",
                "reason": "The evidence is mixed and external checks stayed inconclusive, so the system kept an uncertainty buffer instead of a harder automated verdict.",
                "message": "The evidence is materially mixed or partially corroborated, so the model is avoiding a harder verdict.",
                "priority": 68,
                "score": 68,
                "match_percent": 68,
                "threshold_band": "strong"
            },
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good",
                "description": "Strong trust, stability, and low-risk signals were detected.",
                "reason": "Low spam indicators plus strong trust, quality, registry, and stability signals were detected. Showing the stored external intelligence snapshot. New search and review intelligence only runs after a visitor uses Refresh data manually.",
                "message": "The site shows a reasonably trustworthy and stable profile.",
                "priority": 64,
                "score": 64,
                "match_percent": 64,
                "threshold_band": "strong"
            },
            {
                "code": "C",
                "label": "Caution",
                "tone": "caution",
                "description": "Signals are mixed or weak, so this domain should be treated carefully.",
                "reason": "Review carefully: elevated spam indicators. Showing the stored external intelligence snapshot. New search and review intelligence only runs after a visitor uses Refresh data manually.",
                "message": "The signal mix leans cautious and the site should be treated carefully until more evidence arrives.",
                "priority": 62,
                "score": 62,
                "match_percent": 62,
                "threshold_band": "strong"
            }
        ],
        "tag_breakdown": [
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown",
                "description": "External checks stayed inconclusive, so the model avoided a harder verdict.",
                "reason": "The evidence is mixed and external checks stayed inconclusive, so the system kept an uncertainty buffer instead of a harder automated verdict.",
                "message": "The evidence is materially mixed or partially corroborated, so the model is avoiding a harder verdict.",
                "priority": 68,
                "score": 68,
                "match_percent": 68,
                "threshold_band": "strong"
            },
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good",
                "description": "Strong trust, stability, and low-risk signals were detected.",
                "reason": "Low spam indicators plus strong trust, quality, registry, and stability signals were detected. Showing the stored external intelligence snapshot. New search and review intelligence only runs after a visitor uses Refresh data manually.",
                "message": "The site shows a reasonably trustworthy and stable profile.",
                "priority": 64,
                "score": 64,
                "match_percent": 64,
                "threshold_band": "strong"
            },
            {
                "code": "C",
                "label": "Caution",
                "tone": "caution",
                "description": "Signals are mixed or weak, so this domain should be treated carefully.",
                "reason": "Review carefully: elevated spam indicators. Showing the stored external intelligence snapshot. New search and review intelligence only runs after a visitor uses Refresh data manually.",
                "message": "The signal mix leans cautious and the site should be treated carefully until more evidence arrives.",
                "priority": 62,
                "score": 62,
                "match_percent": 62,
                "threshold_band": "strong"
            },
            {
                "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": 1,
                "score": 1,
                "match_percent": 1,
                "threshold_band": "none"
            },
            {
                "code": "Crypto",
                "label": "Crypto drainer risk",
                "tone": "toxic",
                "description": "Wallet-connect or seed-phrase theft patterns were detected.",
                "reason": "Wallet-connect or seed-phrase theft patterns were detected.",
                "message": "No meaningful crypto-drainer signals were detected.",
                "priority": 0,
                "score": 0,
                "match_percent": 0,
                "threshold_band": "none"
            }
        ],
        "nsfw_score": 0,
        "trust_score": 37,
        "manual": {
            "has_changes": false,
            "verified_status": "",
            "tag_codes": "",
            "rating_delta": 0,
            "authority_delta": 0,
            "trust_delta": 0,
            "note": "",
            "adjusted_by": 0,
            "adjusted_at": "",
            "lock_scores": false,
            "lock_flags": false
        },
        "summary": "Uncertain (68% match) because the evidence is mixed and external checks stayed inconclusive, so the system kept an uncertainty buffer instead of a harder automated verdict.",
        "external_intel": {
            "domain": "abandon.ie",
            "candidate_tag": "",
            "checked_at": "2026-03-18T23:19:13+00:00",
            "status": "fresh",
            "snapshot_version": 5,
            "summary": "Showing the stored external intelligence snapshot. New search and review intelligence only runs after a visitor uses Refresh data manually.",
            "search_intelligence": {
                "queries": [
                    "\"abandon.ie\" -site:abandon.ie -site:www.abandon.ie",
                    "\"abandon.ie\" official site -site:abandon.ie -site:www.abandon.ie",
                    "\"abandon.ie\" wikipedia -site:abandon.ie -site:www.abandon.ie",
                    "\"abandon.ie\" reviews OR complaints -site:abandon.ie -site:www.abandon.ie",
                    "\"abandon.ie\" reputation OR scam OR legit OR safe -site:abandon.ie -site:www.abandon.ie",
                    "\"abandon.ie\" BBB OR LinkedIn OR Crunchbase OR \"Companies House\" OR wikipedia -site:abandon.ie -site:www.abandon.ie",
                    "abandon website -site:abandon.ie -site:www.abandon.ie",
                    "abandon company -site:abandon.ie -site:www.abandon.ie",
                    "abandon wikipedia -site:abandon.ie -site:www.abandon.ie",
                    "abandon reviews -site:abandon.ie -site:www.abandon.ie",
                    "abandon complaints -site:abandon.ie -site:www.abandon.ie",
                    "abandon trustpilot -site:abandon.ie -site:www.abandon.ie"
                ],
                "providers": [
                    "duckduckgo"
                ],
                "provider_result_counts": {
                    "duckduckgo": 0
                },
                "results_found": 1,
                "external_results_found": 0,
                "used_direct_fallback": true,
                "results": [
                    {
                        "provider": "direct-domain-fallback",
                        "url": "https://abandon.ie/",
                        "host": "abandon.ie",
                        "title": "abandon.ie",
                        "snippet": "First-party fallback captured directly from the domain when public search engines returned no usable results.",
                        "is_direct_fallback": true,
                        "source_meta": {
                            "host": "abandon.ie",
                            "source_type": "official_site",
                            "label": "General web result",
                            "trust_weight": 55,
                            "evidence_weight": 26,
                            "noise_penalty": 0,
                            "requires_exact_domain_match": true,
                            "supports_positive_verdicts": false,
                            "supports_negative_verdicts": true,
                            "freshness_ttl_days": 21
                        },
                        "entity": {
                            "score": 100,
                            "exactness": "exact_domain",
                            "reasons": [
                                "The result host matches the exact domain.",
                                "The exact domain is mentioned in the page snippet or document text.",
                                "The result URL contains the exact domain string."
                            ]
                        },
                        "query": "direct-fallback",
                        "rank": 1
                    }
                ],
                "source_mix": {
                    "official_site": 1
                },
                "entity_coverage_score": 100,
                "high_trust_result_count": 0,
                "exact_match_result_count": 1,
                "high_entity_result_count": 1,
                "query_hit_count": 1,
                "query_count": 12,
                "deadline_hit": true
            },
            "review_intelligence": {
                "documents_fetched": 1,
                "external_documents_fetched": 0,
                "documents": [
                    {
                        "provider": "direct-domain-fallback",
                        "url": "https://abandon.ie/",
                        "host": "abandon.ie",
                        "title": "abandon.ie",
                        "snippet": "First-party fallback captured directly from the domain when public search engines returned no usable results.",
                        "is_direct_fallback": true,
                        "source_meta": {
                            "host": "abandon.ie",
                            "source_type": "official_site",
                            "label": "General web result",
                            "trust_weight": 55,
                            "evidence_weight": 26,
                            "noise_penalty": 0,
                            "requires_exact_domain_match": true,
                            "supports_positive_verdicts": false,
                            "supports_negative_verdicts": true,
                            "freshness_ttl_days": 21
                        },
                        "entity": {
                            "score": 100,
                            "exactness": "exact_domain",
                            "reasons": [
                                "The result host matches the exact domain.",
                                "The exact domain is mentioned in the page snippet or document text.",
                                "The result URL contains the exact domain string."
                            ]
                        },
                        "query": "direct-fallback",
                        "rank": 1,
                        "body": "Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkI’m a UX Engineer & Indie Game Developer who’s been making stuff with computers since spacer.gif was a thing. See my Work -> I'm making a game!Oh No! UFO! Check it out -> Read my Development BlogI work for Wikimedia Deutschland 4 days a week making open-source things focused on fundraising. On Mondays, I work on my game. See My GitHub -> SOME THINGS I DO:Website ThingsI have been working as a web developer since 2002. I’ve been a Full Stack Engineer in WMDE since 2020, where for the last few years my focus has been on accessibility & web standards. See my Me -> Video Game ThingsI published my first game in 2016, & while I work mostly in Unity, I do quite like Godot. I’ve been working on a game about a UFO since the start of 2024. See my Games -> Creative ThingsI enjoy working on UI/UX & design in general. I do design & illustration using the Affinity suite. I’m pretty decent at 3D modelling in Blender, & I have fun animating. See my Toolbox -> © Copyright 2026. All rights reservedAccessibility Statement•Privacy Policy•Shout at me on MastodonThis developer assures you that no GEN-AI was used to make this website.",
                        "html": "<!doctype html><html lang=en-GB dir=ltr class=\"show-vignette show-CRT\" style=--hue:50deg;--lightness:60%><head><meta name=generator content=\"Hugo 0.148.2\"><meta charset=utf-8><meta name=viewport content=\"width=device-width\"><link rel=icon href=/images/favicon.png><meta property=\"og:site_name\" content=\"Abban Dunne's Blog\"><meta property=\"og:title\" content='Abban Dunne - Fix your hearts or die'><meta property=\"og:type\" content=\"website\"><meta property=\"og:url\" content=\"https://abandon.ie/\"><meta property=\"og:image\" content=\"https://abandon.ie/images/Social-Embed.png\"><title>Abban Dunne - Fix your hearts or die</title><link rel=stylesheet href=/css/styles.min.css type=text/css media=all><script src=/js/main.a39388396899e2b14d2e3d35f2ecbe40b6a95f2af59fd07e686624554ca74311.js integrity=\"sha256-o5OIOWiZ4rFNLj018uy+QLapXyr1n9B+aGYkVUynQxE=\" crossorigin=anonymous></script></head><body><a href=#content class=skip-link>Skip to content</a><div class=vignette></div><div class=wrapper><details class=theme><summary><span class=\"theme__toggle icon-text\"><span class=icon-text__icon><svg aria-hidden=\"true\" width=\"100%\" height=\"100%\" viewBox=\"0 0 10 8\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2\"><path id=\"arrow-circle-right.svg\" d=\"M9.39 3.456C9.535 3.6 9.616 3.796 9.616 4 9.616 4.204 9.535 4.4 9.39 4.544L6.313 7.621C6.169 7.765 5.973 7.847 5.769 7.847 5.347 7.847 5 7.499 5 7.077 5 6.873 5.081 6.677 5.225 6.533L6.989 4.769H1.154C.732 4.769.385 4.422.385 4c0-.422.347-.769.769-.769H6.989L5.225 1.467C5.081 1.323 5 1.127 5 .923c0-.422.347-.77.769-.77C5.973.153 6.169.235 6.313.379L9.39 3.456z\" style=\"fill:var(--summary-marker-fill);fill-rule:nonzero\"/></svg></span> <span>Theme</span></span></summary><form class=box><div class=flow><label for=hue>Hue</label> <input type=range name=hue id=hue class=hue min=0 max=360 value=50 step=10></div><div class=flow><label for=lightness>Lightness</label> <input type=range name=lightness id=lightness class=lightness min=50 max=100 value=50 step=5></div><div class=cluster><div><label class=box><input type=checkbox name=vignette id=vignette> Vignette</label></div><div><label class=box><input type=checkbox name=CRT id=CRT> CRT</label></div><div><label class=box><input type=checkbox name=light-mode id=light-mode> Light mode!</label></div><p>Hue, lightness, Vignette, and CRT are deactivated when in light mode.</p></div></form></details><div class=\"box flow\"><header class=\"header box repel\"><a class=header__logo href=/><svg aria-hidden=\"true\" width=\"100%\" height=\"100%\" viewBox=\"0 0 70 80\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2\"><rect x=\"0\" y=\"0\" width=\"70\" height=\"80\" style=\"fill:none\"/><g><g transform=\"matrix(0.932044,0,0,0.932044,2.37715,2.71822)\"><path d=\"M17.66 60V30L34.981 20l17.32 10V60l8.661-5V25L34.981 10 9 25V55l8.66 5zM34.981 30l-8.66 5V45l8.66 5 8.66-5V35l-8.66-5zm8.66 35V55l-8.66 5-8.66-5V65l8.66 5 8.66-5z\" style=\"fill:var( --colour-primary )\"/></g><g transform=\"matrix(0.932044,0,0,0.932044,2.37715,2.71822)\"><path d=\"M71.768 18.761V61.239L34.981 82.478-1.806 61.239V18.761L34.981-2.478 71.768 18.761zM34.981.0.34 20V60L34.981 80 69.622 60V20L34.981.0z\" style=\"fill:var( --colour-primary )\"/></g></g></svg> <span class=header__logo-text><span>Abban Dunne</span> <span>UX Engineer & Indie Game Developer</span></span></a><nav class=nav><ul class=cluster><li><a aria-current=page class=active href=/>Home</a></li><li><a href=/posts/>Weblog</a></li><li><a href=/about/>About</a></li><li><a href=/work/>Work</a></li></ul></nav></header><main id=content class=flow><div class=\"box sidebar blurb\" data-filled data-direction=rtl><div><h1 id=im-a-ux-engineer--indie-game-developer-whos-been-making-stuff-with-computers-since-spacergif-was-a-thing>I’m a UX Engineer & Indie Game Developer who’s been making stuff with computers since <em>spacer.gif</em> was a thing.</h1></div><a href=/work class=button data-inverted><svg aria-hidden=\"true\" class=\"button-left\" width=\"100%\" height=\"100%\" viewBox=\"0 0 17 70\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2\"><path d=\"M16 35H0L16 0h1V70H0L16 35z\" style=\"fill:var(--button-background)\"/></svg> <span>See my Work -></span> <svg aria-hidden=\"true\" class=\"button-right\" width=\"100%\" height=\"100%\" viewBox=\"0 0 17 70\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2\"><path d=\"M1 70H0V0H17L1 35H17L1 70z\" style=\"fill:var(--button-background)\"/></svg></a></div><div class=\"game-cta box\"><div class=flow><h2>I'm making a game!</h2><h3 class=visually-hidden>Oh No! UFO!</h3><div class=game-cta__grid><p class=game-cta__heading aria-hidden=true><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 546 163\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2\"><path d=\"M85.367 3.945C91.1 7.012 95.6 11.012 98.867 15.945 102.133 20.879 104.667 26.279 106.467 32.145c1.8 5.867 3.2 11.9 4.2 18.1 1 6.2 2.166 12.167 3.5 17.9-2.53400000000001 16-6.134 31.8-10.8 47.4C102.833 118.079 102.033 121.212 100.967 124.945 99.9 128.679 98.667 132.412 97.267 136.145 95.867 139.879…",
                        "status_code": 200,
                        "final_url": "https://abandon.ie/"
                    }
                ],
                "facts": [],
                "ignored_candidates": [],
                "blocked_candidates": 0,
                "source_diversity": 0,
                "host_coverage": 1,
                "source_type_coverage": 1,
                "exact_match_documents": 1,
                "external_exact_match_documents": 0,
                "elapsed_ms": 72,
                "candidates_considered": 1,
                "fetch_success_rate": 100,
                "avg_source_trust": 55,
                "avg_entity_score": 100
            },
            "evidence": {
                "scores": {
                    "legit": 0,
                    "safe": 0,
                    "trusted": 0,
                    "caution": 0,
                    "scam": 0,
                    "dangerous": 0,
                    "spam": 0,
                    "nsfw": 0
                },
                "counts": {
                    "official_presence": 0,
                    "business_profiles": 0,
                    "positive_reviews": 0,
                    "negative_reviews": 0,
                    "scam_reports": 0,
                    "dangerous_reports": 0,
                    "spam_reports": 0,
                    "adult_reports": 0
                },
                "tag_support": [],
                "top_supporting_facts": [],
                "top_positive_facts": []
            },
            "quality": {
                "source_diversity_score": 0,
                "entity_coverage_score": 100,
                "freshness_score": 18,
                "confidence": 24,
                "documents_fetched": 1,
                "external_documents_fetched": 0,
                "fact_count": 0,
                "avg_source_trust": 55,
                "avg_entity_score": 100,
                "fetch_success_rate": 100,
                "exact_match_score": 0,
                "query_coverage_score": 100,
                "host_coverage_score": 20,
                "source_type_coverage_score": 25,
                "qualified_evidence_score": 0,
                "exact_match_documents": 0,
                "blocked_candidates": 0,
                "used_direct_fallback": true,
                "external_results_found": 0
            },
            "decision": {
                "state": "insufficient",
                "uncertainty": true,
                "candidate_support": 0,
                "candidate_contradiction": 0,
                "supports": {
                    "dangerous": false,
                    "scam": false,
                    "spam": false,
                    "nsfw": false,
                    "trusted": false
                },
                "evidence_quality": "low",
                "state_label": "Inconclusive",
                "state_reason": "Public search did not yield usable third-party matches, so the system fell back to first-party inspection only."
            },
            "signals": {
                "scores": {
                    "legit": 0,
                    "safe": 0,
                    "trusted": 0,
                    "caution": 0,
                    "scam": 0,
                    "dangerous": 0,
                    "spam": 0,
                    "nsfw": 0
                },
                "counts": {
                    "official_presence": 0,
                    "business_profiles": 0,
                    "positive_reviews": 0,
                    "negative_reviews": 0,
                    "scam_reports": 0,
                    "dangerous_reports": 0,
                    "spam_reports": 0,
                    "adult_reports": 0
                },
                "candidate_support": 0,
                "candidate_contradiction": 0,
                "highlights": [
                    "External evidence remained inconclusive because diversity, exact matching, or confidence was still too weak."
                ]
            },
            "citations": [],
            "debug": {
                "top_supporting_facts": [],
                "top_positive_facts": [],
                "ignored_candidates": [],
                "budget_ms": 3000,
                "search_budget_ms": 3000,
                "review_budget_ms": 1500,
                "search_mode": "post-processing",
                "query_cap": 12,
                "provider_cap": 2,
                "reason": "post-processing",
                "priority": 92
            },
            "last_good": {
                "checked_at": "2026-03-18T23:19:13+00:00",
                "summary": "External checks ran, but the verified result set was still too sparse to harden the verdict.",
                "decision": {
                    "state": "insufficient",
                    "uncertainty": true,
                    "candidate_support": 0,
                    "candidate_contradiction": 0,
                    "supports": {
                        "dangerous": false,
                        "scam": false,
                        "spam": false,
                        "nsfw": false,
                        "trusted": false
                    },
                    "evidence_quality": "low",
                    "state_label": "Inconclusive",
                    "state_reason": "Public search did not yield usable third-party matches, so the system fell back to first-party inspection only."
                },
                "signals": {
                    "scores": {
                        "legit": 0,
                        "safe": 0,
                        "trusted": 0,
                        "caution": 0,
                        "scam": 0,
                        "dangerous": 0,
                        "spam": 0,
                        "nsfw": 0
                    },
                    "counts": {
                        "official_presence": 0,
                        "business_profiles": 0,
                        "positive_reviews": 0,
                        "negative_reviews": 0,
                        "scam_reports": 0,
                        "dangerous_reports": 0,
                        "spam_reports": 0,
                        "adult_reports": 0
                    },
                    "candidate_support": 0,
                    "candidate_contradiction": 0,
                    "highlights": [
                        "External evidence remained inconclusive because diversity, exact matching, or confidence was still too weak."
                    ]
                },
                "citations": []
            }
        },
        "external_decision": {
            "state": "insufficient",
            "uncertainty": true,
            "candidate_support": 0,
            "candidate_contradiction": 0,
            "supports": {
                "dangerous": false,
                "scam": false,
                "spam": false,
                "nsfw": false,
                "trusted": false
            },
            "evidence_quality": "low",
            "state_label": "Inconclusive",
            "state_reason": "Public search did not yield usable third-party matches, so the system fell back to first-party inspection only."
        },
        "signal_scores": [
            {
                "label": "Strongest tag heuristic",
                "value": "Uncertain · 68%",
                "tone": "unknown",
                "detail": "The highest raw tag match from the heuristic engine before visibility thresholds and manual overrides."
            },
            {
                "label": "Trust score",
                "value": "37/100",
                "tone": "spam",
                "detail": "Confidence derived from authority, crawl quality, stability, and risk signals."
            },
            {
                "label": "Authority score",
                "value": "20/100",
                "tone": "spam",
                "detail": "A higher authority score usually means broader reputation and backlink confidence."
            },
            {
                "label": "Spam risk",
                "value": "42/100",
                "tone": "caution",
                "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": "0/100",
                "tone": "good",
                "detail": "Lower is better. This reflects phishing, drainer, fake-support, fake-shop, and malware signals."
            },
            {
                "label": "Infrastructure risk",
                "value": "1/100",
                "tone": "good",
                "detail": "Lower is better. This reflects the IP, registrar, and nameserver neighbourhood seen by the crawler."
            },
            {
                "label": "Evidence confidence",
                "value": "100/100",
                "tone": "good",
                "detail": "Higher means the crawler had enough pages and registry evidence to make a stronger call."
            },
            {
                "label": "External evidence",
                "value": "Low",
                "tone": "unknown",
                "detail": "Quality of the structured search and review evidence cluster."
            },
            {
                "label": "External decision",
                "value": "Inconclusive",
                "tone": "unknown",
                "detail": "How third-party evidence compares with the current candidate tag."
            },
            {
                "label": "NSFW score",
                "value": "0/100",
                "tone": "good",
                "detail": "Context-aware adult-content detection with medical / educational false-positive reduction."
            },
            {
                "label": "Registry stability",
                "value": "100/100",
                "tone": "good",
                "detail": "Based on age, expiry runway, and the amount of ownership / registrar churn."
            }
        ],
        "signal_sections": [
            {
                "title": "Registry & ownership",
                "items": [
                    {
                        "label": "Domain age",
                        "value": "—",
                        "tone": "unknown",
                        "detail": "Older domains generally carry more historical trust than very new ones."
                    },
                    {
                        "label": "Stability score",
                        "value": "100/100",
                        "tone": "good",
                        "detail": "Penalised by registrar, ownership, and nameserver churn."
                    },
                    {
                        "label": "Days to expiry",
                        "value": "—",
                        "tone": "unknown",
                        "detail": "Very short renewal windows can be a weak trust signal."
                    },
                    {
                        "label": "Registrar / ownership changes",
                        "value": "0 / 0",
                        "tone": "good",
                        "detail": "Frequent ownership churn can weaken trust."
                    },
                    {
                        "label": "Nameserver changes",
                        "value": "0",
                        "tone": "good",
                        "detail": "Repeated infrastructure changes can indicate instability."
                    },
                    {
                        "label": "DNSSEC / privacy",
                        "value": "DNSSEC off · privacy off",
                        "tone": "caution",
                        "detail": "DNSSEC strengthens DNS trust; privacy is neutral on its own."
                    }
                ]
            },
            {
                "title": "Reputation & search evidence",
                "items": [
                    {
                        "label": "Backlinks",
                        "value": "2",
                        "tone": "unknown",
                        "detail": "Broader backlink evidence usually improves confidence."
                    },
                    {
                        "label": "Referring domains",
                        "value": "2",
                        "tone": "unknown",
                        "detail": "Unique linking domains are more useful than raw link volume."
                    },
                    {
                        "label": "Organic keywords",
                        "value": "60",
                        "tone": "caution",
                        "detail": "Search footprint helps distinguish real sites from thin shells."
                    },
                    {
                        "label": "Indexed pages",
                        "value": "88",
                        "tone": "caution",
                        "detail": "Larger index coverage usually means more evidence to classify from."
                    },
                    {
                        "label": "Brand strength",
                        "value": "62/100",
                        "tone": "good",
                        "detail": "Stronger brand signals reduce false positives for legitimate sites."
                    },
                    {
                        "label": "Risk label",
                        "value": "SUSPICIOUS",
                        "tone": "caution",
                        "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 · 206 ms",
                        "tone": "good",
                        "detail": "Slow or broken technical signals weaken confidence."
                    },
                    {
                        "label": "Content words",
                        "value": "237",
                        "tone": "caution",
                        "detail": "Thin pages are harder to trust and easier to manipulate."
                    },
                    {
                        "label": "Schema / structure",
                        "value": "0 schema · no meta · H1",
                        "tone": "caution",
                        "detail": "Structured markup and basic on-page hygiene improve quality confidence."
                    },
                    {
                        "label": "Links on page",
                        "value": "9 internal · 4 external",
                        "tone": "good",
                        "detail": "Link patterns help detect thin directories and promo pages."
                    },
                    {
                        "label": "Page speed / mobile",
                        "value": "100/100 · 77/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": "Public search did not yield usable third-party matches, so the system fell back to first-party inspection only."
                    },
                    {
                        "label": "Evidence quality",
                        "value": "Low",
                        "tone": "unknown",
                        "detail": "Blends source trust, domain matching, evidence diversity, and freshness."
                    },
                    {
                        "label": "Support vs contradiction",
                        "value": "0 / 0",
                        "tone": "unknown",
                        "detail": "Compares how much structured external evidence supports the candidate tag against evidence that contradicts it."
                    },
                    {
                        "label": "Qualified risk sources",
                        "value": "No",
                        "tone": "good",
                        "detail": "Risk tags only promote from external evidence when source diversity or source trust thresholds are met."
                    },
                    {
                        "label": "Uncertainty buffer",
                        "value": "Active",
                        "tone": "caution",
                        "detail": "Prevents thin or mixed external evidence from forcing a stronger tag than the evidence can justify."
                    }
                ]
            }
        ],
        "positives": [
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness."
        ],
        "risks": [
            "External evidence was mixed or sparse, so the tag model keeps an uncertainty buffer instead of overcommitting."
        ]
    },
    "traffic_confidence": 28,
    "whois": {
        "current": {
            "id": 25381,
            "domain": "abandon.ie",
            "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-18 23:18:43",
            "last_changed_at": "2026-03-18 23:18:43",
            "created_at": "2026-03-18 23:18:43",
            "updated_at": "2026-03-18 23:18:43"
        },
        "history": [
            {
                "id": 25964,
                "domain": "abandon.ie",
                "source_type": "whois_text",
                "registrar_name": "",
                "registrar_handle": "",
                "registrant_name": "",
                "registrant_org": "",
                "registrant_country": "",
                "registrant_email": "",
                "abuse_email": "",
                "created_date": null,
                "updated_date": null,
                "expires_date": null,
                "nameservers_json": "[]",
                "status_json": "[]",
                "dnssec": "unknown",
                "privacy_protected": 0,
                "content_hash": "f7e17c57c5fdd24df1793ece6bff99716369356b90b29c4725ac3ba12a76b72c",
                "checked_at": "2026-03-18 23:18:43",
                "change_summary": "Initial WHOIS snapshot captured.",
                "created_at": "2026-03-18 23:18:43"
            }
        ],
        "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": 81201,
        "domain": "abandon.ie",
        "first_seen_at": "2026-03-15 20:24:59",
        "last_crawled_at": "2026-03-18 23:18:48",
        "last_title": "Abban Dunne - Fix your hearts or die",
        "last_http_status": 200,
        "discovered_from_domain": "personalsit.es",
        "depth": 0,
        "backlinks_count": 2,
        "rating_cache": 51,
        "spam_score": 48,
        "risk_label": "suspicious",
        "category_name": "E-commerce",
        "primary_country_code": "IE",
        "internal_links_count": 9,
        "external_links_count": 4,
        "social_profiles_count": 1,
        "content_word_count": 237,
        "title_quality_score": 93,
        "has_meta_description": 0,
        "has_h1": 1,
        "language_code": "en-GB",
        "response_time_ms": 206,
        "robots_status": 404,
        "sitemap_status": 200,
        "sitemap_total_urls": 88,
        "quality_score": 79,
        "site_name": "Abban Dunne's Blog",
        "canonical_domain": "",
        "favicon_present": 1,
        "schema_org_count": 0,
        "noindex_detected": 0,
        "feed_links_count": 0,
        "https_working": 1,
        "estimated_authority_score": 17,
        "trust_score": 66,
        "nsfw_score": 0,
        "overall_rank_estimate": 15680,
        "primary_tag": "C",
        "tag_codes": "C,Uncertain",
        "manual_verified_status": "",
        "manual_tag_codes": "",
        "manual_rating_delta": 0,
        "manual_authority_delta": 0,
        "manual_trust_delta": 0,
        "manual_note": null,
        "manual_adjusted_by": null,
        "manual_adjusted_at": null,
        "manual_lock_scores": 0,
        "manual_lock_flags": 0,
        "crawl_blocked": 0,
        "crawl_blocked_by": "",
        "crawl_blocked_reason": null,
        "safety_score": 100,
        "fraud_score": 0,
        "legitimacy_score": 45,
        "infrastructure_risk_score": 1,
        "score_confidence": 100,
        "tag_confidence": 72,
        "category_confidence": 18,
        "deep_crawl_pages": 46,
        "resolved_ip": "75.2.60.5",
        "category_candidates_json": "[{\"category\":\"E-commerce\",\"score\":17},{\"category\":\"Manufacturing & Industrial\",\"score\":17},{\"category\":\"Personal: Personal Sites & Homepages\",\"score\":11},{\"category\":\"Developer Tools: Code Hosting\",\"score\":6}]",
        "page_signals_json": "[{\"path\":\"/about\",\"status\":200,\"title\":\"Who is this doofus? | Abban Dunne - Fix your hearts or die\",\"word_count\":952,\"summary_text\":\"Who is this doofus? | Abban Dunne - Fix your hearts or die Who is this doofus? | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkWho is this doofus?This is a bunch of things about my personal ethics, what I like, what I dislike, my strengths and weaknesses etc.Its purpose is to serve as a guide for people on how to interact with me in professional and social contexts. Get Started -> The basics you should know about me are&mldr;Pronouns: He/HimLanguages: I&rsquo;m a native English speaker and have absolutely astoundingly terrible self-taught German.Politics: Socialist.Time Zone: Europe/Berlin (CET)My working hours are&mldr;I work 4 days a week Tuesdays to Fridays. I sta\",\"classification_terms\":[\"about\",\"about me\",\"blog\",\"pronouns\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/privacy\",\"status\":200,\"title\":\"Privacy Policy | Abban Dunne - Fix your hearts or die\",\"word_count\":94,\"summary_text\":\"Privacy Policy | Abban Dunne - Fix your hearts or die Privacy Policy | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkPrivacy PolicyI don&rsquo;t track analytics, I store no cookies, I do put some functional items into local storage so you can store your preferred theme settings. I embed a few iframes with YouTube videos inside.&copy; Copyright 2026. All rights reservedAccessibility Statement•Privacy Policy•Shout at me on MastodonThis developer assures you that no GEN-AI was used to make this website.\",\"classification_terms\":[\"privacy\",\"about\",\"blog\",\"store\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/posts/\",\"status\":200,\"title\":\"Weblog | Abban Dunne - Fix your hearts or die\",\"word_count\":219,\"summary_text\":\"Weblog | Abban Dunne - Fix your hearts or die Weblog | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkWeblogSometimes I have a brain fart and I manage to write it down.Please, Leave Me Behind10/12/2025 &bull; 1 minuteI'm sick of it all so please just continue without mePersonalGame Dev Thursday 25th July 202425/07/2024 &bull; 1 minuteLong time no devGameDevTODO Or To Not TODO09/04/2024 &bull; 1 minuteThoughts on TODOsGameDevProfessionalPersonalGame Dev Friday 29th Mar 202429/03/2024 &bull; 0 minutesBuilding Some WorldGameDevHow I Do Factories In Unity26/02/2024 &bull; 5 minutesFirst post documenting how I do project architecture in Unity.GameDevGame Dev M\",\"classification_terms\":[\"posts\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/about/\",\"status\":200,\"title\":\"Who is this doofus? | Abban Dunne - Fix your hearts or die\",\"word_count\":952,\"summary_text\":\"Who is this doofus? | Abban Dunne - Fix your hearts or die Who is this doofus? | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkWho is this doofus?This is a bunch of things about my personal ethics, what I like, what I dislike, my strengths and weaknesses etc.Its purpose is to serve as a guide for people on how to interact with me in professional and social contexts. Get Started -> The basics you should know about me are&mldr;Pronouns: He/HimLanguages: I&rsquo;m a native English speaker and have absolutely astoundingly terrible self-taught German.Politics: Socialist.Time Zone: Europe/Berlin (CET)My working hours are&mldr;I work 4 days a week Tuesdays to Fridays. I sta\",\"classification_terms\":[\"about\",\"about me\",\"blog\",\"pronouns\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/work/\",\"status\":200,\"title\":\"The things I do to feed my family | Abban Dunne - Fix your hearts or die\",\"word_count\":342,\"summary_text\":\"The things I do to feed my family | Abban Dunne - Fix your hearts or die The things I do to feed my family | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkThe things I do to feed my familyProfessionally, I&rsquo;m a bit of a mixed bag, because I work as both a UX Engineer and an Indie Game Dev. My work satisfaction comes from working on either creative stuff or stuff that I know will help marginalised people. I want to leave the world slightly happier and better than when I found it.MY WEB DEVELOPMENT STUFF:Currently, all my web development work is for Wikimedia Deutschland and is niche but open source, you can see it all on GitHub. See My GitHub -> MY GAMES:Oh No! UFO!My solo pro\",\"classification_terms\":[\"work\",\"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\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/work\",\"status\":200,\"title\":\"The things I do to feed my family | Abban Dunne - Fix your hearts or die\",\"word_count\":342,\"summary_text\":\"The things I do to feed my family | Abban Dunne - Fix your hearts or die The things I do to feed my family | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkThe things I do to feed my familyProfessionally, I&rsquo;m a bit of a mixed bag, because I work as both a UX Engineer and an Indie Game Dev. My work satisfaction comes from working on either creative stuff or stuff that I know will help marginalised people. I want to leave the world slightly happier and better than when I found it.MY WEB DEVELOPMENT STUFF:Currently, all my web development work is for Wikimedia Deutschland and is niche but open source, you can see it all on GitHub. See My GitHub -> MY GAMES:Oh No! UFO!My solo pro\",\"classification_terms\":[\"work\",\"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\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/tags/gamedev/\",\"status\":200,\"title\":\"GameDev | Abban Dunne - Fix your hearts or die\",\"word_count\":188,\"summary_text\":\"GameDev | Abban Dunne - Fix your hearts or die GameDev | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkGameDevGame Dev Thursday 25th July 202425/07/2024 &bull; 1 minuteLong time no devGameDevTODO Or To Not TODO09/04/2024 &bull; 1 minuteThoughts on TODOsGameDevProfessionalPersonalGame Dev Friday 29th Mar 202429/03/2024 &bull; 0 minutesBuilding Some WorldGameDevHow I Do Factories In Unity26/02/2024 &bull; 5 minutesFirst post documenting how I do project architecture in Unity.GameDevGame Dev Monday 19th Feb 202420/02/2024 &bull; 0 minutesWorking on the Quest SystemGameDevGame Dev Saturday 10th Feb 202410/02/2024 &bull; 0 minutesWorking on UIGameDevGame Dev M\",\"classification_terms\":[\"tags/gamedev\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/accessibility-statement\",\"status\":200,\"title\":\"Accessibility Statement | Abban Dunne - Fix your hearts or die\",\"word_count\":200,\"summary_text\":\"Accessibility Statement | Abban Dunne - Fix your hearts or die Accessibility Statement | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkAccessibility StatementI am committed to providing a website that is accessible to the widest possible audience, regardless of technology or ability. And I am actively working to increase the accessibility and usability of this website and in doing so adhere to many of the available standards and guidelines.This website endeavours to conform to level Double-A of the World Wide Web Consortium (W3C) Web Content Accessibility Guidelines 2.1. It has been built using code compliant with W3C standards for HTML and CSS. The site displays correct\",\"classification_terms\":[\"accessibility-statement\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/posts/2025-12-10---please-leave-me-behind/\",\"status\":200,\"title\":\"Please, Leave Me Behind | Abban Dunne - Fix your hearts or die\",\"word_count\":181,\"summary_text\":\"Please, Leave Me Behind | Abban Dunne - Fix your hearts or die Please, Leave Me Behind | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkPlease, Leave Me Behind10/12/2025 &bull; 1 minutePersonalWhen I didn&rsquo;t learn Rails I wasn&rsquo;t left behind.When I didn&rsquo;t move all my databases to MongoDB I wasn&rsquo;t left behind.When I didn&rsquo;t go serverless I wasn&rsquo;t left behind.When I didn&rsquo;t learn React I wasn&rsquo;t left behind.When I didn&rsquo;t make all my things microservices I wasn&rsquo;t left behind.When I didn&rsquo;t learn functional programming I wasn&rsquo;t left behind.When I didn&rsquo;t use blockchain I wasn&rsquo;t left behind.When I did\",\"classification_terms\":[\"posts/2025-12-10---please-leave-me-behind\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/tags/personal/\",\"status\":200,\"title\":\"Personal | Abban Dunne - Fix your hearts or die\",\"word_count\":449,\"summary_text\":\"Personal | Abban Dunne - Fix your hearts or die Personal | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkPersonalPlease, Leave Me Behind10/12/2025 &bull; 1 minuteI'm sick of it all so please just continue without mePersonalTODO Or To Not TODO09/04/2024 &bull; 1 minuteThoughts on TODOsGameDevProfessionalPersonalEverything Everywhere All At Once18/05/2022 &bull; 0 minutesI&rsquo;ve had a good run of movies. Didn&rsquo;t really know anything about this going in and was blown away. It was funny, full of cool action, and sentimental all at once. Left me feeling pretty nice at the end.5/5 Hot Dog Fingers 🌭🌭🌭🌭🌭PersonalMovieThe Lighthouse17/05/2022 &bull; 0 minute\",\"classification_terms\":[\"tags/personal\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/posts/2024-07-25---game-dev-thursday/\",\"status\":200,\"title\":\"Game Dev Thursday 25th July 2024 | Abban Dunne - Fix your hearts or die\",\"word_count\":339,\"summary_text\":\"Game Dev Thursday 25th July 2024 | Abban Dunne - Fix your hearts or die Game Dev Thursday 25th July 2024 | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkGame Dev Thursday 25th July 202425/07/2024 &bull; 1 minuteGameDevIt&rsquo;s been a long time since I made a WIP update on here but I&rsquo;ve been very busy. Fuck so busy. I&rsquo;ve been learning and applying web accessibility in my job which it turns out is extremely rewarding work, and it makes it hard to focus with intensity on 2 separate ongoing projects that I&rsquo;m very invested in. But in that I still managed to get a lot of things done on the game. I&rsquo;m so tired.I Turned my Village into a TownI wanted to test maki\",\"classification_terms\":[\"posts/2024-07-25---game-dev-thursday\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/posts/2024-04-09---todo-or-to-not-todo/\",\"status\":200,\"title\":\"TODO Or To Not TODO | Abban Dunne - Fix your hearts or die\",\"word_count\":246,\"summary_text\":\"TODO Or To Not TODO | Abban Dunne - Fix your hearts or die TODO Or To Not TODO | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkTODO Or To Not TODO09/04/2024 &bull; 1 minuteGameDevProfessionalPersonalI don&rsquo;t like TODOs.I can concede they have some benefits, I often use them when I&rsquo;m working on a thing to indicate stuff I still have to finalise in Draft Code. They&rsquo;re short-lived indicators of open branches in the code, or things that need to be updated when other things are changed. They&rsquo;re reminders of things left to be done and for early reviewers to get a sign of things that are still in progress so they don&rsquo;t waste time on reviewing so\",\"classification_terms\":[\"posts/2024-04-09---todo-or-to-not-todo\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/tags/professional/\",\"status\":200,\"title\":\"Professional | Abban Dunne - Fix your hearts or die\",\"word_count\":237,\"summary_text\":\"Professional | Abban Dunne - Fix your hearts or die Professional | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkProfessionalTODO Or To Not TODO09/04/2024 &bull; 1 minuteThoughts on TODOsGameDevProfessionalPersonalTIL Week 23 202207/06/2022 &bull; 0 minutesA roundup of the things I learned in the 23rd week of 2022.ProfessionalTIL Weeks 19-22 202230/05/2022 &bull; 1 minuteA roundup of the things I learned from the 19th to the 22nd week of 2022.ProfessionalStill Poking at my Pet Project02/05/2022 &bull; 0 minutesI started designing the main menu and start screenProfessionalTIL Week 18 202202/05/2022 &bull; 1 minuteA roundup of the things I learned in the 18th we\",\"classification_terms\":[\"tags/professional\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":7,\"depth\":2},{\"path\":\"/posts/2024-02-26---factory-pattern-in-unity/\",\"status\":200,\"title\":\"How I Do Factories In Unity | Abban Dunne - Fix your hearts or die\",\"word_count\":1091,\"summary_text\":\"How I Do Factories In Unity | Abban Dunne - Fix your hearts or die How I Do Factories In Unity | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkHow I Do Factories In Unity26/02/2024 &bull; 5 minutesGameDevI spent this week backfilling unit tests and have no progress to show off. But, I&rsquo;ve been meaning to document the patterns I use to build my game architecture for about a year now so here goes with the first one.This is not an opinionated guide on how to do factories, probably not even the best pattern for it, but it is the way I like to do it.What is a factory?Wikipedia says:In object-oriented programming, a factory is an object for creating other objectsWhich pretty\",\"classification_terms\":[\"posts/2024-02-26---factory-pattern-in-unity\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/posts/2024-02-19---game-dev-monday/\",\"status\":200,\"title\":\"Game Dev Monday 19th Feb 2024 | Abban Dunne - Fix your hearts or die\",\"word_count\":89,\"summary_text\":\"Game Dev Monday 19th Feb 2024 | Abban Dunne - Fix your hearts or die Game Dev Monday 19th Feb 2024 | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkGame Dev Monday 19th Feb 202420/02/2024 &bull; 0 minutesGameDevThis week I refactored my input system, and added the first flows for the quest systemAccepting QuestsCool Peeps&copy; Copyright 2026. All rights reservedAccessibility Statement•Privacy Policy•Shout at me on MastodonThis developer assures you that no GEN-AI was used to make this website.\",\"classification_terms\":[\"posts/2024-02-19---game-dev-monday\",\"about\",\"privacy\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/posts/2024-02-10---game-dev-saturday/\",\"status\":200,\"title\":\"Game Dev Saturday 10th Feb 2024 | Abban Dunne - Fix your hearts or die\",\"word_count\":90,\"summary_text\":\"Game Dev Saturday 10th Feb 2024 | Abban Dunne - Fix your hearts or die Game Dev Saturday 10th Feb 2024 | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkGame Dev Saturday 10th Feb 202410/02/2024 &bull; 0 minutesGameDevThis week in the evenings I took some low hanging fruit and worked on UI.Pause Menu TestingQuest MarkerCool Peeps&copy; Copyright 2026. All rights reservedAccessibility Statement•Privacy Policy•Shout at me on MastodonThis developer assures you that no GEN-AI was used to make this website.\",\"classification_terms\":[\"posts/2024-02-10---game-dev-saturday\",\"about\",\"privacy\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/posts/2024-02-05---game-dev-monday/\",\"status\":200,\"title\":\"Game Dev Monday 5th Feb 2024 | Abban Dunne - Fix your hearts or die\",\"word_count\":99,\"summary_text\":\"Game Dev Monday 5th Feb 2024 | Abban Dunne - Fix your hearts or die Game Dev Monday 5th Feb 2024 | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkGame Dev Monday 5th Feb 202405/02/2024 &bull; 0 minutesGameDevSo over the last few weeks I&rsquo;ve finished the first pass on the UFO effects, and started designing and implementing the dialogue/narration system using Yarn Spinner.UFO EffectsDialogueCool Peeps&copy; Copyright 2026. All rights reservedAccessibility Statement•Privacy Policy•Shout at me on MastodonThis developer assures you that no GEN-AI was used to make this website.\",\"classification_terms\":[\"posts/2024-02-05---game-dev-monday\",\"about\",\"privacy\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/posts/2024-01-21---game-dev-blog-new-start/\",\"status\":200,\"title\":\"Actual Progress on a new Pet Project | Abban Dunne - Fix your hearts or die\",\"word_count\":96,\"summary_text\":\"Actual Progress on a new Pet Project | Abban Dunne - Fix your hearts or die Actual Progress on a new Pet Project | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkActual Progress on a new Pet Project21/01/2024 &bull; 0 minutesGameDevI now have a dedicated time slot to work on game development. This is the little prototype I&rsquo;m now working on.UFOCamera ControllerCool Peeps&copy; Copyright 2026. All rights reservedAccessibility Statement•Privacy Policy•Shout at me on MastodonThis developer assures you that no GEN-AI was used to make this website.\",\"classification_terms\":[\"posts/2024-01-21---game-dev-blog-new-start\",\"about\",\"privacy\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/posts/2023-01-06---game-dev-blog/\",\"status\":200,\"title\":\"Slow Progress on my Pet Project | Abban Dunne - Fix your hearts or die\",\"word_count\":91,\"summary_text\":\"Slow Progress on my Pet Project | Abban Dunne - Fix your hearts or die Slow Progress on my Pet Project | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkSlow Progress on my Pet Project06/01/2023 &bull; 0 minutesGameDevStill poking at this, I will eventually have a vertical slice ready. Maybe even in 2023.Test LevelWorking on UICool Peeps&copy; Copyright 2026. All rights reservedAccessibility Statement•Privacy Policy•Shout at me on MastodonThis developer assures you that no GEN-AI was used to make this website.\",\"classification_terms\":[\"posts/2023-01-06---game-dev-blog\",\"about\",\"privacy\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/posts/page/2/\",\"status\":200,\"title\":\"Weblog | Abban Dunne - Fix your hearts or die\",\"word_count\":311,\"summary_text\":\"Weblog | Abban Dunne - Fix your hearts or die Weblog | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkWeblogSometimes I have a brain fart and I manage to write it down.TIL Week 23 202207/06/2022 &bull; 0 minutesA roundup of the things I learned in the 23rd week of 2022.ProfessionalTIL Weeks 19-22 202230/05/2022 &bull; 1 minuteA roundup of the things I learned from the 19th to the 22nd week of 2022.ProfessionalEverything Everywhere All At Once18/05/2022 &bull; 0 minutesI&rsquo;ve had a good run of movies. Didn&rsquo;t really know anything about this going in and was blown away. It was funny, full of cool action, and sentimental all at once. Left me feeling\",\"classification_terms\":[\"posts/page/2\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":5,\"depth\":2},{\"path\":\"/tags/movie/\",\"status\":200,\"title\":\"Movie | Abban Dunne - Fix your hearts or die\",\"word_count\":269,\"summary_text\":\"Movie | Abban Dunne - Fix your hearts or die Movie | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkMovieEverything Everywhere All At Once18/05/2022 &bull; 0 minutesI&rsquo;ve had a good run of movies. Didn&rsquo;t really know anything about this going in and was blown away. It was funny, full of cool action, and sentimental all at once. Left me feeling pretty nice at the end.5/5 Hot Dog Fingers 🌭🌭🌭🌭🌭PersonalMovieThe Lighthouse17/05/2022 &bull; 0 minutesAfter watching The Northman I realised I&rsquo;d never seen this. What a great movie, loved everything about it. I especially enjoyed how the constant fog horn put everything on edge.5/5 Hot Dogs 🌭🌭🌭🌭🌭Per\",\"classification_terms\":[\"tags/movie\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":3},{\"path\":\"/tags/comic/\",\"status\":200,\"title\":\"Comic | Abban Dunne - Fix your hearts or die\",\"word_count\":181,\"summary_text\":\"Comic | Abban Dunne - Fix your hearts or die Comic | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkComicScarenthood11/03/2022 &bull; 0 minutesReally enjoyed this comic, the art and supernatual themes were right up my alley. As a parent trying to juggle a small person and work some of it really struck home. I just think it was let down a little by the rushed storytelling.3/5 Hot Dogs 🌭🌭🌭PersonalComicBatman The New 52 Vol 1-209/01/2022 &bull; 0 minutesThe Court of Owls & The City of Owls. I&rsquo;d heard these were good from multiple people so I decided to check them out and wow yes they are. Enough to make me buy the rest of the Scott Snyder run. I only\",\"classification_terms\":[\"tags/comic\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":3},{\"path\":\"/tags/tv-show/\",\"status\":200,\"title\":\"TV Show | Abban Dunne - Fix your hearts or die\",\"word_count\":148,\"summary_text\":\"TV Show | Abban Dunne - Fix your hearts or die TV Show | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkTV ShowPeacemaker18/01/2022 &bull; 0 minutesTV show follow up to 2021&rsquo;s Suicide Squad movie. I loved it, This show knows that there&rsquo;s never a wrong time to rock. John Cena is surprisingly great in a comedy role, much better than when he&rsquo;s cast straight.5/5 Hot Dogs 🌭🌭🌭🌭🌭PersonalTV ShowMacGruber09/01/2022 &bull; 0 minutesThis is a follow up TV show to the 2010 (wow has it been that long!?) movie. It&rsquo;s pretty great, star studded, great writing, very funny. The TV format suits it a lot more too.5/5 Hot Dogs 🌭🌭🌭🌭🌭PersonalTV ShowCool P\",\"classification_terms\":[\"tags/tv-show\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":3},{\"path\":\"/tags/personal/page/2/\",\"status\":200,\"title\":\"Personal | Abban Dunne - Fix your hearts or die\",\"word_count\":316,\"summary_text\":\"Personal | Abban Dunne - Fix your hearts or die Personal | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkPersonalThe Matrix Resurrections06/01/2022 &bull; 0 minutesEveryone seems to have hated this but I quite enjoyed it. It takes nothing away from the story of the earlier movies and finally gives Neo and Trinity a decent send off. I only hope they don&rsquo;t use this as a jumping off point to make endless sequels.4/5 Hot Dogs 🌭🌭🌭🌭PersonalMovieHello, World01/01/2022 &bull; 1 minuteWhen I did my 2021 end of year review in work recently, I realised that by being completely lazy towards documenting the things I&rsquo;ve been doing I was hurting myself. I did\",\"classification_terms\":[\"tags/personal/page/2\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":3},{\"path\":\"/posts/2022-06-07---til-week-23/\",\"status\":200,\"title\":\"TIL Week 23 2022 | Abban Dunne - Fix your hearts or die\",\"word_count\":151,\"summary_text\":\"TIL Week 23 2022 | Abban Dunne - Fix your hearts or die TIL Week 23 2022 | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkTIL Week 23 202207/06/2022 &bull; 0 minutesProfessionalA roundup of the things I learned in the 23rd week of 2022.TechnicalYou can use interface inheritance to pass versions of entities back from a bounded context use case rather than using a DTO. See here for a php example. It works better in C# though because it&rsquo;s more type strict. Php will still allow you to call a method that exists on an object but not in it&rsquo;s interface.ProfessionalComing soon to a post near youPersonal NotesComing soon to a post near youCool Peeps&copy; Copyrig\",\"classification_terms\":[\"posts/2022-06-07---til-week-23\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":3},{\"path\":\"/posts/2022-05-30---til-weeks-19-22/\",\"status\":200,\"title\":\"TIL Weeks 19-22 2022 | Abban Dunne - Fix your hearts or die\",\"word_count\":203,\"summary_text\":\"TIL Weeks 19-22 2022 | Abban Dunne - Fix your hearts or die TIL Weeks 19-22 2022 | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkTIL Weeks 19-22 202230/05/2022 &bull; 1 minuteProfessionalA roundup of the things I learned from the 19th to the 22nd week of 2022.TechnicalBeen re-reading Clean Architecture and implementing it in a game prototype in order to learn Clean and DDD in more detail.Have an idea to not have to use DTOs when you use clean architecture inside a monolith. Need to write about it.ProfessionalComing soon to a post near youPersonal NotesFew weird weeks of family sickness meant it was hard to keep up blogging, so adding a roundup of what I remember. Gonn\",\"classification_terms\":[\"posts/2022-05-30---til-weeks-19-22\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":3},{\"path\":\"/posts/2022-05-03---game-development-gui/\",\"status\":200,\"title\":\"Still Poking at my Pet Project | Abban Dunne - Fix your hearts or die\",\"word_count\":82,\"summary_text\":\"Still Poking at my Pet Project | Abban Dunne - Fix your hearts or die Still Poking at my Pet Project | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkStill Poking at my Pet Project02/05/2022 &bull; 0 minutesProfessionalI started designing the main menu and start screen. Cool Peeps&copy; Copyright 2026. All rights reservedAccessibility Statement•Privacy Policy•Shout at me on MastodonThis developer assures you that no GEN-AI was used to make this website.\",\"classification_terms\":[\"posts/2022-05-03---game-development-gui\",\"about\",\"privacy\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":3},{\"path\":\"/posts/2022-05-02---til-week-18/\",\"status\":200,\"title\":\"TIL Week 18 2022 | Abban Dunne - Fix your hearts or die\",\"word_count\":223,\"summary_text\":\"TIL Week 18 2022 | Abban Dunne - Fix your hearts or die TIL Week 18 2022 | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkTIL Week 18 202202/05/2022 &bull; 1 minuteProfessionalA roundup of the things I learned in the 18th week of 2022.TechnicalPHP Named Parameters are a good way of making different versions of an object you want to test that has a lot of constructor parameters. In your test you can add a method that returns your object with the constructor arguments as nullable parameters, then default them. Then when you need to pass different dependencies you can pass only the ones you want to modify as named parameters. Mini example:private function makeObjectTo\",\"classification_terms\":[\"posts/2022-05-02---til-week-18\",\"about\",\"returns\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":3},{\"path\":\"/posts/2022-04-25---til-week-17/\",\"status\":200,\"title\":\"TIL Week 17 2022 | Abban Dunne - Fix your hearts or die\",\"word_count\":193,\"summary_text\":\"TIL Week 17 2022 | Abban Dunne - Fix your hearts or die TIL Week 17 2022 | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkTIL Week 17 202225/04/2022 &bull; 1 minuteProfessionalA roundup of the things I learned in the 17th week of 2022.TechnicalComing soon to a post near youProfessionalWatched Technical Leadership and Glue Work. I highly recommend it. I&rsquo;ve been struggling to get my head around the leadership responsibilities expected of me, and I liked having a clear explanation of how I can be doing things better.Tanya mentioned that scheduling fixed learning times for a team would help members feel like they&rsquo;re allowed to learn on the job, I think that\",\"classification_terms\":[\"posts/2022-04-25---til-week-17\",\"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\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":3},{\"path\":\"/posts/2022-04-18-02---til-week-16/\",\"status\":200,\"title\":\"TIL Week 16 2022 | Abban Dunne - Fix your hearts or die\",\"word_count\":128,\"summary_text\":\"TIL Week 16 2022 | Abban Dunne - Fix your hearts or die TIL Week 16 2022 | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkTIL Week 16 202218/04/2022 &bull; 0 minutesProfessionalA roundup of the things I learned in the 16th week of 2022. Annual leave for a week did some game development.Game DevBrushed up on animation in Blender by animating an idle, walk, jump, and fall for a player character.Level design, you can see some images here.ProfessionalComing soon to a post near youPersonal NotesComing soon to a post near youCool Peeps&copy; Copyright 2026. All rights reservedAccessibility Statement•Privacy Policy•Shout at me on MastodonThis developer assures you that no\",\"classification_terms\":[\"posts/2022-04-18-02---til-week-16\",\"about\",\"privacy\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":3},{\"path\":\"/posts/2022-04-18-01---game-development/\",\"status\":200,\"title\":\"I Poked at a Pet Project | Abban Dunne - Fix your hearts or die\",\"word_count\":123,\"summary_text\":\"I Poked at a Pet Project | Abban Dunne - Fix your hearts or die I Poked at a Pet Project | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkI Poked at a Pet Project18/04/2022 &bull; 0 minutesProfessionalGame DevI had a few days off and worked on a pet project. It&rsquo;s a game idea I had in 2020 and have been slowly working on when I have the head space.I spent the week white-boxing then filling out a small level and you can see the images below. Cool Peeps&copy; Copyright 2026. All rights reservedAccessibility Statement•Privacy Policy•Shout at me on MastodonThis developer assures you that no GEN-AI was used to make this website.\",\"classification_terms\":[\"posts/2022-04-18-01---game-development\",\"about\",\"privacy\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":3},{\"path\":\"/tags/game-dev/\",\"status\":200,\"title\":\"Game Dev | Abban Dunne - Fix your hearts or die\",\"word_count\":82,\"summary_text\":\"Game Dev | Abban Dunne - Fix your hearts or die Game Dev | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkGame DevI Poked at a Pet Project18/04/2022 &bull; 0 minutesI had a few days off and worked on a pet projectProfessionalGame DevCool Peeps&copy; Copyright 2026. All rights reservedAccessibility Statement•Privacy Policy•Shout at me on MastodonThis developer assures you that no GEN-AI was used to make this website.\",\"classification_terms\":[\"tags/game-dev\",\"about\",\"privacy\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":3},{\"path\":\"/posts/2022-04-11---til-week-15/\",\"status\":200,\"title\":\"TIL Week 15 2022 | Abban Dunne - Fix your hearts or die\",\"word_count\":97,\"summary_text\":\"TIL Week 15 2022 | Abban Dunne - Fix your hearts or die TIL Week 15 2022 | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkTIL Week 15 202211/04/2022 &bull; 0 minutesProfessionalA roundup of the things I learned in the 15th week of 2022.TechnicalA week of refactoring.ProfessionalComing soon to a post near youPersonal NotesComing soon to a post near youCool Peeps&copy; Copyright 2026. All rights reservedAccessibility Statement•Privacy Policy•Shout at me on MastodonThis developer assures you that no GEN-AI was used to make this website.\",\"classification_terms\":[\"posts/2022-04-11---til-week-15\",\"about\",\"privacy\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":3},{\"path\":\"/posts/2022-04-04---til-week-14/\",\"status\":200,\"title\":\"TIL Week 14 2022 | Abban Dunne - Fix your hearts or die\",\"word_count\":162,\"summary_text\":\"TIL Week 14 2022 | Abban Dunne - Fix your hearts or die TIL Week 14 2022 | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkTIL Week 14 202204/04/2022 &bull; 0 minutesProfessionalA roundup of the things I learned in the 14th week of 2022.TechnicalLearned how the V2 PayPal API works. It&rsquo;s pretty similar to Stripe. Created a Test Application.When using Nginx with Docker don&rsquo;t mount your nginx.conf file into the conf.d folder as there&rsquo;s a default file in there that will override it. Instead mount a folder containing your nginx.conf as the conf.d folder.ProfessionalDon&rsquo;t expect external developers to follow your workflows/procedures if you don&rsq\",\"classification_terms\":[\"posts/2022-04-04---til-week-14\",\"about\",\"api\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":3},{\"path\":\"/tags/professional/page/2/\",\"status\":200,\"title\":\"Professional | Abban Dunne - Fix your hearts or die\",\"word_count\":236,\"summary_text\":\"Professional | Abban Dunne - Fix your hearts or die Professional | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkProfessionalTIL Week 13 202230/03/2022 &bull; 0 minutesA roundup of the things I learned in the 13th week of 2022.ProfessionalTIL Week 12 202221/03/2022 &bull; 0 minutesA roundup of the things I learned in the 12th week of 2022.ProfessionalAccessibility Workshop Notes14/03/2022 &bull; 4 minutesPersonal notes from an accessibility workshop I attended.ProfessionalTIL Week 11 202214/03/2022 &bull; 0 minutesA roundup of the things I learned in the 11th week of 2022.ProfessionalTIL Week 10 202210/03/2022 &bull; 0 minutesA roundup of the things I learned\",\"classification_terms\":[\"tags/professional/page/2\",\"about\",\"blog\",\"shop\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":4,\"depth\":3},{\"path\":\"/posts/page/3/\",\"status\":200,\"title\":\"Weblog | Abban Dunne - Fix your hearts or die\",\"word_count\":280,\"summary_text\":\"Weblog | Abban Dunne - Fix your hearts or die Weblog | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkWeblogSometimes I have a brain fart and I manage to write it down.TIL Week 15 202211/04/2022 &bull; 0 minutesA roundup of the things I learned in the 15th week of 2022.ProfessionalTIL Week 14 202204/04/2022 &bull; 0 minutesA roundup of the things I learned in the 14th week of 2022.ProfessionalTIL Week 13 202230/03/2022 &bull; 0 minutesA roundup of the things I learned in the 13th week of 2022.ProfessionalTIL Week 12 202221/03/2022 &bull; 0 minutesA roundup of the things I learned in the 12th week of 2022.ProfessionalAccessibility Workshop Notes14/03/2022\",\"classification_terms\":[\"posts/page/3\",\"about\",\"blog\",\"shop\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":6,\"depth\":3},{\"path\":\"/posts/2022-03-28---til-week-13/\",\"status\":200,\"title\":\"TIL Week 13 2022 | Abban Dunne - Fix your hearts or die\",\"word_count\":150,\"summary_text\":\"TIL Week 13 2022 | Abban Dunne - Fix your hearts or die TIL Week 13 2022 | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkTIL Week 13 202230/03/2022 &bull; 0 minutesProfessionalA roundup of the things I learned in the 13th week of 2022.TechnicalIn php if you have code on an abstract class that checks for interface implementations, when called by a child it will check what the child implements rather than the parent. This is handy when you have a few slightly differently functioning children.PhpStan does not like this however. Though there is the possibility to make an extension.ProfessionalComing soon to a post near youPersonal NotesComing soon to a post near youCo\",\"classification_terms\":[\"posts/2022-03-28---til-week-13\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":4},{\"path\":\"/posts/2022-03-21---til-week-12/\",\"status\":200,\"title\":\"TIL Week 12 2022 | Abban Dunne - Fix your hearts or die\",\"word_count\":102,\"summary_text\":\"TIL Week 12 2022 | Abban Dunne - Fix your hearts or die TIL Week 12 2022 | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkTIL Week 12 202221/03/2022 &bull; 0 minutesProfessionalA roundup of the things I learned in the 12th week of 2022. Quiet week.TechnicalComing soon to a post near youProfessionalComing soon to a post near youPersonal NotesComing soon to a post near youCool Peeps&copy; Copyright 2026. All rights reservedAccessibility Statement•Privacy Policy•Shout at me on MastodonThis developer assures you that no GEN-AI was used to make this website.\",\"classification_terms\":[\"posts/2022-03-21---til-week-12\",\"about\",\"privacy\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":4},{\"path\":\"/posts/2022-03-14-02---accessibility-workshop/\",\"status\":200,\"title\":\"Accessibility Workshop Notes | Abban Dunne - Fix your hearts or die\",\"word_count\":839,\"summary_text\":\"Accessibility Workshop Notes | Abban Dunne - Fix your hearts or die Accessibility Workshop Notes | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkAccessibility Workshop Notes14/03/2022 &bull; 4 minutesProfessionalMy thoughts in italic.IntroBasicsAffects way more people that you might think.A11y is not an accessible name.15% of the world have disabilities Fuck, we work harder on IE support than we do on accessibilityAuditory, Cognitive, Neurological, physical, speech, visual Can be permanent or temporary, must be much harder for themOld people.Check out WebAIM 1 Million Project.97% of web pages have issues. Contrast JFC is this still a thing!?, alt text, input labels, doc langu\",\"classification_terms\":[\"posts/2022-03-14-02---accessibility-workshop\",\"about\",\"support\",\"blog\",\"shop\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":4},{\"path\":\"/posts/2022-03-14-01---til-week-11/\",\"status\":200,\"title\":\"TIL Week 11 2022 | Abban Dunne - Fix your hearts or die\",\"word_count\":112,\"summary_text\":\"TIL Week 11 2022 | Abban Dunne - Fix your hearts or die TIL Week 11 2022 | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkTIL Week 11 202214/03/2022 &bull; 0 minutesProfessionalA roundup of the things I learned in the 11th week of 2022.TechnicalHandy typesafe Spy Generator.PhpStan on level 9 is very strict. You basically have to be as typesafe as C#.ProfessionalNotes from an accessibility workshop I attended.Personal NotesComing soon to a post near youCool Peeps&copy; Copyright 2026. All rights reservedAccessibility Statement•Privacy Policy•Shout at me on MastodonThis developer assures you that no GEN-AI was used to make this website.\",\"classification_terms\":[\"posts/2022-03-14-01---til-week-11\",\"about\",\"privacy\",\"blog\",\"shop\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":4},{\"path\":\"/posts/2022-03-10---til-week-10-2022/\",\"status\":200,\"title\":\"TIL Week 10 2022 | Abban Dunne - Fix your hearts or die\",\"word_count\":133,\"summary_text\":\"TIL Week 10 2022 | Abban Dunne - Fix your hearts or die TIL Week 10 2022 | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkTIL Week 10 202210/03/2022 &bull; 0 minutesProfessionalA roundup of the things I learned in the 10th week of 2022. Short week.TechnicalGetting Travis to run Docker tests with MySQL is trickier than it should be. You need to use a script to wait for the database to be available as depends_on only waits for the container to be running.ProfessionalComing soon to a post near youPersonal NotesComing soon to a post near youCool Peeps&copy; Copyright 2026. All rights reservedAccessibility Statement•Privacy Policy•Shout at me on MastodonThis developer a\",\"classification_terms\":[\"posts/2022-03-10---til-week-10-2022\",\"about\",\"privacy\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":4},{\"path\":\"/posts/2022-03-01---til-week-9/\",\"status\":200,\"title\":\"TIL Week 9 2022 | Abban Dunne - Fix your hearts or die\",\"word_count\":211,\"summary_text\":\"TIL Week 9 2022 | Abban Dunne - Fix your hearts or die TIL Week 9 2022 | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkTIL Week 9 202201/03/2022 &bull; 1 minuteProfessionalA roundup of the things I learned in the 9th week of 2022.TechnicalDoctrine doesn&rsquo;t escape column names so you shouldn&rsquo;t use a MySQL reserved word as a column name.To view the SQL you&rsquo;re trying to run in Doctrine you can set a logger$debug = new DebugStack(); $em-&gt;getConnection()-&gt;getConfiguration()-&gt;setSQLLogger($debug); // Do queries in try catch print_r($debug-&gt;queries); ProfessionalAlways test as close to production as possible. Because interval is not a reserv\",\"classification_terms\":[\"posts/2022-03-01---til-week-9\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":4},{\"path\":\"/posts/2022-02-21-01---til-week-8/\",\"status\":200,\"title\":\"TIL Week 8 2022 | Abban Dunne - Fix your hearts or die\",\"word_count\":203,\"summary_text\":\"TIL Week 8 2022 | Abban Dunne - Fix your hearts or die TIL Week 8 2022 | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkTIL Week 8 202221/01/2022 &bull; 1 minuteProfessionalA roundup of the things I learned in the 8th week of 2022.TechnicalLAST_INSERT_ID() in MySQL is transactional and will return the last ID per connection.Using php PDO you need to use beginTransaction() in order to make your query transactional and ensure you get the last ID back correctly.Php 8.1 enums can have methods!.ID Pre-Generation can be handled by your database if you use Maria DB.Professional2 months away is all it takes to get out of the habit of doing code reviews in the mornings.Pai\",\"classification_terms\":[\"posts/2022-02-21-01---til-week-8\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":4},{\"path\":\"/posts/2022-01-15---making-a-wordle/\",\"status\":200,\"title\":\"Making a Wordle | Abban Dunne - Fix your hearts or die\",\"word_count\":251,\"summary_text\":\"Making a Wordle | Abban Dunne - Fix your hearts or die Making a Wordle | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkMaking a Wordle15/01/2022 &bull; 1 minuteProfessionalI made a spin off of Wordle as a programming exercise on my parental leave. This is a document of the things I learned. The repository is here.Learnings follow.Pseudorandom GenerationThe daily word is selected from a list pseudorandomly using a seed generated from the current day&rsquo;s date.Lazy Local StorageThere are a few things stored in local storage, and a handy way to not have to keep checking that the items exist without too much code branching is to lazy load it.The lazy loader can al\",\"classification_terms\":[\"posts/2022-01-15---making-a-wordle\",\"about\",\"blog\",\"store\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":4},{\"path\":\"/posts/2022-01-01-02---sequential-css-transitions/\",\"status\":200,\"title\":\"Sequential CSS Transitions | Abban Dunne - Fix your hearts or die\",\"word_count\":264,\"summary_text\":\"Sequential CSS Transitions | Abban Dunne - Fix your hearts or die Sequential CSS Transitions | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkSequential CSS Transitions01/01/2022 &bull; 1 minuteProfessionalWhile making this journal I discovered a neat trick for animating list elements sequentially without having to use javascript.It involves CSS Custom Properties and animation-delay.The TrickWhat I didn&rsquo;t know before is that you can set a CSS variable as a html inline style and that can be picked up to be used by your stylesheets. So when you loop out elements you can do something like this:&lt;div v-for=&#34;(post, index) in posts&#34; :key=&#34;index&#34; :style=&#34\",\"classification_terms\":[\"posts/2022-01-01-02---sequential-css-transitions\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":4},{\"path\":\"/posts/page/4/\",\"status\":200,\"title\":\"Weblog | Abban Dunne - Fix your hearts or die\",\"word_count\":586,\"summary_text\":\"Weblog | Abban Dunne - Fix your hearts or die Weblog | Abban Dunne - Fix your hearts or dieSkip to content ThemeHue Lightness Vignette CRT Light mode!Hue, lightness, Vignette, and CRT are deactivated when in light mode. Abban Dunne UX Engineer & Indie Game DeveloperHomeWeblogAboutWorkWeblogSometimes I have a brain fart and I manage to write it down.Peacemaker18/01/2022 &bull; 0 minutesTV show follow up to 2021&rsquo;s Suicide Squad movie. I loved it, This show knows that there&rsquo;s never a wrong time to rock. John Cena is surprisingly great in a comedy role, much better than when he&rsquo;s cast straight.5/5 Hot Dogs 🌭🌭🌭🌭🌭PersonalTV ShowMaking a Wordle15/01/2022 &bull; 1 minuteWiki wiki wild wild wordle.ProfessionalBatman The New 52 Vol 1-209/01/2022 &bull; 0 minutesThe Court of Owls & The City of Owls. I&rsquo;d heard these were g\",\"classification_terms\":[\"posts/page/4\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_do",
        "score_reasons_json": "[]",
        "route_domain": "abandon.ie",
        "display_domain": "abandon.ie"
    },
    "explainability": {
        "summary": "abandon.ie currently scores 42/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": "28/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": "+11.6",
                "tone": "risk",
                "detail": "Authority, search visibility, reach, engagement, and registry stability. Current subsystem score: 34/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": "-26.0",
                "tone": "risk",
                "detail": "Safety thresholds capped the final score until the risk profile improves."
            }
        ],
        "evidence_cards": [
            {
                "label": "Authority and trust",
                "value": "20/100 · trust 36/100",
                "tone": "risk",
                "detail": "62 monthly visitors, 60 organic keywords, brand completeness 62/100, engagement 83/100."
            },
            {
                "label": "Backlink and search evidence",
                "value": "2 referring domains",
                "tone": "good",
                "detail": "2 backlinks across 2 referring domains. Diversity 93/100; spam penalty 6."
            },
            {
                "label": "Registry and domain stability",
                "value": "0.0 years old",
                "tone": "good",
                "detail": "Stability 100/100 · age 0.0 years."
            },
            {
                "label": "Safety and fraud posture",
                "value": "Safety 100/100 · fraud 0/100",
                "tone": "good",
                "detail": "Primary tag Uncertain · safety 100/100 · fraud 0/100."
            }
        ],
        "positives": [
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness.",
            "Registry history looks stable, which supports legitimacy and trust.",
            "HTTPS is working, so the site clears a basic transport-security check.",
            "Backlink diversity looks broad enough to strengthen authority confidence."
        ],
        "risks": [
            "External evidence was mixed or sparse, so the tag model keeps an uncertainty buffer instead of overcommitting.",
            "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-18 23:18:48",
                "tone": "risk",
                "detail": "Crawl and page content sample. Age: 29d ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-03-18 23:18:43",
                "tone": "risk",
                "detail": "Registry profile and stability signals. Age: 29d ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-04-17 10:41:44",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-04-17 10:41:44",
                "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": 68,
        "fraud_clamp_penalty": 26,
        "final_score": 42
    },
    "insight_snapshot": {
        "version": 1,
        "generated_at": "2026-04-17T10:41:44+00:00",
        "domain": "abandon.ie",
        "display_name": "Abban Dunne",
        "is_tracked": false,
        "is_estimated": true,
        "overall_score": 42,
        "authority_score": 20,
        "trust_score": 36,
        "safety_score": 100,
        "fraud_score": 0,
        "confidence_score": 100,
        "traffic_confidence": 28,
        "last_crawled_at": "2026-03-18 23:18:48",
        "crawl_blocked": false,
        "summary": "abandon.ie currently scores 42/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": "28/100"
            },
            {
                "label": "Crawler access",
                "value": "Clean visibility",
                "tone": "good",
                "detail": null
            }
        ],
        "top_positive_signals": [
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness.",
            "Registry history looks stable, which supports legitimacy and trust.",
            "HTTPS is working, so the site clears a basic transport-security check.",
            "Backlink diversity looks broad enough to strengthen authority confidence."
        ],
        "top_risk_signals": [
            "External evidence was mixed or sparse, so the tag model keeps an uncertainty buffer instead of overcommitting.",
            "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-18 23:18:48",
                "tone": "risk",
                "detail": "Crawl and page content sample. Age: 29d ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-03-18 23:18:43",
                "tone": "risk",
                "detail": "Registry profile and stability signals. Age: 29d ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-04-17 10:41:44",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-04-17 10:41:44",
                "tone": "good",
                "detail": "Estimated trend derived from current profile and crawl signals. Age: 0s ago."
            },
            {
                "label": "Audience geography",
                "value": "Not captured yet",
                "tone": "unknown",
                "detail": "Audience mix is estimated from available signals rather than first-party audience logs."
            }
        ],
        "top_tags": [
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown"
            },
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good"
            },
            {
                "code": "C",
                "label": "Caution",
                "tone": "caution"
            }
        ]
    },
    "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-17T14:41:13+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/abandon.ie/refresh",
        "isGuestCooldown": false,
        "cooldownSeconds": 0
    },
    "urlscan_report": {
        "domain": "abandon.ie",
        "status": "idle",
        "submitted_at": null,
        "completed_at": null,
        "last_checked_at": null,
        "last_error": "",
        "submitted_url": "https://abandon.ie/",
        "uuid": "",
        "result_url": "",
        "api_result_url": "",
        "visibility": "public",
        "summary": "No urlscan.io report has been requested for this domain yet.",
        "report": [],
        "report_summary": [],
        "is_fresh": false,
        "can_retry": true,
        "poll_after_seconds": 20
    }
}