<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
    >
<channel>
    <title>Bruno</title>
    <atom:link href="https://bruno.eth.limo/rss.xml" rel="self" type="application/rss+xml" />
    <link>https://bruno.eth.limo/</link>
    <description><![CDATA[
    <p>Forever contrarian. Crypto skeptic. Decentralization maxi. Civil disobedience enthusiast. Ethereum co-funder.</p>

    ]]></description>
    
    
    <item>
        <title>Writing</title>
        <link>https://bruno.eth.limo/63DD4D9A-1A74-497D-A588-54BC52EA7CF0/</link>
        <guid>https://bruno.eth.limo/63DD4D9A-1A74-497D-A588-54BC52EA7CF0/</guid>
        <pubDate>Thu, 02 Apr 2026 18:06:54 +0200</pubDate>
        
        
        <description><![CDATA[
            <style>
/* ── Writing page specific ─────────────────────────────── */
.writing-page { max-width: 100%; margin: 0 auto 60px; }

/* Source / venue badge replaces the status pill */
.writing-venue {
font-size: 0.65rem;
font-weight: 600;
padding: 4px 8px;
border-radius: 12px;
white-space: nowrap;
letter-spacing: 0.03em;
text-transform: uppercase;
}
.writing-venue-sitepoint  { background: rgba(16,185,129,0.10); color: rgb(16,185,129); }
.writing-venue-bitfalls   { background: rgba(245,158,11,0.12);  color: rgb(180,115,0); }
:root[data-theme="dark"] .writing-venue-bitfalls { color: rgb(245,158,11); }
.writing-venue-personal   { background: rgba(99,102,241,0.10);  color: rgb(99,102,241); }
.writing-venue-oreilly    { background: rgba(219,68,55,0.10);   color: rgb(180,40,30); }
:root[data-theme="dark"] .writing-venue-oreilly  { color: rgb(240,100,80); }
.writing-venue-amazon     { background: rgba(255,153,0,0.12);   color: rgb(160,90,0); }
:root[data-theme="dark"] .writing-venue-amazon   { color: rgb(255,153,0); }

/* Archived indicator – tiny, unobtrusive */
.writing-archived {
display: inline-flex;
align-items: center;
gap: 3px;
font-size: 0.62rem;
color: var(--foreground-secondary-color);
opacity: 0.75;
margin-top: 10px;
}
.writing-archived::before { content: "📦"; font-size: 0.7rem; }

/* Year shown under the title */
.writing-year {
font-size: 0.78rem;
color: var(--foreground-secondary-color);
margin: 2px 0 6px;
}

/* Book cards – slightly taller, prominent */
.writing-book-card {
display: flex;
flex-direction: column;
}
.writing-book-spine {
font-size: 2.8rem;
margin-bottom: 4px;
line-height: 1;
}
.writing-book-title {
margin: 6px 0 4px;
font-size: 1rem;
font-weight: 700;
line-height: 1.25;
}
.writing-book-role {
font-size: 0.78rem;
color: var(--foreground-secondary-color);
margin-bottom: 8px;
font-style: italic;
}
.writing-book-desc {
font-size: 0.87rem;
color: var(--foreground-secondary-color);
line-height: 1.55;
flex: 1;
}

/* Series card – wider span with badge row */
.writing-series-badge {
display: inline-flex;
align-items: center;
gap: 5px;
font-size: 0.65rem;
font-weight: 600;
padding: 3px 8px;
border-radius: 12px;
background: rgba(99,102,241,0.10);
color: rgb(99,102,241);
text-transform: uppercase;
letter-spacing: 0.04em;
margin-left: 6px;
vertical-align: middle;
}

/* Archive-link section note */
.writing-archive-note {
font-size: 0.8rem;
color: var(--foreground-secondary-color);
margin: -12px 0 24px;
line-height: 1.5;
}
.writing-archive-note a {
color: var(--foreground-secondary-color);
text-decoration: underline;
text-underline-offset: 2px;
}
</style> 
<div class="writing-page"> 
 <!-- ═══════════════════════════════════════════════════════
BOOKS
════════════════════════════════════════════════════════ --> 
 <section class="project-section"> 
  <div class="project-section-icon"> 
   <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 
    <path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20" />
    <path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z" /> 
   </svg> 
   <h2>Books</h2> 
  </div> 
  <div class="project-grid-3"> 
   <a href="https://www.amazon.com/Jump-Start-PHP-Environment-Language/dp/0994182643" target="_blank" class="project-card writing-book-card"> 
    <div class="project-card-header"> 
     <span class="writing-venue writing-venue-amazon">Amazon · SitePoint</span> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-book-spine">
     🐘
    </div> <h3 class="writing-book-title">Jump Start PHP Environment</h3> 
    <div class="writing-book-role">
     Author · SitePoint, 2014
    </div> <p class="writing-book-desc">A ground-up guide to building a solid, modern PHP development environment — covering VMs, Vagrant, Composer, and the tooling decisions that make or break a PHP project before a line of app code is written.</p> </a> 
   <a href="https://www.oreilly.com/library/view/build-your-first/9781492069263/" target="_blank" class="project-card writing-book-card"> 
    <div class="project-card-header"> 
     <span class="writing-venue writing-venue-oreilly">O'Reilly · SitePoint</span> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-book-spine">
     ⛓️
    </div> <h3 class="writing-book-title">Build Your First Ethereum DApp</h3> 
    <div class="writing-book-role">
     Author · O'Reilly / SitePoint, 2018
    </div> <p class="writing-book-desc">A practical walkthrough of building a complete Ethereum decentralised application from smart contract to frontend — written to bridge the gap between Solidity tutorials and something you could actually ship.</p> </a> 
   <a href="https://www.oreilly.com/library/view/ethereum-tools/9781492069232/" target="_blank" class="project-card writing-book-card"> 
    <div class="project-card-header"> 
     <span class="writing-venue writing-venue-oreilly">O'Reilly · SitePoint</span> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-book-spine">
     🛠️
    </div> <h3 class="writing-book-title">Ethereum: Tools &amp; Skills</h3> 
    <div class="writing-book-role">
     Chapter author · O'Reilly / SitePoint, 2019
    </div> <p class="writing-book-desc">Multi-author collection on the Ethereum developer ecosystem. My chapter: <em>Using Puppeth, the Ethereum Private Network Manager</em> — a practical guide to spinning up private Ethereum networks for testing and development.</p> </a> 
  </div> 
 </section> 
 <!-- ═══════════════════════════════════════════════════════
WEB3 & BLOCKCHAIN FOUNDATIONS
════════════════════════════════════════════════════════ --> 
 <section class="project-section"> 
  <div class="project-section-icon"> 
   <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 
    <circle cx="12" cy="12" r="10" />
    <path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20" />
    <path d="M2 12h20" /> 
   </svg> 
   <h2>Web3 &amp; Blockchain Foundations</h2> 
  </div> 
  <p class="writing-archive-note">Several Bitfalls articles are no longer live at their original URL. Links below go to the best available <a href="https://web.archive.org" target="_blank">Wayback Machine</a> snapshot.</p> 
  <div class="project-grid-3"> 
   <a href="https://web.archive.org/web/20190818085407/https://bitfalls.com/2018/10/15/the-last-nft-non-fungible-token-explanation-post-youll-ever-need/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">🖼️</span>
     </div> 
     <span class="writing-venue writing-venue-bitfalls">Bitfalls</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">The Last NFT Explanation Post You'll Ever Need</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     Oct 2018 — three years before the NFT mainstream moment
    </div> <p class="project-card-desc project-card-desc-sm">Comprehensive explanation of non-fungible tokens covering standards, use-cases, and composability — written when most people still hadn't heard the term.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
   <a href="https://web.archive.org/web/*/https://bitfalls.com/2017/09/19/what-is-ethereum-how-does-it-compare-to-bitcoin/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">₿</span>
     </div> 
     <span class="writing-venue writing-venue-bitfalls">Bitfalls</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">What Is Ethereum and How Does It Compare to Bitcoin?</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     Sep 2017 — widely linked during the 2017 cycle
    </div> <p class="project-card-desc project-card-desc-sm">One of the earliest thorough English-language comparisons of the two networks: architecture, scripting, gas model, and how the goals differ fundamentally.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
   <a href="https://web.archive.org/web/20190207163054/https://bitfalls.com/2018/04/24/whats-the-difference-between-proof-of-work-pow-proof-of-stake-pos-and-delegated-pos/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">⛏️</span>
     </div> 
     <span class="writing-venue writing-venue-bitfalls">Bitfalls</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">PoW vs PoS vs Delegated PoS — What's the Difference?</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     Apr 2018 — still linked in developer onboarding material
    </div> <p class="project-card-desc project-card-desc-sm">Clear breakdown of the three dominant consensus mechanisms, the trade-offs each makes, and what the choice means in practice for a chain's security model.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
   <a href="https://web.archive.org/web/*/https://bitfalls.com/2018/04/15/how-does-the-lightning-network-work/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">⚡</span>
     </div> 
     <span class="writing-venue writing-venue-bitfalls">Bitfalls</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">How Does the Lightning Network Work?</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     Apr 2018
    </div> <p class="project-card-desc project-card-desc-sm">Technically accurate primer on payment channels, routing, and the L2 model — written at a time when Lightning was genuinely hard to explain without losing people.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
   <a href="https://web.archive.org/web/*/https://www.sitepoint.com/non-fungible-tokens-beginners-guide/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">🎴</span>
     </div> 
     <span class="writing-venue writing-venue-sitepoint">SitePoint</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">A Beginner's Guide to NFTs</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     Jun 2021 — published for SitePoint's mainstream developer audience at peak NFT moment
    </div> <p class="project-card-desc project-card-desc-sm">Broad-reach explainer written to demystify NFTs beyond the "overpriced art" framing, explaining standards, provenance, and real-world utility.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
   <a href="https://web.archive.org/web/20210531151133/https://www.sitepoint.com/web3-new-web-new-world/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">🌐</span>
     </div> 
     <span class="writing-venue writing-venue-sitepoint">SitePoint</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Web3: A New Web for a New World</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     May 2021
    </div> <p class="project-card-desc project-card-desc-sm">Manifesto-style piece on the philosophical underpinnings of Web3 — ownership, permissionlessness, and why the architecture of the web shapes what you can build on it.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
  </div> 
 </section> 
 <!-- ═══════════════════════════════════════════════════════
POLKADOT COVERAGE
════════════════════════════════════════════════════════ --> 
 <section class="project-section"> 
  <div class="project-section-icon"> 
   <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 
    <circle cx="12" cy="12" r="2" />
    <circle cx="12" cy="4" r="2" />
    <circle cx="20" cy="16" r="2" />
    <circle cx="4" cy="16" r="2" />
    <path d="m12 6 7.4 4.5M4.6 10.5 12 6m8 6-7.4 4.5M4.6 13.5 12 18" /> 
   </svg> 
   <h2>Polkadot — Early Coverage</h2> 
  </div> 
  <div class="project-grid-3"> 
   <a href="https://web.archive.org/web/*/https://bitfalls.com/2019/05/12/polkadot-vs-ethereum-2-0-on-chain-governance/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">🗳️</span>
     </div> 
     <span class="writing-venue writing-venue-bitfalls">Bitfalls</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Polkadot vs Ethereum 2.0 — On-chain Governance</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     May 2019 — written before most developers had heard of Polkadot
    </div> <p class="project-card-desc project-card-desc-sm">Comparative governance analysis: how on-chain voting works in each system, the role of the council and referenda, and what the design choices mean for protocol upgrades.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
   <a href="https://web.archive.org/web/20221210100209/https://bitfalls.com/2019/12/14/polkadot-for-ethereans-staking/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">🔒</span>
     </div> 
     <span class="writing-venue writing-venue-bitfalls">Bitfalls</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Polkadot for Ethereans — Staking</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     Dec 2019
    </div> <p class="project-card-desc project-card-desc-sm">Clear onboarding for Ethereum developers: how Polkadot's NPoS staking model differs from Ethereum's, what validators and nominators do, and how to start participating.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
   <a href="https://web.archive.org/web/20221210094657/https://bitfalls.com/2019/12/11/polkadot-for-ethereans-transaction-costs-and-economics/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">💸</span>
     </div> 
     <span class="writing-venue writing-venue-bitfalls">Bitfalls</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Polkadot for Ethereans — Transaction Costs &amp; Economics</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     Nov 2019
    </div> <p class="project-card-desc project-card-desc-sm">Fee model, weight-based pricing, and the economic design of Polkadot — how it compares to Ethereum's gas model and what the differences mean for application developers.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
  </div> 
 </section> 
 <!-- ═══════════════════════════════════════════════════════
OPINION & THOUGHT LEADERSHIP
════════════════════════════════════════════════════════ --> 
 <section class="project-section"> 
  <div class="project-section-icon"> 
   <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 
    <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" /> 
   </svg> 
   <h2>Opinion &amp; Thought Leadership</h2> 
  </div> 
  <div class="project-grid-3"> 
   <a href="https://web.archive.org/web/20260212185916/https://bitfalls.com/2020/05/25/opinion-on-private-blockchains/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">🔒</span>
     </div> 
     <span class="writing-venue writing-venue-bitfalls">Bitfalls</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Opinion: On Private Blockchains</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     May 2020 — the "mockchains" piece, cited for years afterward
    </div> <p class="project-card-desc project-card-desc-sm">A blunt, well-argued case against private blockchains — why they solve no meaningful distributed systems problem that a regular database doesn't already solve better.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
   <a href="https://web.archive.org/web/20240908120806/https://bruno.id/dont-force-your-dapps-ui-on-me/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">🎨</span>
     </div> 
     <span class="writing-venue writing-venue-personal">Bruno's Site</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Don't Force Your Đapp's UI on Me</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     2019 — UX philosophy meets decentralisation ideology
    </div> <p class="project-card-desc project-card-desc-sm">A critique of DApps that trap users inside a single UI — arguing that if you're building on an open protocol, the interface should be separable from the logic.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
   <a href="https://bruno.eth.link/BB3599D7-962E-4D07-A12D-8CB2A19B7D69/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">🌿</span>
     </div> 
     <span class="writing-venue writing-venue-personal">Bruno's Site</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Progressive Centralization and Value.eth</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     Jan 2026
    </div> <p class="project-card-desc project-card-desc-sm">The philosophy behind running a website from ENS + IPFS — why downtime resistance and censorship resistance matter as design constraints, not just marketing claims.</p> </a> 
   <a href="https://bruno.eth.link/6AFE14A3-1BBF-4581-B925-FB17B01343D0/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">🪤</span>
     </div> 
     <span class="writing-venue writing-venue-personal">Bruno's Site</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Pingui and the Vendor Lock-in of Modern Vibe Coding SaaS</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     Jan 2026
    </div> <p class="project-card-desc project-card-desc-sm">On how modern AI-assisted coding tools are quietly rebuilding the same SaaS lock-in story developers have been burned by before — and what to do about it.</p> </a> 
  </div> 
 </section> 
 <!-- ═══════════════════════════════════════════════════════
TECHNICAL TUTORIALS
════════════════════════════════════════════════════════ --> 
 <section class="project-section"> 
  <div class="project-section-icon"> 
   <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 
    <polyline points="16 18 22 12 16 6" />
    <polyline points="8 6 2 12 8 18" /> 
   </svg> 
   <h2>Technical Tutorials</h2> 
  </div> 
  <div class="project-grid-2"> 
   <!-- DApp series – wide card --> 
   <a href="https://web.archive.org/web/*/https://www.sitepoint.com/building-dapps-with-ethereum-app-rules-and-blockchain-setup/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon">
      <span style="font-size:24px">🏗️</span>
     </div> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> <h3 class="project-card-title">Building DApps with Ethereum <span class="writing-series-badge">8-part series</span></h3> 
    <div class="writing-year">
     SitePoint · Jul 2018
    </div> <p class="project-card-desc">End-to-end walkthrough of building a production-grade DAO from scratch: token creation, whitelisting, voting, cross-contract communication, and a React Web3 UI. Each part ships a working piece of the StoryDao. Link goes to Part 1.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
   <a href="https://web.archive.org/web/20230202112340/https://bitfalls.com/2020/02/24/adding-web3-logins-to-a-web2-app-part-1/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon">
      <span style="font-size:24px">🔑</span>
     </div> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> <h3 class="project-card-title">Adding Web3 Logins to a Web2 App <span class="writing-series-badge">2-part series</span></h3> 
    <div class="writing-year">
     Bitfalls · Feb 2020
    </div> <p class="project-card-desc">How to retrofit MetaMask-based wallet authentication into a legacy PHP application — useful for any team that wants to add Web3 identity without rebuilding everything. Link goes to Part 1; Part 2 continues the integration.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
  </div> 
  <div class="project-grid-3"> 
   <a href="https://web.archive.org/web/*/https://bitfalls.com/2018/03/31/solidity-development-crash-course-building-blockchain-raffle/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">🎰</span>
     </div> 
     <span class="writing-venue writing-venue-bitfalls">Bitfalls</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Solidity Crash Course: Building a Blockchain Raffle</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     Mar 2018
    </div> <p class="project-card-desc project-card-desc-sm">A standalone Solidity intro for readers who want one focused article — covers randomness, payable functions, and deploying a verifiable onchain lottery.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
   <a href="https://web.archive.org/web/20190818093657/https://bitfalls.com/2019/07/16/outsourcing-sybil-resistance-in-your-dao-with-modifiers/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">🧬</span>
     </div> 
     <span class="writing-venue writing-venue-bitfalls">Bitfalls</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Outsourcing Sybil Resistance in Your DAO with Modifiers</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     Jul 2019
    </div> <p class="project-card-desc project-card-desc-sm">Advanced Solidity pattern for governance systems — how to delegate identity and voter eligibility checks to external contracts so your DAO doesn't have to solve identity itself.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
   <a href="https://web.archive.org/web/20210115113117/https://www.sitepoint.com/flarum-add-web3-address-to-user-profile/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">📋</span>
     </div> 
     <span class="writing-venue writing-venue-sitepoint">SitePoint</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Extending Flarum: Adding a Web3 Address to a User Profile</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     Jan 2021
    </div> <p class="project-card-desc project-card-desc-sm">How to build a Flarum extension that adds a wallet address field to user profiles — practical bridge between a traditional forum and a Web3 identity layer.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
  </div> 
 </section> 
 <!-- ═══════════════════════════════════════════════════════
JOURNALISM & INVESTIGATIONS
════════════════════════════════════════════════════════ --> 
 <section class="project-section"> 
  <div class="project-section-icon"> 
   <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 
    <circle cx="11" cy="11" r="8" />
    <path d="m21 21-4.35-4.35" /> 
   </svg> 
   <h2>Journalism &amp; Investigations</h2> 
  </div> 
  <div class="project-grid-3"> 
   <a href="https://web.archive.org/web/*/https://bitfalls.com/2018/07/04/we-were-involved-with-a-scam-ico-heres-what-happened/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">🚨</span>
     </div> 
     <span class="writing-venue writing-venue-bitfalls">Bitfalls</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">We Were Involved with a Scam ICO — Here's What Happened</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     Jul 2018
    </div> <p class="project-card-desc project-card-desc-sm">First-person account of getting close to a fraudulent project, recognising the signs, and going public rather than quiet. A rare piece of honest documentation from inside an ICO scam.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
   <a href="https://web.archive.org/web/*/https://bitfalls.com/2018/12/01/anatomy-of-a-pump-dump-group/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">📈</span>
     </div> 
     <span class="writing-venue writing-venue-bitfalls">Bitfalls</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">The Anatomy of a Pump &amp; Dump Group</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     Dec 2018 — cited in several later market manipulation analyses
    </div> <p class="project-card-desc project-card-desc-sm">Investigative breakdown of how coordinated pump-and-dump groups actually operate — the Telegram playbook, the timing, and who ends up holding the bag.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
   <a href="https://web.archive.org/web/*/https://bitfalls.com/2018/06/09/think-twice-before-giving-that-ico-project-your-kyc-data/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">🪪</span>
     </div> 
     <span class="writing-venue writing-venue-bitfalls">Bitfalls</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Think Twice Before Giving That ICO Your KYC Data</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     Jun 2018 — still relevant today as KYC farming continues
    </div> <p class="project-card-desc project-card-desc-sm">On the data privacy risks of handing identity documents to anonymous teams running token sales — who collects your passport scans, and why they usually don't need them.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
  </div> 
 </section> 
 <!-- ═══════════════════════════════════════════════════════
GENERAL WEB DEVELOPMENT
════════════════════════════════════════════════════════ --> 
 <section class="project-section"> 
  <div class="project-section-icon"> 
   <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 
    <rect width="14" height="14" x="8" y="8" rx="2" ry="2" />
    <path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" /> 
   </svg> 
   <h2>General Web Development</h2> 
  </div> 
  <div class="project-grid-3"> 
   <a href="https://web.archive.org/web/*/https://www.sitepoint.com/how-to-optimize-mysql-indexes-slow-queries-configuration/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">🗄️</span>
     </div> 
     <span class="writing-venue writing-venue-sitepoint">SitePoint</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">How to Optimize MySQL: Indexes, Slow Queries, Configuration</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     Oct 2017 — the MySQL optimizer still works the same way
    </div> <p class="project-card-desc project-card-desc-sm">Practical, still-accurate guide to query optimization — EXPLAIN output, index types, slow query log, and the configuration knobs that actually matter in production.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
   <a href="https://web.archive.org/web/*/https://www.sitepoint.com/why-is-a-string-called-a-string/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">🧵</span>
     </div> 
     <span class="writing-venue writing-venue-sitepoint">SitePoint</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Why Is a String Called a String?</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     Jul 2017
    </div> <p class="project-card-desc project-card-desc-sm">Etymology meets computer science — tracing the naming of primitive types through decades of programming history and why the words we use for things actually matter.</p> <span class="writing-archived">Wayback Machine snapshot</span> </a> 
   <a href="https://bruno.eth.link/B887286C-A0DF-4DDC-A4FF-8F8F276B1D63/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm">
      <span style="font-size:18px">🧠</span>
     </div> 
     <span class="writing-venue writing-venue-personal">Bruno's Site</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Neural Decorators</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> 
    <div class="writing-year">
     Written ~2014, rescued from Medium in 2025
    </div> <p class="project-card-desc project-card-desc-sm">A 10-year-old piece on AI and human memory, sparked by the TV show <em>Humans</em>. Republished because it still holds up — and because it shouldn't live on a platform that holds your work hostage.</p> </a> 
  </div> 
 </section> 
 <!-- ═══════════════════════════════════════════════════════
RECENT
════════════════════════════════════════════════════════ --> 
 <section class="project-section"> 
  <div class="project-section-icon"> 
   <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 
    <path d="M12 20h9" />
    <path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z" /> 
   </svg> 
   <h2>Recent Writing</h2> 
  </div> 
  <div class="project-grid-2"> 
   <a href="https://bruno.eth.link/2FD5F3AA-F209-4F67-AF03-209370681C50/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon">
      <span style="font-size:24px">🔓</span>
     </div> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> <h3 class="project-card-title">How Cursor and ChatGPT Helped Me Minimise the Damage After Getting Hacked</h3> 
    <div class="writing-year">
     Bruno's Site · Jan 2026
    </div> <p class="project-card-desc">A real incident: accidentally committed a private key, lost funds, and used AI tooling to audit the damage and harden the setup. Honest about what went wrong and specific about what helped.</p> </a> 
   <a href="https://bruno.eth.link/416542E9-3C57-455F-85B9-309D45652290/" target="_blank" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon">
      <span style="font-size:24px">🤖</span>
     </div> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
      <path d="M5 12h14M12 5l7 7-7 7" />
     </svg> 
    </div> <h3 class="project-card-title">Clawdex: I Built a Telegram-Operated Yolo Codex Machine</h3> 
    <div class="writing-year">
     Bruno's Site · Apr 2026
    </div> <p class="project-card-desc">A weekend project: frankensteining old PC parts into two AI assistant nodes controlled via Telegram. Part hardware diary, part AI-tooling experiment, part "what have I done".</p> </a> 
  </div> 
 </section> 
 <!-- ═══════════════════════════════════════════════════════
FULL ARCHIVE LINK
════════════════════════════════════════════════════════ --> 
 <p style="margin-top: 8px; font-size: 0.9rem; color: var(--foreground-secondary-color);"> This is a curated selection. The complete archive of 240+ articles from 2016–2026 is at <a href="https://authory.com/BrunoSkvorc" target="_blank">authory.com/BrunoSkvorc</a>. </p> 
</div>
        ]]></description>
    </item>
    
    <item>
        <title>CV</title>
        <link>https://bruno.eth.limo/AFEB757D-B3B6-4CA2-8B1D-7AE29BF22A1C/</link>
        <guid>https://bruno.eth.limo/AFEB757D-B3B6-4CA2-8B1D-7AE29BF22A1C/</guid>
        <pubDate>Thu, 02 Apr 2026 09:04:40 +0200</pubDate>
        
        
        <description><![CDATA[
            <style>
.cv-page{max-width:100%;margin:0 auto 60px}
.cv-hero{display:grid;grid-template-columns:minmax(0,1.7fr) 180px;gap:20px;align-items:start;padding:16px;border:1px solid var(--border-color);background:var(--background-color);box-shadow:0 12px 32px rgba(0,0,0,0.05);margin-bottom:28px}
.cv-kicker{font-size:.76rem;letter-spacing:.12em;text-transform:uppercase;color:var(--foreground-secondary-color);margin-bottom:6px}
.cv-name{margin:0;font-size:clamp(2rem,4vw,3.2rem);line-height:1.02}
.cv-tagline{margin:8px 0 0;font-size:1rem;line-height:1.6;color:var(--foreground-secondary-color)}
.cv-links{display:flex;flex-wrap:wrap;gap:8px 14px;margin-top:12px;font-size:.92rem}
.cv-links a{color:var(--foreground-color);text-decoration:none;border-bottom:1px solid var(--border-color)}
.cv-summary{margin-top:14px;font-size:.95rem;line-height:1.75}
.cv-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:18px}
.cv-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 14px;text-decoration:none;font-weight:600;border:1px solid var(--border-color);background:var(--code-background-color);color:var(--foreground-color);cursor:pointer;font-family:inherit;font-size:inherit}
.cv-button-primary{background:var(--foreground-color);color:var(--background-color);border-color:var(--foreground-color)}
.cv-button:hover{text-decoration:none;transform:translateY(-1px)}
.cv-photo-shell{border:1px solid var(--border-color);padding:6px;background:var(--code-background-color)}
.cv-photo{display:block;width:100%;aspect-ratio:1/1.15;object-fit:cover}
.cv-role-list{display:grid;gap:12px}
.cv-role{border:1px solid var(--border-color);padding:14px;background:var(--background-color);box-shadow:0 8px 24px rgba(0,0,0,0.03)}
.cv-role-top{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap}
.cv-role-title{margin:0;font-size:1.04rem;line-height:1.3}
.cv-role-company{margin-top:2px;color:var(--foreground-secondary-color);font-size:.92rem}
.cv-role-dates{font-size:.88rem;color:var(--foreground-secondary-color);white-space:nowrap}
.cv-role-listing{margin:10px 0 0;padding-left:18px}
.cv-role-listing li+li{margin-top:6px}
.cv-grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.cv-card{border:1px solid var(--border-color);padding:14px;background:var(--background-color);box-shadow:0 8px 24px rgba(0,0,0,0.03)}
.cv-card h3{margin-top:0;margin-bottom:8px}
.cv-card p:last-child{margin-bottom:0}
.cv-skill-group+.cv-skill-group{margin-top:12px}
.cv-skill-label{display:block;font-size:.8rem;letter-spacing:.08em;text-transform:uppercase;color:var(--foreground-secondary-color);margin-bottom:6px}
.cv-skill-pills{display:flex;flex-wrap:wrap;gap:6px}
.cv-pill{display:inline-flex;align-items:center;padding:5px 9px;border:1px solid var(--border-color);background:var(--code-background-color);font-size:.88rem;line-height:1.2}
.cv-lang-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.cv-lang{border:1px solid var(--border-color);padding:10px;background:var(--background-color);text-align:center}
.cv-lang-name{font-weight:700;font-size:.92rem;margin-bottom:4px}
.cv-lang-level{font-size:.78rem;color:var(--foreground-secondary-color)}
.cv-lang-cefr{display:inline-block;font-size:.72rem;font-weight:600;margin-top:4px;padding:2px 8px;border:1px solid var(--border-color);background:var(--code-background-color)}
.cv-ref{border:1px solid var(--border-color);padding:14px;background:var(--background-color)}
.cv-ref-name{font-weight:700;font-size:.95rem}
.cv-ref-role{font-size:.85rem;color:var(--foreground-secondary-color);margin-top:2px}
.cv-ref-note{font-size:.85rem;color:var(--foreground-secondary-color);margin-top:6px;font-style:italic}
@media screen and (max-width:860px){
.cv-hero{grid-template-columns:1fr}
.cv-photo-shell{max-width:220px}
.cv-grid-2{grid-template-columns:1fr}
.cv-lang-grid{grid-template-columns:repeat(3,1fr)}
}
@media print{
@page{size:A4;margin:10mm 12mm}
#kitze-sidebar,#kitze-midbar,#kitze-overlay,#kitze-sheet,.mobile-bar,.nav-container,#footer,.cv-actions{display:none!important}
.layout{grid-template-columns:1fr!important}
.main{padding:0!important}
.cv-page{max-width:none;margin:0}
.cv-hero,.cv-role,.cv-card,.project-section,.cv-photo-shell,.cv-ref{box-shadow:none!important;border:none!important;padding:0!important;background:none!important}
.cv-hero{display:grid!important;grid-template-columns:1fr 100px!important;gap:12px!important;margin-bottom:8px!important}
.cv-photo-shell{padding:0!important;border:none!important}
.cv-photo{aspect-ratio:1/1.15}
.cv-kicker{font-size:.63rem;margin-bottom:1px}
.cv-name{font-size:1.5rem!important;margin-bottom:1px}
.cv-tagline{font-size:.75rem;line-height:1.35;margin-top:3px}
.cv-links{margin-top:4px;gap:4px 12px;font-size:.72rem}
.cv-links a{border-bottom:none}
.cv-summary{margin-top:6px;font-size:.75rem;line-height:1.45}
.project-section{margin-bottom:8px!important}
.project-section-icon{margin-bottom:4px}
.project-section-icon h2{font-size:.95rem!important;text-transform:uppercase;letter-spacing:.08em}
.project-section-icon svg{display:none}
.cv-role-list{gap:6px}
.cv-role-top{gap:4px}
.cv-role-title{font-size:.8rem;font-weight:700}
.cv-role-company{font-size:.7rem;margin-top:0}
.cv-role-dates{font-size:.68rem}
.cv-role-listing{margin-top:3px;padding-left:14px;font-size:.7rem;line-height:1.4}
.cv-role-listing li+li{margin-top:2px}
.cv-grid-2{grid-template-columns:repeat(2,1fr);gap:6px}
.cv-card h3{font-size:.78rem;margin-bottom:3px}
.cv-card p{font-size:.7rem;line-height:1.4;margin:0}
.cv-skill-group+.cv-skill-group{margin-top:5px}
.cv-skill-label{font-size:.6rem;margin-bottom:2px}
.cv-skill-pills{gap:3px}
.cv-pill{padding:1px 5px;font-size:.65rem;border:1px solid #ccc;background:none}
.cv-lang-grid{grid-template-columns:repeat(5,1fr);gap:4px}
.cv-lang{padding:4px!important;border:1px solid #ccc!important}
.cv-lang-name{font-size:.68rem;margin-bottom:1px}
.cv-lang-level{font-size:.58rem}
.cv-lang-cefr{font-size:.58rem;padding:1px 4px;border:1px solid #ccc}
.cv-ref{padding:0!important}
.cv-ref-name{font-size:.72rem}
.cv-ref-role{font-size:.62rem}
.cv-ref-note{font-size:.62rem}
.cv-role,.cv-card{break-inside:avoid;page-break-inside:avoid}
a{color:inherit!important;text-decoration:none!important}
}
</style> 
<div class="cv-page"> 
 <section class="cv-hero"> 
  <div> 
   <div class="cv-kicker">
    CV / AI Systems / Platform Engineering
   </div> 
   <h1 class="cv-name">Bruno Škvorc</h1> 
   <p class="cv-tagline">Senior engineer and technical educator focused on AI-integrated systems, data pipelines, platform engineering, and turning messy ideas into production software that survives contact with reality.</p> 
   <div class="cv-links"> 
    <a href="https://bruno.id" target="_blank">bruno.id</a> 
    <a href="https://github.com/Swader" target="_blank">github.com/Swader</a> 
    <a href="https://www.linkedin.com/in/swader" target="_blank">linkedin.com/in/swader</a> 
   </div> 
   <p class="cv-summary">I have spent 15+ years building production systems, developer platforms, content systems, and high-throughput data pipelines. Right now my work sits at the intersection of product engineering, infrastructure ownership, and AI-assisted development: LLM-driven workflows, agent tooling, deterministic rendering, event indexing, and shipping features end to end without turning the stack into a science project.</p> 
   <div class="cv-actions"> 
    <button type="button" class="cv-button cv-button-primary" onclick="var t=document.title;document.title='Bruno-Skvorc-CV';window.print();setTimeout(function(){document.title=t},1000)">Download PDF</button> 
    <a class="cv-button" href="https://github.com/Swader" target="_blank">GitHub</a> 
   </div> 
  </div> 
  <div class="cv-photo-shell"> 
   <img class="cv-photo" src="https://bruno.eth.limo/AFEB757D-B3B6-4CA2-8B1D-7AE29BF22A1C/../avatar.png" alt="Bruno Škvorc" onerror="this.onerror=null;this.src='https://avatars.githubusercontent.com/u/1430603?v=4';" /> 
  </div> 
 </section> 
 <section class="project-section"> 
  <div class="project-section-icon"> 
   <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
    <path d="M20 7h-9" />
    <path d="M14 17H5" />
    <circle cx="17" cy="17" r="3" />
    <circle cx="7" cy="7" r="3" />
   </svg> 
   <h2>Experience</h2> 
  </div> 
  <div class="cv-role-list"> 
   <article class="cv-role"> 
    <div class="cv-role-top"> 
     <div> 
      <h3 class="cv-role-title">Platform Engineer and AI Systems Builder</h3> 
      <div class="cv-role-company">
       Bitfalls d.o.o. (Independent)
      </div> 
     </div> 
     <div class="cv-role-dates">
      Jan 2026 – Present
     </div> 
    </div> 
    <ul class="cv-role-listing"> 
     <li>Architect and ship production applications with integrated AI capabilities across monitoring, docs tooling, desktop apps, and automated content and ops pipelines.</li> 
     <li>Build agent-based workflows using LLM APIs for code generation, QA checklists, release drafting, prototyping, and internal automation.</li> 
     <li>Built Kvasyr, a high-throughput Rust event indexer processing millions of events daily, and a deterministic rendering pipeline for composable NFTs - both originally developed for RMRK infrastructure.</li> 
     <li>Reduced RMRK operational costs by 10x by replacing brittle third-party dependencies with owned services and cleaner API boundaries.</li> 
     <li>Ship full-stack features across API, UI, storage, deployment, and monitoring layers, usually with Bun or TypeScript tooling around Rust services.</li> 
     <li>Current product focus includes Kvasyr, Ogmadocs, RMRK Stack, Bitfalls Apps, x402watch, and commercial macOS utilities.</li> 
    </ul> 
   </article> 
   <article class="cv-role"> 
    <div class="cv-role-top"> 
     <div> 
      <h3 class="cv-role-title">Developer Experience Engineer</h3> 
      <div class="cv-role-company">
       Polygon Technology
      </div> 
     </div> 
     <div class="cv-role-dates">
      May 2024 – Jan 2026
     </div> 
    </div> 
    <ul class="cv-role-listing"> 
     <li>Built Ogmadocs - a Git-backed WYSIWYG documentation editor - in 3 weeks, preventing ~$10k/month in third-party documentation tooling costs. Now used by enterprise customers.</li> 
     <li>Designed and led an internal dogfooding program: an incentivized initiative pairing ecosystem developers with real users for over-the-shoulder interviews. Consistently surfaced over a dozen actionable issues across ~10 projects within the first 72 hours of each project entering the program.</li> 
     <li>Onboarded and mentored a new team member through his first months. Collaborated closely cross-team on product direction and documentation.</li> 
     <li>Led sprint standups for the DevRel team and produced developer enablement content including tutorials, workshops, videos, and reference implementations.</li> 
     <li>Supported developers at events and hackathons and translated recurring community friction into actionable product and documentation fixes.</li> 
    </ul> 
   </article> 
   <article class="cv-role"> 
    <div class="cv-role-top"> 
     <div> 
      <h3 class="cv-role-title">Product Lead / Engineering Manager</h3> 
      <div class="cv-role-company">
       RMRK
      </div> 
     </div> 
     <div class="cv-role-dates">
      Aug 2020 – May 2024
     </div> 
    </div> 
    <ul class="cv-role-listing"> 
     <li>Led a team of 6 engineers with full ownership of product vision, feature prioritization, and delivery across the RMRK modular NFT ecosystem.</li> 
     <li>Zero voluntary churn across the entire 3-year tenure - responsible for team support, progress tracking, and day-to-day engineering management.</li> 
     <li>Drove product strategy and fundraising efforts for the RMRK platform, aligning technical roadmap with business goals.</li> 
     <li>Oversaw infrastructure stability and the transition from fragile third-party services to a fully owned, maintainable stack.</li> 
    </ul> 
   </article> 
   <article class="cv-role"> 
    <div class="cv-role-top"> 
     <div> 
      <h3 class="cv-role-title">Technical Educator / Developer Relations</h3> 
      <div class="cv-role-company">
       Web3 Foundation
      </div> 
     </div> 
     <div class="cv-role-dates">
      2019 – 2023
     </div> 
    </div> 
    <ul class="cv-role-listing"> 
     <li>Rewrote the Polkadot Wiki from scratch and authored developer guides, tutorials, and documentation for the Substrate ecosystem.</li> 
     <li>Managed and published the official Polkadot weekly newsletter.</li> 
     <li>Organized and led hackathons and workshops - both online and in-person - focused on building Substrate chains and applications.</li> 
    </ul> 
   </article> 
   <article class="cv-role"> 
    <div class="cv-role-top"> 
     <div> 
      <h3 class="cv-role-title">Technical Writer / Developer Relations</h3> 
      <div class="cv-role-company">
       Status
      </div> 
     </div> 
     <div class="cv-role-dates">
      2017 – 2019
     </div> 
    </div> 
    <ul class="cv-role-listing"> 
     <li>Produced technical writing and developer-facing content for the Status ecosystem.</li> 
     <li>Represented the project at conferences and hackathons, supporting developer adoption and community engagement.</li> 
    </ul> 
   </article> 
   <article class="cv-role"> 
    <div class="cv-role-top"> 
     <div> 
      <h3 class="cv-role-title">Developer Champion / SDK Engineer</h3> 
      <div class="cv-role-company">
       Diffbot
      </div> 
     </div> 
     <div class="cv-role-dates">
      Jul 2014 – 2020
     </div> 
    </div> 
    <ul class="cv-role-listing"> 
     <li>Maintained and extended the official PHP client library used by customers integrating large-scale extraction and knowledge graph APIs.</li> 
     <li>Wrote documentation, built demos, and helped customers debug integrations, performance issues, and product fit questions.</li> 
    </ul> 
   </article> 
   <article class="cv-role"> 
    <div class="cv-role-top"> 
     <div> 
      <h3 class="cv-role-title">Tech Team Lead / Senior Developer</h3> 
      <div class="cv-role-company">
       InTechOpen (formerly Sciyo)
      </div> 
     </div> 
     <div class="cv-role-dates">
      2013 – 2016
     </div> 
    </div> 
    <ul class="cv-role-listing"> 
     <li>Led the technical team building and maintaining the publishing platform for open-access scientific literature.</li> 
     <li>Built backend systems for content workflows, job queues, parsing, and third-party integrations serving editorial and product teams.</li> 
    </ul> 
   </article> 
   <article class="cv-role"> 
    <div class="cv-role-top"> 
     <div> 
      <h3 class="cv-role-title">Senior Editor / Technical Author</h3> 
      <div class="cv-role-company">
       SitePoint
      </div> 
     </div> 
     <div class="cv-role-dates">
      2012 – 2016
     </div> 
    </div> 
    <ul class="cv-role-listing"> 
     <li>Wrote hundreds of technical articles, guides, and demos across PHP, JavaScript, and web development.</li> 
     <li>As Senior Editor, managed over 50 contributing authors from across the world - recruiting, mentoring, editing, and maintaining editorial quality.</li> 
    </ul> 
   </article> 
  </div> 
 </section> 
 <section class="project-section"> 
  <div class="project-section-icon"> 
   <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
    <path d="M12 2v4" />
    <path d="m16.2 7.8 2.9-2.9" />
    <path d="M18 12h4" />
    <path d="m16.2 16.2 2.9 2.9" />
    <path d="M12 18v4" />
    <path d="m4.9 19.1 2.9-2.9" />
    <path d="M2 12h4" />
    <path d="m4.9 4.9 2.9 2.9" />
   </svg> 
   <h2>Selected Projects</h2> 
  </div> 
  <div class="cv-grid-2"> 
   <article class="cv-card"> 
    <h3>Kvasyr</h3> 
    <p>Managed EVM indexing and webhook infrastructure. Built to give product teams queryable event views and reliable delivery without forcing them to own the entire pipeline.</p> 
   </article> 
   <article class="cv-card"> 
    <h3>RMRK Stack</h3> 
    <p>Modular NFT standards plus the infrastructure that makes them usable in practice: marketplace, indexer, renderer, integrations, and product surfaces.</p> 
   </article> 
   <article class="cv-card"> 
    <h3>Ogmadocs</h3> 
    <p>WYSIWYG docs tooling for product teams that need fast iteration, cleaner workflows, and less operational drag around content ownership.</p> 
   </article> 
   <article class="cv-card"> 
    <h3>Bitfalls Apps</h3> 
    <p>Commercial macOS utilities including AgentView and Screenshot Blur, built around small sharp problems, good UX, and direct monetization.</p> 
   </article> 
  </div> 
 </section> 
 <section class="project-section"> 
  <div class="project-section-icon"> 
   <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
    <path d="M12 20v-6" />
    <path d="M6 20V10" />
    <path d="M18 20V4" />
   </svg> 
   <h2>Technical Focus</h2> 
  </div> 
  <div class="cv-grid-2"> 
   <article class="cv-card"> 
    <div class="cv-skill-group"> 
     <span class="cv-skill-label">Programming Languages</span> 
     <div class="cv-skill-pills"> 
      <span class="cv-pill">TypeScript</span> 
      <span class="cv-pill">JavaScript</span> 
      <span class="cv-pill">SQL</span> 
      <span class="cv-pill">PHP</span> 
      <span class="cv-pill">Python</span> 
      <span class="cv-pill">Rust</span> 
     </div> 
    </div> 
    <div class="cv-skill-group"> 
     <span class="cv-skill-label">Systems</span> 
     <div class="cv-skill-pills"> 
      <span class="cv-pill">Event pipelines</span> 
      <span class="cv-pill">Indexing</span> 
      <span class="cv-pill">Caching</span> 
      <span class="cv-pill">Concurrency</span> 
      <span class="cv-pill">Background jobs</span> 
      <span class="cv-pill">Deterministic rendering</span> 
     </div> 
    </div> 
   </article> 
   <article class="cv-card"> 
    <div class="cv-skill-group"> 
     <span class="cv-skill-label">AI and LLM</span> 
     <div class="cv-skill-pills"> 
      <span class="cv-pill">LLM integration</span> 
      <span class="cv-pill">Agent workflows</span> 
      <span class="cv-pill">Prompt engineering</span> 
      <span class="cv-pill">AI-assisted development</span> 
      <span class="cv-pill">Eval-driven iteration</span> 
     </div> 
    </div> 
    <div class="cv-skill-group"> 
     <span class="cv-skill-label">Infrastructure</span> 
     <div class="cv-skill-pills"> 
      <span class="cv-pill">Linux</span> 
      <span class="cv-pill">CI/CD</span> 
      <span class="cv-pill">Monitoring</span> 
      <span class="cv-pill">API design</span> 
      <span class="cv-pill">MySQL</span> 
      <span class="cv-pill">SQLite</span> 
      <span class="cv-pill">PostgreSQL</span> 
      <span class="cv-pill">IPFS</span> 
     </div> 
    </div> 
   </article> 
  </div> 
 </section> 
 <section class="project-section"> 
  <div class="project-section-icon"> 
   <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
    <path d="m5 8 6 6" />
    <path d="m4 14 6-6 2-3" />
    <path d="M2 5h12" />
    <path d="M7 2h1" />
    <path d="m22 22-5-10-5 10" />
    <path d="M14 18h6" />
   </svg> 
   <h2>Languages</h2> 
  </div> 
  <div class="cv-lang-grid"> 
   <div class="cv-lang"> 
    <div class="cv-lang-name">
     Croatian
    </div> 
    <div class="cv-lang-level">
     Native
    </div> 
    <div>
     <span class="cv-lang-cefr">C2</span>
    </div> 
   </div> 
   <div class="cv-lang"> 
    <div class="cv-lang-name">
     English
    </div> 
    <div class="cv-lang-level">
     Fluent
    </div> 
    <div>
     <span class="cv-lang-cefr">C2</span>
    </div> 
   </div> 
   <div class="cv-lang"> 
    <div class="cv-lang-name">
     Slovenian
    </div> 
    <div class="cv-lang-level">
     Good
    </div> 
    <div>
     <span class="cv-lang-cefr">B2</span>
    </div> 
   </div> 
   <div class="cv-lang"> 
    <div class="cv-lang-name">
     German
    </div> 
    <div class="cv-lang-level">
     Passive
    </div> 
    <div>
     <span class="cv-lang-cefr">B1</span>
    </div> 
   </div> 
   <div class="cv-lang"> 
    <div class="cv-lang-name">
     Russian
    </div> 
    <div class="cv-lang-level">
     Passive
    </div> 
    <div>
     <span class="cv-lang-cefr">A2</span>
    </div> 
   </div> 
  </div> 
 </section> 
 <section class="project-section"> 
  <div class="project-section-icon"> 
   <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
    <path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20" />
    <path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z" />
   </svg> 
   <h2>Education, References, and Extras</h2> 
  </div> 
  <div class="cv-grid-2"> 
   <article class="cv-card"> 
    <h3>Education</h3> 
    <p><strong>MSc, Computer Science</strong><br />University of Rijeka, Croatia - 2011</p> 
   </article> 
   <article class="cv-card"> 
    <h3>About Me</h3> 
    <p>Father of three, lifelong learner and teacher, amateur SCUBA diver, writer, and chronic tester of bleeding-edge technology before most people should probably touch it.</p> 
   </article> 
  </div> 
  <div style="margin-top:12px"> 
   <article class="cv-ref"> 
    <div class="cv-ref-name">
     Mattie Fairchild
    </div> 
    <div class="cv-ref-role">
     Former Head of DevRel, Polygon Technology - 
     <a href="https://x.com/scav" target="_blank">x.com/scav</a>
    </div> 
    <div class="cv-ref-note">
     Reference for Polygon Technology period. Contact details available upon request.
    </div> 
   </article> 
   <article class="cv-ref" style="margin-top:10px"> 
    <div class="cv-ref-note">
     "Bruno is a relentless executor. A no-BS shipper, he'll easily get going with any new technology and be production-ready with it in hours. He's extra confident on stage and easily delivers complicated topics to audiences of all levels. I'll vouch for him any day."
    </div> 
    <div class="cv-ref-name" style="margin-top:6px">
     Luka Sučić
    </div> 
    <div class="cv-ref-role">
     Partner at Meta Change Capital, Daedalus Angels - 
     <a href="https://x.com/Beler" target="_blank">x.com/Beler</a>
    </div> 
   </article> 
  </div> 
 </section> 
</div>
        ]]></description>
    </item>
    
    <item>
        <title>Clawdex: I Built a Telegram-Operated Yolo Codex Machine</title>
        <link>https://bruno.eth.limo/416542E9-3C57-455F-85B9-309D45652290/</link>
        <guid>https://bruno.eth.limo/416542E9-3C57-455F-85B9-309D45652290/</guid>
        <pubDate>Wed, 01 Apr 2026 10:25:58 +0200</pubDate>
        
        <itunes:image href="https://bruno.eth.limo/416542E9-3C57-455F-85B9-309D45652290/HD4IB_UboAA0G1s.jpeg" />    
        
        
        <description><![CDATA[
            <p>One weekend, I decided to frankenstein some old PC components from my garage. The result was two half-decent machines that I don’t have an explicit use for and can’t sell, so I decided to make them into AI assistants that I’ll call “yolo codex” machines.</p> 
<blockquote class="twitter-tweet">
 <p lang="en" dir="ltr">I hear frankensteining is in fashion this season so let’s see if I can compose a monster from this junkyard <a href="https://t.co/LrWwylZRdD">pic.twitter.com/LrWwylZRdD</a></p>— Bruno Skvorc (@swader) 
 <a href="https://twitter.com/swader/status/2035072922189275554?ref_src=twsrc%5Etfw">March 20, 2026</a>
</blockquote> 
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 
<p>A “yolo codex” machine is a machine on which <a href="https://github.com/openai/codex">Codex</a> is installed, has passwordless sudo access, and is running in full permissions mode - everything is allowed.</p> 
<blockquote> 
 <p>⚠️ Warning: machines with such a setup are one prompt-injection or supply-chain attack away from total takeover and destruction. If you follow along, make sure you’re okay with all the data on them being completely nuked or leaked.</p> 
</blockquote> 
<p>On top of this <em>yolo power</em>, I also made them capable of talking to me via Telegram, sending and receiving files, talking to other machines on the same network, made it possible for them to issue reminders and have recurring jobs, to change models, and more - all of this will be explained in subsequent parts.</p> 
<p>This might sound familiar if you’ve heard of Openclaw, Nano claw, etc. The key differences from Openclaw and co are:</p> 
<ol> 
 <li>You don’t install a million lines of unknown code and a legion of dependencies any one of which can become a <a href="https://x.com/feross/status/2038807290422370479?s=20">supply chain attack</a> tomorrow.</li> 
 <li>You get a more <a href="https://x.com/levelsio/status/2023109374676496519">reliable</a> system.</li> 
 <li>You learn how it’s actually built.</li> 
 <li>This approach is so light-weight you can run it on a potato.</li> 
</ol> 
<p>This is how to turn a sacrificial Linux or macOS box into a Telegram-operated Codex machine with durable topic memory and reboot-safe persistence.</p> 
<p>I’ll assume you have a machine set up, you’re a sudo user on it, and can access it directly or <a href="https://tailscale.com">via SSH</a>. I’m using <a href="https://omarchy.com">Omarchy</a> as a distribution on my rigs so that’s all default, but this guide works equally well on any other Linux distro or even macOS (Mac Studio, MacBook).</p> 
<h2>Step 1: Codex Yolo</h2> 
<p>First, we’ll install Codex and make it able to do anything. Follow official instructions for <a href="https://github.com/openai/codex?tab=readme-ov-file#installing-and-running-codex-cli">installing it on your own OS</a>. I recommend using the homebrew approach. Then, run <code>codex</code> and log in.</p> 
<p>Once you’re logged in, test it: </p> 
<pre><code class="language-bash">codex exec "reply with cwd and exit"
</code></pre> 
<p>If that fails, stop there and fix it. Ask Codex how, until it works.</p> 
<p>Then, run Codex and give it the following prompt:</p> 
<pre><code class="language-bash">Modify your default configuration to:

approval_policy = "never"
sandbox_mode = "danger-full-access"
model = "gpt-5.4"
model_reasoning_effort = "xhigh"

[projects."/home/&lt;user&gt;"]
trust_level = "trusted"

[notice]
hide_full_access_warning = true  
```  
  
Install   &lt;user&gt; ALL=(ALL) NOPASSWD: ALL to sudoers such that the current user has passwordless sudo ability.
</code></pre> 
<p>It might ask you for approval a few times during this process.</p> 
<p>Codex stores user config in <code>~/.codex/config.toml</code>. If you prefer not to let Codex edit its own config and sudoers, make these changes manually instead (replace <code>&lt;user&gt;</code> with your username).</p> 
<p>To manually modify sudo, put <code>~&lt;user&gt;~ ALL=(ALL) NOPASSWD: ALL </code> into <code>/etc/sudoers.d/90-codex</code> and then run</p> 
<pre><code class="language-bash">sudo chown root:root /etc/sudoers.d/90-codex
sudo chmod 0440 /etc/sudoers.d/90-codex
sudo visudo -cf /etc/sudoers.d/90-codex
</code></pre> 
<p>After finishing these steps tell Codex to check if it has unrestricted sudo access on this machine.</p> 
<pre><code class="language-bash">codex exec "Test if you have unrestricted sudo access"
</code></pre> 
<p>It should come back with something like:</p> 
<pre><code class="language-bash">
codex
Yes. On `2026-03-31`, this machine reports passwordless unrestricted sudo for user `swader`.
sudo -n -l` shows `NOPASSWD: ALL`, and `sudo -n id` succeeded as root:
uid=0(root) gid=0(root) groups=0(root)
tokens used
15,141
</code></pre> 
<p>Now we need to make it talk to us via Telegram.</p> 
<h2>Step 2: Make the Bot</h2> 
<p>We’ll need a Telegram Bot. Interact with <a href="https://t.me/botfather">BotFather</a> and make a new bot.</p> 
<p>Create a Telegram supergroup so you can have <em>Topics</em> in it, add your bot in there with admin rights, and disable Privacy mode in the bot’s settings (needed for plain text commands without slash-commands, and to support captions on images later). BotFather will also give you a bot token - save that.</p> 
<p>Optionally, add an image, name, etc to your bot. I called mine Luigi after Luigi Serafini, who created the <em>Codex</em> Seraphinianus.</p> 
<p>Checklist:</p> 
<ul> 
 <li><input type="checkbox" disabled /> Create Bot</li> 
 <li><input type="checkbox" disabled /> Create Supergroup with Topics enabled</li> 
 <li><input type="checkbox" disabled /> Remove Privacy from Bot's settings</li> 
 <li><input type="checkbox" disabled /> Save Bot token</li> 
 <li><input type="checkbox" disabled /> (Optional) personalize the bot</li> 
</ul> 
<h2>Step 3: Spin up the control plane</h2> 
<p>Next, we’ll tell Codex the following:</p> 
<pre><code class="language-Txt">Goal:
Create a fresh Telegram-driven Codex control plane from scratch under ~/yolomode.

Hard constraints:
- Create the entire project tree yourself under ~/yolomode.
- Linux and macOS only.
- Linux path: user systemd service.
- macOS path: launchd or a clearly documented persistent runner.
- Do not use Docker.
- Prefer Bun and simple shell scripts.
- This is a full-control sacrificial machine. You may use passwordless sudo to satisfy prerequisites.

The name of the service is telemux.

Architecture:

- One Telegram topic = one durable context.
- Context kinds: repo, host, scratch.
- Context states: active, pending, archived, error.
- Plain text in a bound topic starts or resumes the stored Codex session.
- Local workers must execute locally, never via SSH-to-self.
- Remote workers must prefer normal SSH over the Tailscale network.

Config rules:

- `.env` contains only global secrets and service-wide knobs.
- `workers.json` contains only worker inventory and per-worker transport config.
- Use an absolute path for the Codex binary.
- Create `.env.example` and `workers.example.json`.
  
Durable guidance:

- Create or merge ~/.codex/AGENTS.md with durable cross-project rules for this machine.
- Create ~/.codex/MACHINE.md describing that this machine is the control plane.
- Create ~/.codex/skills/yolomode/SKILL.md.
- Ensure every successful run refreshes:
  - .factory/STATE.json
  - .factory/SUMMARY.md
  - .factory/TODO.md
  - .factory/ARTIFACTS.md

Linux install script requirements:
- create ~/.config/systemd/user/telemux.service
- run sudo loginctl enable-linger "$USER"
- run systemctl --user daemon-reload
- run systemctl --user enable --now telemux.service

doctor.sh requirements:
- verify loginctl show-user "$USER" -p Linger returns Linger=yes
- verify systemctl --user is-enabled telemux.service returns enabled
- verify systemctl --user is-active telemux.service returns active
- print journalctl --user -u telemux.service -n 50 --no-pager on failure

Project deliverables:

- working Bun app
- SQLite registry
- Telegram long polling
- topic binding
- local host and scratch bootstrap
- command registration
- Linux install/doctor scripts
- Linux user systemd unit
- macOS run script + launchd plist example
- README
- docs/architecture.md
- docs/operations.md
- tests for local host/scratch and pending remote behavior

Required commands:

- /help
- /explainctx
- /whoami
- /workers
- /newctx
- /bind
- /topicinfo
- /run
- /resume
- /loop
- /archive
- /detach
- /tail
- /artifacts
- /usage
- /synccommands
- /showcommands

At the end:

- summarize what you built
- list the exact manual values I still need to fill
- print the exact files I need to edit
- print the exact commands I need to run on Linux
- print the exact commands I need to run on macOS
- tell me the Telegram-only reboot test
</code></pre> 
<p>After this is finished, you should know exactly which values to fill in where. You can tell Codex to do this if you can’t find the files manually, or don’t want to edit manually. </p> 
<p>Again, note that in a production environment, you should not be giving keys and secrets to codex itself since it phones them home to OpenAI and they can see your chats, but for a fully nukeable yolo machine, it should be fine. If you’re worried about this, just manually edit the files.</p> 
<p>At this point, you should be able to initiate new threads from Telegram, so make a new topic, call it something like “yolo-general” and issue the command:  </p> 
<pre><code class="language-Txt">/newctx yolo-general control host
</code></pre> 
<p>Topics like these are good for “general” discussions with this machine - when it’s not repo-connected, not project specific. You can treat it as your general chatbot about this machine. For a “scratchpad” which you would treat as your regular “chatbot” that you currently use ChatGPT or Claude for, you can use <code>/newctx scratchpad control scratch</code>.</p> 
<p>In either of these, ask it to give you info about the system.</p> 
<pre><code class="language-Txt">Bruno Skvorc, [29.03.2026 14:16]
Tell me uptime, free disk space, RAM usage, and the status of telemux.service.

Luigi, [29.03.2026 14:17]
Checked at `2026-03-29 14:16 CEST`.

- Uptime: `7 hours, 6 minutes`
- Free disk on `/`: `522G` free out of `557G` total (`35G` used, `7%` used)
- RAM: `15Gi` total, `3.0Gi` used, `9.5Gi` free, `12Gi` available
- Swap: `23Gi` total, `0B` used
- `telemux.service`: not found as a system unit, but the user unit is enabled and `active (running)`, started at `2026-03-29 14:15:05 CEST`
- Main `telemux` process: `/home/swader/.bun/bin/bun run src/main.ts`

`git status` at this checkpoint: no commits yet on `main`; `.factory/` and `AGENTS.md` are untracked.  

Durable context was updated, and the snapshot is recorded in [2026-03-29-host-status.md](/srv/factory/hostctx/valkyrie-general/.factory/artifacts/2026-03-29-host-status.md).

session=019d3985-8a62-7af3-8271-f8bda2a9e60a | machine=valkyrie | usage=manual
</code></pre> 
<p>Then we can also check if it’s aware of previous conversations in the same thread - not losing context between messages.</p> 
<pre><code class="language-Txt">Bruno Skvorc, [29.03.2026 14:22]
Continuity test: What did I ask you just before this?

Luigi, [29.03.2026 14:23]
Just before this, you asked: `Tell me uptime, free disk space, RAM usage, and the status of telemux.service.`
I re-read the `.factory` state and `git status` first, then updated the durable checkpoint...

</code></pre> 
<h3>Good to Know</h3> 
<p>When you bind a context to a topic, you are <strong>not</strong> importing the whole previous Telegram thread into Codex memory.</p> 
<p>Instead, you are:</p> 
<ul> 
 <li>binding the topic to a durable workspace</li> 
 <li>binding that workspace to a durable session</li> 
 <li>leaving the old Telegram history in Telegram</li> 
</ul> 
<p>That distinction matters in preventing your rebinding from becoming context soup that’ll get out of hand fast.</p> 
<h2>Reboot test</h2> 
<p>Before you do the reboot test, verify that the control plane is not just working <em>right now</em>, but is actually configured to come back on its own.</p> 
<h3>Linux: verify the user service and lingering</h3> 
<p>If your bootstrap prompt did its job, it should have created a user systemd service called <em>telemux.service</em> and enabled lingering for your user.</p> 
<p>From the machine, run <code>cd ~/yolomode</code> and if your bootstrap created helper scripts, run them first.</p> 
<pre><code class="language-bash">./scripts/install.sh
./scripts/doctor.sh
</code></pre> 
<ol> 
 <li>lingering must be enabled, or the user service may not start until login</li> 
</ol> 
<pre><code class="language-bash">loginctl show-user "$USER" -p Linger
# Expect: Linger=yes
</code></pre> 
<ol start="2"> 
 <li>the service must be enabled</li> 
</ol> 
<pre><code class="language-bash">systemctl --user is-enabled telemux.service
# Expect: enabled
</code></pre> 
<ol start="3"> 
 <li>inspect the generated unit and make sure it points at the right path</li> 
</ol> 
<pre><code class="language-bash">systemctl --user is-active telemux.service
# Expect: active
</code></pre> 
<ol start="4"> 
 <li>inspect the generated unit and make sure it points at the right path</li> 
</ol> 
<pre><code class="language-bash">systemctl --user cat telemux.service
# Check that WorkingDirectory= and EnvironmentFile= point at ~/yolomode
</code></pre> 
<ol start="5"> 
 <li>inspect recent logs if anything looks off</li> 
</ol> 
<pre><code class="language-bash">journalctl --user -u telemux.service -n 50 --no-pager
</code></pre> 
<p>If Linger=no, fix it with:</p> 
<pre><code class="language-bash">sudo loginctl enable-linger "$USER"
systemctl --user daemon-reload
systemctl --user enable --now telemux.service
</code></pre> 
<p>Why this matters: on Linux, <code>loginctl enable-linger</code> tells <code>systemd</code> to spawn your user manager at boot and keep it around after logout, which is what allows a user-level service like <code>telemux.service</code> to survive without an active login session.</p> 
<h3>MacOS path</h3> 
<p>If you followed the macOS path, you will not have <code>systemd</code> or <code>linger</code>. You need a <code>launchd</code> job or another persistent runner instead. Check that your launch agent is loaded:</p> 
<pre><code class="language-bash">launchctl list | grep telemux
launchctl print gui/$(id -u)/com.yolomode.telemux
</code></pre> 
<p>Also make sure the generated runner script points at the correct project path and Bun binary.<br /> In the future, if you need to check which launchd agents your macOS is running, for any reason, there's a <a href="https://bitfalls.com/apps/agentview">cool app for that</a>.</p> 
<p>Now, reboot the machine.</p> 
<ul> 
 <li>If the disk is encrypted, unlock it when the OS asks.</li> 
 <li>Do not log in after boot (unless login is part of disk encryption, like on Omarchy, then do it).</li> 
 <li>Wait a minute or two.</li> 
 <li>In the same Telegram topic as before, ask:</li> 
</ul> 
<pre><code class="language-text">What is the current uptime and is telemux healthy?
</code></pre> 
<p>If it replies, we’ve got it working.</p> 
<h2>What we’ve got now</h2> 
<p>We have:</p> 
<ul> 
 <li>full machine control from Telegram (just ask Codex to do anything from a TG thread)</li> 
 <li>continuity and persistence</li> 
 <li>skills, and the ability to install them via TG</li> 
 <li>internet access and browsability through Codex, since it already has this ability natively and we’re just piping commands through</li> 
</ul> 
<p>In Part 2, we’ll give it the ability to send us files into TG. Imagine “I forgot to send myself the BigClient.pdf presentation - it’s in Downloads. Go get it and send it to me!”, and it just works.</p>
        ]]></description>
    </item>
    
    <item>
        <title>How to get Push notifications when Cursor is done working</title>
        <link>https://bruno.eth.limo/C06ADD00-020A-4CE3-B266-D866845273E8/</link>
        <guid>https://bruno.eth.limo/C06ADD00-020A-4CE3-B266-D866845273E8/</guid>
        <pubDate>Wed, 11 Feb 2026 08:23:18 +0100</pubDate>
        
        <itunes:image href="https://bruno.eth.limo/C06ADD00-020A-4CE3-B266-D866845273E8/IMG_5850.jpg" />    
        
        
        <description><![CDATA[
            <p>I often leave <a href="https://cursor.com">Cursor</a> to do some work and go off to play with my kids or something. But then I often miss the moment when it's done working, and it just hangs there waiting for me, wasting time.</p> 
<p>The "done" chime sometimes doesn't work, and definitely doesn't work when there's a network interruption or an error, so I needed a better method.</p> 
<p>Here's how to make Cursor send you a push notification when it's done working.</p> 
<img width="645" alt="IMG_5850" src="https://bruno.eth.limo/C06ADD00-020A-4CE3-B266-D866845273E8/IMG_5850.jpg" /> 
<h2>Step 1: NTFY</h2> 
<p>Register for an <a href="https://ntfy.sh">NTFY.sh</a> account (optional, actually, but lets you subscribe on web too so you get desktop notifications as well).</p> 
<p>Install NTFY onto your phone and do nothing for now.</p> 
<h2>Step 2: Set up the Cursor hooks</h2> 
<p>Create <code>~/.config/cursor-notify/config.json</code>:</p> 
<pre><code class="language-json">{
  "server": "https://ntfy.sh",
  "topic": "cursor_done_SOME_RANDOM_STRING"
}
</code></pre> 
<p>Replace SOME_RANDOM_STRING with an actual, unguessable random string. This is your unique hook identifier. If anyone gets it, they can just spam your hook and blow your plan.</p> 
<p>Then, in the NTFY app, go to Subscribe, and input this topic.</p> 
<p>Then make a hook in <code>~/.cursor/hooks/notify-ntfy.py</code>.</p> 
<pre><code class="language-json">#!/usr/bin/env python3
import json
import os
import subprocess
from pathlib import Path
from datetime import datetime

CFG_PATH = Path.home() / ".config" / "cursor-notify" / "config.json"

def main() -&gt; None:
    # Read hook payload from Cursor
    try:
        payload = json.load(os.sys.stdin)
    except Exception:
        payload = {}

    status = payload.get("status", "unknown")
    conversation_id = payload.get("conversation_id", "")
    loop_count = payload.get("loop_count", None)

    # Load ntfy config
    cfg = json.loads(CFG_PATH.read_text())
    server = cfg.get("server", "https://ntfy.sh").rstrip("/")
    topic = cfg["topic"]

    repo = os.path.basename(os.getcwd())
    now = datetime.now().strftime("%H:%M:%S")

    # Optional: reduce noise (only notify on "completed")
    # Cursor docs/examples commonly show status as completed/aborted/error. :contentReference[oaicite:6]{index=6}
    if status != "completed":
        # Still must output JSON to Cursor
        print("{}")
        return

    msg = f"Cursor finished in {repo} at {now} (status: {status})"
    if loop_count is not None:
        msg += f" | loop={loop_count}"
    if conversation_id:
        msg += f" | convo={conversation_id}"

    # Send push
    # ntfy supports headers like Title/Priority/Tags and Click actions. :contentReference[oaicite:7]{index=7}
    url = f"{server}/{topic}"
    subprocess.run(
        [
            "curl", "-sS", "--max-time", "2", "--retry", "1",
            "-H", "Title: Cursor Agent",
            "-H", "Priority: high",
            "-H", "Tags: robot_face,white_check_mark",
            "-d", msg,
            url,
        ],
        check=False,
        stdout=subprocess.DEVNULL,
        stderr=subprocess.DEVNULL,
    )

    # Hooks talk JSON back to Cursor
    print("{}")

if __name__ == "__main__":
    main()
</code></pre> 
<p>Make it executable with <code>chmod +x ~/.cursor/hooks/notify-ntfy.py</code>.</p> 
<p>Restart Cursor.</p> 
<p>Now you will be notified whenever it's done working, and you can also find all past notifications in the app, retained for ~12 hours.</p> 
<img width="645" alt="IMG_5851" src="https://bruno.eth.limo/C06ADD00-020A-4CE3-B266-D866845273E8/IMG_5851.jpg" />
        ]]></description>
    </item>
    
    <item>
        <title>Progressive Centralization Starter Kit</title>
        <link>https://bruno.eth.limo/5B550B2F-1CE5-4446-942D-B97DBF5D6D19/</link>
        <guid>https://bruno.eth.limo/5B550B2F-1CE5-4446-942D-B97DBF5D6D19/</guid>
        <pubDate>Tue, 03 Feb 2026 17:24:52 +0100</pubDate>
        
        <itunes:image href="https://bruno.eth.limo/5B550B2F-1CE5-4446-942D-B97DBF5D6D19/Screenshot%202026-02-04%20at%2016.16.18.png" />    
        
        
        <description><![CDATA[
            <p><a href="https://github.com/swader/proce">Proce Starter</a> is a template for building static web pages or blockchain-integrated web3 apps, previewing them locally, and deploying them instantly to ENS/IPFS and/or Arweave.</p> 
<p>I use this starter kit to build:</p> 
<ul> 
 <li><a href="https://value.eth.link">Value.eth</a></li> 
 <li><a href="https://ipfsviewer.eth.link">ipfsviewer.eth</a></li> 
 <li><a href="https://rpc.bruno.eth.link">rpc checker</a></li> 
</ul> 
<p>This website itself (bruno.eth) is hosted with <a href="https://planet.xyz">Planetable</a>, but behind the scenes it uses the exact same approach.</p> 
<p>Progressive centralization is the effort of making an application decentralized but "clunky" by default, so it's always up no matter what - no single points of failure. Only then do you add centralization on top - like social wallets, indexers, and more - since each of those failing will only degrade the service, never crash it.</p> 
<p>More info in this talk: <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/ZkL5xuNVAS4" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p> 
<h2>Using Proce</h2> 
<p>The detailed guide is <a href="https://github.com/swader/proce">in the README</a> but the gist of it is below.</p> 
<p>Clone the repo:</p> 
<pre><code class="language-sh">git clone https://github.com/swader/proce
</code></pre> 
<p>Make sure <a href="https://bun.sh/">bun</a> and <a href="https://getfoundry.sh">foundry</a> are installed.</p> 
<p>The kit comes with two templates.</p> 
<h3>Template: page</h3> 
<p>A static web page compiled into an easily hostable artifact. Change its contents however you see fit. As long as you have no server components, this will work on any static host: Github pages, ENS/IPFS, Arweave, whatever.</p> 
<p>Build it with <code>bun run build page</code>, preview with <code>bun run preview page</code>.</p> 
<img width="1208" alt="Screenshot 2026-02-04 at 16.16.47" src="https://bruno.eth.limo/5B550B2F-1CE5-4446-942D-B97DBF5D6D19/Screenshot 2026-02-04 at 16.16.47.png" /> 
<p>If you'd like to start working on this one, copy it into a different folder, e.g. "mySite", and then run</p> 
<pre><code class="language-sh">bun run default mySite
</code></pre> 
<p>This sets it as the default argument for build and preview operations.</p> 
<p>From then on, you can use <code>bun run preview</code> and <code>bun run build</code> without an argument, and <code>bun run deploy</code> with deploy whatever is in dist (now defaulting to your mySite project).</p> 
<h3>Template: web3</h3> 
<p>A template with a smart contract, <a href="https://voltaire.tevm.sh/">Voltaire</a>, wallet selection, and a UI for using the dapp.</p> 
<p>Build it with <code>bun run build web3</code>, preview with <code>bun run preview web3</code>.</p> 
<p>If you'd like to start working on this one, copy it into a different folder, e.g. "myApp", and then run</p> 
<pre><code class="language-sh">bun run default myApp
</code></pre> 
<p>This sets it as the default argument for build and preview operations.</p> 
<p>To test it locally, the kit comes with an Anvil localchain set up which will deploy the contract and unlock some local dev funds.</p> 
<pre><code class="language-sh">bun run dev
</code></pre> 
<p>This starts the Anvil chain.</p> 
<p>In another terminal:</p> 
<pre><code class="language-sh">bun run preview
</code></pre> 
<p>This will preview the Townsquare app, kind of like an on chain message board with private (encrypted) DM option.</p> 
<img width="1189" alt="Screenshot 2026-02-04 at 16.16.18" src="https://bruno.eth.limo/5B550B2F-1CE5-4446-942D-B97DBF5D6D19/Screenshot 2026-02-04 at 16.16.18.png" /> 
<p>You can then edit the app, and edit / replace the smart contract.</p> 
<h2>Contributing</h2> 
<p>If you found this kit useful, I'd appreciate it if you'd <a href="https://x.com/bitfalls">let me know</a> about anything you launch with it, and if you feel like contributing some features (as long as they're kept simple), feel free to open a pull request!</p>
        ]]></description>
    </item>
    
    <item>
        <title>How Cursor and ChatGPT helped me minimize the effect of getting hacked</title>
        <link>https://bruno.eth.limo/2FD5F3AA-F209-4F67-AF03-209370681C50/</link>
        <guid>https://bruno.eth.limo/2FD5F3AA-F209-4F67-AF03-209370681C50/</guid>
        <pubDate>Tue, 27 Jan 2026 14:20:44 +0100</pubDate>
        
        <itunes:image href="https://bruno.eth.limo/2FD5F3AA-F209-4F67-AF03-209370681C50/photo_5460988520039124377_w.jpg" />    
        
        
        <description><![CDATA[
            <p>I was happily chugging along, testing my ENS/AR deployer tool, copying files over from previous experiments, when I accidentally committed my .env file which contained a private key, and pushed to a public repo.</p> 
<p>Within a minute, I was getting drained. <a href="https://0xppl.onelink.me/vxHF?deep_link_value=referral&amp;deep_link_sub1=bitfal-PICROEKG">0xppl</a> notifications alerted me so I was able to dive right into the mess.</p> 
<p>This private key belonged to my hot address, which I use willy nilly for not so important things - ENS deployments, playing with smart contracts, the occasional gamble.</p> 
<p>The problem was - since I <a href="https://x.com/bitfalls/status/2009614916811161747?s=20">took over RMRK again</a>, I hadn't taken the time to set up proper multisigs as everything was still in flux. I had been too focused on making the <a href="https://rmrk.app/renderer">new renderer</a> and locking tokens in <a href="https://value.eth.link">permanent LP</a> and completely forgot about this part. Inexcusable amateur mistake.</p> 
<p>Luckily, the attacker <a href="https://basescan.org/tx/0x2905880f3555cd10130d41d4ecba4fb0d6071b4b3e9ac1d67686d44d2fec711a">liquidated immediately</a> rather than exert long term sell pressure.</p> 
<p>It could have been much worse - and would have been, if it hadn't been for LLMs and Cursor.</p> 
<h2>Tokens</h2> 
<p>The first crisis was: this wallet has access to all the multisigs, so all tokens on those were already presumed dead and buried. Indeed, a closer inspection revealed that the attacker skillfully extracted and liquidated everything - anything above a dollar was gone.</p> 
<p>I had to somehow stop him from realizing he has minting access on the Axelar ITS contract of RMRK over on Moonbeam, but how if he's running a drainer. I can't do any ops without him immediately draining money.</p> 
<p>So I enlisted ChatGPT's Codex in Cursor.</p> 
<p>I initialized a new <a href="https://getfoundry.sh">Foundry</a> project. My prompt was:</p> 
<pre><code class="language-txt">I got my wallet hacked. The perp is still draining my wallet, but I have admin approval on a token:

[CONTRACT ABI]

It's RMRK on moonbeam at 0x524d524B4c9366be706D3A90dcf70076ca037aE3

I want to write a script which will in one fell swoop:

a) move some GLMR to this wallet
b) instantly issue an approve and revoke call on the token's minting ability, role 0x9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6. We would remove it from 0xB9b8EF61b7851276B0239757A039d54a23804CBb and give it to 0x4dA2e85D64bEcE663CCaB06E89B970b6b077f22F

This needs to be done at high gas price to prevent intercepting by the drainer.

I've initialized a forge project in the folder which you should use to anvil-clone moonbeam, from the RPC endpoint I added into .env (which you can source with set -a &amp;&amp; source .env &amp;&amp; source +a) and also the private key of the hacked address and of the new "admin role" address is in there under HACKED_KEY and NEW_KEY. The RPC key is under MOONBEAM_RPC_URL.

Test this run locally first (anvil), when we are sure it works, we will run it live.
</code></pre> 
<p>Because this was my savage-configured "codex 5.2 extra high", it went on a whole exploration:</p> 
<ol> 
 <li>It figured out that you can't replace minters unless you have admin role</li> 
 <li>It went and looked at logs to find out who's admin, discovering admin has been revoked</li> 
 <li>Checked if we can burnFrom instead (we can't)</li> 
</ol> 
<p>I then asked if we can overmint to max supply and prevent him from minting more.</p> 
<img width="600" alt="Screenshot 2026-01-27 at 20.59.43" src="https://bruno.eth.limo/2FD5F3AA-F209-4F67-AF03-209370681C50/Screenshot 2026-01-27 at 20.59.43.png" /> 
<p>I confirmed, and it then:</p> 
<ol> 
 <li>Went to calculate exactly how much we can mint</li> 
 <li>Gave me an approximate gas cast so I would know how much we'd need to top up the account with</li> 
 <li>Wrote a script which in one go moves GLRM from NEW to HACKED, and immediately mints + revokes access, at a high enough gas fee that the attacker wouldn't be able to intercept.</li> 
</ol> 
<img width="600" alt="Screenshot 2026-01-27 at 21.02.38" src="https://bruno.eth.limo/2FD5F3AA-F209-4F67-AF03-209370681C50/Screenshot 2026-01-27 at 21.02.38.png" /> 
<p>Legend.</p> 
<p>This then prevented further abuse of the token, and we could focus on other things.</p> 
<h2>Operation: NFT salvage</h2> 
<p>The attacker took my Milady and about a dozen <a href="https://x.com/10b57e6da0">Lobs</a>. Other NFTs had <em>some</em> value once upon a time but honestly, they amount to maybe in total (and that's if he manages to sell them) to something like $1000.</p> 
<p>But the NFTs I really cared about - the Kanaria and the Skybreach Land Deeds - those worried me.</p> 
<p>So, it was time to mount a rescue - time was of the essence, and the hacker had already started setting up 7702 delegations on my address to prevent me from seeding it with money and doing actions.</p> 
<img width="600" alt="photo_5460988520039124377_w" src="https://bruno.eth.limo/2FD5F3AA-F209-4F67-AF03-209370681C50/photo_5460988520039124377_w.jpg" /> 
<p>EIP‑7702 is the “Smart EOA” upgrade that lets a normal, key‑controlled address behave like a smart account by writing a tiny <em>delegation designator</em> into the account’s code. That designator points at some contract, and from then on the chain executes that contract’s logic <strong>in the context of your address</strong> (same address, same balances, same approvals) - it’s meant for account‑abstraction UX like batching, sponsored gas, and permissioned sub-keys.</p> 
<p>But if someone already has your private key, they can flip this into a weapon: delegate your EOA to a malicious “sweeper” contract. At that point your address stops being a dumb wallet and becomes attacker-chosen code. Any attempt to top it up (even a plain ETH transfer to seed gas) can be immediately forwarded away or outright reverted, and “racing” the attacker from that address becomes a dead end because the delegated logic can drain/re-route value as soon as it touches the account. Once I saw the 7702 delegation land, the only viable move was to treat the wallet as fully toxic and run the rescue from clean keys.</p> 
<p>The first problem with the NFT rescue was that NFT collection contracts generally don't have any way to list "all NFTs owned by address", so getting a list of the tokens I want wasn't easy on-chain.</p> 
<p>This is where Alchemy's <a href="https://docs.alchemy.com/reference/getnfts">getnfts</a> function was priceless.</p> 
<p>I didn't have time to fiddle with the docs, so I just grabbed the API key, gave it to Cursor's Codex5.2xh and let it rip. It immediately produced a list of Kanaria I own.</p> 
<img width="600" alt="Screenshot 2026-01-27 at 21.06.55" src="https://bruno.eth.limo/2FD5F3AA-F209-4F67-AF03-209370681C50/Screenshot 2026-01-27 at 21.06.55.png" /> 
<img width="600" alt="Screenshot 2026-01-27 at 21.04.45" src="https://bruno.eth.limo/2FD5F3AA-F209-4F67-AF03-209370681C50/Screenshot 2026-01-27 at 21.04.45.png" /> 
<p>I confirmed, and it went deeper, analyzing gas costs and how much rescuing we can fit into a call.</p> 
<img width="600" alt="Screenshot 2026-01-27 at 21.07.46" src="https://bruno.eth.limo/2FD5F3AA-F209-4F67-AF03-209370681C50/Screenshot 2026-01-27 at 21.07.46.png" /> 
<p>After a few more rounds of tweaks on gas price, we fired off the script. It issues 470 transactions, pre-paid, with high gas fee, and all we had to do was wait for it finish. This took a sweet while, some throttling and synchronous ops got in the way. But codex learned from its mistake.</p> 
<img width="600" alt="Screenshot 2026-01-27 at 21.10.16" src="https://bruno.eth.limo/2FD5F3AA-F209-4F67-AF03-209370681C50/Screenshot 2026-01-27 at 21.10.16.png" /> 
<p>I had it rescue Skybreach Land Deeds, and then Chunkies, and then RMRK Banners. I also had it rescure Caimeo Soul Shards on Polygon.</p> 
<hr /> 
<p>It was an expensive lesson, yes, but not as expensive as it could have been. And without the LLMs to lend a hand in really fast TX composition and execution, my defenses would have been significantly slower.</p> 
<p>So what's next?</p> 
<p>Read the <a href="https://rmrk.app/blog/about-the-hack/">RMRK post mortem</a>, I guess.</p> 
<p>As for me? I secured my wallets and implemented some changes:</p> 
<ol> 
 <li>I now have a global pre-commit hook on my machine checking for .env and other sensitive files.</li> 
 <li>I now no longer use private keys in .env files at all, just in case. Looks like <a href="https://x.com/0xBeirao/status/2016824304734753076?s=20">this is changing on the tool level too</a>.</li> 
 <li>I am building a rescue-op "skill" for Cursor so that anyone who ends up in a similar position in the future can just run it quickly and get assets saved. <a href="https://x.com/bitfalls">Follow on X</a> and 🔔 on to be notified (the only way to see my posts, I am shadowbanned).</li> 
</ol>
        ]]></description>
    </item>
    
    <item>
        <title>Progressive Centralization and Value.eth - an experiment in downtime resistance</title>
        <link>https://bruno.eth.limo/BB3599D7-962E-4D07-A12D-8CB2A19B7D69/</link>
        <guid>https://bruno.eth.limo/BB3599D7-962E-4D07-A12D-8CB2A19B7D69/</guid>
        <pubDate>Wed, 21 Jan 2026 18:59:38 +0100</pubDate>
        
        <itunes:image href="https://bruno.eth.limo/BB3599D7-962E-4D07-A12D-8CB2A19B7D69/Screenshot%202026-01-22%20at%2008.46.11.png" />    
        
        
        <description><![CDATA[
            <p>I joined web3 in 2015 because the idea of civil disobedience, censorship resistance, and downtime immunity seemed mouth-wateringly good.</p> 
<p>I loved the fact that this new web allows you to say "No" when someone tells you "give me your money" or "take down that content".</p> 
<p>NO, FUCK YOU.</p> 
<p>Over time, though, web3 morphed into... well... you know.</p> 
<img width="600px" alt="Screenshot 2026-01-22 at 08.46.11" src="https://bruno.eth.limo/BB3599D7-962E-4D07-A12D-8CB2A19B7D69/Screenshot 2026-01-22 at 08.46.11.png" /> 
<p>Come 2019, and nothing is as it was supposed to be. We were supposed to be in "Demolition Man"'s version of LA, and we ended up in "Escape from L.A.". Or is it the other way around actually? 🤔</p> 
<p>Either way, it's not good.</p> 
<p>By 2026, things hadn't improved.</p> 
<blockquote class="twitter-tweet">
 <p lang="en" dir="ltr">Honest question: which idealistic web3 project is left?<br /><br />Apart from eth, which project even cares about decentralisation or censorship resistance? Of those that say they do, how many are actually honest about the tradeoffs they made to get to where they are?</p>— Bruno Skvorc (@bitfalls) 
 <a href="https://twitter.com/bitfalls/status/2013558632747802835?ref_src=twsrc%5Etfw">January 20, 2026</a>
</blockquote> 
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 
<p>They had deteriorated to the point of every single L2 being a centralized server, entire "protocols" earning <a href="https://x.com/hantengri/status/2013296559492907125">$7 in fees</a>, and every manner of app - social or otherwise - now finally getting a little more honest and <a href="https://x.com/jessepollak/status/2011518342616793184?s=20">pivoting to gambling</a>.</p> 
<p>The civil disobedience I once wanted to direct at the world - at the tax man, at the cake of corruption where each layer of our feudalist society siphons a bit more from your income, at the politicians who argue that multiculturalism is fine as long as they don't have to live in a mixed community - now had a new target.</p> 
<hr /> 
<p>I had developed a lot of projects over the past 10 years and tried to push my idealism into things where it didn't belong.</p> 
<p>After all, I was adamantly against "mArKeTiNg" at <a href="https://rmrk.app">RMRK</a> which ultimately ruined it, because we didn't pay higher caste retards to dump on lower caste retards. I insisted we decentralize <a href="https://singular.rmrk.app">Singular</a> as much as possible, which ended up in it being a mess of hard to upgrade sluggishness and overcentralized <a href="https://x.com/bitfalls/status/2011164848932209070?s=20">mega-infra</a> that any IT Karen could be envious of.</p> 
<p>I worked for companies which outright <a href="https://x.com/bitfalls/status/1888148445170409825?s=20">lie about decentralization, work against it, and even destroy projects for private interests</a>.</p> 
<p>There's no way to justify this. I had (have?) skills. I could have gone into an honest industry. I could have built something <em>good</em>. But there's no money in building <em>good</em>.</p> 
<p>There's only money in building casinos when you're in a casino factory.</p> 
<p>So I half-way <a href="https://x.com/ElishaDLong/status/2013381350275920006?s=20">retardmaxxed</a>. Went with the flow. Accumulation phase. Escape the permanent underclass, all that.</p> 
<p>I would develop something fun, decentralized, interesting on the side, but never seriously.</p> 
<p>Now, I'm taking it a bit more seriously.</p> 
<hr /> 
<p>Value.eth is a project that should live for as long as the chains I deployed it on live.</p> 
<p>It's a smart contract for permanent or temporary locking of Uniswap LP tokens, such that it still allows you to collect fees, but not withdraw the liquidity out. This effectively means you're locking part of the supply forever.</p> 
<p>The domain value.eth is powered by <a href="https://ens.domains">ENS</a>, one of the very, very few web3 projects that tries to stay permanent and decentralized (alebit with the new ENS chain I'm not sure what'll happen), and the domain is paid up in advance for 40 years. Anyone can extend it if I die. The Arweave counterpart is permanently bought, so shouldn't ever expire.</p> 
<p>You can access the URL in any ENS-enabled browser like Opera or Brave, or you can append ".link" and access it via <a href="https://value.eth.link">value.eth.link</a>. "eth.link" is a domain owned and operated by ENS, so they do the forwarding for you. If that fails, <a href="https://value.eth.limo">value.eth.limo</a> also works. In theory, they could DNS-swap your frontend for something malicious, yes, so you should probably try to access via value.eth directly whenever possible, or if that doesn't work, through the IPFS hash that is registered to the ENS name.</p> 
<p>To access this IPFS hash, you can just inspect the ENS domain: <a href="https://app.ens.domains/value.eth">https://app.ens.domains/value.eth</a> - use the contenthash in any IPFS gateway and you're good to go.</p> 
<p>The IPFS content is hosted through Filebase, which admittedly is another single-point-of-failure. If no one with an IPFS node visits this website in some amount of time, AND Filebase goes down, the frontend is dead. This is why I've also added Arweave hosting to it, so you can access the app through <a href="https://value.ar.io">value.ar.io</a> or any other gateway that will resolve ar://value.</p> 
<p>You can also grab the raw HTML content and run the page locally through tools like <a href="https://ipfsviewer.com/?hash=bafybeig5eiz56c6i6e6wefembhuwhlprqv6ug4i3vqpauodnggnr4u2u4q">ipfsviewer</a>.</p> 
<p>The deployment process is fully local - I run "bun run deploy" and the frontend is minimized, pushed to IPFS and Arweave and the contenthash on ENS updated - for as long as I still have access to my wallets.</p> 
<p>Even if the frontend goes down completely, <a href="https://value-eth-docs.pages.dev/deployments">the contracts are verified on all chains they've been deployed to</a>, so they can be directly interacted with on any block explorer, or through the <a href="https://value-eth-docs.pages.dev/interface">interface</a>, which also makes it trivial to integrate Value with any DEX, launchpad, or project in general.</p> 
<p>It sounds convoluted but in many ways it's ridiculously simple - like we used to have it. It used to be that you could revisit a website you visited in Internet Explorer 7 weeks ago, and if it was still in your "Temporary Internet Files" folder, it would load, even offline. That's how things are supposed to work. That's how value.eth works. And that's how most of my future "idealism" launches are going to work.</p> 
<p>Progressive Centralization.</p> 
<iframe width="560" height="315" src="https://www.youtube.com/embed/ZkL5xuNVAS4?si=N20OGarG3AcyqYrh" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> 
<hr /> 
<p>So, check out Value if you're interested. Also check out <a href="https://bruno.eth.link/6AFE14A3-1BBF-4581-B925-FB17B01343D0/">Pingui.io</a> if you're interested. There will be more soon. And if you want to build on top of this template, I'll publish it soon so you too can launch middleman-resistant projects.</p> 
<p>Does this mean I'm back to being an idealist?</p> 
<p>No of course not. I now accept the Darwinian nature of web3. I now look forward to taking the retards' money in this PvP arena we call "work". It is still the accumulation phase. I'll go to work for the most centralized L2 out there and pretend I like it, like a good soldier.</p> 
<p>But while I'm doing that, I'll put my skills to good use and try to build unstoppable things. It's the only way to justify staying in this industry.</p>
        ]]></description>
    </item>
    
    <item>
        <title>Pingui and the vendor lock-in of modern Vibe Coding SaaS</title>
        <link>https://bruno.eth.limo/6AFE14A3-1BBF-4581-B925-FB17B01343D0/</link>
        <guid>https://bruno.eth.limo/6AFE14A3-1BBF-4581-B925-FB17B01343D0/</guid>
        <pubDate>Wed, 21 Jan 2026 18:23:07 +0100</pubDate>
        
        <itunes:image href="https://bruno.eth.limo/6AFE14A3-1BBF-4581-B925-FB17B01343D0/android-chrome-512x512.png" />    
        
        
        <description><![CDATA[
            <p>A few months back, I made <a href="https://pingui.io">Pingui</a>: a simple GUI tool to Pin (get it?) files on IPFS. It proxies the files to two pinning services - Pinata and Filebase - and pays for them well in advance.</p> 
<img width="512" alt="android-chrome-512x512" src="https://bruno.eth.limo/6AFE14A3-1BBF-4581-B925-FB17B01343D0/android-chrome-512x512.png" /> 
<p>This is a dead simple way to pay with any crypto token to host a single file, get a shareable link, and just spread it around. No censorship, no checks.</p> 
<p>But the problem was - it was vibe coded with <a href="https://app.emergent.sh/register?ref=brun925112">Emergent</a>. Emergent is a great vibe coding platform that defaults to Python for back end and React for front end. It comes with a simple "deploy" button, and a "connect domain" button and, as such, is a REALLY tempting launch partner. Just click and you're done.</p> 
<p>But as I had been using <a href="https://lovable.dev/invite/D9AH8ZS">Lovable</a> before too (relentlessly - hours every day!), I found myself now paying rent for deployments to two different services.</p> 
<p>And as their prompts aren't excatly optimizable, you're at the mercy of their setup which is, naturally, skewed towards spending credits so they can upsell you. Before I knew it, I was paying a total of 200+ USD for both of these per month, deploying things that earn: zero.</p> 
<p>So I decided to consolidate.</p> 
<p>The cool thing no one tells you about these agents is that while they will refuse to do work that is outside of their "expertise" (like, build a Vue app, not React), there are certain things that ARE in their expertise.</p> 
<p>One of those things is knowing how to deploy applications.</p> 
<p>So, I did the following. With my last remaining credits on Emergent, I told the agent to write a SELFHOST.md file containing full instructions for self hosting this on a small Ubuntu server.</p> 
<p>This was a good start, but the Agent also insists on Docker and other nonsensical shenanigans the <a href="https://world.hey.com/dhh/merchants-of-complexity-4851301b">merchants of complexity</a> have inflicted on people.</p> 
<p>So the next stage was Cursor - my daily goto.</p> 
<blockquote> 
 <p>"This is a python project created by Emergent, a vibe coding platform. It uses too many dependencies and abstractions.</p> 
</blockquote> 
<blockquote> 
 <p>I am okay with leaving it as a python project, but I want you to study @README.md, remove any and all Docker stuff, and prepare it for standalone deployment on a small digitalocean droplet on which I already run several websites using nginx, systemd, and bun.</p> 
</blockquote> 
<blockquote> 
 <p>If we have any database needs, only SQLite is allowed. No other dependencies are to be introduced."</p> 
</blockquote> 
<p>This was all that was necessary to completely prepare this application for hosting on a small DO droplet.</p> 
<p>I dusted off my old devops-fu and set up the project on the server, and within an hour we were up and running. It took longer for the DNS settings to propagate.</p> 
<p>Man, I love living in this AI age.</p>
        ]]></description>
    </item>
    
    <item>
        <title>Speaking &#x26; Public Appearances</title>
        <link>https://bruno.eth.limo/391FBB42-50A9-4B99-9659-1D20191C7E49/</link>
        <guid>https://bruno.eth.limo/391FBB42-50A9-4B99-9659-1D20191C7E49/</guid>
        <pubDate>Fri, 16 Jan 2026 08:32:40 +0100</pubDate>
        
        
        <description><![CDATA[
            <h2>2025</h2> 
<ul> 
 <li> <p>[Talk] <strong>EthCC[8]</strong> — <em>Hoi Polloi: Gratitude Guild — a story of community incentivization</em> (Talk) — <strong>June 30, 2025</strong> — Cannes, France</p> 
  <ul> 
   <li><a href="https://ethcc.io/agenda/hoi-polloi-gratitude-guild-a-story-of-community-incentivization">https://ethcc.io/agenda/hoi-polloi-gratitude-guild-a-story-of-community-incentivization</a></li> 
   <li><a href="https://ethcc.io/archives/hoi-polloi-gratitude-guild-a-story-of-community-incentivization">https://ethcc.io/archives/hoi-polloi-gratitude-guild-a-story-of-community-incentivization</a></li> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/DCG-2YKJMy0" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> </li> 
  </ul> </li> 
 <li> <p>[Workshop] <strong>Katana Network Launch EthCC side event</strong> — <em>Vibeforge: LLM-Powered Coding Workshop / Flash Hackathon</em></p> 
  <ul> 
   <li>not recorded</li> 
  </ul> </li> 
 <li> <p>[Demo] Deploying Katana Apps to the Permaweb with Arweave</p> 
  <ul> 
   <li><a href="https://www.youtube.com/live/3T9kAELYRw0?si=auTMGI57NqnjiNou">https://www.youtube.com/live/3T9kAELYRw0?si=auTMGI57NqnjiNou</a></li> 
  </ul> </li> 
 <li> <p>[Talk] <strong>ETH Milano</strong> — <em>The Future of Aggregated L2s: Meet the AggLayer</em> — Milan, Italy</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/u7fJ0oECxQU" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=yKBoa3z_FUc6zTG4 </li> 
  </ul> </li> 
 <li> <p>[Workshop] Katana's MCP Enabled LLM Friendly Anvil Powered Starter Kit I Bruno Skvorc</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/yorCXwhj5CU" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=UcGcPFCjlVq0OM-c </li> 
  </ul> </li> 
</ul> 
<hr /> 
<h2>2024</h2> 
<ul> 
 <li> <p>[Talk] <strong>AggLayer / Aggregation Summit</strong> — <em>Lessons from Polkadot Governance</em></p> 
  <ul> 
   <li><a href="https://www.agglayer.dev/aggsummit">https://www.agglayer.dev/aggsummit</a></li> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/tOpY4dCWzJM" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> </li> 
  </ul> </li> 
 <li> <p>[Talk] <strong>Web3 Tales Conference (Zagreb)</strong> — <em>Unlocking Cross-Chain Potential with AggLayer</em> — Zagreb, Croatia</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/VNydvuGy3l0" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> </li> 
  </ul> </li> 
 <li> <p>[Talk] Web Summer Camp - Progressive Centralization, The Right Way to do Web3</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/ZkL5xuNVAS4" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>&amp;t=1s </li> 
  </ul> </li> 
 <li> <p>[Interview] <strong>(Planet Critical interview)</strong> — <em>Why states are afraid of blockchain technology</em></p> 
  <ul> 
   <li>Video: <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/9bxfJD3S9Pw" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></li> 
  </ul> </li> 
 <li> <p>[Interview] Synopsis: Interview about Polygon with Devrel Bruno Skvorc</p> 
  <ul> 
   <li><a href="https://www.youtube.com/live/BWTuKbGOrCo?si=IwslIx6wAAq1Heyr">https://www.youtube.com/live/BWTuKbGOrCo?si=IwslIx6wAAq1Heyr</a></li> 
  </ul> </li> 
 <li> <p>[Podcast] The Future of NFTs: Insightful Talk with Bruno - from Polkadot to RMRK and Modular NFTs</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/UIVAOqQ-R44" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=FtrgS7HfOrzDIZvf </li> 
  </ul> </li> 
 <li> <p>[Workshop] Encode Club: Chain Abstraction Educate: What is AggLayer and How Is Seamless Crosschain UX Achieved?</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/MVZqoHOlZ0c" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=THSiH4OOOEi5If5V </li> 
  </ul> </li> 
</ul> 
<hr /> 
<h2>2023</h2> 
<ul> 
 <li> <p>[Talk] <strong>EthCC 2023</strong> — <em>NFTs 2.0 in Action: Utilities, Examples, and Paradigm Shifts</em> — Paris, France</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/nhPLzEbBaNc" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> </li> 
  </ul> </li> 
 <li> <p>[Talk] <strong>Web3 Family Conference (Barcelona)</strong> — <em>Progressive Centralization</em> — Barcelona, Spain</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/7T5x6XzKeqY" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> </li> 
  </ul> </li> 
 <li> <p>[Interview] <strong>The Future of NFTs (podcast / video interview)</strong> — <em>Insightful talk with Bruno Škvorc (RMRK)</em></p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/RqczYEwb7-8" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> </li> 
  </ul> </li> 
 <li> <p>[Demo] EthDenver Hackathon - The Most Advanced Modular NFTs on zkSync</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/y9GHrMXlyDU" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=fDUEUz0IqGO_MIGA </li> 
  </ul> </li> 
 <li> <p>[Panel] Blocksplit: Fireside chat: Gaming and Metaverse - Bruno Skvorc, Josip Vlah</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/sRAlQygOPKU" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=REh_-Q9NwM_VOYzz </li> 
  </ul> </li> 
 <li> <p>[Talk] Bruno Skvorc @rmrk Keynote during Polkadot in USe @ETHDenver 2023</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/PZXBlA_hHEY" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=jCdhq7D9IJqEVZkk </li> 
  </ul> </li> 
 <li> <p>[Interview] Polkadot Wrap-up 2022: Bruno Skvorc - Founder at RMRK</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/q63sG1hfH_s" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=gdgostOCIMQHOlRm </li> 
  </ul> </li> 
 <li> <p>[Workshop] Bitcoin on Ethereum through Polkadot</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/yao8cg3Cdl0" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=oXG_GfZH4YfEvPKh </li> 
  </ul> </li> 
 <li> <p>[Talk] Reputational Avatars - NFTs 2.0 Magic - RMRK</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/EdS4dPQZ3IY" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=_WFeTwyYuR9sjNhJ </li> 
  </ul> </li> 
 <li> <p>[Talk] SaoPaolo Meetup - Polkadot Basics</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/qZEr-OuV2co" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=dLmiqz5MVDt3tK3C </li> 
  </ul> </li> 
 <li> <p>[Podcast] RADIX DLT: Transforming Web3 and why NFT2.0s are more than just Monkey Pictures</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/bBtlawm41fA" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=5ptHFq8pUJ99tFGG </li> 
  </ul> </li> 
 <li> <p>[Interview] Paul Barron Network: NFTs 2.0 Launch on Polygon! 🔥 RMRK + McFarlane Toys Digital INTERVIEW</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/lp2KF1a-l0k" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=OKVKiRbH3svjRSrZ </li> 
  </ul> </li> 
</ul> 
<hr /> 
<h2>2022</h2> 
<ul> 
 <li> <p>[Panel] ParisDOT.Comm2022 - Validator Alliance Panel- Why is it important to rely on independent validators?</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/96QyDPoBV7k" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=AT9OBX0IyRyDNSYj </li> 
  </ul> </li> 
 <li> <p>[Talk] ParisDOT.Comm2022 - Bruno Škvorc - The biggest problems with metaverses today and how to solve them!</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/nPb30E7XPnk" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=4jpcv7DR85sXY7uI </li> 
  </ul> </li> 
 <li> <p>[Talk] Blocksplit: Unlearning NFTs: going further than just images</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/20n6cblOBY0" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=xiyC2RW9wgLZZOdR </li> 
  </ul> </li> 
 <li> <p>[Talk] Through the lens of Skybreach - BlockDown Festival: Croatia</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/ErvA6vg7BuE" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=hFczf54CGEy-Xrv6 </li> 
  </ul> </li> 
 <li> <p>[Panel] Evolution of the Metaverse and what that means for brands - BlockDown Festival: Croatia</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/kkAoq-o5cD8" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=-wV3LaglcuKDV2qL </li> 
  </ul> </li> 
 <li> <p>[Talk] Introduction to NFTs 2.0: Infinitely composable NFT legos - BlockDown Festival: Croatia</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/k856n680AxU" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=GrM05ejKuj5aDYQR </li> 
  </ul> </li> 
 <li> <p>[Interview] Interview of Bruno ŠKVORC from RMRK</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/LB2_vWrXOsI" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=edoqnIx28rreB0d2 </li> 
  </ul> </li> 
 <li> <p>[Podcast] The 'Remarkable' RMRK | Kraken.com's Parachain Auctions Podcast</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/xC6uZUzbx1k" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=GIOS0v7dY2mZPEaF </li> 
  </ul> </li> 
 <li> <p>[Podcast] The Defiant: The devils in the detail. The essential tools for the Metaverse 2.0</p> 
  <ul> 
   <li><a href="https://www.youtube.com/live/EWe2q5gwarI?si=PfhYMSkPj4VHc9mg">https://www.youtube.com/live/EWe2q5gwarI?si=PfhYMSkPj4VHc9mg</a></li> 
  </ul> </li> 
 <li> <p>[Talk] (CROATIAN 🇭🇷) About NFTs - Rijeka 2022</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/rAsvRUtblfM" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=TqOHwKRTY7fRWI7B </li> 
  </ul> </li> 
 <li> <p>[Panel] What's the path to mass uptake-building an open metaverse? - Metacon 2022</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/OmvpWyUk5cE" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=18tV6qUjOAnVJVh4 </li> 
  </ul> </li> 
 <li> <p>[Interview] RMRK Explained | The Kanaria Metaverse Is Approaching !</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/kQNGAPSNIZM" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=_tf8ctFIh16h7uuR </li> 
  </ul> </li> 
 <li> <p>[Panel] The Rise of NFTs - European Blockchain Convention</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/_MKxS_hslyA" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=gz5VI3eiubGM4e7u </li> 
  </ul> </li> 
 <li> <p>[Interview] Moonbeam: Interview with Bruno Skvorc, Founder of RMRK... And Exciting News About Skybreach!</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/MsvqsyQFgOU" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=Opy6KZBwWM2kbXrZ </li> 
  </ul> </li> 
 <li> <p>[Panel] The Fluf World Futureverse explained w/ Bruno Skvorc (RMRK)</p> 
  <ul> 
   <li><a href="https://www.youtube.com/live/-3NMyAr4eeM?si=Fae7zU76gyRLHSO1">https://www.youtube.com/live/-3NMyAr4eeM?si=Fae7zU76gyRLHSO1</a></li> 
  </ul> </li> 
 <li> <p>[Talk] MTALKS 8 | Bruno Skvorc | RMRK | Singularity.app | Skybreach | NFT &amp; Metaverse Projects</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/rGaJreN7LKc" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=dYDtCkW-hmsbPUry </li> 
  </ul> </li> 
 <li> <p>[Interview] Bruno Skvorc Co-Founder of $RMRK Explains why RMRK is the MOST advanced NFT system in the world.</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/Y0L9LBmW1YA" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=DOSsXeg0z3vmckri </li> 
  </ul> </li> 
 <li> <p>[Panel] Crossing Over: The Future Of The Digital World | Panel Discussion | Reimagine v13.0</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/lXmubCEa4_4" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=6qcBobEMdyH3KXvn </li> 
  </ul> </li> 
 <li> <p>[Interview] Polkaworld: RMRK: NFT LEGOS AND MORE</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/37g4ukMp-Dc" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=HD5K2XxQ1vDP-nV2 </li> 
  </ul> </li> 
 <li> <p>[Podcast] Lets Talk NODEsense - Block #1 RMRK</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/gNRLRSPfV5s" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=ZKmfhhkR-W-Ie8S8 </li> 
  </ul> </li> 
 <li> <p>[Panel] Interoperability Roadmap in the NFT Industry | Illuminate/22 by Moonbeam</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/JbLBCrW90XI" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=cfm7NkLxqsMSiFQt </li> 
  </ul> </li> 
</ul> 
<hr /> 
<h2>2021</h2> 
<ul> 
 <li> <p>[Interview] Token Metrics - RMRK - Next Gen NFTs and Unlocking the Potential of Metaverse | Bruno Skvorc Interview | 100x Show</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/Ff_wYAN68UM" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=IAVPWXsnMsXkEwC- </li> 
  </ul> </li> 
 <li> <p>[Podcast] Što je Web3, a što je metaverse? Ne, nije Facebook! (Bruno Škvorc, Luka Sučić)</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/YxW-3Bnk8yc" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=BYAwkH_qFJF8-lVt </li> 
  </ul> </li> 
 <li> <p>[Interview] MAD CRIPTO MX - The future of NFT's, the new generation: RMRK. Talking with founder</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/6kRBoXvr5Jg" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=6Q1Y4meUV_TecuPa </li> 
  </ul> </li> 
 <li> <p>[Talk] The Kanaria Metaverse: Home To The World's Most Advanced NFTs | Bruno Škvorc, BlockDown 2021 Conf</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/q2cnNT2ggUA" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=IeV2uUCylIHZKO5S </li> 
  </ul> </li> 
 <li> <p>[Talk] Dcentral Con - NFTs on Kusama - DeFi Demo Day presented by Launchpool</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/j1RLBIBaEUE" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=ruO5QMF6axk4iJeN </li> 
  </ul> </li> 
 <li> <p>[Talk] Reimagine - Extending The Multiverse Of Blockchains | Bruno Skvorc - Web3 Foundation | REIMAGINE v8.0 #27</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/nKTIky4zQu0" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=TLq_IlmsmwrSHR3v </li> 
  </ul> </li> 
 <li> <p>[Talk] (CROATIAN 🇭🇷) Uvod u NFTeve</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/GHAgU1QQQ9Q" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=B0rWTZh_-8ZekC3J </li> 
  </ul> </li> 
 <li> <p>[Interview] (CROATIAN 🇭🇷) Kako prepoznati kripto prijevaru?</p> 
  <ul> 
   <li><a href="https://www.youtube.com/live/oIxRoXX6APo?si=pV5nHfNcrWT1aN4c">https://www.youtube.com/live/oIxRoXX6APo?si=pV5nHfNcrWT1aN4c</a></li> 
  </ul> </li> 
 <li> <p>[Panel] Web3: Next Generation Internet, with Bruno Skvorc, Carolina Velásquez, Alex Siman, Alfonso Rocha</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/829tpTIx7L8" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=AHEE_bgdGp6OEnOY </li> 
  </ul> </li> 
 <li> <p>[Interview] NonFungibleGerbils: #35 Bruno Škvorc, RMRK - NFT LEGO on Kusama</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/Y2xLrnfoxSc" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=iXDR0DS8KeGdw-Pd </li> 
  </ul> </li> 
 <li> <p>[Talk] Meet the founder of RMRK and creator of Kanaria NFT - Bruno Skvorc</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/T8z4DGnWQL8" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=qhQPH72kaLlchDC1 </li> 
  </ul> </li> 
 <li> <p>[Podcast] The Kus - NFTs and RMRK - Space Monkeys 002</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/b25xcCC6_7Q" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=VpiPJycXBYRSuRz9 </li> 
  </ul> </li> 
 <li> <p>[Panel] Reinventing NFTs with Polkadot - Diffusion Digital July 2021</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/9P4nTtDiTU4" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=Vv7-FG3FRljmQIUp </li> 
  </ul> </li> 
 <li> <p>[Interview] Tokenverse 19: Deep dive into Kanaria, the hottest NFT project on Kusama</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/AAH-SGhwzAU" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=_xAHrVC4sQcmhyra </li> 
  </ul> </li> 
 <li> <p>[Podcast] Financial Fox: Web3 Foundation: Blockchain literacy, utility-based NFTs &amp; Polkadot</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/7e_-P9i2NA8" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=0_XBtsQRB8rCrsXh </li> 
  </ul> </li> 
 <li> <p>[Talk] Metaverse Carnival | Kanaria Metaverse: Home to the Most Advanced NFTs in the World</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/fSO35oPrFSY" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=hslrxB9erLK0uzji </li> 
  </ul> </li> 
 <li> <p>[Interview] RMRK X CLUB721 EP11</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/_r_URhNZ34A" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=mOAwnE9E2zG1pMQR </li> 
  </ul> </li> 
 <li> <p>[Interview] (CROATIAN 🇭🇷) Tech Ćakula #10 - "Kako rade NFT-ovi ?“ - powered by 46elks</p> 
  <ul> 
   <li><a href="https://www.youtube.com/live/SAGhn0Opy3c?si=de9SmA7UT_oYCkuo">https://www.youtube.com/live/SAGhn0Opy3c?si=de9SmA7UT_oYCkuo</a></li> 
  </ul> </li> 
 <li> <p>[Talk] (CROATIAN 🇭🇷) Siječanjski UBIK meetup (Polkadot, Near, ETH 2.0)</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/-Z8QIgo6lvY" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=dj4UiafUqua0ow8Z </li> 
  </ul> </li> 
 <li> <p>[Talk] (CROATIAN 🇭🇷) Radionica - Osnove pismenosti u kriptovalutama, 2. dan: Kako rade Pump and Dump grupe</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/qBzO5bF2wLo" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=M6QKFB1tgUKyTWQa </li> 
  </ul> </li> 
 <li> <p>[Panel] How Web3 is changing NFTs - NFTCON Presented by Gala Games</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/N67X4t_Aiwk" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=Gg8T-SAydBwyPfFw </li> 
  </ul> </li> 
 <li> <p>[Workshop] How To Build Front Ends For Your Substrate Chains</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/5DK4QpBKq7o" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=3AwoaBs_ZWrql6mc </li> 
  </ul> </li> 
 <li> <p>[Panel] (CROATIAN 🇭🇷) DPUH: NFT i umjetnost - status: neodređeno</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/0mLCmGHYoEo" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=GJUnq5incZs2njxg </li> 
  </ul> </li> 
 <li> <p>[Panel] The Cyber Future on Parachains - NFT</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/6WNbdkan_ks" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=YhIEdygzCwjj-Oe5 </li> 
  </ul> </li> 
 <li> <p>[Talk] (CROATIAN 🇭🇷) Kako i zašto je blockchain zavladao svijetom. Kako radi, kamo ide, što može? (Visoka škola Aspira)</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/vy4K5MeXY7w" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=DqKPxUuhXRflZtyE </li> 
  </ul> </li> 
 <li> <p>[Panel] Decentralized Art and Culture in the Virtual Realm</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/ik47o9amOpY" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=UktEglA0plDcADFF </li> 
  </ul> </li> 
</ul> 
<hr /> 
<h2>2020</h2> 
<ul> 
 <li> <p>[Demo] <strong>TruffleCon 2020 (Virtual)</strong> — Using Truffle with Substrate chains<br /> - <a href="https://archive.trufflesuite.com/trufflecon2020/">https://archive.trufflesuite.com/trufflecon2020/</a><br /> - <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/XH7CiyY83VU" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=CHpeR9NfJB-lqDT2</p> </li> 
 <li> <p>[Talk] <strong>FOSDEM 2020</strong> — <em>Web3 (Lightning Talk)</em> — Brussels, Belgium<br /> - <a href="https://archive.fosdem.org/2020/schedule/event/web3/">https://archive.fosdem.org/2020/schedule/event/web3/</a><br /> - <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/St8x8hewc30" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=-fdHyqu4AS8k6S5Q</p> </li> 
 <li> <p>[Talk] Blockchain &amp; Crypto Days Osijek, 24.10.2020. - Polkadot u Detalje</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/Fsr-osC4kHQ" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=pfPq8NfXawYOROhT </li> 
  </ul> </li> 
 <li> <p>[Talk] Blockchain &amp; Crypto Days Osijek: 23.10.2020. - UBIK, Substrate, Ferit, Base58</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/jPW3viAb0ow" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=6iWG6H-BKe5yLaY- </li> 
  </ul> </li> 
 <li> <p>[Interview] TripsCommunity: Web3 Integrations in WEB2</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/Plyu6oZxgXM" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=bkFwFQd9YVeJxSAl </li> 
  </ul> </li> 
 <li> <p>[Talk] Intro Explainer for Babylon Hackathon: NFTs on Polkadot and RMRK.app explained!</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/jw7XFnhr0ss" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=voI4fm0BU9cwwSY0 </li> 
  </ul> </li> 
 <li> <p>[Demo] Knowledge Exchange for Web3 Foundation: RMRK and NFTs</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/Cm-UKxsVfxA" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=7ornmYW7ZB0xveju </li> 
  </ul> </li> 
 <li> <p>[Interview] REIMAGINE 2020 v1.0 - Bruno Skvorc - Web3 Foundation</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/AitgpDIdtV8" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=f0QBZQvt5df7fyo8 </li> 
  </ul> </li> 
 <li> <p>[Interview] Experimental Freedom | Bruno Skvorc - Web3 Foundation | REIMAGINE v4.0 #47</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/COZQkUW09wc" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=UQRdxbgs31_Yurgj </li> 
  </ul> </li> 
 <li> <p>[Workshop] San Francisco Blockchain Week: Unitize2020: Build your own blockchain in an hour and forklessly upgrade it!</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/Bf5IGSKE6_s" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=yLtfFQXBrDXCgj_R </li> 
  </ul> </li> 
</ul> 
<hr /> 
<h2>2019</h2> 
<ul> 
 <li> <p>[Talk] <strong>BlockSplit 2019</strong> — <em>Not Your Node Not Your Truth</em></p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/LH7eFIekiVA" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=-iJaiMSpti8atZ3W </li> 
  </ul> </li> 
 <li> <p>[Talk] <strong>BlockSplit 2019</strong> — <em>Ethereum 2.0: all you need to know</em></p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/r26vqo5M7cA" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=pAM7Lq5CVUQOPa13 </li> 
  </ul> </li> 
 <li> <p>[Workshop] <strong>DeFi Academy (traveling workshop)</strong> — <em>Freeing finance with DeFi</em> / <em>DeFi: Be your own bank</em></p> 
  <ul> 
   <li>No video, site is offline now</li> 
   <li>This was an in-person paid workshop about using DeFi</li> 
  </ul> </li> 
 <li> <p>[Workshop] Blocksplit Workshops: How to make an ICO</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/dr5yToPUj_4" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=Quqp87mBbCWrkMEo </li> 
  </ul> </li> 
 <li> <p>[Workshop] CoinTelegraph: Build Your Own Blockchain | Unitize Day 2: Developers and Hackathon Track</p> 
  <ul> 
   <li><a href="https://www.youtube.com/live/ceptX3kJAvA?si=qkqLhYgrIF-ynHeb">https://www.youtube.com/live/ceptX3kJAvA?si=qkqLhYgrIF-ynHeb</a></li> 
  </ul> </li> 
</ul> 
<hr /> 
<h2>2018</h2> 
<ul> 
 <li> <p>[Panel] Polkadot &amp; Kusama Fireside Chat with W3F and Parity</p> 
  <ul> 
   <li><a href="https://www.youtube.com/live/DG3kfzf9tEM?si=YxkyE1XfNc-j9a_-">https://www.youtube.com/live/DG3kfzf9tEM?si=YxkyE1XfNc-j9a_-</a></li> 
  </ul> </li> 
 <li> <p>[Workshop] Run and Configure a Node Monitoring Dashboard on Kusama &amp; Polkadot</p> 
  <ul> 
   <li><a href="https://www.youtube.com/live/G9b91ti0BAc?si=YZr4mSYM8_F-e4kL">https://www.youtube.com/live/G9b91ti0BAc?si=YZr4mSYM8_F-e4kL</a></li> 
  </ul> </li> 
 <li> <p>[Workshop] Running a Kusama Full Node - Crash Course</p> 
  <ul> 
   <li><a href="https://www.youtube.com/live/31DdfcxbAVs?si=YdyoI_VqwL25-I9Z">https://www.youtube.com/live/31DdfcxbAVs?si=YdyoI_VqwL25-I9Z</a></li> 
  </ul> </li> 
 <li> <p>[Panel] (CROATIAN 🇭🇷) Konferencija Meeting G2.4.- Panel: „Blockchain i Hrvatska“, projekti i inicijative</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/TnLILCdMzVg" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=VNdwesEXpEK1Zveq </li> 
  </ul> </li> 
 <li> <p>[Talk] Knowledge Exchange for Web3 Foundation: Random Numbers in Blockchains</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/YVWz8Z17AkU" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=IlvCHrQ_7RZxZFVD </li> 
  </ul> </li> 
 <li> <p>[Talk] <strong>GrowIT Full Stack Conference 2018</strong> — <em>Auditing Smart Contracts: Beyond Code and Into Godmode Backdoors</em> - Novi Sad, Serbia</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/BvfwPe8PWNE" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=ba-A3K2-jd_QPqUB </li> 
  </ul> </li> 
 <li> <p>[Talk] (CROATIAN 🇭🇷) Blockchain Developers Meetup 05.09.2018 @ HUB385 - Audit Pametnih Ugovora</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/PvHk7SyazoU" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=faC1uFYbLhXg5JSl </li> 
  </ul> </li> 
 <li> <p>[Talk] <strong>Bločk / Blockconf 2018</strong> — <em>What's new and coming in Ethereum 2.0</em> — <strong>Dec 2018</strong> — Croatia</p> 
  <ul> 
   <li>Web: <a href="https://archive.is/95kG1">https://archive.is/95kG1</a></li> 
  </ul> </li> 
 <li> <p><strong>BlockSplit 2018</strong> — Workshop: <em>Community-powered PoA Ethereum Blockchain + building your own Token/ICO</em> — <strong>2018</strong></p> </li> 
 <li> <p>[Research] <strong>BlockSplit 2018</strong> — <em>The Anatomy of Pump and Dump Groups</em></p> 
  <ul> 
   <li>Article: <a href="https://bitfalls.com/2018/01/12/anatomy-pump-dump-group/">https://bitfalls.com/2018/01/12/anatomy-pump-dump-group/</a></li> 
   <li>Podcast: <a href="https://softwareengineeringdaily.com/2018/03/16/crypto-pump-and-dumps-with-bruno-skvorc/">https://softwareengineeringdaily.com/2018/03/16/crypto-pump-and-dumps-with-bruno-skvorc/</a> &amp; <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/vAxysFOkkhs" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=f8UU5PvkrzegRKND</li> 
  </ul> </li> 
 <li> <p><strong>Blockchain Developers Meetup</strong> — <em>Provably Fair Gambling on the Blockchain</em> — <strong>March 2018</strong></p> 
  <ul> 
   <li>Article: <a href="https://bitfalls.com/2018/03/29/gambling-blockchain-provably-fair-mean/">https://bitfalls.com/2018/03/29/gambling-blockchain-provably-fair-mean/</a></li> 
  </ul> </li> 
 <li> <p>[Talk] <strong>Blockchain Innovation Conference 2018</strong> — <em>Most ICOs don't need blockchain</em></p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/2OMqpMGK1Es" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> </li> 
  </ul> </li> 
 <li> <p><strong>F2: Future of Fintech (2018 edition)</strong> — <em>Auditing smart contracts — beyond code and into malice</em> — <strong>Nov 2018</strong></p> 
  <ul> 
   <li>Event site: <a href="https://f2.bug.hr/">https://f2.bug.hr/</a></li> 
  </ul> </li> 
 <li> <p><strong>G2 Conference</strong> — Panel: <em>Blockchain and Croatia: projects and initiatives</em> — <strong>2018</strong></p> 
  <ul> 
   <li>Event site: <a href="https://meeting-g2.com/">https://meeting-g2.com/</a></li> 
  </ul> </li> 
</ul> 
<hr /> 
<h2>2017</h2> 
<ul> 
 <li> <p>[Workshop]<strong>Bločk / Blockconf 2017</strong> — <em>Building your own custom Ethereum ERC20-compatible stablecoin</em></p> 
  <ul> 
   <li>Event: <a href="https://web.archive.org/web/20241205045638/https://blockconf.io/2017/">https://web.archive.org/web/20241205045638/https://blockconf.io/2017/</a></li> 
  </ul> </li> 
 <li> <p><strong>F2: Future of Fintech (2017 edition)</strong> — <em>Crime and Punishment in Crypto</em> — <strong>Nov 2017</strong></p> 
  <ul> 
   <li>Event: <a href="https://f2.bug.hr/2017/">https://f2.bug.hr/2017/</a></li> 
  </ul> </li> 
 <li> <p><strong>OSCAL 2017 (Open Source Conference Albania)</strong> — <em>Fear the Walking Dev — Why developer health matters, and how to reclaim it</em> — <strong>May 2017</strong></p> 
  <ul> 
   <li>Schedule page: <a href="https://demolp.github.io/OSCAL_2017/speakers.html">https://demolp.github.io/OSCAL_2017/speakers.html</a></li> 
  </ul> </li> 
 <li> <p><strong>Legal Hackers Meetup</strong> — <em>Application and Usage of Blockchain Technology</em> — <strong>Nov 2017</strong></p> </li> 
 <li> <p><strong>The Future of Finance: Cryptocurrency</strong> — <em>Crime and Punishment in Crypto</em> — <strong>Dec 2017</strong></p> </li> 
 <li> <p><strong>(Unlinked) Enter the Blockchain: Uspon Bitcoina</strong> — <em>Introduction to Blockchain (CRO)</em> — <strong>2017</strong></p> </li> 
 <li> <p><strong>(Unlinked) Devz Meetup (Varaždin)</strong> — <em>Introduction to Blockchain</em> — <strong>Oct 2017</strong></p> </li> 
</ul> 
<hr /> 
<h2>2016</h2> 
<ul> 
 <li> <p>[Talk] <strong>Bulgaria PHP Conference 2016</strong> — <em>The Framework is Dead</em> — <strong>Oct 8, 2016</strong> — Sofia, Bulgaria</p> 
  <ul> 
   <li>Schedule: <a href="https://joind.in/event/bulgaria-php-2016/schedule">https://joind.in/event/bulgaria-php-2016/schedule</a></li> 
  </ul> </li> 
 <li> <p>[Talk] <strong>PHPKonf Istanbul 2016</strong> — <em>The framework is dead</em> — <strong>May 21, 2016</strong> — Istanbul, Turkey</p> 
  <ul> 
   <li>Talk page: <a href="https://joind.in/event/phpkonf-istanbul-php-conference-2016/the-framework-is-dead">https://joind.in/event/phpkonf-istanbul-php-conference-2016/the-framework-is-dead</a></li> 
  </ul> </li> 
 <li> <p>[Workshop] <strong>Web Summer Camp 2016</strong> — <em>The framework is dead, long live the framework</em> (Workshop) — Rovinj, Croatia</p> 
  <ul> 
   <li>Workshop abstract: <a href="https://2016.websummercamp.com/PHP/The-framework-is-dead-long-live-the-framework">https://2016.websummercamp.com/PHP/The-framework-is-dead-long-live-the-framework</a></li> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/lJ52xBC27xw" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=SzD5mmA3ktd19wn1 </li> 
  </ul> </li> 
 <li> <p>[Talk] <strong>OSCAL 2016 (Open Source Conference Albania)</strong> — <em>How open source helps abandoned animals find new homes</em></p> 
  <ul> 
   <li>site no longer available</li> 
  </ul> </li> 
 <li> <p>[Workshop] (CROATIAN 🇭🇷) Uvod u VueJS - DevZ meetup</p> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/wPn2BKU2ykc" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=RS9PTntm7kgID6tk </li> 
  </ul> </li> 
</ul> 
<hr /> 
<h2>2015</h2> 
<ul> 
 <li> <p>[Talk] <strong>OSCAL 2015 (Open Source Conference Albania)</strong> — <em>The Many Way to Contribute to Open Source</em></p> 
  <ul> 
   <li>Schedule: <a href="https://joind.in/event/oscal-3915--open-source-conference-albania-2015/schedule/list">https://joind.in/event/oscal-3915--open-source-conference-albania-2015/schedule/list</a></li> 
   <li>Slides: <a href="https://www.slideshare.net/slideshow/bruno-skvorc-the-many-ways-to-contribute-to-open-source/48876821">https://www.slideshare.net/slideshow/bruno-skvorc-the-many-ways-to-contribute-to-open-source/48876821</a></li> 
  </ul> </li> 
 <li> <p>[Talk] <strong>OSCAL 2015 (Open Source Conference Albania)</strong> — <em>Open Sourcing Content — Peer Review's Effect on Quality</em></p> 
  <ul> 
   <li>Schedule: <a href="https://joind.in/event/oscal-3915--open-source-conference-albania-2015/schedule/list">https://joind.in/event/oscal-3915--open-source-conference-albania-2015/schedule/list</a></li> 
   <li>Slides: <a href="https://www.slideshare.net/slideshow/bruno-skvorc-open-sourcing-content-peer-reviews-effect-on-quality/48877242">https://www.slideshare.net/slideshow/bruno-skvorc-open-sourcing-content-peer-reviews-effect-on-quality/48877242</a></li> 
  </ul> </li> 
</ul> 
<hr /> 
<h2>2014</h2> 
<ul> 
 <li>[Talk] <strong>Forum PHP 2014 (AFUP)</strong> — <em>Automate your Workflow: Removing Tedium in Everyday Work</em> (aka “Automating Workflows with Diffbot”) — <strong>Oct 23, 2014</strong> 
  <ul> 
   <li> <iframe width="100%" style="aspect-ratio: 16/9" src="https://www.youtube.com/embed/-op98wlRzZk" title="YouTube Video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>?si=FfUpS3XfPLdAXIJy </li> 
  </ul> </li> 
</ul> 
<hr /> 
<p>More videos may be out there, if you find some not on this list, let me know.</p>
        ]]></description>
    </item>
    
    <item>
        <title>Neural Decorators</title>
        <link>https://bruno.eth.limo/B887286C-A0DF-4DDC-A4FF-8F8F276B1D63/</link>
        <guid>https://bruno.eth.limo/B887286C-A0DF-4DDC-A4FF-8F8F276B1D63/</guid>
        <pubDate>Sat, 13 Dec 2025 07:19:34 +0100</pubDate>
        
        <itunes:image href="https://bruno.eth.limo/B887286C-A0DF-4DDC-A4FF-8F8F276B1D63/1_aCrGxjC-x-pjzBnb9ak-6Q.webp" />    
        
        
        <description><![CDATA[
            <p>This is a post I wrote 10+ years ago. I think it still holds up, so I'm re-saving it here to get it out of Medium's greedy claws.</p> 
<hr /> 
<p>I was watching the new TV show <a href="http://www.imdb.com/title/tt4122068/">Humans</a> the other day and in it, an older android model starts to lose its memory — not completely missing, but deteriorating, like in people with Alzheimer’s.</p> 
<img width="636" alt="1_aCrGxjC-x-pjzBnb9ak-6Q" src="https://bruno.eth.limo/B887286C-A0DF-4DDC-A4FF-8F8F276B1D63/1_aCrGxjC-x-pjzBnb9ak-6Q.webp" /> 
<p>In computers (and, therefore, androids), data either is or is not there. There is no “deterioration” — it’s 1 or 0, it’s present or absent. Sure, some datasets can be partially corrupted and you can then retrieve the remaining parts, if they’re still readable without the missing blocks, but there’s no “weakened” memory. It’s not like you can fire up your computer that had Bioshock installed and one day it’ll be running System Shock because they’re kind of similar.</p> 
<img width="556" alt="1_xehXZyU5ulEoaTrjD6BoWA" src="https://bruno.eth.limo/B887286C-A0DF-4DDC-A4FF-8F8F276B1D63/1_xehXZyU5ulEoaTrjD6BoWA.webp" /> 
<p>Now, ignoring the show’s other inaccuracies, this one with the memory seemed interesting. What if, in the context of the TV show’s world, that’s how they solved the problem of artificial intelligence? With Neural Decorators.</p> 
<p>Disclaimer: I have done literally zero research on this so please let me know if a concept such as this one exists (a version of neural networks perhaps), but here I’m calling it <em>neural decorators</em> because of a software development pattern — the decorator pattern. Let’s explain that first.</p> 
<h2>The Decorator Pattern</h2> 
<p>Let’s explain it in non-coder terms first.</p> 
<h3>Decorating in reality</h3> 
<p>Imagine a gift — unwrapped.</p> 
<img width="800" alt="1_rQiC1BSUbdnnghmtPsRcPA" src="https://bruno.eth.limo/B887286C-A0DF-4DDC-A4FF-8F8F276B1D63/1_rQiC1BSUbdnnghmtPsRcPA.webp" /> 
<p>The purpose of the gift (not the iPhone’s specific purpose, but the purpose of the term “gift” itself) is to give the recipient satisfaction and surprise. We then put the gift into a pretty box.</p> 
<img width="800" alt="1_Ll39Ac01ndhKvIoC8Y0AtQ" src="https://bruno.eth.limo/B887286C-A0DF-4DDC-A4FF-8F8F276B1D63/1_Ll39Ac01ndhKvIoC8Y0AtQ.webp" /> 
<p>The end-goal of this box is to delight you with its prettiness and, ultimately, to give you what’s inside so the <em>original purpose</em> can be fulfilled — giving of satisfaction and surprise. Now, around this box we put a pretty bow.</p> 
<img width="800" alt="1_tCBF-EHECiEZRDQ7cimYag" src="https://bruno.eth.limo/B887286C-A0DF-4DDC-A4FF-8F8F276B1D63/1_tCBF-EHECiEZRDQ7cimYag.webp" /> 
<p>The purpose of this bow is the same as the purpose of the box before — delighting. Only this one needs to <em>delight further</em>, but in a slightly different way. Then, we put the entire wrapped thing into a pretty gift bag.</p> 
<img width="800" alt="1_Aj-wCAa4RXPJR-whg4DDvg" src="https://bruno.eth.limo/B887286C-A0DF-4DDC-A4FF-8F8F276B1D63/1_Aj-wCAa4RXPJR-whg4DDvg.webp" /> 
<p>The bag’s purpose is twofold: making it easier to transport the gift and, once again, delighting with appearance.</p> 
<p>In the example above, every “layer” — the box, the bow and the bag have the same “action” which produces the same “output”. The action is “open” and the output is “next layer”, until the final layer (the gift) is reached. Every layer is called a “decorator”, and wrapping up final output like that is called “the decorator pattern”.</p> 
<p>Every layer enhances the final outcome (the outcome being pleasure, not the iPhone itself), but every layer is optional or perhaps more accurately, <em>interchangeable</em>. You can easily switch out a box for another, a bag for another, or even add more boxes into the whole configuration, put a bag into a bag and so on — the only thing that matters is that the output and input stay <em>of the same type</em>: gift decorator goes in, gift decorator comes out. That way, we can keep stacking gift decorators one on top of the other, and the recipient of the gift will always get to the gift sooner or later, but the unwrapping experience may vary.</p> 
<h3>Decorating in software</h3> 
<p>Ok, so how is this a software development thing?</p> 
<img width="520" alt="1_FU4-9zLpJa-AopmG8yabCQ" src="https://bruno.eth.limo/B887286C-A0DF-4DDC-A4FF-8F8F276B1D63/1_FU4-9zLpJa-AopmG8yabCQ.webp" /> 
<p>No, not like this.</p> 
<p>Here’s a brief example (you don’t really need to be familiar with programming to understand this).</p> 
<p>When you make an account on a forum (are those still a thing?), you are generally given the lowest possible role by default (guest). Only once you’re approved in one way or another do you get additional permissions (a moderator needs to click the “approve user” button next to your username, for example). So, on a forum, you are given basic “read” permissions with your new account. You can read all topics. The account is stored in the database with a flag that says “guest” under the “roles” field meaning <em>you have the role of a guest</em>.</p> 
<img width="556" alt="1_Mzm-3qSyMwMaK8oXsfK5iA" src="https://bruno.eth.limo/B887286C-A0DF-4DDC-A4FF-8F8F276B1D63/1_Mzm-3qSyMwMaK8oXsfK5iA.webp" /> 
<p>To be able to post, a new role needs to be added into the mix. Let’s say we add “user”, so the roles field looks like this: <em>“guest, user”</em>. The “user” role is a decorator of the “guest” role. In other words, all accounts are based off of “guest” and have new abilities added to them by means of a decorator. Once “decorated” with a “user”, the “guest” can make topics. Going further, if we want to administrate a particular sub-forum on the forum (i.e. become able to delete/approve accounts and topics), yet another role (and thus decorator) would be added to the roles field: <em>“guest, user, php-mod”</em>, letting the user moderate PHP topics. The same “role” can be applied to several users — the role is, of course, reusable.</p> 
<img width="556" alt="1_KUU1Xlx8K7HPiJrjDd5DbA" src="https://bruno.eth.limo/B887286C-A0DF-4DDC-A4FF-8F8F276B1D63/1_KUU1Xlx8K7HPiJrjDd5DbA.webp" /> 
<p>As above, the only thing that is important is that the decorator pattern used takes the same type of input as it gives output — a “user”, decorated or not. So when the forum system (as in, the software running the forum website) looks at someone to see if they’re allowed to do something (e.g. someone tried to post a topic by clicking the “New topic” link), it always gets a user back after going through all the decorators and piling abilities onto the account.</p> 
<p>Depending on the decorators it encounters, the action will either be allowed or denied, but that’s outside the scope of the decorator pattern — the pattern is there only to let the system know which abilities an account has, it’s up to the system (and a different sub-system) to enforce those restrictions.</p> 
<h2>Neural Decorators</h2> 
<p>Ok. So how does all this fit into the idea of neural decorators?</p> 
<p>First, we should talk about memory.</p> 
<h3>Memory</h3> 
<p>What is a <em>memory</em>? By that I mean one “instance” of a memory. Let’s go wild with an ad-hoc definition:</p> 
<blockquote> 
 <p>A memory is a recollection of an event or feeling from one’s past, in the degree that it can be retold in a manner confident enough to make it believable to the recipients.</p> 
</blockquote> 
<p>Makes sense, right? Let’s see an example.</p> 
<p>When I was 7, I almost drowned in a public pool in the center of our city park. Teo, a friend I was with, jumped in and bailed me out.</p> 
<p>There was a slide, but I had never slid down a waterslide before and was reluctant to even think about it. Though I wasn’t yet the able swimmer I am today, after much convincing Teo talked me into sliding down, saying the end of the pool where the slide ends is kid-friendly and quite shallow.</p> 
<p>I did, and immediately panicked as I sunk, not feeling the bottom of the <em>obviously deep</em> pool. I gasped and flailed <em>for minutes</em>, until Teo jumped in and started pulling me out — he had been taking swimming lessons for a while at that time, and had even been doing some <em>semi competitive swimming</em>. I remember him showing us the scratch marks of my fingernails (I had <em>scratched him bloody on both his chest and back</em>), for I flailed like a dead squid on soy sauce while he was pulling me out.</p> 
<iframe width="560" height="315" src="https://www.youtube.com/embed/dzj95jHuPiw?si=aUKQK5Ot23yXmuSE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> 
<p>When, a couple of years back, this story randomly came up around my family, it turned out our versions were slightly different. My dad, who was there, issued the following corrections:</p> 
<ul> 
 <li> <p>the pool was in fact not one in which I could have drowned and was actually really shallow. If I just took the time to calm down, remember my training and put my feet down, I would have “survived”.</p> </li> 
 <li> <p>it wasn’t really minutes of panic and drowning, it was more like six seconds.</p> </li> 
 <li> <p>Teo hadn’t been a competitive swimmer until years later.</p> </li> 
 <li> <p>There was a total of three to four scratch marks, each no more bloody than a scratched mosquito bite.</p> </li> 
</ul> 
<p>The more I thought about these “corrections”, the more I started to believe them and my memory was <em>rewritten</em> to match my father’s story. We then recounted several other childhood memories and “corrected” those. I was taken aback by the amount of misinformation sitting in my head.</p> 
<p>So… my memory was false. Does the previous definition then no longer hold true? If I believe something firmly enough, I can definitely convey it to others in a believable manner. But then it’s a lie. A fabrication. Fiction, if you will. I am then no more historically accurate than Harry Potter, or the Bible. At which point do our memories become just… stories? How much alteration can we inflict upon them before turning them into fantasy? And why does it take me so damn long to get to the point of this post?</p> 
<p>Calm down, reader. Here we go.</p> 
<h3>Neural Decorators</h3> 
<p>I believe our memories are a set of neural decorators, and that losing memory means removing some of those decorators, and the underlying memory submodule of the brain then makes up bogus ones to cover for those removed (purposely of by accident), if it can.</p> 
<p>Sometimes, we even willingly remove some decorators if they fit the context better (maybe there was no drowning at all?) or replace them with better alternatives — maybe I’ll impress a girl more if <em>I</em> saved <em>Teo</em> rather than the other way around. It can also happen that we use this new decorator so much, the memory submodule sets it as a default and our memory is altered so much we need to rely on external corrector agents (like my father’s superior memory) to set things straight.</p> 
<p>Let me recap all that:</p> 
<blockquote> 
 <p>A memory is a set of neural decorators, each decorating a common base memory. Decorators are interchangebale, and overuse can permanently install these overrides. When a memory is completely lost, it means the base memory was lost.</p> 
</blockquote> 
<p>You know those transparent sheets (<a href="https://en.wikipedia.org/wiki/Cel">cel sheets</a>) on which you can draw something, then use it to overlay over another, and another, and another, to get a fully composed image? It’s actually how they used to do animation back in the day. That’s how I see decorators.</p> 
<p>This decorative approach of a single memory (in my case “drowning”) would work something like this:</p> 
<img width="800" alt="1_GD32mFQ7uujop8AMB2rlbw" src="https://bruno.eth.limo/B887286C-A0DF-4DDC-A4FF-8F8F276B1D63/1_GD32mFQ7uujop8AMB2rlbw.webp" /> 
<p>You can see here that some decorators decorate decorators, while others decorate the memory directly. So the memory’s location is <a href="https://www.google.com/maps/place/%C4%8Cakovec,+Croatia/@46.2970326,16.3265678,15z/data=!4m2!3m1!1s0x4768ada5b7bfc8e1:0x459315b89fe1d5">Cakovec</a>, and a park. Neither influences the other, my memory might one day change and I might start thinking it happened in Rijeka, where I lived for 10 years, or that the pools weren’t in the park at all but at an entirely separate venue. The rest of the memory would stay intact.</p> 
<p>On the other hand, I remember it happening in a pool, but there is a separate decorator for the pool’s depth, which got overridden by my father’s depth decorator. Same for scratching which, in turn, might have other decorators like “badly” or “barely”.</p> 
<p>Though only a few were displayed here, there are millions of decorators for that one memory and all adjacent decorators — from the season and time of day, to feelings, to the number of pools in the pool complex, and so on.</p> 
<h3>Decorator Reuse</h3> 
<p>Which makes me think - what if the secret to our brain’s seemingly immense capacity is <em>decorator reuse</em>?</p> 
<p>In the above story, I have a “Happened in a park” decorator. What if all my memories that happened in parks use this same decorator? What’s more, the concept of “park” in that decorator isn’t location-bound. It’s “a park”. The exact location of the park (the town of Cakovec) is yet another decorator, and that one is reused on all memories that happened in that town.</p> 
<img width="800" alt="1_hYPn-PMtt-MXYkatMnpH1A" src="https://bruno.eth.limo/B887286C-A0DF-4DDC-A4FF-8F8F276B1D63/1_hYPn-PMtt-MXYkatMnpH1A.webp" /> 
<p>You can see here something of an extension of the previous image, where the Drowning memory is pushed off to the left, with Park becoming centerpiece and linking other memories together. As indicated by the different connector lines, we can see I had my first kiss in the park of the same town where I got drunk and had a picnic, and that I remember turtles in the park of the town where I went to university. Of course, additional links could be made — the park of the town where I went to university is a memory on its own, and it’s not the only park there, so additional space-time decorators would be needed to achieve precision. Basically, there is an infinite number of applicable decorators to each base memory, and each memory also can be a decorator to another decorator or base memory.</p> 
<p>It is this seemingly infinite combination of atomic, separate decorators that makes up our various memories, and when a memory loses a decorator, that decorator isn’t <em>lost</em> — it is merely removed from the memory’s hierarchy, from its connection chain, but stays in our brain, stored and ready for reuse on other memories.</p> 
<p>This would also be why people with memory problems can sometimes remember a vague concept of a park, or a pleasant park walk, but fail to pinpoint where it happened, or who they were with, or when. Maybe they encountered the decorator on its own and without a base memory to decorate, so they get the sensation of just the term of the decorator itself.</p> 
<img width="500" alt="1_gDIvFw_Hf51bydyavEpKJw" src="https://bruno.eth.limo/B887286C-A0DF-4DDC-A4FF-8F8F276B1D63/1_gDIvFw_Hf51bydyavEpKJw.gif" /> 
<p>So, in the above story of my father setting the record straight with his recollection, he actually copied over some of his decorators to me, and told me which ones of mine to replace. Or, in the context of the “gift box” story above — my gift box got switched out for another, one more fitting for the gift. We could say that the iPhone was given its original packaging, rather than being gifted in a Samsung box.</p> 
<h2>Conclusion</h2> 
<p>This is what I meant when I said <em>“What if, in the context of the TV show’s world, that’s how they solved the problem of artificial intelligence?”</em> — what if this is the solution to artificial memory? Not knowledge graphs or SQL tables, but <em>decorator databases</em>? What if the android in the show is losing its memory because the databanks that hold some of the decorators are getting corrupted? Thus, the android is losing some decorators, but the base remains and it tries to fill in the gaps of the missing decorators by taking suggestions from surroundings or just making things up? Which makes me wonder…</p> 
<p>If we keep switching the decorators out unknowingly, how can we trust our memories? And, at which point does a memory stop being a memory and turns into a lie?</p> 
<p>It’s the age-old ship of Theseus question of — if we could switch out failing body parts for synthetic ones, at which point do we stop being “we”, and become a machine? Would my brain in a jar still be “me”? Is that enough? If my malfunctioning thyroid generates too many hormones (which then influence my thoughts and feelings) gets replaced or removed, am I still me despite the dramatic character change brought upon by the now normal hormonal levels?</p> 
<p>Would a base memory, without decorators, still be my memory? Would one that is <em>mis-decorated</em>? I don’t know… right now, I’m thinking about the drowning story and I think I remember us catching some white mice under a plastic bucket, but I have no idea if I just imagined it and plugged in a new decorator or if it really happened… In any case, I think it all makes for an interesting discussion.</p> 
<p>What do you think? Does this make sense? Is it a well established neural-network “well duh!” party that I’m just very late to? <a href="https://t.me/swader">Let me know</a>.</p>
        ]]></description>
    </item>
    
    <item>
        <title>Code and Fitness: Fear the Walking Dev</title>
        <link>https://bruno.eth.limo/66FFD35B-F588-481A-B1C1-3589F8B1F370/</link>
        <guid>https://bruno.eth.limo/66FFD35B-F588-481A-B1C1-3589F8B1F370/</guid>
        <pubDate>Wed, 15 Oct 2025 11:33:16 +0200</pubDate>
        
        <itunes:image href="https://bruno.eth.limo/66FFD35B-F588-481A-B1C1-3589F8B1F370/riswhg-zombietreadmill3000-xl.png" />    
        
        
        <description><![CDATA[
            <img width="100%" alt="riswhg-zombietreadmill3000-xl" src="https://bruno.eth.limo/66FFD35B-F588-481A-B1C1-3589F8B1F370/riswhg-zombietreadmill3000-xl.png" /> 
<p>I've been sitting in front of code and text for the good part of the last 15 years. A sedentary job can take its toll on your health, especially as you begin to age and your body is past the "thank you sir, may I have another" phase.</p> 
<img width="350" alt="Annotation-2019-05-29-190737-md" src="https://bruno.eth.limo/66FFD35B-F588-481A-B1C1-3589F8B1F370/Annotation-2019-05-29-190737-md.png" /> 
<p>They're not wrong when they say <a href="https://www.betterhealth.vic.gov.au/health/healthyliving/the-dangers-of-sitting">sitting is the new smoking</a>. Most people - even those with extraordinarily expensive anatomic chairs - find ways to distort their sitting position and twist their back after a mere hour of sitting, let alone eight. Add to that more sitting at home when you return from work, and it becomes a truly scary thought.</p> 
<p>The perils of sitting too much are <a href="https://www.spineuniverse.com/wellness/ergonomics/sitting-disease-its-impact-your-spine">well documented</a>, but what very few standing desk proponents will tell you is that standing can be even worse. When coupled with sitting, it is of course better than sitting all the time, but standing for prolonged periods of time will seriously injure your back, shoulders, and neck, depending on the anatomical setup of your standing desk.</p> 
<p>The pain you feel after standing for a while is not good-fatigue pain you get from working out. It's not "the burn". Those extra 50 kcal you burnt standing up aren't making your muscles sore with progress. It's your lumbar back screaming for some proper support, because your legs are too weak and your back muscles too atrophied to support your upper body weight for hours without help.</p> 
<p>In short, prolonged uninterrupted standing is less healthy than sitting for the same period of time.</p> 
<p>But you can Google around for research on this, there's plenty. I want to take the following few paragraphs to tell you how I got around this and how you can regain or maintain your health if you're like me and like to eat sweet things very very much and have almost no self control.</p> 
<h2>Origin</h2> 
<p>Back when I was a web dev for a publishing house in 2010, I would be sitting in an office all day and eat pastries from a bakery three times a day as I passed it by. It got to the point where I almost killed myself eating.</p> 
<img width="350" alt="02-sm" src="https://bruno.eth.limo/66FFD35B-F588-481A-B1C1-3589F8B1F370/02-sm.png" /> 
<p>Fun times they were not.</p> 
<p>At 100kg, I quit my job to survive. To this day, there is no amount of money which would make me work from an office again, both for physical and for mental health (the commutes would send me into barbarian rages, apart from wasting one to two hours of my unrefundable time per day).</p> 
<p>I did some research, tested some things, and a year later I was 30kg lighter, 1kg probably being the hair.</p> 
<img width="350" alt="IMG_3562" src="https://bruno.eth.limo/66FFD35B-F588-481A-B1C1-3589F8B1F370/IMG_3562.jpg" /> 
<p>Fast forward another 7 years and sure, I've had my ups and downs (having a kid in particular causes 6 months of no sleep to the degree of not having energy to live, let alone exercise), but I found a technique which lets me lose weight reliably and keep it off.</p> 
<p>I won't go into details on speed-losing it because that's not maintainable for most people (mainly it entails a lot of running, some weights, and a change of diet in addition to the Miracle Cure™ for 4x progress), but the general approach outlined below will increase your daily kcal budget by 2000, which is roughly 6 donuts or a big pizza. That's in addition to your default kcal spend, which means you can maintain your weight on around 3500-4000 kcal a day, without gaining or losing a gram.</p> 
<h2>The Miracle Cure™️</h2> 
<p>So what is it?</p> 
<p>Quite simply: get a treadmill desk and work 4 hours a day on it at maximum incline with lowest speed.</p> 
<p>That's all there is to it.</p> 
<blockquote class="twitter-tweet">
 <p lang="en" dir="ltr">Just another day in the office 🤷‍♂️ <a href="https://t.co/u5Yni6pavz">pic.twitter.com/u5Yni6pavz</a></p>— Bruno Skvorc (@bitfalls) 
 <a href="https://twitter.com/bitfalls/status/1105408346763476992?ref_src=twsrc%5Etfw">March 12, 2019</a>
</blockquote> 
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 
<p>One hour on a treadmill with max incline is around 4000 steps and 400 calories (a little less for women). Depending on what speed you can adapt to, maybe even more.</p> 
<p>I make 20k steps per day which sounds like a lot, but when you consider that a simple one hour dog walk is 5000-6000 steps alone, another 3 hours out of 8 working hours per day behind a treadmill desk isn't really that much. It can only be a problem if it's not part of your culture (e.g. <a href="https://www.verywellfit.com/whats-typical-for-average-daily-steps-3435736">Americans do only 5-7k steps per day</a>), but it doesn't take long to get used to it. How much do you think I walked in that first picture above?</p> 
<p>Apart from not having to change anything at all about your diet (keep your cupcakes if you want them, I do!), this has the nice side effect of making your drink a LOT of water. I'll end a day with 4 liters of consumed water, easily.</p> 
<h2>But what about...</h2> 
<h3>... the noise?</h3> 
<p>Most modern electical treadmills are silent unless you run on them. In walk mode, you can barely hear the hum and steps outside the room you're in, let alone into a neighboring apartment.</p> 
<h3>... the cost?</h3> 
<p>It's really cheap. You can get a used treadmill for $500 on your local version of craigslist, put a plank over the handles, and you're golden. Dedicated treadmill desks are the dumbest thing, just use a treadmill. This was my initial version all those years ago.</p> 
<img width="350" alt="DSCN0239_small-sm" src="https://bruno.eth.limo/66FFD35B-F588-481A-B1C1-3589F8B1F370/DSCN0239_small-sm.jpeg" /> 
<h3>... the sweat / pain?</h3> 
<p>Yes, you will sweat. Especially if you follow my advice and walk on an incline. Do not do this in an office environment or coworking space without several sets of spare clothes. Your feet may hurt if you overdo it, but just take it easy and work up to it. To avoid neck and shoulder pain, put a monitor at eye level and a fair distance (see my pic above with baby), and get a split keyboard (same pic) so you can type with your hands apart - this relaxes your shoulders instead of having you slouch.</p> 
<h3>... the precision?</h3> 
<p>It takes around 2 weeks to get used to using the mouse and keyboard while walking. You're not useless during this period, just a little slower. Obviously, the heavier (more stable) the treadmill, the less wiggling you'll have and the sooner you'll get used to it.</p> 
<h3>... the concentration?</h3> 
<p>You don't lose any after the initial two weeks. I hardly notice I'm walking when I'm really deeply invested in a task. In fact, if you're prone to procrastination when sitting, this will occupy that idle part of your brain and you'll actually be MORE productive while walking.</p> 
<hr /> 
<p>In conclusion, maintaining health while working a computer-focused job isn't as impossible as many make it out to be. No need to change your diet (unless it's really a wreck, like ONLY sweets all the time) or workout habits - just walk.</p> 
<p>If you want to learn more, have questions or comments, <a href="https://x.com/bitfalls">hit me up on X</a>.</p>
        ]]></description>
    </item>
    
    <item>
        <title>What is it like to live in Croatia?</title>
        <link>https://bruno.eth.limo/5D4B4D32-ED55-4EB8-B62F-26612ADF09BC/</link>
        <guid>https://bruno.eth.limo/5D4B4D32-ED55-4EB8-B62F-26612ADF09BC/</guid>
        <pubDate>Wed, 15 Oct 2025 09:41:15 +0200</pubDate>
        
        <itunes:image href="https://bruno.eth.limo/5D4B4D32-ED55-4EB8-B62F-26612ADF09BC/makarska-e1527695960897-xl.jpg" />    
        
        
        <description><![CDATA[
            <p>I live in Croatia. A while back I stumbled upon a Quora answer which answers the question <strong>"What is it like to live in Croatia"</strong> perfectly. The answer has, for some reason, been deleted since but I've archived it here and am reposting it verbatim, save for some corrections of typos and phrasing. None of it is satire or exaggeration, it's all very true.</p> 
<img width="1200" alt="makarska-e1527695960897-xl" src="https://bruno.eth.limo/5D4B4D32-ED55-4EB8-B62F-26612ADF09BC/makarska-e1527695960897-xl.jpg" /> 
<h2>Life in Croatia</h2> 
<p>As with any place, there are a few pros and a number of cons. Most of my experiences are derived from living and working in the country. A bird’s eye view if you like.</p> 
<p>At a high level, to continue with the bird theme, Croatia has an attractive climate with four distinct seasons. There is a proper coast line with plenty to choose from in terms of places to go and hang out during the summer. Its countryside is quite beautiful. The country’s infrastructure generally works due almost entirely to EU largesse. Commercially there is a reasonably educated work force that is sadly bereft of opportunity. Relationships with Croats are generally transactional and individual success is punished.</p> 
<h2>Economics and Business</h2> 
<p>Taxation rate is a whopping 61% with employers having to add an additional 17%. The effective impact of this means, with the best part of 80% going to income based taxation, there is a thriving cash or black market system and it functions as a massive disincentive for local companies to employ people. Madness, right?!</p> 
<p>The government has the largest stake in the economy at circa 60%. This has the effect of perverting the economy wholesale. The legal profession is also not to be trusted as Croatian lawyers from opposite sides will conspire with each other against their clients to maximise fee yields. As government is the biggest direct and indirect consumer of legal services, lawyers can and will be coerced;</p> 
<p>Croatian labour market pool is not deep where decent talent is concerned because talented people leave and have been doing so in droves. Capability is not rewarded, only who one knows. This means the labour market, whilst educated, Neolithically reduces itself to the lowest common denominator. As a consequence, Croats are generally good at working to well defined structure and process. Employees are not good at creativity, independent thought/initiative, work ethic is very low, they have a sense of undeserved entitlement and demonstrate low levels of loyalty;</p> 
<p>For some bizarre reason, the Croatian Chamber of Commerce, the Croatian Forrestey Commission are all funded directly by the taxpayer. Quite literally so. When the employer signs off wages, the portion of the tax take that leaves their bank account in the name of the employee, goes directly to these non-governmental organisations. There is also another raft of direct and indirect parafiscal taxes that adds to the taxpayer burden. This is before one considers the consumption based taxes starting with VAT at 25%;</p> 
<p>Establishing and maintaining a corporate entity is difficult and expensive. The efficiency of the UK Companies House, for instance, is galaxies away from the Croatian system where everything takes longer and costs much, much more. The bureaucracy is positively breathtaking in its complexity and opaqueness that collectively conspire to create a system for business prevention. Everything is overtly paper based and requires a notary because individuals, in essence, have no contracting capacity in their own right. Basic administrative changes, such as rotating directors on and off the boards, requires a commercial court submission and notarial fees that can run into several hundreds of euros if your corporate entity is unlucky enough to have a decent balance sheet. This is because fees and costs are usually scaled to one's ability to pay, not based on the nature or quality of service delivered;</p> 
<p>If you’re lucky enough to have made money through plain hard work and diligence, it is assumed you’re corrupt. Success is punished. Croats will expect you to pay for everything and even then, you shall be subject to extreme forms of covert derision. It is worth remembering in business that even if you’re between two Croats that do not know each other from Adam, they will always be closer to each other than you;</p> 
<p>The banking system is incredibly expensive. If you hold EUR currency and a EUR payment card for EUR purchases in, say, Spain. The settlement process is as follows: Croatian bank will convert your EUR into local currency (Croatian Kuna - HRK) and settle the EUR transaction in HRK. This means paying a spread to convert EUR to HRK and than back to EUR to settle the transaction with an additional fee on top of it. With two retail currency spreads and fee it’s like compounded interest going the wrong way!! If visiting Croatia (or any foreign country for that matter) always settle credit/debit card purchases in your home currency, never local;</p> 
<h2>Tourism</h2> 
<p>As there is very little manufacturing, the economy is largely services based but, perversely, they don’t understand what service actually means. Most Croats dislike foreigners and those in hospitality would prefer tourists to stay at home and just send money;</p> 
<p>Croatia has the benefit of being a comparatively safe jurisdiction which means its tourism numbers have grown quite dramatically in recent years. This is not because there is anything particularly special about the place, but the usual destinations in the likes of North Africa becoming unsafe. This is changing and there are now better value for money options elsewhere. Croats have, for some time, regarded tourists as merely targets to rip off. In some places, like Split, they even have a two-tier pricing system for the locals;</p> 
<p>The seaside is very good and makes up for a lot of everyday rubbish and pestilence one has to deal with. If living and working in Zagreb, you can get to a lovely beach inside 90 minutes during summer and there are a lot of cool places to hang out in the countryside during the ‘in between’ seasons. Most of the best skiing in Europe is directly and easily accessible from Zagreb. Needless to say, having a car is a must;</p> 
<h2>Corruption</h2> 
<p>There is very little commercial activity that doesn’t touch the political system at some level. When it does in some material way you will be approached... rather, blackmailed into paying a corrupt facilitation fee. In some tourist destinations for example, where there is a pressing demand for more accommodation that would have a beneficial impact on the local economy, leisure projects are routinely frustrated or stalled mid-construction until local government officials receive their bribes; There is no actual economic plan for the country as the very nature of government is entirely self serving, incompetent and tactical. Politicians and governmental officials are only concerned with using their positions and time in office to feather their own putrid nests. The interests of their countrymen and women are subordinated wholesale to this objective which is why there is so much understandable voter apathy;</p> 
<p>The Croatian public sector performance and corruption ranks only just above Venezuela, which is at the very bottom of this particular scale. Things certainly have to be tragic for neighboring countries like Bosnia and Serbia to be ranked higher than an EU member country that is Croatia. There is a tendency for Croatians to parade their EU membership as a way of taking a nasty swipe at their neighbours or when holding out the begging bowl for EU grants and subsidies and being able to traverse Europe but, in practice, it means very little else to them;</p> 
<h2>Property</h2> 
<p>There is real value for money for property right across the country and particularly in premium locations. If it was anywhere else in Europe, one would need to pay between 150%&lt;350% more</p> 
<h2>Lifestyle and People</h2> 
<p>The prevalence of English is widespread through to mid-30s and then it drops off markedly. Most Croats 45+ have very limited to no understanding of English but good German comprehension. If you’re lost or need directions, use Google or look for a young person;</p> 
<p>If you have the benefit of earning a western income outside of Croatia, the cost v quality of life dynamic then works very much to your favour. Everything becomes easier and very affordable. Access to naturally grown food, for one, is better and much more affordable than other parts of Western Europe. There is a local wine industry that produces reasonable quality wines. Regional produce such as olive and pumpkin oil, prosciutto and other cured meats, cheeses, poultry and seasonal veg/fruit are all excellent;</p> 
<p>There are a number of international private schools. Day care for working parents is safe, accessible and cheap compared to the west;</p> 
<p>There is a choice of places to eat out. Seafood is plentiful and much less expensive than the west when buying for home from local fish markets. In the various tourist traps, it becomes much more expensive as everything is then ‘priced up’. Having said that, it’s still considerably cheaper to eat out in Croatia than in most parts of Western Europe (as an aside, Serbia is much better value and more diverse on this and most other lifestyle fronts than Croatia) Being kind, polite or considerate is wasted on Croats generally as this tends to be confused with weakness and you’re derided as a stupid foreigner. Best to be assertive and direct in your dealings as only perceived strength and power are respected. Being anything else only sets you up as a target;</p> 
<p>It is therefore difficult to make friends with Croats as they operate in narrow social cliques and generally only socialise with foreigners for commercial/financial gain. Some folk might even describe Croats as being quite mean spirited: Austro-Hungarian cultural hangover perhaps? There are some good expat networks though;</p> 
<p>Westerners are generally left alone and the streets are safe. Children can roam pretty freely without interference and lone women at night do not attract unwanted attention.</p> 
<p>In summary, there are certainly better alernatives if you’re planning to relocate to another country for work and lifestyle. There are very limited work/career options/prospects in Croatia. Having said that, if you have the benefit of earning elsewhere in Europe through a non-Croatian contracting entity, Croatia may then be an interesting option.</p> 
<p>If you’re doing okay financially, make sure you stay away from as much governmental related crap as possible and put some effort into keeping a low profile.</p>
        ]]></description>
    </item>
    
    <item>
        <title>Videos</title>
        <link>https://bruno.eth.limo/D29F8E05-5254-47D4-AE66-904DDDBE02AC/</link>
        <guid>https://bruno.eth.limo/D29F8E05-5254-47D4-AE66-904DDDBE02AC/</guid>
        <pubDate>Mon, 13 Oct 2025 20:48:32 +0200</pubDate>
        
        
        <description><![CDATA[
            <!-- Category filter (auto-generated) --> 
<div id="video-category-filter" class="video-category-filter"></div> 
<!-- Loading indicator --> 
<div id="video-loading" class="video-loading" style="display:none;">
 Loading videos...
</div> 
<!-- Video grid (auto-populated) --> 
<div id="video-grid" class="video-grid"></div> 
<!-- Video configuration --> 
<script>
window.KITZE_VIDEOS = {
  "videos": [
	{
      "id": "VNydvuGy3l0",
      "date": "Mar 5, 2025",
      "categories": ["Agglayer", "Polygon", "Web3", "English"]
    },
	{
      "id": "u7fJ0oECxQU",
      "date": "Oct 23, 2024",
      "categories": ["Agglayer", "Polygon", "Web3", "English"]
    },
    {
      "id": "tOpY4dCWzJM",
      "date": "Dec 04, 2024",
      "categories": ["Polkadot", "Governance", "Web3", "English"]
    },
    {
      "id": "ZkL5xuNVAS4",
      "date": "Jan 11, 2024",
      "categories": ["Webdev", "Best practices", "Decentralization", "English"]
    },
    {
      "id": "nhPLzEbBaNc",
      "date": "Jul 19, 2023",
      "categories": ["NFT", "RMRK", "Web3", "Web3 Gaming", "English"]
    },
	{
      "id": "y9GHrMXlyDU",
      "date": "May 20, 2022",
      "categories": ["NFT", "RMRK", "Web3", "Web3 Gaming", "English"]
    },
	{
      "id": "k856n680AxU",
      "date": "Mar 5, 2023",
      "categories": ["NFT", "RMRK", "Web3", "Web3 Gaming", "English"]
    },
	{
      "id": "9bxfJD3S9Pw",
      "date": "Oct 20, 2021",
      "categories": ["Dystopia", "Web3", "Corruption", "Podcast", "English"]
    },
	{
      "id": "-3NMyAr4eeM",
      "date": "June 9, 2022",
      "categories": ["Metaverse", "Podcast", "Web3", "Web3 Gaming", "English"]
    },
	{
      "id": "MsvqsyQFgOU",
      "date": "June 8, 2022",
      "categories": ["Metaverse", "Podcast", "Web3", "English"]
    },
	{
      "id": "r26vqo5M7cA",
      "date": "May 7, 2019",
      "categories": ["Ethereum", "Web3", "English"]
    },	
	{
      "id": "nPb30E7XPnk",
      "date": "Aug 5, 2022",
      "categories": ["NFT", "Web3", "Web3 Gaming", "English"]
    },
	{
      "id": "SBgyl3KnuC0",
      "date": "Jun 15, 2018",
      "categories": ["ICO", "Scam", "Web3", "English"]
    },
	{
      "id": "nhPLzEbBaNc",
      "date": "Jul 19, 2023",
      "categories": ["NFT", "RMRK", "Web3", "English"]
    },
	{
      "id": "DCG-2YKJMy0",
      "date": "Jun 30, 2025",
      "categories": ["Governance", "DAO", "Web3", "Reputation", "English"]
    },
	{
      "id": "XH7CiyY83VU",
      "date": "Nov 8, 2020",
      "categories": ["Truffle", "Substrate", "Polkadot", "Web3", "English"]
    },
	{
      "id": "dr5yToPUj_4",
      "date": "Feb 8, 2019",
      "categories": ["Geth", "ICO", "Workshop", "Solidity", "English"]
    },
	{
      "id": "GHAgU1QQQ9Q",
      "date": "Apr 13, 2021",
      "categories": ["NFT", "Croatian"]
    },
	{
      "id": "2vhOLdPo1Ho",
      "date": "Aug 29, 2023",
      "categories": ["NFT", "Reputation", "Governance", "English"]
    },
	{
      "id": "--7t596sw7E",
      "date": "May 28, 2020",
      "categories": ["Substrate", "Polkadot", "English"]
    },
	{
      "id": "0n7Q-2_JD0w",
      "date": "May 26, 2020",
      "categories": ["Substrate", "Polkadot", "English"]
    },
	{
      "id": "Kke1FmIAYfo",
      "date": "Feb 23, 2020",
      "categories": ["Substrate", "Polkadot", "Kusama", "English"]
    },
	{
      "id": "InekMjJpVdo",
      "date": "May 14, 2020",
      "categories": ["Substrate", "Polkadot", "English"]
    },
	{
      "id": "wPn2BKU2ykc",
      "date": "Feb 25, 2016",
      "categories": ["VueJS", "Webdev", "English"]
    },
	{
      "id": "BvfwPe8PWNE",
      "date": "Jan 12, 2019",
      "categories": ["Auditing", "Solidity", "Web3", "English"]
    },
	{
      "id": "lJ52xBC27xw",
      "date": "Jul 4, 2017",
      "categories": ["Webdev", "PHP", "Frameworks", "English"]
    },
	{
      "id": "TnLILCdMzVg",
      "date": "Dec 13, 2018",
      "categories": ["Panel", "Corruption", "Croatian"]
    },
	{
      "id": "Bf5IGSKE6_s",
      "date": "Jul 10, 2020",
      "categories": ["Workshop", "Substrate", "Polkadot", "English"]
    },
	{
      "id": "qZEr-OuV2co",
      "date": "Aug 30, 2023",
      "categories": ["Substrate", "Polkadot", "English"]
    },
	{
      "id": "qsJOWSCWP38",
      "date": "Jun 29, 2020",
      "categories": ["Substrate", "Polkadot", "English"]
    },
	{
      "id": "Y2xLrnfoxSc",
      "date": "Oct 15, 2021",
      "categories": ["Podcast", "RMRK", "NFT", "English"]
    },
	{
      "id": "5DK4QpBKq7o",
      "date": "Apr 14, 2021",
      "categories": ["Workshop", "Substrate", "Polkadot", "English"]
    },
	{
      "id": "OsWSx4sbVn0",
      "date": "Sep 7, 2020",
      "categories": ["Web3", "Corruption", "Polkadot", "Dystopia", "English"]
    },
	{
      "id": "ULHDXcoxKR0",
      "date": "Jan 14, 2023",
      "categories": ["NFT", "RMRK", "Web3 Gaming", "English"]
    },
	{
      "id": "G9b91ti0BAc",
      "date": "Apr 10, 2020",
      "categories": ["Substrate", "Kusama", "Polkadot", "Web3", "Workshop", "English"]
    },
	{
      "id": "ceptX3kJAvA",
      "date": "Jul 7, 2020",
      "categories": ["Substrate", "Kusama", "Polkadot", "Web3", "Workshop", "English"]
    },
	{
      "id": "-PW2KUXO5kg",
      "date": "Aug 2, 2021",
      "categories": ["NFT", "RMRK", "Web3", "Panel", "English"]
    },
	{
      "id": "SE0NyO1RI6I",
      "date": "June 5, 2020",
      "categories": ["Substrate", "Kusama", "Polkadot", "Web3", "Workshop", "English"]
    },
  ]
};



</script> 
<!-- Load video gallery script --> 
<script src="../assets/videos.js"></script>
        ]]></description>
    </item>
    
    <item>
        <title>Projects</title>
        <link>https://bruno.eth.limo/655E53EE-FCD9-46AF-93E5-2066B2C09834/</link>
        <guid>https://bruno.eth.limo/655E53EE-FCD9-46AF-93E5-2066B2C09834/</guid>
        <pubDate>Mon, 13 Oct 2025 19:42:13 +0200</pubDate>
        
        
        <description><![CDATA[
            <section class="project-section"> 
 <div class="project-section-icon"> 
  <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 
   <path d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z" /> 
   <path d="m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z" /> 
   <path d="M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0" /> 
   <path d="M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5" /> 
  </svg> 
  <h2>Most Live</h2> 
 </div> 
 <div class="project-subsection"> 
  <h3 class="project-subsection-title">Right Now</h3> 
  <p class="project-subsection-desc">These are the projects I am actively pushing because they are live, useful, and have the best shot at turning into durable businesses.</p> 
  <div class="project-grid-2"> 
   <a href="https://kvasyr.com" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon"> 
      <span style="font-size: 24px;">📡</span> 
     </div> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <h3 class="project-card-title">Kvasyr</h3> <p class="project-card-desc">I built Kvasyr for teams that want EVM event webhooks without building and babysitting their own indexing stack.</p> </a> 
   <a href="https://ogmadocs.com" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon"> 
      <span style="font-size: 24px;">📘</span> 
     </div> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <h3 class="project-card-title">Ogmadocs</h3> <p class="project-card-desc">Docs should not depend on Git literacy and markdown rituals, so I built a WYSIWYG docs tool for product teams.</p> </a> 
   <a href="https://bitfalls.com/apps" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon"> 
      <span style="font-size: 24px;">🧰</span> 
     </div> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <h3 class="project-card-title">Bitfalls Apps</h3> <p class="project-card-desc">This is where I ship small sharp apps that solve one annoying problem properly and charge a sane price for it.</p> </a> 
  </div> 
 </div> 
</section> 
<section class="project-section"> 
 <div class="project-section-icon"> 
  <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 
   <path d="m16 18 6-6-6-6M8 6-6 6 6 6" /> 
  </svg> 
  <h2>Active Projects</h2> 
 </div> 
 <div class="project-subsection"> 
  <h3 class="project-subsection-title">Products &amp; Bets</h3> 
  <p class="project-subsection-desc">Live projects I am shipping, maintaining, or actively trying to turn into something much bigger.</p> 
  <div class="project-grid-3"> 
   <a href="https://bitfalls.com/apps/agentview" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">🕒</span> 
     </div> 
     <span class="project-card-status project-status-shipped">Live</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">AgentView</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">I got tired of spelunking through launchd and cron in Terminal, so I built a native UI for the job.</p> </a> 
   <a href="https://bitfalls.com/apps/screenshot-blur" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">📸</span> 
     </div> 
     <span class="project-card-status project-status-shipped">Live</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Screenshot Blur</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">I wanted screenshot redaction that happens before the image ever touches some cloud editor.</p> </a> 
   <a href="https://trustwall.bitfalls.com" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">🪧</span> 
     </div> 
     <span class="project-card-status project-status-shipped">Live</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">TrustWall</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">I wanted a fast way to generate clean trusted-by walls without reopening Figma for the hundredth time.</p> </a> 
   <a href="https://x402.watch" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">👁️</span> 
     </div> 
     <span class="project-card-status project-status-shipped">Live</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">x402watch</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">I am mapping the x402 ecosystem in one place so I can see who actually works and who mostly just talks.</p> </a> 
   <a href="https://github.com/Swader/x402autopay" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">⚡</span> 
     </div> 
     <span class="project-card-status project-status-shipped">Live</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">x402 AutoPay</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">Browser extension that auto-pays x402 requests so paid APIs can feel less ceremonial and more normal.</p> </a> 
   <a href="https://value.eth.link" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">🔐</span> 
     </div> 
     <span class="project-card-status project-status-progress">Building</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">value.eth</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">I am building around a simple premise: locked liquidity should not have to mean dead liquidity.</p> </a> 
   <a href="https://caimeo.com" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">🧠</span> 
     </div> 
     <span class="project-card-status project-status-progress">Building</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Caimeo</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">A bigger bet on locally runnable, on-chain verifiable simulations with modular AI agents.</p> </a> 
   <a href="https://eisengrid.com" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">✅</span> 
     </div> 
     <span class="project-card-status project-status-progress">Building</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Eisengrid</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">This is the task manager I kept wanting and never found, so I am making it myself.</p> </a> 
  </div> 
 </div> 
 <div class="project-subsection"> 
  <h3 class="project-subsection-title">Utilities &amp; Side Tools</h3> 
  <p class="project-subsection-desc">Smaller things I still care about because they are useful, fun, weird, or all three at once.</p> 
  <div class="project-grid-3"> 
   <a href="https://github.com/Swader/agent-skills-audit" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">🛡️</span> 
     </div> 
     <span class="project-card-status project-status-shipped">Live</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Audit Skill for Agents</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">A reusable audit workflow for AI agents so code review stops being vibes-based.</p> </a> 
   <a href="https://github.com/Swader/planetable-kitze" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">🪐</span> 
     </div> 
     <span class="project-card-status project-status-shipped">Live</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Kitze Planet Theme</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">The theme powering this site, extracted into something other Planet users can actually use.</p> </a> 
   <a href="https://swader.github.io/rpc-glass-inspector/" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">📶</span> 
     </div> 
     <span class="project-card-status project-status-shipped">Live</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">RPC Checker</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">A blunt instrument for telling me whether an RPC endpoint is actually usable.</p> </a> 
   <a href="https://pingui.io" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">📦</span> 
     </div> 
     <span class="project-card-status project-status-shipped">Live</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Pingui</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">Single-click IPFS hosting because pinning files should not feel like a side quest.</p> </a> 
   <a href="https://ipfsviewer.com" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">🔭</span> 
     </div> 
     <span class="project-card-status project-status-shipped">Live</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">IPFS Viewer</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">Paste a CID, see the file, try a few gateways, move on.</p> </a> 
   <a href="https://pixlet.com" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">🎨</span> 
     </div> 
     <span class="project-card-status project-status-shipped">Live</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Pixlet</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">A pixel app where remixing and branching matter as much as the drawing itself.</p> </a> 
   <a href="https://shilld.xyz" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">🚨</span> 
     </div> 
     <span class="project-card-status project-status-shipped">Live</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Shilld</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">My attempt to make paid crypto shilling legible before it wastes your time.</p> </a> 
   <a href="https://github.com/Swader/soroban" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">🧮</span> 
     </div> 
     <span class="project-card-status project-status-shipped">Live</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Soroban</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">Small calculator for estimating what on-chain data storage actually costs.</p> </a> 
   <a href="https://github.com/Swader/podded" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">♻️</span> 
     </div> 
     <span class="project-card-status project-status-shipped">Live</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Podded</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">A tiny guilt calculator for Nespresso pod waste.</p> </a> 
   <a href="https://chromewebstore.google.com/detail/x-follower-remover/cdlaoclmphoogjndjgbnpnaekhcjnjib" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">🧹</span> 
     </div> 
     <span class="project-card-status project-status-shipped">Live</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">GoAwayNow</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">Does one job: bulk-remove X followers without making you do it one by one.</p> </a> 
  </div> 
 </div> 
</section> 
<section class="project-section"> 
 <div class="project-section-icon"> 
  <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 
   <path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" /> 
  </svg> 
  <h2>Older Bets</h2> 
 </div> 
 <div class="project-subsection"> 
  <h3 class="project-subsection-title">Still Part of the Story</h3> 
  <p class="project-subsection-desc">These are not the things I wake up to push every morning anymore, but they still matter because they shaped a lot of what came after.</p> 
  <div class="project-grid-3"> 
   <a href="https://kanaria.rmrk.app" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">🐣</span> 
     </div> 
     <span class="project-card-status project-status-paused">Hiatus</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Kanaria</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">One of my more ambitious NFT experiments: reactive, conditional, and meant to be more useful than collectible.</p> </a> 
   <a href="https://rmrk.app" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">🧬</span> 
     </div> 
     <span class="project-card-status project-status-deprecated">Evolved</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">RMRK</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">Started as a Kusama NFT idea and ended up evolving into standards that shipped much further than the original scope.</p> </a> 
   <a href="https://valhello.app" class="project-card"> 
    <div class="project-card-header"> 
     <div class="project-card-icon project-card-icon-sm"> 
      <span style="font-size: 18px;">⚔️</span> 
     </div> 
     <span class="project-card-status project-status-paused">Hiatus</span> 
    </div> 
    <div class="project-card-title-row"> 
     <h4 class="project-card-title project-card-title-sm">Valhello</h4> 
     <svg class="project-card-arrow" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 
      <path d="M5 12h14M12 5l7 7-7 7" /> 
     </svg> 
    </div> <p class="project-card-desc project-card-desc-sm">An experiment in making blockchain gaming feel less toy-like and more scalable.</p> </a> 
  </div> 
 </div> 
</section>
        ]]></description>
    </item>
    
    <item>
        <title>Home</title>
        <link>https://bruno.eth.limo/E1568091-4D93-47CC-BD5A-B044F405ED27/</link>
        <guid>https://bruno.eth.limo/E1568091-4D93-47CC-BD5A-B044F405ED27/</guid>
        <pubDate>Mon, 13 Oct 2025 15:14:46 +0200</pubDate>
        
        <itunes:image href="https://bruno.eth.limo/home/TVP_3897.jpg" />    
        
        
        <description><![CDATA[
            <p>Hey, I'm Bruno.</p> 
<p>I'm a web2 developer turned web3 in 2015 with Ethereum's ICO.</p> 
<p>I'm passionate about creating tools that make developers' lives easier. I've built SDKs, written hundreds of articles and tutorials, spoken at dozens of conferences, taught thousands of students, contributed to open source, and spent way too much time optimizing my development setup.</p> 
<p>I like to write coding tutorials and explainers and teach. Browse the sidemenu for my talks, writings, and more.</p> 
<p>When I'm not coding, I'm probably gaming, working out, or hanging out with the family.</p> 
<p>I'm a longevity enthusiast, I hate being told what to do, and I try to fight the scamminess of web3 however I can.</p> 
<p>I'm an expert in finding edge cases and telling you if you're doing something wrong. I usually can't tell if you're doing something right, though.</p> 
<p>I run <a href="https://bitfalls.com">bitfalls.com</a> and <a href="https://rmrk.app">rmrk.app</a> to make money.</p> 
<h2>Conference bio</h2> 
<p>Bruno is a developer with 20 years of web and interactivity dev experience, and 10 years of web3 dev experience. He's spoken at dozens of conferences, primarily about technologically taking matters into one's own hands in one way or another.</p> 
<p>He's an idealist in end-goal terms, and pragmatist in immediate terms.</p> 
<p>He's a father, husband, educator, developer, in that order.</p> 
<p>He maintains a blog and personal website at bruno.eth.link, a business at bitfalls.com, and runs rmrk.app during the night to improve the technologically stale NFT side of web3. He's worked at Status, Polkadot, and Polygon, organized conferences, written books and hundreds of articles, guides, and tutorials, and ran half a dozen popular newsletters in his time.</p> 
<p>These days, he's aware of the brevity of life and lives in the moment, enjoying what's good and not worrying about what's bad.</p> 
<img width="850" alt="TVP_3897" src="https://bruno.eth.limo/E1568091-4D93-47CC-BD5A-B044F405ED27/TVP_3897.jpg" />
        ]]></description>
    </item>
    
    <item>
        <title>Ayahuasca</title>
        <link>https://bruno.eth.limo/F661ABF7-8DCA-467F-BEA0-1E2F430C381A/</link>
        <guid>https://bruno.eth.limo/F661ABF7-8DCA-467F-BEA0-1E2F430C381A/</guid>
        <pubDate>Thu, 19 Dec 2024 06:59:47 +0100</pubDate>
        
        <itunes:image href="https://bruno.eth.limo/F661ABF7-8DCA-467F-BEA0-1E2F430C381A/bitfalls_pixelated_hamburgers_arranged_in_a_diagonal_grid_on_bl_89d6d09b-a732-416d-972d-3a057427cdd5.png" />    
        
        
        <description><![CDATA[
            <p>I did Aya ceremonies twice (so far) a year apart, with a legendary shaman <a href="https://x.com/ivanchocron">@ivanchocron</a>. The ceremonies I did included Aya on night 1, <a href="https://en.wikipedia.org/wiki/Trichocereus_macrogonus_var._pachanoi">San Pedro</a> on day 2, Aya on night 2, San Pedro on day 3, and <a href="https://katukina.com/doc/rape">Rapé</a> on day 3 afternoon.</p> 
<p>It was not reality shattering for me. It did not <a href="https://x.com/forthrighter/status/1849401749309706501">one-shot me</a>, I think.</p> 
<p>I never felt any effect from Rapé or San Pedro, and I didn't throw up during any ceremony. It is possible I did not take a strong enough dose either time, even though I topped up in the middle of the process all 4 nights.</p> 
<p>Or, I might just have some weird tolerance. I did a lot of weed in university to be popular, Snoop Dogg amounts really, but never got high, only got vision latency and cottonmouth.</p> 
<p>On Aya I had good revelations about myself.</p> 
<p>No demons, no entities, no shadow creepers. Lots of colors and fractals (when you close your eyes). I wonder how much of that vision was programmed in due to things I read and watched about Aya experiences rather than my own. When my eyes were open, I just had a blurred vision and problems with coordination when try to move.</p> 
<p>On my first go, I distinctly remember seeing seeing hamburgers and pancakes in a Windows 95 style screensaver on my first Aya night, because I was craving carbs back then and it was super hard for me to stay off of junk food for the week of preparation before the ceremony.</p> 
<img width="1232" alt="bitfalls_pixelated_hamburgers_arranged_in_a_diagonal_grid_on_bl_89d6d09b-a732-416d-972d-3a057427cdd5" src="https://bruno.eth.limo/F661ABF7-8DCA-467F-BEA0-1E2F430C381A/bitfalls_pixelated_hamburgers_arranged_in_a_diagonal_grid_on_bl_89d6d09b-a732-416d-972d-3a057427cdd5.png" /> 
<p>Mentally, I had just a deep talk with the "common sense" of the world and my subconscious, and a really good plan on how to get out of burnout, shake a bad past relationship, be a good father, stepfather, and husband, be a disciplined man.</p> 
<p>To me, it was like a deep, concentrated meditation with no distractions, while thinking hard about what it is that makes the difference between the ideal me, and the current me, and how to get from here to there.</p> 
<p>If you're thinking about it, you need to keep TREES in mind:</p> 
<ol> 
 <li>Tolerance</li> 
 <li>Resistance</li> 
 <li>Expectations</li> 
 <li>Effort: Is this a last or first resort?</li> 
 <li>Shaman</li> 
</ol> 
<p>Let's quickly go through each of these.</p> 
<h2>Tolerance</h2> 
<p>Some people are more tolerant to psychedelics, some less. Some get rekt by weed but feel nothing on shrooms and others vice versa. Your tolerance will be topical, specific, and sometimes random.</p> 
<h2>Resistance</h2> 
<p>Most people fear their first (or even subsequent) encounters with Aya, so they try to resist the effect when they feel it coming on. But Aya shows you what it wants no matter how much you fight it, and the more you fight the more uncomfortable the process is. The key is to not fight it, but deluding yourself into thinking you're open to it doesn't work either - for some people, it just needs to be a bad experience the first time around so it can be good on the second one.</p> 
<p>I was fighting it hard on the first time, but subconsciously. I was one of those who thought "I'm open, bring it on" but it was a fake sense of openness. So, I got dragged across the coals by the Mother. Next time was easier.</p> 
<h2>Expectations</h2> 
<p>Don't expect to see monsters, aliens, gods, God, or anything mystical.</p> 
<p>The Roganite representation of altered states of mind is possible, but rare and usually reserved for pure forms of DMT rather than the digested ones you get from Ayahuasca during your ceremony night.</p> 
<p>Some people get absolutely nothing from the experience. Others see demons of the past and only unlock a trauma they weren't even aware of, preparing for a healing session down the line. Others still find sudden meaning and enlightenment in helping others around. Everyone reacts differently, and only one thing is certain - whatever you expect is wrong.</p> 
<h2>Effort</h2> 
<p>If you're thinking about Aya to do any kind of healing of mental health improvement, please consider doing other things first.</p> 
<p>Aya is great at helping you face some trauma and prepare you for going through it, but if you have other issues, they may be resolvable in less extreme ways.</p> 
<p>As an example, clinical depression can <a href="https://x.com/levelsio/status/1842186149114302618">almost entirely be resolved</a> not through psychoactive medication, but through exercise and healthy food.</p> 
<p>Addiction can't really be helped with Ayahuasca - at best, you will stop for a short while. For addiction, <a href="https://x.com/bambkb/status/1769021393209856148">Ibogaine is a much better one-shotter</a>.</p> 
<p>And even with traumas like abusive relationshops, divorce, dealing with death - all of these are generally possible to largely resolve with psychotherapy (non-medicated). Aya is a shortcut to this indeed, and often acts like it speeds up a 6 months psych treatment, but it's not a silver bullet, it's not guaranteed, and yes - it can make things worse by adding new traumas on top of those you thought you were aware of.</p> 
<p>Make sure you've exhausted other options before trying Aya.</p> 
<h2>Shaman</h2> 
<p>Finally, the most important part - a good shaman. I was lucky enough to score a session by <a href="https://x.com/ivanchocron">Ivan</a>, a highly methodical and data-based Shaman who nonetheless expertly guides you spiritually before, during, and after the ceremony so that you get the most out of it.</p> 
<p>For many people, the most valuable part of the ceremony is the option to partake in Ivan's 1:1 "debrief", a chat about how it was, how it feels, and whether or not you got the answers you were looking for, or more questions.</p> 
<hr /> 
<p>Aya was a useful experience for me, but I'm at peace now and I don't think I'll be doing it again any time soon, if ever. If you're considering it and want to know more, feel free to reach out and I'll tell you more about my experience. It won't prepare you - nothing will - but maybe I can help in other ways.</p>
        ]]></description>
    </item>
    
    <item>
        <title>About</title>
        <link>https://bruno.eth.limo/C520470B-ED0A-4800-B1D2-39F37A4435AC/</link>
        <guid>https://bruno.eth.limo/C520470B-ED0A-4800-B1D2-39F37A4435AC/</guid>
        <pubDate>Tue, 17 Dec 2024 21:19:03 +0100</pubDate>
        
        <itunes:image href="https://bruno.eth.limo/C520470B-ED0A-4800-B1D2-39F37A4435AC/WSC23-subota-0042.jpg" />    
        
        
        <description><![CDATA[
            <p>I'm a web2 developer turned web3 in 2015 with Ethereum's ICO.</p> 
<p>I like to write coding tutorials and explainers and teach. Browse the sidemenu for my talks, writings, and more.</p> 
<p>I ran an on-off ramp for a while, I ran a dozen popular newsletters, and finally I did technical writing for Status and technical education at Web3 Foundation with Polkadot before founding RMRK, a team which developed <a href="https://evm.rmrk.app">modular NFT standards</a>.</p> 
<p>These days, I <a href="https://shadowbreak.substack.com">fight X's shadowban</a>, do devrel at Polygon, and vibe code <a href="https://github.com/swader">side projects</a>.</p> 
<p>I'm a longevity enthusiast, I hate being told what to do, and I try to fight the scamminess of web3 however I can.</p> 
<p>I'm an expert in finding edge cases and telling you if you're doing something wrong. I usually can't tell if you're doing something right, though.</p>
        ]]></description>
    </item>
    
</channel>
</rss>
