{
    "ready": true,
    "site": {
        "id": 0,
        "domain": "bojidar-bg.dev",
        "display_name": "About me",
        "primary_country_code": "",
        "category_name": "Personal: Portfolios & CVs"
    },
    "metrics": {
        "global_rank": 35657,
        "country_rank": 18925,
        "category_rank": 60,
        "daily_pageviews_per_visitor": 3.74,
        "daily_time_on_site_seconds": 323,
        "bounce_rate": 34.24,
        "search_visits_percent": 35.53,
        "total_sites_linking_in": 1,
        "monthly_unique_visitors": 96,
        "recorded_at": "2026-03-19 05:49:09"
    },
    "audit": {
        "score": 73
    },
    "traffic_sources": {
        "direct_percent": 30.83,
        "search_percent": 32.83,
        "social_percent": 5.3,
        "referral_percent": 13.77,
        "email_percent": 7.42,
        "paid_percent": 9.85
    },
    "seo_profile": {
        "backlinks_total": 1,
        "referring_domains": 1,
        "dofollow_backlinks_percent": 100,
        "organic_keywords": 26,
        "indexed_pages": 12,
        "page_speed_score": 92,
        "mobile_friendliness_score": 73,
        "authority_score": 31,
        "spam_risk_score": 3
    },
    "crawl_report": {
        "robots_status": 404,
        "sitemap_status": 404,
        "sitemap_total_urls": 0,
        "crawl_blocked": false,
        "crawl_blocked_by": "",
        "crawl_blocked_reason": "",
        "notes": [
            "Meta description is missing.",
            "robots.txt could not be confirmed.",
            "Sitemap could not be confirmed."
        ],
        "created_at": "2026-03-19 05:49:09"
    },
    "keywords": [
        {
            "keyword": "About me",
            "position": 25,
            "search_engine": "Estimated",
            "checked_at": "2026-04-19 10:56:09",
            "is_estimated": true
        },
        {
            "keyword": "About me personal: portfolios & cvs",
            "position": 27,
            "search_engine": "Estimated",
            "checked_at": "2026-04-19 10:56:09",
            "is_estimated": true
        },
        {
            "keyword": "About me reviews",
            "position": 29,
            "search_engine": "Estimated",
            "checked_at": "2026-04-19 10:56:09",
            "is_estimated": true
        },
        {
            "keyword": "about",
            "position": 31,
            "search_engine": "Estimated",
            "checked_at": "2026-04-19 10:56:09",
            "is_estimated": true
        },
        {
            "keyword": "bojidar",
            "position": 33,
            "search_engine": "Estimated",
            "checked_at": "2026-04-19 10:56:09",
            "is_estimated": true
        },
        {
            "keyword": "dev",
            "position": 35,
            "search_engine": "Estimated",
            "checked_at": "2026-04-19 10:56:09",
            "is_estimated": true
        }
    ],
    "rating": {
        "overall": 60,
        "label": "Healthy",
        "breakdown": [
            {
                "label": "Technical foundation",
                "score": 8,
                "max": 18
            },
            {
                "label": "Authority & trust",
                "score": 9,
                "max": 30
            },
            {
                "label": "Reach & market presence",
                "score": 3,
                "max": 18
            },
            {
                "label": "Search visibility",
                "score": 2,
                "max": 12
            },
            {
                "label": "Engagement & retention",
                "score": 9,
                "max": 10
            },
            {
                "label": "Channels & diversification",
                "score": 4,
                "max": 6
            },
            {
                "label": "Registry stability",
                "score": 3,
                "max": 6
            },
            {
                "label": "Quality system",
                "score": 44,
                "max": 100
            },
            {
                "label": "Reputation system",
                "score": 37,
                "max": 100
            },
            {
                "label": "Safety system",
                "score": 100,
                "max": 100
            },
            {
                "label": "Evidence confidence",
                "score": 100,
                "max": 100
            },
            {
                "label": "External intelligence",
                "score": 52,
                "max": 100
            },
            {
                "label": "API intelligence",
                "score": 54,
                "max": 100
            }
        ],
        "authority_score": 31,
        "quality_score": 44,
        "reputation_score": 37,
        "safety_score": 100,
        "confidence_score": 100,
        "fraud_score": 1,
        "authority_signals": {
            "backlinks": 1,
            "referring_domains": 1,
            "organic_keywords": 26,
            "indexed_pages": 12,
            "monthly_visitors": 96,
            "global_rank": 35657,
            "engagement_score": 78,
            "crawl_quality_score": 81,
            "brand_completeness_score": 62,
            "link_diversity_score": 92,
            "technical_reliability_score": 72,
            "whois_score": 63,
            "whois_age_years": 2.2,
            "whois_stability_score": 100,
            "spam_penalty": 0
        },
        "whois_signals": {
            "age_years": 2.2,
            "days_to_expiry": 1740,
            "days_since_last_registry_update": 31,
            "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": 4,
            "status_count": 2
        }
    },
    "authority_score": 31,
    "trust_score": 75,
    "domain_tags": {
        "primary_tag": "T",
        "primary_tag_score": 78,
        "primary_candidate": "T",
        "primary_candidate_score": 78,
        "tag_codes": "T,Uncertain",
        "tags": [
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good",
                "description": "Strong trust, stability, and low-risk signals were detected.",
                "reason": "Low spam indicators plus strong trust, quality, registry, and stability signals were detected.",
                "message": "The site shows a reasonably trustworthy and stable profile.",
                "priority": 78,
                "score": 78,
                "match_percent": 78,
                "threshold_band": "strong"
            },
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown",
                "description": "External checks stayed inconclusive, so the model avoided a harder verdict.",
                "reason": "The evidence is mixed or only partially corroborated, so the system avoided a harder automated verdict.",
                "message": "The evidence is materially mixed or partially corroborated, so the model is avoiding a harder verdict.",
                "priority": 68,
                "score": 68,
                "match_percent": 68,
                "threshold_band": "strong"
            }
        ],
        "tag_breakdown": [
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good",
                "description": "Strong trust, stability, and low-risk signals were detected.",
                "reason": "Low spam indicators plus strong trust, quality, registry, and stability signals were detected.",
                "message": "The site shows a reasonably trustworthy and stable profile.",
                "priority": 78,
                "score": 78,
                "match_percent": 78,
                "threshold_band": "strong"
            },
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown",
                "description": "External checks stayed inconclusive, so the model avoided a harder verdict.",
                "reason": "The evidence is mixed or only partially corroborated, so the system avoided a harder automated verdict.",
                "message": "The evidence is materially mixed or partially corroborated, so the model is avoiding a harder verdict.",
                "priority": 68,
                "score": 68,
                "match_percent": 68,
                "threshold_band": "strong"
            },
            {
                "code": "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": 7,
                "score": 7,
                "match_percent": 7,
                "threshold_band": "none"
            },
            {
                "code": "C",
                "label": "Caution",
                "tone": "caution",
                "description": "Signals are mixed or weak, so this domain should be treated carefully.",
                "reason": "Review carefully: mixed trust signals.",
                "message": "The current crawl does not show a meaningful caution match.",
                "priority": 0,
                "score": 0,
                "match_percent": 0,
                "threshold_band": "none"
            },
            {
                "code": "Crypto",
                "label": "Crypto drainer risk",
                "tone": "toxic",
                "description": "Wallet-connect or seed-phrase theft patterns were detected.",
                "reason": "Wallet-connect or seed-phrase theft patterns were detected.",
                "message": "No meaningful crypto-drainer signals were detected.",
                "priority": 0,
                "score": 0,
                "match_percent": 0,
                "threshold_band": "none"
            }
        ],
        "nsfw_score": 0,
        "trust_score": 76,
        "manual": {
            "has_changes": false,
            "verified_status": "",
            "tag_codes": "",
            "rating_delta": 0,
            "authority_delta": 0,
            "trust_delta": 0,
            "note": "",
            "adjusted_by": 0,
            "adjusted_at": "",
            "lock_scores": false,
            "lock_flags": false
        },
        "summary": "Trusted (78% match) because low spam indicators plus strong trust, quality, registry, and stability signals were detected.",
        "external_intel": [],
        "external_decision": [],
        "signal_scores": [
            {
                "label": "Strongest tag heuristic",
                "value": "T · 78%",
                "tone": "good",
                "detail": "The highest raw tag match from the heuristic engine before visibility thresholds and manual overrides."
            },
            {
                "label": "Trust score",
                "value": "76/100",
                "tone": "good",
                "detail": "Confidence derived from authority, crawl quality, stability, and risk signals."
            },
            {
                "label": "Authority score",
                "value": "31/100",
                "tone": "spam",
                "detail": "A higher authority score usually means broader reputation and backlink confidence."
            },
            {
                "label": "Spam risk",
                "value": "0/100",
                "tone": "good",
                "detail": "Lower is better. This blends spam indicators with false-positive protections for legitimate sites."
            },
            {
                "label": "Quality score",
                "value": "71/100",
                "tone": "good",
                "detail": "Based on crawl quality, content completeness, and technical evidence."
            },
            {
                "label": "Safety score",
                "value": "100/100",
                "tone": "good",
                "detail": "Higher is safer. Direct fraud signals can heavily cap this even when SEO signals look strong."
            },
            {
                "label": "Fraud score",
                "value": "1/100",
                "tone": "good",
                "detail": "Lower is better. This reflects phishing, drainer, fake-support, fake-shop, and malware signals."
            },
            {
                "label": "Infrastructure risk",
                "value": "7/100",
                "tone": "good",
                "detail": "Lower is better. This reflects the IP, registrar, and nameserver neighbourhood seen by the crawler."
            },
            {
                "label": "Evidence confidence",
                "value": "99/100",
                "tone": "good",
                "detail": "Higher means the crawler had enough pages and registry evidence to make a stronger call."
            },
            {
                "label": "External evidence",
                "value": "Low",
                "tone": "unknown",
                "detail": "Quality of the structured search and review evidence cluster."
            },
            {
                "label": "External decision",
                "value": "Inconclusive",
                "tone": "unknown",
                "detail": "How third-party evidence compares with the current candidate tag."
            },
            {
                "label": "NSFW score",
                "value": "0/100",
                "tone": "good",
                "detail": "Context-aware adult-content detection with medical / educational false-positive reduction."
            },
            {
                "label": "Registry stability",
                "value": "100/100",
                "tone": "good",
                "detail": "Based on age, expiry runway, and the amount of ownership / registrar churn."
            }
        ],
        "signal_sections": [
            {
                "title": "Registry & ownership",
                "items": [
                    {
                        "label": "Domain age",
                        "value": "2.2 years",
                        "tone": "caution",
                        "detail": "Older domains generally carry more historical trust than very new ones."
                    },
                    {
                        "label": "Stability score",
                        "value": "100/100",
                        "tone": "good",
                        "detail": "Penalised by registrar, ownership, and nameserver churn."
                    },
                    {
                        "label": "Days to expiry",
                        "value": "1,740",
                        "tone": "good",
                        "detail": "Very short renewal windows can be a weak trust signal."
                    },
                    {
                        "label": "Registrar / ownership changes",
                        "value": "0 / 0",
                        "tone": "good",
                        "detail": "Frequent ownership churn can weaken trust."
                    },
                    {
                        "label": "Nameserver changes",
                        "value": "0",
                        "tone": "good",
                        "detail": "Repeated infrastructure changes can indicate instability."
                    },
                    {
                        "label": "DNSSEC / privacy",
                        "value": "DNSSEC off · privacy off",
                        "tone": "caution",
                        "detail": "DNSSEC strengthens DNS trust; privacy is neutral on its own."
                    }
                ]
            },
            {
                "title": "Reputation & search evidence",
                "items": [
                    {
                        "label": "Backlinks",
                        "value": "1",
                        "tone": "unknown",
                        "detail": "Broader backlink evidence usually improves confidence."
                    },
                    {
                        "label": "Referring domains",
                        "value": "1",
                        "tone": "unknown",
                        "detail": "Unique linking domains are more useful than raw link volume."
                    },
                    {
                        "label": "Organic keywords",
                        "value": "26",
                        "tone": "unknown",
                        "detail": "Search footprint helps distinguish real sites from thin shells."
                    },
                    {
                        "label": "Indexed pages",
                        "value": "12",
                        "tone": "caution",
                        "detail": "Larger index coverage usually means more evidence to classify from."
                    },
                    {
                        "label": "Brand strength",
                        "value": "62/100",
                        "tone": "good",
                        "detail": "Stronger brand signals reduce false positives for legitimate sites."
                    },
                    {
                        "label": "Risk label",
                        "value": "GOOD",
                        "tone": "unknown",
                        "detail": "This is the raw crawl / heuristic risk label feeding the tag model."
                    }
                ]
            },
            {
                "title": "Crawl, content & technicals",
                "items": [
                    {
                        "label": "HTTP status",
                        "value": "200",
                        "tone": "good",
                        "detail": "Healthy responses make classification more reliable."
                    },
                    {
                        "label": "HTTPS / speed",
                        "value": "HTTPS OK · 642 ms",
                        "tone": "good",
                        "detail": "Slow or broken technical signals weaken confidence."
                    },
                    {
                        "label": "Content words",
                        "value": "376",
                        "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": "11 internal · 3 external",
                        "tone": "good",
                        "detail": "Link patterns help detect thin directories and promo pages."
                    },
                    {
                        "label": "Page speed / mobile",
                        "value": "92/100 · 73/100",
                        "tone": "good",
                        "detail": "Better technical quality generally reduces low-effort site patterns."
                    },
                    {
                        "label": "Crawl access",
                        "value": "Open",
                        "tone": "good",
                        "detail": "The crawler reached the site without an anti-bot challenge."
                    }
                ]
            },
            {
                "title": "External evidence & explainability",
                "items": [
                    {
                        "label": "Decision state",
                        "value": "Inconclusive",
                        "tone": "unknown",
                        "detail": "Structured third-party evidence is still too thin, mixed, or unqualified to force a harder verdict."
                    },
                    {
                        "label": "Evidence quality",
                        "value": "Low",
                        "tone": "unknown",
                        "detail": "Blends source trust, domain matching, evidence diversity, and freshness."
                    },
                    {
                        "label": "Support vs contradiction",
                        "value": "0 / 0",
                        "tone": "unknown",
                        "detail": "Compares how much structured external evidence supports the candidate tag against evidence that contradicts it."
                    },
                    {
                        "label": "Qualified risk sources",
                        "value": "No",
                        "tone": "good",
                        "detail": "Risk tags only promote from external evidence when source diversity or source trust thresholds are met."
                    },
                    {
                        "label": "Uncertainty buffer",
                        "value": "Clear",
                        "tone": "good",
                        "detail": "Prevents thin or mixed external evidence from forcing a stronger tag than the evidence can justify."
                    }
                ]
            }
        ],
        "positives": [
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness."
        ],
        "risks": []
    },
    "traffic_confidence": 42,
    "whois": {
        "current": {
            "id": 31841,
            "domain": "bojidar-bg.dev",
            "source_type": "rdap",
            "rdap_url": "https://pubapi.registry.google/rdap/domain/bojidar-bg.dev",
            "registrar_name": "Porkbun LLC",
            "registrar_handle": "1861",
            "registrant_name": "",
            "registrant_org": "",
            "registrant_country": "",
            "registrant_email": "",
            "abuse_email": "abuse@porkbun.com",
            "created_date": "2024-01-23 21:41:56",
            "updated_date": "2026-03-19 05:48:58",
            "expires_date": "2031-01-23 21:41:56",
            "nameservers_json": "[\"dns1.p06.nsone.net\",\"dns2.p06.nsone.net\",\"dns3.p06.nsone.net\",\"dns4.p06.nsone.net\"]",
            "status_json": "[\"client delete prohibited\",\"client transfer prohibited\"]",
            "dnssec": "unsigned",
            "privacy_protected": 0,
            "content_hash": "3fdd9526aa069d2f44d248cbf35d80bd6c2b26a50982c355ce417d7054efb9de",
            "history_count": 1,
            "last_checked_at": "2026-03-19 05:48:58",
            "last_changed_at": "2026-03-19 05:48:58",
            "created_at": "2026-03-19 05:49:00",
            "updated_at": "2026-03-19 05:49:00"
        },
        "history": [
            {
                "id": 32608,
                "domain": "bojidar-bg.dev",
                "source_type": "rdap",
                "registrar_name": "Porkbun LLC",
                "registrar_handle": "1861",
                "registrant_name": "",
                "registrant_org": "",
                "registrant_country": "",
                "registrant_email": "",
                "abuse_email": "abuse@porkbun.com",
                "created_date": "2024-01-23 21:41:56",
                "updated_date": "2026-03-19 05:48:58",
                "expires_date": "2031-01-23 21:41:56",
                "nameservers_json": "[\"dns1.p06.nsone.net\",\"dns2.p06.nsone.net\",\"dns3.p06.nsone.net\",\"dns4.p06.nsone.net\"]",
                "status_json": "[\"client delete prohibited\",\"client transfer prohibited\"]",
                "dnssec": "unsigned",
                "privacy_protected": 0,
                "content_hash": "3fdd9526aa069d2f44d248cbf35d80bd6c2b26a50982c355ce417d7054efb9de",
                "checked_at": "2026-03-19 05:48:58",
                "change_summary": "Initial WHOIS snapshot captured.",
                "created_at": "2026-03-19 05:48:58"
            }
        ],
        "signals": {
            "age_years": 2.2,
            "days_to_expiry": 1740,
            "days_since_last_registry_update": 31,
            "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": 4,
            "status_count": 2
        }
    },
    "discovered_domain": {
        "id": 75129,
        "domain": "bojidar-bg.dev",
        "first_seen_at": "2026-03-15 19:50:47",
        "last_crawled_at": "2026-03-19 05:49:09",
        "last_title": "About me — bojidar-bg.dev",
        "last_http_status": 200,
        "discovered_from_domain": "tombrandis.uk",
        "depth": 0,
        "backlinks_count": 1,
        "rating_cache": 53,
        "spam_score": 24,
        "risk_label": "good",
        "category_name": "Personal: Portfolios & CVs",
        "primary_country_code": "",
        "internal_links_count": 11,
        "external_links_count": 3,
        "social_profiles_count": 0,
        "content_word_count": 376,
        "title_quality_score": 93,
        "has_meta_description": 0,
        "has_h1": 1,
        "language_code": "",
        "response_time_ms": 642,
        "robots_status": 404,
        "sitemap_status": 404,
        "sitemap_total_urls": 0,
        "quality_score": 71,
        "site_name": "bojidar-bg.dev",
        "canonical_domain": "",
        "favicon_present": 1,
        "schema_org_count": 0,
        "noindex_detected": 0,
        "feed_links_count": 1,
        "https_working": 1,
        "estimated_authority_score": 28,
        "trust_score": 90,
        "nsfw_score": 0,
        "overall_rank_estimate": 17825,
        "primary_tag": "",
        "tag_codes": "",
        "manual_verified_status": "",
        "manual_tag_codes": "",
        "manual_rating_delta": 0,
        "manual_authority_delta": 0,
        "manual_trust_delta": 0,
        "manual_note": null,
        "manual_adjusted_by": null,
        "manual_adjusted_at": null,
        "manual_lock_scores": 0,
        "manual_lock_flags": 0,
        "crawl_blocked": 0,
        "crawl_blocked_by": "",
        "crawl_blocked_reason": null,
        "safety_score": 100,
        "fraud_score": 1,
        "legitimacy_score": 64,
        "infrastructure_risk_score": 7,
        "score_confidence": 99,
        "tag_confidence": 71,
        "category_confidence": 88,
        "deep_crawl_pages": 50,
        "resolved_ip": "63.176.8.218",
        "category_candidates_json": "[{\"category\":\"Personal: Portfolios & CVs\",\"score\":88}]",
        "page_signals_json": "[{\"path\":\"/about\",\"status\":200,\"title\":\"About me — bojidar-bg.dev\",\"word_count\":376,\"summary_text\":\"About me — bojidar-bg.dev About me — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom About me A photo of myself(from karamanev.me) Hello! I am Bojidar Marinov, a.k.a. \\\"bojidar-bg\\\", and I am a human being. I have been programming for over 15 years (starting as early as 7 with the lovely Logo programming language!), participating in competitions, contributing to open source software, and consulting for companies and cooperatives. I currently have a small programming course for kids as a side gig. I also enjoy writing as a hobby and am close to finishing my practice novel in addition to working on this website. I am a Christian (and a Calvinist, if that wasn't enough (; ), was h\",\"classification_terms\":[\"about\",\"about me\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/contact\",\"status\":200,\"title\":\"Contacts — bojidar-bg.dev\",\"word_count\":114,\"summary_text\":\"Contacts — bojidar-bg.dev Contacts — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Contacts As of today, the best way to contact me is via email, but you can also use any of the options listed below: Application Handle Email bojidar.marinov.bg@gmail.com SignalWhatsAppViber +359 87 886 3104 Mastodon @bojidar_bg@mastodon.social GitHub @bojidar-bg LinkedIn bojidar-bg Discord bojidar_bg Telegram bojidar_bg Facebook bojidar.marinov.bg Matrix @bojidar-bg:matrix.org Codeberg bojidar-bg Furthermore, here are a few more places on the web I hang around: Application Handle IRC/Libera.chat bojidar-bg (semi-active) GitLab bojidar-bg CodePen bojidar-bg Lichess bojidar-bg OpenGameArt boji\",\"classification_terms\":[\"contact\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/privacy\",\"status\":200,\"title\":\"Privacy policy — bojidar-bg.dev\",\"word_count\":189,\"summary_text\":\"Privacy policy — bojidar-bg.dev Privacy policy — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Privacy policy In short: This site does not use cookies nor does it employ any technical means to track it users. However, your IP address might still be automatically recorded and stored by Netlify, the company hosting this site, corresponding to their policy. And, if you view any of the videos embedded into this site (e.g. part of my programming course), it is possible your IP address to be automatically stored by a server operated by me and offered by Hetzner, as that's where the videos are stored. Any data submitted through forms or sent over email is stored by Google, the company h\",\"classification_terms\":[\"privacy\",\"about\",\"contact\",\"company\",\"address\",\"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\":1,\"depth\":1},{\"path\":\"/about/\",\"status\":200,\"title\":\"About me — bojidar-bg.dev\",\"word_count\":376,\"summary_text\":\"About me — bojidar-bg.dev About me — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom About me A photo of myself(from karamanev.me) Hello! I am Bojidar Marinov, a.k.a. \\\"bojidar-bg\\\", and I am a human being. I have been programming for over 15 years (starting as early as 7 with the lovely Logo programming language!), participating in competitions, contributing to open source software, and consulting for companies and cooperatives. I currently have a small programming course for kids as a side gig. I also enjoy writing as a hobby and am close to finishing my practice novel in addition to working on this website. I am a Christian (and a Calvinist, if that wasn't enough (; ), was h\",\"classification_terms\":[\"about\",\"about me\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/blog/\",\"status\":200,\"title\":\"Blog — bojidar-bg.dev\",\"word_count\":977,\"summary_text\":\"Blog — bojidar-bg.dev Blog — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Blog A place where I write about the things that intrigue me—whether that be technology, software development, economics, writing, or the occasional theological article. Might end up split into multiple sections if the intended audiences for different articles are too disparate, but for now, it's all here, in one place. Hope you find the articles enjoyable! Place memories Sketches of a few memories I associate with places life 100DaysToOffload 2026-03-08 Bojidar Marinov | 0.9k words Jigsaw puzzle maths Can you use math to solve jigsaw puzzles? (yes, because math's awesome!) math 100DaysToOffload\",\"classification_terms\":[\"blog\",\"about\",\"contact\"],\"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\":32,\"depth\":1},{\"path\":\"/projects/\",\"status\":200,\"title\":\"Projects — bojidar-bg.dev\",\"word_count\":1374,\"summary_text\":\"Projects — bojidar-bg.dev Projects — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Projects Apocryph Apocryph is the realization of autonomous agents—programmatic entities able to act on their own without depending on something external for their continued survival. Or, in simpler terms, Apocryph is about programs able to hold secrets and pay for their own execution. The project started out as a C#-based blockchain, then turned into a network of independent blockchains, then a federation of cloud providers accepting cryptocurrency payments, to finally become a toolkit for running autonomous programs within Trusted Execution Enclaves. I played a key role in analyzing the pro\",\"classification_terms\":[\"projects\",\"about\",\"contact\",\"terms\",\"payment\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/now/\",\"status\":200,\"title\":\"Current tidings - January — bojidar-bg.dev\",\"word_count\":538,\"summary_text\":\"Current tidings - January — bojidar-bg.dev Current tidings - January — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Current tidings - January A \\\"Tree of Life\\\" wooden jigsaw I had the pleasure of solving, courtesy of my cousin. Thanks, cousin! 😊 Happy new year! And Merry Christmas, for those of you still celebrating about a month later! 😁 The holidays at the end of last year afforded me plenty of time to wind down after half a month of full time work. It was a very blessed time visiting my extended family and helping prepare a variety of holiday dishes, like banitsa-s, medovinki (gingerbread), stuffed dried peppers with beans, salads, more salads, and the traditional pogacha (baked bread) w\",\"classification_terms\":[\"now\",\"about\",\"contact\",\"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\":3,\"depth\":1},{\"path\":\"/ideas/\",\"status\":200,\"title\":\"Ideas — bojidar-bg.dev\",\"word_count\":3780,\"summary_text\":\"Ideas — bojidar-bg.dev Ideas — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Assorted ideas A hexagon-triangle tiling made out of neocube magnets. This page is a list of ideas I... might get around to work on one day, but could serve as inspiration for you in the meantime. All the ideas are free! You can take one and turn it into something greater than I ever could! If you want to share your thoughts/prototypes/projects inspired by any of those ideas, feel free to contact me. Will-do-eventually ideas / todos These ideas will get worked on. Surely! As such, this part of the page is effectively a long-term todo list. Website ideas Things I should maybe probably do for this\",\"classification_terms\":[\"ideas\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/contact/\",\"status\":200,\"title\":\"Contacts — bojidar-bg.dev\",\"word_count\":114,\"summary_text\":\"Contacts — bojidar-bg.dev Contacts — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Contacts As of today, the best way to contact me is via email, but you can also use any of the options listed below: Application Handle Email bojidar.marinov.bg@gmail.com SignalWhatsAppViber +359 87 886 3104 Mastodon @bojidar_bg@mastodon.social GitHub @bojidar-bg LinkedIn bojidar-bg Discord bojidar_bg Telegram bojidar_bg Facebook bojidar.marinov.bg Matrix @bojidar-bg:matrix.org Codeberg bojidar-bg Furthermore, here are a few more places on the web I hang around: Application Handle IRC/Libera.chat bojidar-bg (semi-active) GitLab bojidar-bg CodePen bojidar-bg Lichess bojidar-bg OpenGameArt boji\",\"classification_terms\":[\"contact\",\"about\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/курс/\",\"status\":200,\"title\":\"Курс 'Програмиране с Божидар' — bojidar-bg.dev\",\"word_count\":3023,\"summary_text\":\"Курс 'Програмиране с Божидар' — bojidar-bg.dev Курс 'Програмиране с Божидар' — bojidar-bg.dev Skip to content Божидар Маринов FOSS ентусиаст, програмист,писател, човек За мен Курс по програмиране - Уроци по програмиране Контакти Страници на английски: Блог (en) Проекти (en) Абонирайте се с Atom Трудно намирате учебни пособия по програмиране? Искате децата да разбират компютрите в дълбочина? Да използват бързо развиващите се технологии в целия им потенциал? Ако е така, заповядайте в курса по: CRT монитор. Този тип монитори все още се използваха когато започнах да се занимавам с програмиране.(от OpenClipArt) Програмиране с Божидар \\\"Програмиране с Божидар\\\" е онлайн курс по програмиране на JavaScript за деца и юноши между 12 и 18 години. В него се стремя да предам не само умението за писане на код, но и да представя в дълбочина как работи\",\"classification_terms\":[\"курс\"],\"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\":1,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":3,\"depth\":1},{\"path\":\"/cv/\",\"status\":200,\"title\":\"Bozhidar Marinov - CV\",\"word_count\":392,\"summary_text\":\"Bozhidar Marinov - CV Bozhidar Marinov - CV Also available in PDF Sofia, Bulgaria | +359 87 886 3104 | bojidar-bg.dev bojidar.marinov.bg@gmail.com | linkedin.com/in/bojidar-bg Bozhidar Marinov Senior Full-stack Software Engineer Software Engineer with 10 years of experience developing open source projects, collaborating remotely, mentoring teammates, designing complex system architectures, solving problems across the whole stack, streamlining CI/CD and developer experience, and delivering clean, documented, maintainable code. Experience \\\"Programming with Bojidar\\\", Bulgaria Self-employed Jan 2023—Present Taught JavaScript to a total of 20 kids aged 11~15; with students making and presenting their own small projects Reached ~50 people via Facebook and email during business research and converted 18% of them into\",\"classification_terms\":[\"cv\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/за-мен/\",\"status\":200,\"title\":\"За мен — bojidar-bg.dev\",\"word_count\":380,\"summary_text\":\"За мен — bojidar-bg.dev За мен — bojidar-bg.dev Skip to content Божидар Маринов FOSS ентусиаст, програмист,писател, човек За мен Курс по програмиране - Уроци по програмиране Контакти Страници на английски: Блог (en) Проекти (en) Абонирайте се с Atom За мен A photo of myself(taken for karamanev.me) Здравейте и заповядайте в моя уеб сайт! Hello, and welcome to my website! (: This page is also available in English Казвам се Божидар Маринов / \\\"bojidar-bg\\\". Програмист съм от повече от 15 години (като започнах на цели 7 години с програмния език Лого)—като съм работил по проекти в различни сфери, от уеб сайтове, мобилни приложения и компютърни игри, та чак дори до блокчейн технологии. Освен това до някаква степен съм и преподавател. Конкретно, организирам курс по програмиране за деца (12-18) като собствен малък бизнес—к\",\"classification_terms\":[\"за-мен\"],\"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\":\"/медии/\",\"status\":200,\"title\":\"В медиите — bojidar-bg.dev\",\"word_count\":426,\"summary_text\":\"В медиите — bojidar-bg.dev В медиите — bojidar-bg.dev Skip to content Божидар Маринов FOSS ентусиаст, програмист,писател, човек За мен Курс по програмиране - Уроци по програмиране Контакти Страници на английски: Блог (en) Проекти (en) Абонирайте се с Atom В медиите Като един от първите домашни ученици в България съм има доста интервюта и различни медийни изяви през годините. Ето един кратък списък: 2024-05-30 — (видео) \\\"Християнство и цивилизация – Християнство и икономика\\\", Жираф Кафе Панелна дискусия на тема икономика и християнство. Икономиката ми е интерес от години и за мен беше удоволствие да разговарям по темата с двама тъй сладкодумни събеседници. 😃 2023-11-15 — (видео) \\\"На домашното образование му е нужна свобода, а не конкретни регламенти и закони\\\", Bloomberg България Първото ми предаване на живо след 2014\",\"classification_terms\":[\"медии\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":11,\"depth\":1},{\"path\":\"/blog/2026-03-08-place-memories/\",\"status\":200,\"title\":\"Place memories — bojidar-bg.dev\",\"word_count\":991,\"summary_text\":\"Place memories — bojidar-bg.dev Place memories — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Place memories Memories are odd little critters. Living in our minds, they hide away in the deepest corners, forgotten, blending in the darkness... only to reawaken and scurry back when we flash a light at them. And, boy, are there a lot of ways to shine a light at memories! Friends, a words, other thoughts; the slightest mention of something related is enough. Or perhaps, it's smells, tastes, textures, or just music, or a drawing... or, what I am exploring today: places. Lake A location pin from OpenStreetMaps on a highway by an artificial lake I often travel by bus between Sofia and P\",\"classification_terms\":[\"blog/2026-03-08-place-memories\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2026-02-14-puzzle-maths/\",\"status\":200,\"title\":\"Jigsaw puzzle maths — bojidar-bg.dev\",\"word_count\":1092,\"summary_text\":\"Jigsaw puzzle maths — bojidar-bg.dev Jigsaw puzzle maths — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Jigsaw puzzle maths If I were to ask you to imagine a jigsaw puzzle, you will probably think of something like this, at least as far as puzzle shapes are concerned: A pieces of a puzzle of mixed shapes with no edge pieces. Different-shaped pieces have been colored differently:pink for pieces with three \\\"in\\\" or three \\\"out\\\" edges, light pink for \\\"bent\\\"/\\\"corner\\\" pieces with two \\\"out\\\" edges next to each other,and white for \\\"regular\\\"/\\\"straight\\\" pieces that have two \\\"out\\\" edges opposite each other And if I were to ask you to think of a single jigsaw puzzle piece, chances are good that yo\",\"classification_terms\":[\"blog/2026-02-14-puzzle-maths\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2026-01-23-shoestring-lentils/\",\"status\":200,\"title\":\"Shoestring lentils — bojidar-bg.dev\",\"word_count\":424,\"summary_text\":\"Shoestring lentils — bojidar-bg.dev Shoestring lentils — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom A shoestring-budget lentils recipe The dried carrots and onions, mixed (This article dedicated to the naysayers claiming I can't write under a thousand words.) Recently, I was at a nuts and fruits store, when I noticed they sell dried onions and carrots. Those are the two things I use for every soup, so my cooking brain geared into thinking they could be a ready supply when I don't have fresh ingredients. Then, my blogging brain turned as I saw these vegetables are extremely cheap (about 7€/kilo), with serious \\\"one dollar diet\\\" potential. So, I bought some. And made a shoestring len\",\"classification_terms\":[\"blog/2026-01-23-shoestring-lentils\",\"about\",\"contact\",\"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\":2,\"depth\":2},{\"path\":\"/blog/2026-01-18-emojis/\",\"status\":200,\"title\":\"Emojis I use — bojidar-bg.dev\",\"word_count\":2042,\"summary_text\":\"Emojis I use — bojidar-bg.dev Emojis I use — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Emojis I use — and where I found them Emojis are fantastically vague. Since any emoji can stand in for two, maybe three, emotions/intents, sometimes not even context is enough to decipher what a given emoji means. Part of the problem is that emojis are pictograms, and when fonts change, what you used to express with :pleading_face: might no longer fit the new image. The other part is that meanings assigned to specific pictures are somewhat arbitrary; to the point that I'm certain whoever named 😕, :confused: is secretly an alien (/j). Tone tags are way better at expressing subtext. /g \\\"(:\",\"classification_terms\":[\"blog/2026-01-18-emojis\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-12-27-metro-card/\",\"status\":200,\"title\":\"Tea with a metro card — bojidar-bg.dev\",\"word_count\":2243,\"summary_text\":\"Tea with a metro card — bojidar-bg.dev Tea with a metro card — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Tea with a metro card That's me!A Sofia Metro card standing on two wire legs (inspired by Eclectech's doodles), waving at/inviting the audience for a hug, with a beaming stickered smile. Editor's note: This is a CSS-powered semi-interactive article. If you want, you can disable all interactive elements on the page using the checkbox below: Disable article interactivity Helloooo! It's me! Darla! So excited to meet youu! Excited to meet you too! Yess! Enchantée! yay! 🎉 Please, please, come in! Make yourselves at home! There's place for everybody! Yess.. want to sit over here on the\",\"classification_terms\":[\"blog/2025-12-27-metro-card\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-12-11-new-job/\",\"status\":200,\"title\":\"I'm starting a new job! — bojidar-bg.dev\",\"word_count\":1282,\"summary_text\":\"I'm starting a new job! — bojidar-bg.dev I'm starting a new job! — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom I'm starting a new job! Editor's note: This post was supposed to go out on the 1st of December. Due to... foreseeable life busyness getting in the way, it was regretfully delayed by over a week. Please excuse this editor's inability to find an earlier time to edit this! 😬 After months of searching the software development market, I've found a job! 🎉 Or, so I don't claim credit for what I have not done: after applying in different places, I've been found by a company willing to employ me! 😊 Or better yet, as it was an answer to prayers: I've been blessed with a job. ✨ The job is\",\"classification_terms\":[\"blog/2025-12-11-new-job\",\"about\",\"contact\",\"company\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-11-11-wordle-libreoffice/\",\"status\":200,\"title\":\"Wordle in LibreOffice — bojidar-bg.dev\",\"word_count\":2546,\"summary_text\":\"Wordle in LibreOffice — bojidar-bg.dev Wordle in LibreOffice — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Implementing Wordle in LibreOffice with JavaScript macros It is the Month of LibreOffice—time to be awesome with LibreOffice, whether that's spreading the word, supporting others, translating, documenting, bugfixing, or coding new features! Given that LibreOffice is looking for developers to improve the scripting support and change their current JavaScript runtime (Rhino), I wondered... What's scripting LibreOffice in JavaScript like, today? (Spoilers: it's hard to start using JavaScript macros, but they work surprisingly well! ✨) A game of Wordle inside of LibreOffice Download t\",\"classification_terms\":[\"blog/2025-11-11-wordle-libreoffice\",\"about\",\"contact\",\"support\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-11-07-hanabi-trust/\",\"status\":200,\"title\":\"Learning to trust with Hanabi — bojidar-bg.dev\",\"word_count\":1652,\"summary_text\":\"Learning to trust with Hanabi — bojidar-bg.dev Learning to trust with Hanabi — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Learning to trust with Hanabi What does it mean to \\\"trust\\\" someone? I could say trusting someone means assuming they would do me no harm—in the sense of trusting people on the street to not pull a knife on me. Or, to make it less personal, perhaps trusting someone means expecting them to do no harm, in general—and thus that a \\\"trustworthy\\\" individual would not steal someone else's wallet foolishly left on a public bench. That is how I understood \\\"trust\\\" in the past—an extension of giving benefit of doubt and of assuming stupidity over malice. I would carefully plan around\",\"classification_terms\":[\"blog/2025-11-07-hanabi-trust\",\"about\",\"contact\",\"wallet\",\"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\":2},{\"path\":\"/blog/2025-11-03-ideas-page/\",\"status\":200,\"title\":\"I made an ideas page! — bojidar-bg.dev\",\"word_count\":397,\"summary_text\":\"I made an ideas page! — bojidar-bg.dev I made an ideas page! — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Ideas page I have a large stash of random bookmarks and notes tagged \\\"Ideas\\\" that I've been meaning to get around to. When I discovered /ideas pages through AboutIdeasNow, a directory of websites with /about, /now, and /ideas, it seemed like the perfect excuse to go through the stash and cherry-pick the best ideas for sharing. You can read all of those on the newly-added Ideas page! It's in the sidebar, and might be updated semi-occasionally. A hexagon-triangle tiling made out of neocube magnets. Hazelnut for scale. Inspiration According to AboutIdeasNow, an \\\"ideas\\\" page should e\",\"classification_terms\":[\"blog/2025-11-03-ideas-page\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-10-29-memories-of-october/\",\"status\":200,\"title\":\"Memories of October: a collage of blogs — bojidar-bg.dev\",\"word_count\":1432,\"summary_text\":\"Memories of October: a collage of blogs — bojidar-bg.dev Memories of October: a collage of blogs — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom This article utilizes a slide-based presentation best viewed in a browser with CSS. Memories of October: a collage of blogs Here's a fun lil' blogging challenge for y'all: Take a list of blogs you follow and/or have read. Go to each of those blogs, and look at their articles from previous years, that were written on the same date, week, or month as today. Make a collage of the articles. Doesn't matter how you pick which articles to use: the point is to have fun and make something cool! (It doesn't even have to be a visual collage. It could be a textual montage o\",\"classification_terms\":[\"blog/2025-10-29-memories-of-october\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-10-26-sorting-feeds/\",\"status\":200,\"title\":\"Sorting RSS feeds — bojidar-bg.dev\",\"word_count\":1102,\"summary_text\":\"Sorting RSS feeds — bojidar-bg.dev Sorting RSS feeds — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Sorting the RSS and Atom feeds I follow YouTube's recommendations distract me. That's why I've used uBlock Origin to hide all links to YouTube's Home page and all the recommendations that show in the sidebar and at the end of videos, and I interact with the Subscriptions and Search pages instead. However, even those two pages have become worse, with large video thumbnails, forced Shorts display, and irrelevant search results, all of which make it hard to find the videos I care about, and distract me with videos I don't care about. So today, I've decided it's about time I stop checkin\",\"classification_terms\":[\"blog/2025-10-26-sorting-feeds\",\"about\",\"contact\",\"blog\",\"links\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-10-24-bare-git-cicd/\",\"status\":200,\"title\":\"Simple CI/CD with bare git repositories — bojidar-bg.dev\",\"word_count\":2802,\"summary_text\":\"Simple CI/CD with bare git repositories — bojidar-bg.dev Simple CI/CD with bare git repositories — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Sweet and simple CI/CD with bare git repositories Implementing continuous deployment is often a massive undertaking, requiring developers to write a hard-to-debug YAML files full of security traps, courtesy of GitHub Actions and complex Kubernetes clusters. But... it doesn't have to be that complex! With just Git and SSH, we can have fast, easy-to-debug deployments that feel like magic. Git supports pushing changes to a remote server over SSH. You can configure a shell script hook, which runs when new changes are received. That shell script can do anything, incl\",\"classification_terms\":[\"blog/2025-10-24-bare-git-cicd\",\"about\",\"contact\",\"support\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":3,\"depth\":2},{\"path\":\"/blog/2025-10-10-websites-down-under/\",\"status\":200,\"title\":\"What's up with all the cool Australian websites? — bojidar-bg.dev\",\"word_count\":1445,\"summary_text\":\"What's up with all the cool Australian websites? — bojidar-bg.dev What's up with all the cool Australian websites? — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom What's up with all the cool Australian websites? The Internet is a vast space—of which I can claim to have explored only a tiny, tiny bit. And, as previously mentioned, I've discovered that a good bit of the small, personal websites on the Internet are, in fact, quite cool. 😎 However, not all cool websites are small, personal websites. There are some cool websites made by groups of people as well! And also, there are cool, personal websites, that are actually rather \\\"large\\\"—ranking near the top in search results!—even if they are in many ways part of th\",\"classification_terms\":[\"blog/2025-10-10-websites-down-under\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-10-08-despotify/\",\"status\":200,\"title\":\"Starting a personal music library — bojidar-bg.dev\",\"word_count\":1262,\"summary_text\":\"Starting a personal music library — bojidar-bg.dev Starting a personal music library — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Leaving Spotify to start a personal music library When I started my Spotify journey, my goal was been to get closer to friends through music. In the process, I also gained the goal of having a personal music collection I can turn to while working. Yet, I'm more and more convinced that Spotify is not the best tool to achieve either goal—so this September, I finally made the switch and cancelled my Spotify subscription after 4-5 years of listening to music there. My alternative to Spotify: building up a personal library of music albums. Pictured: the first two CDs I bou\",\"classification_terms\":[\"blog/2025-10-08-despotify\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-10-03-small-web-contact/\",\"status\":200,\"title\":\"Contacting the small web — bojidar-bg.dev\",\"word_count\":3417,\"summary_text\":\"Contacting the small web — bojidar-bg.dev Contacting the small web — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Contacting the small web through email: A semi-formal experiment \\\"Exploring the small web\\\" has been one of my most successful articles to date. While I don't currently run analytics, I know that it was a successful article that people enjoyed because... people reached out and told me they liked it! And upon reflection, I realized that this very metric—\\\"did people contact me\\\"—is one of the most important metrics for me, personally—more critical than \\\"page views\\\", \\\"likes\\\", \\\"bookmarks\\\", \\\"shares\\\", or any other nice, fun, numeric metric like them. This in turn led me to the followi\",\"classification_terms\":[\"blog/2025-10-03-small-web-contact\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":4,\"depth\":2},{\"path\":\"/blog/2025-09-26-jane-eyre/\",\"status\":200,\"title\":\"To Thornfield Hall — bojidar-bg.dev\",\"word_count\":2618,\"summary_text\":\"To Thornfield Hall — bojidar-bg.dev To Thornfield Hall — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom To Thornfield Hall - a review of Charlotte Brontë's Jane Eyre Recently (over the course of last month), I've been on a Jane Eyre craze. To be honest, this blog was been partially responsible for it; once I felt the urge to learn more about the story, book, movies, and author, I realized I might be able to turn it into an article, and from there it was a matter of time before I gave in and watched four movies and read the whole book. 😅 It all began when I was back at my mom's place, and we sat down to watch a movie together. She was sure we had watched Jane Eyre before, but after a c\",\"classification_terms\":[\"blog/2025-09-26-jane-eyre\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":3,\"depth\":2},{\"path\":\"/blog/2025-08-28-joining-xee/\",\"status\":200,\"title\":\"Joining forces on Xee — bojidar-bg.dev\",\"word_count\":1620,\"summary_text\":\"Joining forces on Xee — bojidar-bg.dev Joining forces on Xee — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Joining forces on Xee, the Rust XPath/XSLT library Recently, an article has been making the rounds on social media around me (So.. Mastodon and top Hacker News posts 😁). It is titled, \\\"Google is killing the open web\\\", and it analyzes the recent proposal to remove XSLT support from browsers. Now, I'm not here to pronounce judgment on browser vendors concerning their desire to drop support for an open standard which underpins parts of the Internet. If it were up to me, we would have a wildly flexible plugin system which lets us use XSLT, RSS, Gemini, Gopher and dozens of other prot\",\"classification_terms\":[\"blog/2025-08-28-joining-xee\",\"about\",\"contact\",\"support\",\"news\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-08-26-bugs-done-part-2/\",\"status\":200,\"title\":\"BugsDoneQuick: Days 3-4 — bojidar-bg.dev\",\"word_count\":3079,\"summary_text\":\"BugsDoneQuick: Days 3-4 — bojidar-bg.dev BugsDoneQuick: Days 3-4 — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom BugsDoneQuick: Days 3-4 recap: Let there be light The improvised \\\"lightbox\\\" I used for streaming July 6th through 13th was a busy week for me. In a previous post I recapped the events for my BugsDoneQuick event up to the end of day two, after I had gone through my first 6-hour stream, excited for the days to come. Little did I realize the challenge was only just beginning; it hadn't yet dawned on me that I'm only at the third day out of 8, less than half-way through. This post is part of a series: Part 1: covers days 1 and 2; with JavaScript and more JavaScript. Part 2: covers\",\"classification_terms\":[\"blog/2025-08-26-bugs-done-part-2\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-08-11-shiny-things/\",\"status\":200,\"title\":\"Chasing shiny things — bojidar-bg.dev\",\"word_count\":1976,\"summary_text\":\"Chasing shiny things — bojidar-bg.dev Chasing shiny things — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Chasing shiny things Sometimes, I find myself in a peculiar mood: I wake up, hyped that I'm getting something awesome done today. I then spend the day juggling a few less-awesome things. Night comes around, and I realize I really want to do an awesome thing today like I've set out in the morning! So, thus hyped to create something awesome, something great, I open up a text editor, or a code editor, or even an image editor, and... aand... BAM! Nothing! Zilch! A blank! I want to have had done some thing cool, to feel a sense of wonder, but.. nothing flows out of my fingers, so I jus\",\"classification_terms\":[\"blog/2025-08-11-shiny-things\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":3,\"depth\":2},{\"path\":\"/blog/2025-07-24-browse-by-tags/\",\"status\":200,\"title\":\"You can now browse my site by tags! — bojidar-bg.dev\",\"word_count\":1850,\"summary_text\":\"You can now browse my site by tags! — bojidar-bg.dev You can now browse my site by tags! — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom You can now browse my site by tags! Ever since I saw the way Irregular Webcomic lets one browse through the list of strips by tag (\\\"theme\\\"), I knew I wanted to do something similar for my blog too. The idea is that for each tag, I can have a separate \\\"Previous\\\"/\\\"Next\\\" link, instead of only having a Previous/Next link for moving between successive blog articles. Sort of like a skip list! 😁 That sounds simple enough... if I didn't have a wildly complex website build system which insists that each Markdown file is separately used to produce an HTML file, in isolation,\",\"classification_terms\":[\"blog/2025-07-24-browse-by-tags\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-07-19-bugs-done-part-1/\",\"status\":200,\"title\":\"BugsDoneQuick: Days 1-2 — bojidar-bg.dev\",\"word_count\":2641,\"summary_text\":\"BugsDoneQuick: Days 1-2 — bojidar-bg.dev BugsDoneQuick: Days 1-2 — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom \\\"BugsDone\\\": Days 1-2 Ice cream I got myself after the long PeerTube day July 6th through 13th was an incredibly busy week for me. The occasion? My BugsDoneQuick event was going on, and every day I was streaming for about 6 hours, from 8 UTC through 14 UTC, fixing issues and bugs on random free/open-source projects. At the rate of one bugfix every ~two hours, that is a lot of bugfixes—in codebases I knew next to nothing about! You can already watch all the recordings from the BugsDoneQuick streams, but since they are rather lengthy, here is a recap for those of you who prefer re\",\"classification_terms\":[\"blog/2025-07-19-bugs-done-part-1\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-07-15-rest/\",\"status\":200,\"title\":\"Rest — bojidar-bg.dev\",\"word_count\":1486,\"summary_text\":\"Rest — bojidar-bg.dev Rest — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Rest It's finally the 14th of July (*15th by the time I finished drafting this). And I have today written down in my schedule as \\\"a day well deserved rest\\\". I'm honestly exhausted, after the full week of 6-hours-a-day streaming. And while you can already watch the recordings from the BugsDoneQuick streams, I do want also to write a few recap posts, so that I would have a written summary for reflection and posterity. Yet, for today, I would rather focus on the restful day ahead. Keyboard cleaning—time consuming, but surprisingly relaxing if you aren't in a hurry1 How did I rest? First, I made sure\",\"classification_terms\":[\"blog/2025-07-15-rest\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-07-05-stream-practice/\",\"status\":200,\"title\":\"BugsDoneQuick stream practice report — bojidar-bg.dev\",\"word_count\":2102,\"summary_text\":\"BugsDoneQuick stream practice report — bojidar-bg.dev BugsDoneQuick stream practice report — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom BugsDoneQuick practice report Over the past two weeks, I've been steadily gearing up for the BugsDoneQuick stream I'm planning to run between July 6 and 13. The basic concept of that is to be speedrunning solving open-source issues on-stream. As such, in addition to testing and refining my streaming setup, my practice included resolving a few issues in major open-source projects I love and use every day. Primer, what's an open-source issue? Open-source software is software distributed under a license that allows everyone (yes, even you!) to use the software freely,\",\"classification_terms\":[\"blog/2025-07-05-stream-practice\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-06-30-blindtype/\",\"status\":200,\"title\":\"Blindtyping — bojidar-bg.dev\",\"word_count\":1556,\"summary_text\":\"Blindtyping — bojidar-bg.dev Blindtyping — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Blindtyping Editing while writing is an counterproductive habit people get into, where instead of cranking out a draft, they keep looking back at the words they've just written and try to make them just a bit better. While that does result in a nicer first draft, the constant context-switching between editing and writing takes significant time away from the process, and is usually slower than speeding through a draft first then editing it on a second pass. There are multiple tricks one can use to avoid editing while drafting. A few I've heard of include: Typing with white text on white bac\",\"classification_terms\":[\"blog/2025-06-30-blindtype\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-06-27-being-human/\",\"status\":200,\"title\":\"On being human — bojidar-bg.dev\",\"word_count\":1834,\"summary_text\":\"On being human — bojidar-bg.dev On being human — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Abstract photograph of a yellowed book surrounded by a few paper streamers in front of an open window On being human When I started making this website over an year ago, I decided I wanted to have a short tagline that expresses who I am and who I want to present myself as. Practically on the spot, I ended up with the following tagline: FOSS enthusiast, developer, writer, human I haven't been able to bring myself to change that tagline ever since. \\\"FOSS enthusiast\\\" is easy to explain: it's there to signify the importance of free/open-source software holds for me—to a large extent, I see\",\"classification_terms\":[\"blog/2025-06-27-being-human\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-06-25-stream-setup/\",\"status\":200,\"title\":\"Setting up stream — bojidar-bg.dev\",\"word_count\":2068,\"summary_text\":\"Setting up stream — bojidar-bg.dev Setting up stream — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Setting up stream Last week, I was rather busy setting up my stream setup for BugsDoneQuick, the livestreamed event I'm organizing for July 6-13, where I will be fixing FOSS issues in projects I don't know, as fast as I can, in front of an audience. (NOTE: Earlier versions of the BugsDoneQuick announcement post incorrectly said the livestreams would start at 14 UTC instead of 8 UTC. This has been corrected; check the announcement post again for the updated schedule.) The project is still an experiment, as I want to gauge how useful working on-stream is for me and what kind of audienc\",\"classification_terms\":[\"blog/2025-06-25-stream-setup\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-06-19-now-page/\",\"status\":200,\"title\":\"I now have a now page! — bojidar-bg.dev\",\"word_count\":562,\"summary_text\":\"I now have a now page! — bojidar-bg.dev I now have a now page! — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Now page Inspired by Bryan Braum's /now page, my site now also features a \\\"now page\\\", which you can find in the sidebar! Feel free to check it out for my June update; going forward, I'm making myself a calendar event to update it around the same time every month. A photo of some mountain flowers from May, included in the June update Technical details Implementation-wise, the /now page was relatively simple to make; just throw a markdown file in a folder and watch as my website generator converts it to a real page on the website. Adding an Atom feed to it was a bit trickier; as i\",\"classification_terms\":[\"blog/2025-06-19-now-page\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-06-12-bugs-done-quick/\",\"status\":200,\"title\":\"Announcing: BugsDoneQuick, July 6-13 - I need bugs, stat! — bojidar-bg.dev\",\"word_count\":1315,\"summary_text\":\"Announcing: BugsDoneQuick, July 6-13 - I need bugs, stat! — bojidar-bg.dev Announcing: BugsDoneQuick, July 6-13 - I need bugs, stat! — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Announcing: BugsDoneQuick, July 6-13 Hello, world! Hello friends! After a successful poll on the Fediverse, I realized I really really want to do this: I'm going to livestream for a week, July 6-13, while I speedrun fixing bugs and quality-of-life issues on a variety of open-source projects (the more the merrier!). This event, is inspired by GamesDoneQuick, a huge speedrunning competition and convention which collects money towards charities. Inspired by that massive event, I'm going to try to use my corner of the internet to solve as many bugs\",\"classification_terms\":[\"blog/2025-06-12-bugs-done-quick\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-06-11-ai-writing/\",\"status\":200,\"title\":\"The market for AI-written articles is rapidly shrinking — bojidar-bg.dev\",\"word_count\":2513,\"summary_text\":\"The market for AI-written articles is rapidly shrinking — bojidar-bg.dev The market for AI-written articles is rapidly shrinking — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom The market for LLM-written articles is rapidly shrinking There have been a lot of anti-LLM and pro-LLM arguments posted all across the net. Many of those arguments are comprehensive, covering uses of LLM-s ranging from writing summaries to emails to ingesting libraries to writing code to finding bugs—some arguing it's the best things since baked bread, other arguing it's a worse technological hype than Dutch tulips. But, I'm not here to make one of those arguments. Instead, I'm here to say that there is no point for you to be writing blog article\",\"classification_terms\":[\"blog/2025-06-11-ai-writing\",\"about\",\"contact\",\"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\":2,\"depth\":2},{\"path\":\"/blog/2025-06-07-xclip/\",\"status\":200,\"title\":\"Pipelines, GUIs, clipboards, and CLIs — bojidar-bg.dev\",\"word_count\":2530,\"summary_text\":\"Pipelines, GUIs, clipboards, and CLIs — bojidar-bg.dev Pipelines, GUIs, clipboards, and CLIs — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Pipelines, GUIs, clipboards, and CLIs Usually, when you work on a computer, you use a variety of applications, each specific to part of the task. For example, you might use a spreadsheet to do some data wrangling and calculations, then copy that into a word processor for formatting the data as part of a larger essay. Or perhaps, you might be using an image editor to make cover art for a music file, that you then combine in a third application. Or perhaps, you might be using websites like clap.sh to transform your text before pasting it into a chat. It is the same\",\"classification_terms\":[\"blog/2025-06-07-xclip\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":10,\"depth\":2},{\"path\":\"/blog/2025-06-03-small-web-explore/\",\"status\":200,\"title\":\"Exploring the small web — bojidar-bg.dev\",\"word_count\":2033,\"summary_text\":\"Exploring the small web — bojidar-bg.dev Exploring the small web — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Exploring the small webs with Marginalia, powRSS, and more Small blogs, personal experiments, throwbacks to a less computerized past... and more define the small web scene, where various independent websites exist in defiance to the huge platforms that insist on capturing all web users and web traffic to themselves. But how do you find the small websites? Today, I decided to explore some small websites, using a few listing of such sites that I've stumbled across. In particular, I'll be trying the following: Marginalia Search's Explore feature, that gives you a grid of cool webs\",\"classification_terms\":[\"blog/2025-06-03-small-web-explore\",\"about\",\"contact\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/2025-05-28-sharp-tools/\",\"status\":200,\"title\":\"Good, sharp tools (programming toolbox - part 2) — bojidar-bg.dev\",\"word_count\":1755,\"summary_text\":\"Good, sharp tools (programming toolbox - part 2) — bojidar-bg.dev Good, sharp tools (programming toolbox - part 2) — bojidar-bg.dev Skip to content Bojidar Marinov FOSS enthusiast, developer,writer, human About Blog Projects Now Ideas Contact Pages in Bulgarian: Programming course (bg) Subscribe with Atom Good, sharp tools (programming toolbox — part 2) Recently, I got myself safety razor. I've been eyeing those ever since I found out that they are not patented (and thus free from monopoly pricing), so when a friend pointed me to a store that sells them, I had to get one. (For the uninitiated, safety razors are shaving tools that hold a super sharp razo",
        "score_reasons_json": "[]",
        "route_domain": "bojidar-bg.dev",
        "display_domain": "bojidar-bg.dev"
    },
    "explainability": {
        "summary": "bojidar-bg.dev currently scores 60/100. The score is being shaped by a mixed signal profile rather than one dominant factor. Evidence confidence is strong enough for a relatively stable read. This is an estimated profile rather than a manually tracked one. Crawler access looks clean.",
        "badges": [
            {
                "label": "Profile",
                "value": "Estimated profile",
                "tone": "unknown",
                "detail": null
            },
            {
                "label": "Evidence confidence",
                "value": "High confidence",
                "tone": "good",
                "detail": "100/100"
            },
            {
                "label": "Traffic confidence",
                "value": "Moderate confidence",
                "tone": "caution",
                "detail": "42/100"
            },
            {
                "label": "Crawler access",
                "value": "Clean visibility",
                "tone": "good",
                "detail": null
            }
        ],
        "weighted_contributions": [
            {
                "label": "Quality system",
                "points": "+15.0",
                "tone": "caution",
                "detail": "Technical quality, crawl depth, page structure, and implementation hygiene. Current subsystem score: 44/100."
            },
            {
                "label": "Reputation system",
                "points": "+12.6",
                "tone": "risk",
                "detail": "Authority, search visibility, reach, engagement, and registry stability. Current subsystem score: 37/100."
            },
            {
                "label": "Safety system",
                "points": "+32.0",
                "tone": "good",
                "detail": "Fraud, spam, and trust signals from infrastructure, crawl, and registry evidence. Current subsystem score: 100/100."
            }
        ],
        "evidence_cards": [
            {
                "label": "Authority and trust",
                "value": "31/100 · trust 75/100",
                "tone": "caution",
                "detail": "96 monthly visitors, 26 organic keywords, brand completeness 62/100, engagement 78/100."
            },
            {
                "label": "Backlink and search evidence",
                "value": "1 referring domains",
                "tone": "good",
                "detail": "1 backlinks across 1 referring domains. Diversity 92/100; spam penalty 0."
            },
            {
                "label": "Registry and domain stability",
                "value": "2.2 years old",
                "tone": "good",
                "detail": "Stability 100/100 · age 2.2 years · registrar Porkbun LLC · expires in 1,740 days."
            },
            {
                "label": "Safety and fraud posture",
                "value": "Safety 100/100 · fraud 1/100",
                "tone": "good",
                "detail": "Primary tag T · safety 100/100 · fraud 1/100."
            }
        ],
        "positives": [
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness.",
            "Registry history looks stable, which supports legitimacy and trust.",
            "HTTPS is working, so the site clears a basic transport-security check.",
            "Backlink diversity looks broad enough to strengthen authority confidence."
        ],
        "risks": [
            "Traffic and reach estimates are still low confidence, so commercial scale signals may move after more evidence is collected."
        ],
        "freshness": [
            {
                "label": "Crawl evidence",
                "value": "2026-03-19 05:49:09",
                "tone": "risk",
                "detail": "Crawl and page content sample. Age: 1mo ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-03-19 05:48:58",
                "tone": "risk",
                "detail": "Registry profile and stability signals. Age: 1mo ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-04-19 10:56:09",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-04-19 10:56:09",
                "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": 60,
        "fraud_clamp_penalty": 0,
        "final_score": 60
    },
    "insight_snapshot": {
        "version": 1,
        "generated_at": "2026-04-19T10:56:09+00:00",
        "domain": "bojidar-bg.dev",
        "display_name": "About me",
        "is_tracked": false,
        "is_estimated": true,
        "overall_score": 60,
        "authority_score": 31,
        "trust_score": 75,
        "safety_score": 100,
        "fraud_score": 1,
        "confidence_score": 100,
        "traffic_confidence": 42,
        "last_crawled_at": "2026-03-19 05:49:09",
        "crawl_blocked": false,
        "summary": "bojidar-bg.dev currently scores 60/100. The score is being shaped by a mixed signal profile rather than one dominant factor. Evidence confidence is strong enough for a relatively stable read. This is an estimated profile rather than a manually tracked one. Crawler access looks clean.",
        "badges": [
            {
                "label": "Profile",
                "value": "Estimated profile",
                "tone": "unknown",
                "detail": null
            },
            {
                "label": "Evidence confidence",
                "value": "High confidence",
                "tone": "good",
                "detail": "100/100"
            },
            {
                "label": "Traffic confidence",
                "value": "Moderate confidence",
                "tone": "caution",
                "detail": "42/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": [
            "Traffic and reach estimates are still low confidence, so commercial scale signals may move after more evidence is collected."
        ],
        "freshness": [
            {
                "label": "Crawl evidence",
                "value": "2026-03-19 05:49:09",
                "tone": "risk",
                "detail": "Crawl and page content sample. Age: 1mo ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-03-19 05:48:58",
                "tone": "risk",
                "detail": "Registry profile and stability signals. Age: 1mo ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-04-19 10:56:09",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-04-19 10:56:09",
                "tone": "good",
                "detail": "Estimated trend derived from current profile and crawl signals. Age: 0s ago."
            },
            {
                "label": "Audience geography",
                "value": "Not captured yet",
                "tone": "unknown",
                "detail": "Audience mix is estimated from available signals rather than first-party audience logs."
            }
        ],
        "top_tags": [
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good"
            },
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown"
            }
        ]
    },
    "is_tracked": false,
    "is_estimated": true,
    "live_state": {
        "status": "processing",
        "status_label": "Cache build running",
        "message": "The refreshed page cache is still being built for this domain.",
        "updated_at": "2026-04-19T15:28:54+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/bojidar-bg.dev/refresh",
        "isGuestCooldown": false,
        "cooldownSeconds": 0
    },
    "urlscan_report": {
        "domain": "bojidar-bg.dev",
        "status": "error",
        "submitted_at": "2026-03-19T05:48:58+00:00",
        "completed_at": null,
        "last_checked_at": "2026-03-19T05:48:58+00:00",
        "last_error": "Rate limit for 'public' exceeded. Limit is 500 per hour. Reset in 660 seconds.",
        "submitted_url": "https://bojidar-bg.dev/",
        "uuid": "",
        "result_url": "",
        "api_result_url": "",
        "visibility": "public",
        "summary": "urlscan.io scan submission failed.",
        "report": [],
        "report_summary": [],
        "is_fresh": false,
        "can_retry": true,
        "poll_after_seconds": 20
    }
}