<?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: Dhairya Darji</title>
    <description>The latest articles on DEV Community by Dhairya Darji (@dhairya_darji_ff0fec19a28).</description>
    <link>https://dev.to/dhairya_darji_ff0fec19a28</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%2F1888628%2F5aa10ed8-48e8-4738-b0f9-53d1129207d3.png</url>
      <title>DEV Community: Dhairya Darji</title>
      <link>https://dev.to/dhairya_darji_ff0fec19a28</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dhairya_darji_ff0fec19a28"/>
    <language>en</language>
    <item>
      <title>5 Ways to Copy Text Between Phone and Laptop — Ranked by a Developer (2026)</title>
      <dc:creator>Dhairya Darji</dc:creator>
      <pubDate>Thu, 25 Jun 2026 12:55:40 +0000</pubDate>
      <link>https://dev.to/dhairya_darji_ff0fec19a28/5-ways-to-copy-text-between-phone-and-laptop-ranked-by-a-developer-2026-1coo</link>
      <guid>https://dev.to/dhairya_darji_ff0fec19a28/5-ways-to-copy-text-between-phone-and-laptop-ranked-by-a-developer-2026-1coo</guid>
      <description>&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%2F53re0zlz6wlxuszndmnp.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%2F53re0zlz6wlxuszndmnp.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've wasted an embarrassing amount of time moving text between my phone and laptop.&lt;/p&gt;

&lt;p&gt;Whether it's a URL I found on mobile that I want to paste into VS Code, or a snippet I wrote on my desktop that I need to test on mobile — this friction is real and constant for developers.&lt;/p&gt;

&lt;p&gt;I tested 5 methods seriously. Here's my honest ranking.&lt;/p&gt;




&lt;h3&gt;
  
  
  Method 1: WhatsApp "Saved Messages" (Most Popular, Worst UX)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Rating: 2/5&lt;/strong&gt; ⭐⭐&lt;/p&gt;

