<?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: Amit Karn</title>
    <description>The latest articles on DEV Community by Amit Karn (@amit_karn_8dcbb76387ee841).</description>
    <link>https://dev.to/amit_karn_8dcbb76387ee841</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%2F4134462%2Fdbcf692b-34bf-4bcf-a4b4-16975464fc1a.jpg</url>
      <title>DEV Community: Amit Karn</title>
      <link>https://dev.to/amit_karn_8dcbb76387ee841</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/amit_karn_8dcbb76387ee841"/>
    <language>en</language>
    <item>
      <title>Encrypted file storage, share links you actually set the rules on, or go P2P</title>
      <dc:creator>Amit Karn</dc:creator>
      <pubDate>Sun, 20 Sep 2026 18:56:31 +0000</pubDate>
      <link>https://dev.to/amit_karn_8dcbb76387ee841/encrypted-file-storage-share-links-you-actually-set-the-rules-on-or-go-p2p-32ae</link>
      <guid>https://dev.to/amit_karn_8dcbb76387ee841/encrypted-file-storage-share-links-you-actually-set-the-rules-on-or-go-p2p-32ae</guid>
      <description>&lt;p&gt;Turn on encryption and your upload is scrambled client-side with AES-256-GCM before it leaves your browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F17leu33veoawgopjrrta.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F17leu33veoawgopjrrta.png" alt=" " width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The key is generated server-side once, emailed to you, and never stored after that — lose the email and the files are gone too. There's no recovery flow, because building one would mean keeping a copy of the thing we're claiming not to keep.&lt;/p&gt;

&lt;h2&gt;
  
  
  Share links with real rules
&lt;/h2&gt;

&lt;p&gt;Files you store sit behind share links with their own password, download cap, and expiry, set per link, each independently revocable. Two links to the same file can carry completely different rules&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo0l3366jqhqwbjw38rax.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo0l3366jqhqwbjw38rax.png" alt=" " width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Notes, live and shared
&lt;/h2&gt;

&lt;p&gt;Real-time cursors and search across your notes by default.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjnw892vvzcsqmsaf48gl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjnw892vvzcsqmsaf48gl.png" alt=" " width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lock a specific note and both of those drop out, since neither works&lt;br&gt;
without the server reading what's inside. That's a per-note choice, not&lt;br&gt;
account-wide.&lt;/p&gt;

&lt;h2&gt;
  
  
  Or skip the server entirely
&lt;/h2&gt;

&lt;p&gt;A six-digit code sets up a WebRTC data channel directly between two&lt;br&gt;
browsers over DTLS. No upload, no size cap, nothing stored.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk3otko1z1aqdymuhdve1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk3otko1z1aqdymuhdve1.png" alt=" " width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;p&gt;Next.js, Laravel API, Postgres, Reverb for the live-cursor sync, Backblaze&lt;br&gt;
B2 for storage, on Kubernetes on a small VPS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://sharenod.com" rel="noopener noreferrer"&gt;sharenod.com&lt;/a&gt;&lt;/strong&gt; — free to use.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>security</category>
      <category>privacy</category>
    </item>
  </channel>
</rss>
