<?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: Alisha Albert</title>
    <description>The latest articles on DEV Community by Alisha Albert (@alisha_albert_fa8993b210a).</description>
    <link>https://dev.to/alisha_albert_fa8993b210a</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%2F4155800%2F8144fe93-d0ec-4622-9407-54c2f3270df3.png</url>
      <title>DEV Community: Alisha Albert</title>
      <link>https://dev.to/alisha_albert_fa8993b210a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alisha_albert_fa8993b210a"/>
    <language>en</language>
    <item>
      <title>Stop Emailing Files to Yourself: A Lighter Way to Move Files Between Devices</title>
      <dc:creator>Alisha Albert</dc:creator>
      <pubDate>Fri, 02 Oct 2026 00:49:38 +0000</pubDate>
      <link>https://dev.to/alisha_albert_fa8993b210a/stop-emailing-files-to-yourself-a-lighter-way-to-move-files-between-devices-3b7b</link>
      <guid>https://dev.to/alisha_albert_fa8993b210a/stop-emailing-files-to-yourself-a-lighter-way-to-move-files-between-devices-3b7b</guid>
      <description>&lt;p&gt;How often do you email a screenshot to yourself just to get it from your phone to your desktop? Or upload a video to Drive, wait for it to sync, then download it on the other device five feet away?&lt;/p&gt;

&lt;p&gt;We all do it. And it's absurd when you think about it — but the alternatives each have their own tax.&lt;/p&gt;

&lt;h2&gt;
  
  
  The friction of cross-device sharing
&lt;/h2&gt;

&lt;p&gt;Apple's AirDrop is genuinely great, and completely locked to Apple's ecosystem. The moment one device is a Windows PC or an Android phone, you're back to square one.&lt;/p&gt;

&lt;p&gt;Messaging apps work everywhere but compress media aggressively. Fine for a meme, terrible for anything you actually care about.&lt;/p&gt;

&lt;p&gt;Cloud drives don't compress, but they make you pay in ceremony: upload, wait, manage sharing permissions, copy the link — and then the link lives forever unless you remember to kill it. For a file you needed for thirty seconds, that's a lot of overhead.&lt;/p&gt;

&lt;h2&gt;
  
  
  A smaller idea: the one-time handoff
&lt;/h2&gt;

&lt;p&gt;Most cross-device transfers aren't storage problems. They're handoff problems. The file needs to get from device A to device B once, and then nobody needs the link again.&lt;/p&gt;

&lt;p&gt;That's the idea behind &lt;a href="https://nowiretransfer.xyz/" rel="noopener noreferrer"&gt;nowiretransfer&lt;/a&gt;. You add a file (or paste some text) on one device and get a 6-character code. Type the code — or scan the QR — on the other device, and the file opens. No account, no app install, works in any modern browser.&lt;/p&gt;

&lt;p&gt;What makes it different from just another cloud link:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Files go up and come down as-is.&lt;/strong&gt; No compression, no quality loss.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shares expire.&lt;/strong&gt; You pick 1 hour, 24 hours, 3 days, or 7 days, and the files delete themselves when time's up. No "oops, that link from March is still live."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Private by default.&lt;/strong&gt; Shares are unlisted — only the code opens them — and transfers are encrypted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;250 MB per file&lt;/strong&gt;, multiple files per share.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it out
&lt;/h2&gt;

&lt;p&gt;Next time you're about to email yourself a file, try this instead: open &lt;a href="https://nowiretransfer.xyz/" rel="noopener noreferrer"&gt;nowiretransfer&lt;/a&gt; on your phone, add the file, and open the code on your laptop. It takes about ten seconds, and there's nothing to clean up afterward.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's actually hard about this
&lt;/h2&gt;

&lt;p&gt;The interesting engineering isn't the transfer — it's the lifecycle. Expiry has to be real (bytes deleted, not just links hidden), codes have to be unguessable but typable, and the whole thing has to work on mobile browsers that love to kill background tabs mid-upload. Worth thinking about if you're building anything with shared state that shouldn't outlive its purpose.&lt;/p&gt;