&lt;p&gt;This is what most people do. You message yourself on WhatsApp, open it on the other device, copy it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You already have WhatsApp installed&lt;/li&gt;
&lt;li&gt;Works globally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5+ steps for a simple copy-paste&lt;/li&gt;
&lt;li&gt;Messages pile up and become clutter&lt;/li&gt;
&lt;li&gt;Requires internet + WhatsApp to be open on both devices&lt;/li&gt;
&lt;li&gt;No developer-facing UX (can't paste code nicely)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use this if you have no other option and you enjoy suffering.&lt;/p&gt;




&lt;h3&gt;
  
  
  Method 2: Google Keep / Notes (Decent, But Not Real-Time)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Rating: 3/5&lt;/strong&gt; ⭐⭐⭐&lt;/p&gt;

&lt;p&gt;Open Keep on both devices, create a note, sync happens via cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free, available on all platforms&lt;/li&gt;
&lt;li&gt;Syncs reasonably fast (~2–5 seconds)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Not instantaneous — you have to wait for sync&lt;/li&gt;
&lt;li&gt;Requires a Google account&lt;/li&gt;
&lt;li&gt;Adds to your note clutter&lt;/li&gt;
&lt;li&gt;Not designed for clipboard — it's a notes app&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Method 3: KDE Connect / Pushbullet (Powerful but Fragile)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Rating: 3.5/5&lt;/strong&gt; ⭐⭐⭐⭐&lt;/p&gt;

&lt;p&gt;For Android + Linux/Windows users, KDE Connect is actually a great tool. It can mirror your clipboard automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatic sync — no manual action needed&lt;/li&gt;
&lt;li&gt;Works great on same Wi-Fi&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requires native app install on all devices&lt;/li&gt;
&lt;li&gt;Breaks on mobile data, hotel Wi-Fi, or VPNs&lt;/li&gt;
&lt;li&gt;Background process running constantly&lt;/li&gt;
&lt;li&gt;Overkill if you just want to move text occasionally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Solid choice if you're always on the same network. Falls apart in the real world.&lt;/p&gt;




&lt;h3&gt;
  
  
  Method 4: Email Yourself (The "I Give Up" Option)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Rating: 1/5&lt;/strong&gt; ⭐&lt;/p&gt;

&lt;p&gt;I included this because apparently people do it.&lt;/p&gt;

&lt;p&gt;No further comment.&lt;/p&gt;




&lt;h3&gt;
  
  
  Method 5: SyncClip — Browser-Based WebSocket Sync (My Current Setup)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Rating: 4.5/5&lt;/strong&gt; ⭐⭐⭐⭐⭐&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://syncclip.in" rel="noopener noreferrer"&gt;SyncClip&lt;/a&gt;&lt;/strong&gt; is a browser-native clipboard tool that uses WebSockets to sync text between devices in real-time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://syncclip.in" rel="noopener noreferrer"&gt;syncclip.in&lt;/a&gt; on your laptop&lt;/li&gt;
&lt;li&gt;Scan the QR code on your phone or open the same URL&lt;/li&gt;
&lt;li&gt;Type or paste on one device → it appears on the other instantly&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No app. No account. No background process. Just a browser tab.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Works on any device with a browser (Android, iPhone, Windows, Mac, Linux)&lt;/li&gt;
&lt;li&gt;No installation, no sign-up&lt;/li&gt;
&lt;li&gt;WebSocket-based = sub-100ms sync&lt;/li&gt;
&lt;li&gt;Works on any network (mobile data, different Wi-Fi)&lt;/li&gt;
&lt;li&gt;Ephemeral by design — nothing is stored after the session&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manual step (you have to open the browser)&lt;/li&gt;
&lt;li&gt;Not fully automatic (unlike KDE Connect's passive clipboard mirroring)&lt;/li&gt;
&lt;li&gt;Requires both devices to have the tab open&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Developers, remote workers, and anyone who wants to move text across ecosystems (Android + Windows, iPhone + Linux, etc.) without installing anything.&lt;/p&gt;




&lt;h3&gt;
  
  
  My Setup
&lt;/h3&gt;

&lt;p&gt;I keep a browser bookmark called "📋 Clipboard" on both my phone and laptop pointing to &lt;code&gt;syncclip.in&lt;/code&gt;. When I need to share text, I open both bookmarks, scan the QR, and I'm done.&lt;/p&gt;

&lt;p&gt;Total friction: 2 taps and 1 scan.&lt;/p&gt;




&lt;h3&gt;
  
  
  Honorable Mentions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Apple Universal Clipboard&lt;/strong&gt; — if you're all-in on Apple ecosystem, this is magic. But I'm Android+Windows, so it's useless for me.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notion&lt;/strong&gt; — some devs paste text into a Notion page. Works, but it's a CMS, not a clipboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pastebin&lt;/strong&gt; — publicly accessible by default. Please don't share sensitive text here.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Final Verdict
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Speed&lt;/th&gt;
&lt;th&gt;Setup Required&lt;/th&gt;
&lt;th&gt;Cross-Platform&lt;/th&gt;
&lt;th&gt;Works on Mobile Data&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;WhatsApp Saved&lt;/td&gt;
&lt;td&gt;Slow&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Keep&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Google Account&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KDE Connect&lt;/td&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;td&gt;App + Same Wi-Fi&lt;/td&gt;
&lt;td&gt;⚠️ Android+Win/Linux&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;Slow&lt;/td&gt;
&lt;td&gt;Email Account&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SyncClip&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Instant&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;None&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you need something that just works with zero setup on any combination of devices, &lt;strong&gt;&lt;a href="https://syncclip.in" rel="noopener noreferrer"&gt;SyncClip&lt;/a&gt;&lt;/strong&gt; is the best option I've found.&lt;/p&gt;

&lt;p&gt;What's your workflow? Drop it in the comments — curious how others handle this.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Found this useful? Share it with a dev friend who's still sending themselves WhatsApp messages.&lt;/em&gt; 😄&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tools</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How Real-Time Clipboard Sync Works Over WebSockets (And Why It's Faster Than You Think)</title>
      <dc:creator>Dhairya Darji</dc:creator>
      <pubDate>Thu, 25 Jun 2026 12:52:52 +0000</pubDate>
      <link>https://dev.to/dhairya_darji_ff0fec19a28/how-real-time-clipboard-sync-works-over-websockets-and-why-its-faster-than-you-think-3e8p</link>
      <guid>https://dev.to/dhairya_darji_ff0fec19a28/how-real-time-clipboard-sync-works-over-websockets-and-why-its-faster-than-you-think-3e8p</guid>
      <description>&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%2F4kq70nigm706o2ysfwt2.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%2F4kq70nigm706o2ysfwt2.png" alt=" " width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most developers think of WebSockets as "for chat apps". But they're one of the cleanest primitives for &lt;strong&gt;any ephemeral, real-time state sync&lt;/strong&gt; — and clipboard sharing is a perfect use case.&lt;/p&gt;

&lt;p&gt;Let me walk you through how a WebSocket-based clipboard syncing tool works under the hood, using &lt;strong&gt;&lt;a href="https://syncclip.in" rel="noopener noreferrer"&gt;SyncClip&lt;/a&gt;&lt;/strong&gt; as a real-world example.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Core Problem
&lt;/h3&gt;

&lt;p&gt;A clipboard is local state. It lives on your OS. To share it across devices you need:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A shared communication channel&lt;/li&gt;
&lt;li&gt;A way to broadcast updates from one device to all others in a "room"&lt;/li&gt;
&lt;li&gt;Zero storage overhead (clipboards are transient — you don't need to persist them)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;HTTP polling would work but is wasteful. WebSockets are ideal because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Persistent connection&lt;/strong&gt; — no repeated handshakes per update&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low latency&lt;/strong&gt; — sub-100ms message delivery on a good connection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bidirectional&lt;/strong&gt; — either device can push an update&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Architecture Overview
&lt;/h3&gt;

&lt;p&gt;Device A (sender)                     Device B (receiver)&lt;br&gt;
─────────────────                     ─────────────────&lt;br&gt;
User types text&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
ws.send({ type: "clip", text })&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
WebSocket Server ──────────────────▶ broadcast to room&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
ws.onmessage({ text })&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
Display in UI instantly&lt;/p&gt;

&lt;p&gt;The server maintains a &lt;strong&gt;room map&lt;/strong&gt;:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javascript
const rooms = new Map(); // roomId → Set&amp;lt;WebSocket&amp;gt;

wss.on('connection', (ws, req) =&amp;gt; {
  const roomId = getRoomId(req.url); // e.g., ?room=abc123

  if (!rooms.has(roomId)) rooms.set(roomId, new Set());
  rooms.get(roomId).add(ws);

  ws.on('message', (data) =&amp;gt; {
    // Broadcast to every other socket in the room
    for (const client of rooms.get(roomId)) {
      if (client !== ws &amp;amp;&amp;amp; client.readyState === WebSocket.OPEN) {
        client.send(data);
      }
    }
  });

  ws.on('close', () =&amp;gt; {
    rooms.get(roomId)?.delete(ws);
    if (rooms.get(roomId)?.size === 0) rooms.delete(roomId); // GC empty rooms
  });
});

Simple. Effective. No database needed.
Client-Side Implementation
On the client, you watch for user input and broadcast changes:
const ws = new WebSocket(`wss://your-server.com?room=${roomId}`);
const textarea = document.getElementById('clipboard');

// Send on input
textarea.addEventListener('input', () =&amp;gt; {
  ws.send(JSON.stringify({ type: 'clip', text: textarea.value }));
});

// Receive from other devices
ws.onmessage = (event) =&amp;gt; {
  const { text } = JSON.parse(event.data);
  textarea.value = text; // Update the UI
};

You get bi-directional, real-time sync with ~30 lines of code.
Performance: Why Sub-100ms?
    1.  No polling interval — updates go out the moment you type
    2.  Binary frame protocol — WebSocket frames are lighter than HTTP headers
    3.  Persistent TCP connection — no TLS handshake per message
    4.  Minimal payload — a short text snippet is just bytes
For clipboard use, where text is usually &amp;lt; 10KB, the bottleneck is network latency not throughput. On most 4G or Wi-Fi connections you're looking at 30–80ms round-trip.
Security Considerations
For a clipboard app you need to think about:
• Room ID entropy — use a cryptographically random ID (not 1234). A UUID v4 gives 122 bits of entropy — effectively unguessable.
• No server-side storage — SyncClip keeps nothing after the session ends. The room evaporates when all connections close.
• HTTPS/WSS — always run the WebSocket over TLS. Clipboard data can be sensitive.
Try It Live
SyncClip is a production implementation of exactly this architecture. Open it in two browser tabs (or on two devices), type in one, and watch it sync in the other.
The whole thing runs in the browser — no installs, no accounts.
If you want to dig into a WebSocket clipboard project or need a starting point for a similar real-time sync feature, the architecture above is pretty much all you need.
Drop any questions in the comments — happy to go deeper on any part.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>webdev</category>
      <category>architecture</category>
    </item>
    <item>
      <title>I Stopped Sending Myself WhatsApp Messages to Share Text — Here's What I Do Instead</title>
      <dc:creator>Dhairya Darji</dc:creator>
      <pubDate>Thu, 25 Jun 2026 12:51:06 +0000</pubDate>
      <link>https://dev.to/dhairya_darji_ff0fec19a28/i-stopped-sending-myself-whatsapp-messages-to-share-text-heres-what-i-do-instead-3d04</link>
      <guid>https://dev.to/dhairya_darji_ff0fec19a28/i-stopped-sending-myself-whatsapp-messages-to-share-text-heres-what-i-do-instead-3d04</guid>
      <description>&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%2F7xzn441mj4eohsb04ylk.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%2F7xzn441mj4eohsb04ylk.png" alt=" " width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You know the workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write a URL or piece of code on your laptop&lt;/li&gt;
&lt;li&gt;Open WhatsApp, go to "Saved Messages" (or a useless group)&lt;/li&gt;
&lt;li&gt;Paste it, open WhatsApp on phone, copy it&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It works. But it's embarrassing how many steps it takes just to move 10 words between two devices you own.&lt;/p&gt;

&lt;p&gt;I did this for &lt;strong&gt;years&lt;/strong&gt;. Then I got fed up and started looking for something better.&lt;/p&gt;




&lt;h3&gt;
  
  
  The problem with most "solutions"
&lt;/h3&gt;

&lt;p&gt;I tried a bunch of tools before settling on my current setup. Here's what didn't work for me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;KDE Connect / Pushbullet&lt;/strong&gt; — needed an app installed, background process running, Bluetooth or same Wi-Fi. When it worked, great. When it didn't (hotel Wi-Fi, mobile data), useless.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud clipboard (Google / Apple)&lt;/strong&gt; — locked to an ecosystem. I use Android + Windows. Google's clipboard sync doesn't work cross-device in real-time without extra setup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AirDrop&lt;/strong&gt; — Apple only.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email myself&lt;/strong&gt; — I'm not a psychopath.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  What I actually use now
&lt;/h3&gt;

&lt;p&gt;I stumbled onto a small open-source tool called &lt;strong&gt;&lt;a href="https://syncclip.in" rel="noopener noreferrer"&gt;SyncClip&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It's a &lt;strong&gt;browser-based clipboard&lt;/strong&gt; that works on any device, any OS, over WebSockets. No app, no account, no cables.&lt;/p&gt;

&lt;p&gt;Here's the flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://syncclip.in" rel="noopener noreferrer"&gt;syncclip.in&lt;/a&gt; on your laptop&lt;/li&gt;
&lt;li&gt;Scan the QR code with your phone (or just open the same URL)&lt;/li&gt;
&lt;li&gt;Paste text on one device → it appears instantly on the other&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. The connection is end-to-end, room-based, and gets cleared when you close the tab.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>nocode</category>
    </item>
    <item>
      <title>Building a 100ms Browser-Native WebSocket Clipboard</title>
      <dc:creator>Dhairya Darji</dc:creator>
      <pubDate>Sat, 23 May 2026 17:54:26 +0000</pubDate>
      <link>https://dev.to/dhairya_darji_ff0fec19a28/building-a-100ms-browser-native-websocket-clipboard-1ac</link>
      <guid>https://dev.to/dhairya_darji_ff0fec19a28/building-a-100ms-browser-native-websocket-clipboard-1ac</guid>
      <description>&lt;p&gt;Under the Hood: Building a 100ms Browser-Native WebSocket Clipboard&lt;/p&gt;

&lt;p&gt;How do you move a terminal code or API key between a MacBook, a Windows PC, and an Android phone without paying a "context-switching tax"?&lt;/p&gt;

&lt;p&gt;In this post, we break down why traditional cloud notes fail at transient data, how to architect a real-time WebSocket sync engine, and the security guidelines for browser-based ephemeral storage.&lt;/p&gt;

&lt;p&gt;The Transient Data Problem&lt;/p&gt;

&lt;p&gt;Most cloud services (Notion, Google Keep, Evernote) are built for persistent storage. They are database-heavy, require complex user authentication (JWTs), and store records permanently.&lt;/p&gt;

&lt;p&gt;When you use them to move a temporary string, you pay a latency penalty:&lt;/p&gt;

&lt;p&gt;App Load Time: 3s - 5s&lt;br&gt;
Auth Verification: 1s - 2s&lt;br&gt;
Sync Latency: 2s - 8s (Cloud DB updates)&lt;br&gt;
An online clipboard resolves this by prioritizing speed over persistence.&lt;/p&gt;

&lt;p&gt;Designing a WebSocket Sync Lifecycle&lt;/p&gt;

&lt;p&gt;To achieve sub-100ms synchronization, we bypass traditional HTTP polling (constantly pinging the server) and establish a full-duplex TCP tunnel using WebSockets:&lt;/p&gt;

&lt;p&gt;Client Handshake: The browser opens a secure WebSocket (wss://) channel to the server.&lt;br&gt;
Session Identification: The server registers a unique session ID.&lt;br&gt;
Data Relaying: When Device A pastes text, the payload is transmitted through the WebSocket. The server instantly broadcasts it to all other connections registered under that session ID.&lt;br&gt;
Wiping the Footprint: Zero-Trust Security&lt;/p&gt;

&lt;p&gt;Because a clipboard handles sensitive credentials, storing it permanently is a security risk. Ephemeral utilities must implement:&lt;/p&gt;

&lt;p&gt;Zero Accounts: No real-world identities tied to the payload.&lt;br&gt;
TLS 1.3 Transport Security: Encryption in transit to prevent local sniffing.&lt;br&gt;
Self-Destruct (Burn After Reading): Purging data from memory immediately after the receiving node reads it.&lt;br&gt;
We built SyncClip to solve this workflow friction. It's completely free, requires no signup, and supports instant cross-platform clipboard sharing.&lt;/p&gt;

&lt;p&gt;Check out the live tool: &lt;a href="https://syncclip.in" rel="noopener noreferrer"&gt;https://syncclip.in&lt;/a&gt; Read the full technical clipboard comparison: &lt;br&gt;
&lt;a href="https://syncclip.in/blog/what-is-an-online-clipboard-complete-guide" rel="noopener noreferrer"&gt;https://syncclip.in/blog/what-is-an-online-clipboard-complete-guide&lt;/a&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Foi62gqifdnpcygqv2ucu.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.amazonaws.com%2Fuploads%2Farticles%2Foi62gqifdnpcygqv2ucu.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>techtalks</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How I Built a 100ms Real-Time Cross-Device Clipboard (Next.js + Convex)</title>
      <dc:creator>Dhairya Darji</dc:creator>
      <pubDate>Thu, 30 Apr 2026 06:08:00 +0000</pubDate>
      <link>https://dev.to/dhairya_darji_ff0fec19a28/how-i-built-a-100ms-real-time-cross-device-clipboard-nextjs-convex-oe5</link>
      <guid>https://dev.to/dhairya_darji_ff0fec19a28/how-i-built-a-100ms-real-time-cross-device-clipboard-nextjs-convex-oe5</guid>
      <description>&lt;p&gt;If you live entirely inside the Apple ecosystem, Universal Clipboard is basically magic. You copy text on your iPhone, and you paste it on your Mac. &lt;/p&gt;

&lt;p&gt;But the moment you step outside that walled garden—say, you have an Android phone and a MacBook, or a Windows PC and an iPad—that magic disappears. Suddenly, transferring a 12-digit 2FA code, a block of JSON, or a long URL feels like traveling back to 2005.&lt;/p&gt;

&lt;p&gt;The standard workarounds are terrible:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Emailing yourself&lt;/strong&gt; (and cluttering your inbox).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Using a "Saved Messages" chat&lt;/strong&gt; on Slack or Telegram (mixing personal chat with transient clipboard data).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Installing heavy background apps&lt;/strong&gt; like Pushbullet (which often require accounts, logins, and paid subscriptions).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I got tired of this friction. I wanted a zero-login, instant, web-native bridge. So, I built &lt;a href="https://syncclip.in/clipboard" rel="noopener noreferrer"&gt;SyncClip.in&lt;/a&gt;, a free &lt;strong&gt;online clipboard&lt;/strong&gt; that syncs across devices in under 100 milliseconds.&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.amazonaws.com%2Fuploads%2Farticles%2F52wjzk85var5ez5m5yj3.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.amazonaws.com%2Fuploads%2Farticles%2F52wjzk85var5ez5m5yj3.png" alt="SyncClip Cross-Device Workflow" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is a breakdown of how I built it, the architecture I chose, and why I opted for "Burn Mode" ephemeral storage over a traditional database.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Tech Stack
&lt;/h3&gt;

&lt;p&gt;I needed something that could handle real-time state synchronization seamlessly without requiring me to manage WebSockets manually.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Frontend&lt;/strong&gt;: Next.js 14 (App Router)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Styling&lt;/strong&gt;: Tailwind CSS (Using a stark, "Editorial Brutalist" design system)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Backend/Database&lt;/strong&gt;: Convex (Backend-as-a-Service)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Hosting&lt;/strong&gt;: Vercel&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Convex for WebSockets?
&lt;/h3&gt;

&lt;p&gt;When building real-time apps, the traditional route is setting up a Node.js server with &lt;code&gt;Socket.io&lt;/code&gt;. This works, but managing server state, handling disconnects, and scaling socket connections can become a headache fast.&lt;/p&gt;

&lt;p&gt;Convex abstracts all of this away. In Convex, your database &lt;em&gt;is&lt;/em&gt; reactive. You write a standard query on the backend, and you use a &lt;code&gt;useQuery&lt;/code&gt; hook on the frontend. If the underlying data changes, Convex pushes the update over WebSockets instantly. &lt;/p&gt;

&lt;p&gt;For a clipboard tool, this is perfect. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Architecture: "Burn Mode" vs Permanent Storage
&lt;/h3&gt;

&lt;p&gt;When I first designed the schema, the obvious choice was to create a &lt;code&gt;users&lt;/code&gt; table and a &lt;code&gt;clips&lt;/code&gt; table. You log in, you see your clips. &lt;/p&gt;

&lt;p&gt;But I realized that &lt;strong&gt;clipboard data is inherently ephemeral&lt;/strong&gt;. A 2FA code or a temporary password has a lifespan of about 30 seconds. Forcing a user to create an account to transfer a 30-second string of text is extreme friction. Furthermore, storing users' copied data permanently is a massive privacy liability.&lt;/p&gt;

&lt;p&gt;So, I built &lt;strong&gt;Burn Mode&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of user accounts, the app uses &lt;strong&gt;Temporary Sessions&lt;/strong&gt;. &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.amazonaws.com%2Fuploads%2Farticles%2Fb70gtpy5l5fvdcrjf5k9.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.amazonaws.com%2Fuploads%2Farticles%2Fb70gtpy5l5fvdcrjf5k9.png" alt="Secure QR Code Pairing" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;When you open the site on your laptop, it generates a random 6-character room code.&lt;/li&gt;
&lt;li&gt;You open the site on your phone and enter the code (or scan a QR code).&lt;/li&gt;
&lt;li&gt;The two devices are now subscribed to the same Convex document.&lt;/li&gt;
&lt;li&gt;When you paste text on the phone, the laptop's UI updates in &amp;lt; 100ms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Burn:&lt;/strong&gt; The moment the session is closed, or after a short expiry window, a Convex CRON job hard-purges the document. It leaves absolutely no trace on the server.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Code: Syncing State
&lt;/h3&gt;

&lt;p&gt;Here is a simplified look at the Convex mutation that handles the text update. It's incredibly straightforward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;mutation&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./_generated/server&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;convex/values&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;updateClip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;mutation&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;sessionId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sessions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Update the session document with the new clipboard text&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;patch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sessionId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;currentText&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;lastUpdated&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On the Next.js client, subscribing to this data is just one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sessionData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sessions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;sessionId&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="c1"&gt;// The UI automatically re-renders whenever sessionData.currentText changes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Result
&lt;/h3&gt;

&lt;p&gt;By treating the browser as the universal operating system, I completely bypassed the need for native apps. &lt;/p&gt;

&lt;p&gt;Whether you are on a Linux desktop, a Windows laptop, an iPhone, or an Android, you have a browser. That means you have an instant, secure, real-time bridge.&lt;/p&gt;

&lt;p&gt;If you've ever felt the pain of emailing yourself a link just to get it on your computer, give the live app a try. It requires no login and no installation:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Live App&lt;/strong&gt;: &lt;a href="https://syncclip.in/clipboard" rel="noopener noreferrer"&gt;SyncClip — Online Clipboard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Have you ever built anything using Convex? I'd love to hear your thoughts on reactive databases vs traditional REST/Socket setups in the comments!&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>react</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>No-Login Online Clipboard Sync: QR Pairing, Burn Mode, &lt;100ms—Built by a 3rd-Sem CS Student</title>
      <dc:creator>Dhairya Darji</dc:creator>
      <pubDate>Wed, 29 Apr 2026 05:38:52 +0000</pubDate>
      <link>https://dev.to/dhairya_darji_ff0fec19a28/no-login-online-clipboard-sync-qr-pairing-burn-mode-100ms-built-by-a-3rd-sem-cs-student-348b</link>
      <guid>https://dev.to/dhairya_darji_ff0fec19a28/no-login-online-clipboard-sync-qr-pairing-burn-mode-100ms-built-by-a-3rd-sem-cs-student-348b</guid>
      <description>&lt;h1&gt;
  
  
  You've Been Using WhatsApp as Your Clipboard. Here's the Fix I Built.
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Copy code on your laptop. Need it on phone? WhatsApp "Saved Messages" becomes your clipboard.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I did this for &lt;em&gt;months&lt;/em&gt; as a 3rd-semester Computer Engineering student in Ahmedabad. Emailing myself API keys. Screenshotting terminal commands. Flow completely broken.&lt;/p&gt;

&lt;p&gt;Then I shipped &lt;strong&gt;SyncClip&lt;/strong&gt;: The "online clipboard" that works across &lt;em&gt;any&lt;/em&gt; devices—instantly, privately, no login required.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Every Developer's Dirty Secret
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code Snippets&lt;/strong&gt;: Copy from IDE → test on mobile → "send to self" via messaging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Links &amp;amp; Notes&lt;/strong&gt;: Mobile browsing → need on laptop → email chain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Keys/OTPs&lt;/strong&gt;: WhatsApp them → pray no one sees chat history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time Lost&lt;/strong&gt;: 2-5 minutes &lt;em&gt;per switch&lt;/em&gt;. x10 daily = hours wasted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Existing "clipboard sync" tools? Apps to install. Accounts to create. Data logged forever. Not good enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  SyncClip: Online Clipboard Sync Done Right
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live: &lt;a href="https://syncclip.in" rel="noopener noreferrer"&gt;https://syncclip.in&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🎯 Zero Friction Setup
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open syncclip.in on both devices&lt;/li&gt;
&lt;li&gt;Generate 6-char room code (or QR scan)&lt;/li&gt;
&lt;li&gt;Copy/paste instantly&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No apps. No passwords. Browser-only.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔒 Privacy-First Architecture
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Burn After Reading&lt;/strong&gt;: Paste sensitive data → other device reads → auto-deletes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Volatile Sessions&lt;/strong&gt;: Everything expires in 24 hours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Tracking&lt;/strong&gt;: We don't want your email or data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚡ Power User Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time Sync&lt;/strong&gt;: WebSockets push updates in &amp;lt;100ms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart Formatting&lt;/strong&gt;: Auto-detects code blocks, JSON, URLs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyboard-First&lt;/strong&gt;: CMD+K palette for everything.&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fjdsnha9rx3so62v2yyz9.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.amazonaws.com%2Fuploads%2Farticles%2Fjdsnha9rx3so62v2yyz9.png" alt="SyncClip Demo: Phone pasting code to laptop" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It (Tech Stack)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Frontend&lt;/strong&gt;: Next.js 15 (App Router, Server Actions)&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Convex (reactive database + authless rooms)&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Deploy&lt;/strong&gt;: Vercel (edge functions for global speed)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Core sync (Convex subscription)&lt;/span&gt;
&lt;span class="nf"&gt;useSubscription&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;q&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;clips&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;onData&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;clips&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Push latest clip to all devices&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Buying &lt;code&gt;syncclip.in&lt;/code&gt; was the moment it felt real. DNS setup, SSL config, first deploy—pure adrenaline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why SyncClip Beats Alternatives
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Apps Needed&lt;/th&gt;
&lt;th&gt;Login&lt;/th&gt;
&lt;th&gt;Privacy&lt;/th&gt;
&lt;th&gt;Cross-Device Speed&lt;/th&gt;
&lt;th&gt;Free&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SyncClip&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;Burn Mode&lt;/td&gt;
&lt;td&gt;&amp;lt;100ms&lt;/td&gt;
&lt;td&gt;✅ Forever&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pushbullet&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;Stored&lt;/td&gt;
&lt;td&gt;~1s&lt;/td&gt;
&lt;td&gt;❌ Freemium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GoOnlineTools&lt;/td&gt;
&lt;td&gt;❌ Browser&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;~500ms&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clipboard-QR&lt;/td&gt;
&lt;td&gt;✅ App&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;SyncClip wins on instant setup + developer privacy.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Loves It Already
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"Fixed my phone→laptop debug flow. Burn mode = genius." — Indie Hacker on Discord&lt;/p&gt;

&lt;p&gt;"No more WhatsApp clipboard hacks. QR pairing is smooth." — r/SideProject dev&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Strangers using it daily. That's the surreal part.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try Online Clipboard Sync Today
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;India devs&lt;/strong&gt;: Ditch WhatsApp workflow. Global teams: Privacy without setup tax.&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://syncclip.in" rel="noopener noreferrer"&gt;https://syncclip.in&lt;/a&gt;&lt;/strong&gt; (QR scan works anywhere)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BuiltfromAhmedabad, India. Questions? Feedback? Drop below.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  buildinpublic #webdev #productivity #javascript #nextjs
&lt;/h1&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.amazonaws.com%2Fuploads%2Farticles%2Fbe4cty9bqod0dt4osehk.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.amazonaws.com%2Fuploads%2Farticles%2Fbe4cty9bqod0dt4osehk.png" alt="syncclip" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>productivity</category>
      <category>devtools</category>
      <category>clipboard</category>
    </item>
  </channel>
</rss>
