<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dylan Caponi</title>
    <description>The latest articles on DEV Community by Dylan Caponi (@dylancaponi).</description>
    <link>https://dev.to/dylancaponi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4181731%2F653832df-1d79-485c-b9e7-c59e3b97a8fb.png</url>
      <title>DEV Community: Dylan Caponi</title>
      <link>https://dev.to/dylancaponi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dylancaponi"/>
    <language>en</language>
    <item>
      <title>Screenshots aren't evidence. Here's what is.</title>
      <dc:creator>Dylan Caponi</dc:creator>
      <pubDate>Tue, 13 Oct 2026 09:19:08 +0000</pubDate>
      <link>https://dev.to/dylancaponi/screenshots-arent-evidence-heres-what-is-l99</link>
      <guid>https://dev.to/dylancaponi/screenshots-arent-evidence-heres-what-is-l99</guid>
      <description>&lt;p&gt;Someone needs to prove what a web page said at a specific moment. A screenshot doesn't cut it, because a screenshot only proves what the person showing it to you chose to show you. It doesn't prove the page actually said that, when, or that nobody edited it first.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://exhibit402.dylan-caponi.workers.dev" rel="noopener noreferrer"&gt;exhibit402&lt;/a&gt; to fix that. Two independently hosted browsers, on separate cloud providers, in different networks, capture the same URL at one shared frozen instant. If they agree byte for byte, that's CERTIFIED. If they don't, you get WITNESSED, with the exact pixel agreement and a diff map. Not a failure, just an honest answer about what differed.&lt;/p&gt;

&lt;p&gt;Here's a real one, minted a few minutes ago. $0.50, paid over x402:&lt;/p&gt;

&lt;p&gt;Token 9, CERTIFIED. Screenshot hash &lt;code&gt;39258199490801f3835ed378edd3b10fa0c78a1acd58ba6dfec5b2ee65e83517&lt;/code&gt;. Minted on Base: &lt;a href="https://basescan.org/tx/0xd93bda62a291b8d9b1b5e321673dc1d5f5511e06f76964f38c5fa2fb0265f4ab" rel="noopener noreferrer"&gt;basescan.org/tx/0xd93bda...&lt;/a&gt;. Permanent copy on Arweave: &lt;code&gt;ar://6rJA1ccxgFycGYCGjKVX2APRu5utr8zoKkBBY5h3gY3e&lt;/code&gt;. Anyone can pull that tx, recompute the hash from the stored screenshot, and check it matches. No part of that chain runs through me.&lt;/p&gt;

&lt;p&gt;The contract has no setter, no burn, no upgrade path. Once it's minted, I can't change it either. The whole capture process is described in a versioned spec, hashed into every manifest, which is the shape FRE 902(13)/(14) self-authentication wants: a concrete, identifiable process you can point to. Evidence-grade by design. Whether a court admits any specific artifact is always the court's call, so that's as far as I'll claim it.&lt;/p&gt;

&lt;p&gt;$1 for a full page, $0.50 for just the viewport. Paid over x402/USDC on Base, so agents can buy it directly. Email me if you want it without touching crypto.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>security</category>
      <category>api</category>
      <category>blockchain</category>
    </item>
  </channel>
</rss>