&lt;p&gt;Sometimes the best feature is the one that deletes itself.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>showdev</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Delete-on-read: designing a file share that destroys itself</title>
      <dc:creator>Alisha Albert</dc:creator>
      <pubDate>Thu, 01 Oct 2026 20:42:55 +0000</pubDate>
      <link>https://dev.to/alisha_albert_fa8993b210a/delete-on-read-designing-a-file-share-that-destroys-itself-3j2i</link>
      <guid>https://dev.to/alisha_albert_fa8993b210a/delete-on-read-designing-a-file-share-that-destroys-itself-3j2i</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx4agyej2n01nqqh6mmxy.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx4agyej2n01nqqh6mmxy.webp" alt="A dissolving contract with a padlock, illustrating delete-on-read file sharing" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most file-sharing systems are built around persistence. Upload, store, serve — and keep serving until someone remembers to delete. But there's a whole class of sharing where persistence is the bug, not the feature: one-time handoffs of sensitive files.&lt;/p&gt;

&lt;p&gt;The pattern is simple: a link that works exactly once. Here's how to think about building it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core mechanic: single-use tokens
&lt;/h2&gt;

&lt;p&gt;At the heart of delete-on-read is a token, not a file path. The flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upload stores the file and generates a random, unguessable token.&lt;/li&gt;
&lt;li&gt;The share URL contains the token — nothing else identifies the file.&lt;/li&gt;
&lt;li&gt;On first successful GET, the server streams the bytes, then immediately deletes the stored file (and any database record pointing to it).&lt;/li&gt;
&lt;li&gt;Any later request with the same token returns a "gone" state.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The deletion has to happen server-side, right after the response completes. Client-side tricks — like a page that hides the link after viewing — don't count. If the bytes are still on disk, the share isn't really view-once.&lt;/p&gt;

&lt;p&gt;A few details that matter more than they look:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stream, then delete.&lt;/strong&gt; Don't load the whole file into memory if you can stream it. Delete the source as soon as the stream finishes, in the same request lifecycle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make tokens unguessable.&lt;/strong&gt; UUIDs or 128-bit random values. Sequential IDs are an invitation to enumeration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat "viewed" carefully.&lt;/strong&gt; If the recipient's browser prefetches or a link-preview bot hits the URL, that can burn the single view. A common fix: serve an interstitial page first ("click to reveal"), and only count the actual download/view click.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Multi-file shares: the ZIP trick
&lt;/h2&gt;

&lt;p&gt;Single files are the easy case. For multiple files, the cleanest approach is to bundle them into a ZIP at share time and treat the ZIP as the single view-once object. The recipient gets one download, one deletion. &lt;a href="https://nowiretransfer.xyz/" rel="noopener noreferrer"&gt;nowiretransfer&lt;/a&gt; uses exactly this approach — you can drop several files in, and they arrive as one self-deleting archive.&lt;/p&gt;

&lt;p&gt;Generating the ZIP on upload (rather than on download) keeps the download path simple and predictable: one stream, one delete, done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Text shares are the same shape
&lt;/h2&gt;

&lt;p&gt;The pattern generalizes nicely to text. Store the snippet server-side, hand out a token URL, render the text once, delete on first render. It's the same state machine as files — the only difference is the content type. Passwords, API keys, and config snippets are the natural use case, and they benefit from the same "no residue" guarantee.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "deleted" should mean
&lt;/h2&gt;

&lt;p&gt;This is where implementations get honest or don't. True delete-on-read means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The file bytes are removed from storage (not just unlinked from a database row).&lt;/li&gt;
&lt;li&gt;Backups and caches don't quietly keep a copy around past its intended life.&lt;/li&gt;
&lt;li&gt;There's no "recently deleted" grace period that extends the exposure window.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're evaluating a view-once tool rather than building one, these are the questions worth asking. A tool that keeps files in a trash folder for 30 days isn't view-once — it's a file host with a countdown timer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is worth building (or using)
&lt;/h2&gt;

&lt;p&gt;Delete-on-read is a small idea with an outsized effect on how people share sensitive things. It removes the whole category of "I forgot that link was still live." The UX is almost nothing — upload, share, done — because the security model is the absence of state, not the presence of more controls.&lt;/p&gt;

&lt;p&gt;If you want to see the pattern in action, &lt;a href="https://nowiretransfer.xyz/" rel="noopener noreferrer"&gt;nowiretransfer&lt;/a&gt; is a clean example: free, no signup, files and text that delete themselves after one view, multi-file ZIP packaging. It's a good reference for how little UI this pattern actually needs.&lt;/p&gt;

&lt;p&gt;The broader lesson: sometimes the best data retention policy is not having the data at all.&lt;/p&gt;

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