<?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: Supun Lakmal</title>
    <description>The latest articles on DEV Community by Supun Lakmal (@supun_lakmal_0a085459856f).</description>
    <link>https://dev.to/supun_lakmal_0a085459856f</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%2F2111160%2F56ff78be-0ab7-4260-9f9f-326885ddacc1.jpg</url>
      <title>DEV Community: Supun Lakmal</title>
      <link>https://dev.to/supun_lakmal_0a085459856f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/supun_lakmal_0a085459856f"/>
    <language>en</language>
    <item>
      <title>I Deleted My Entire Backend and Put the Database in the URL Bar Instead</title>
      <dc:creator>Supun Lakmal</dc:creator>
      <pubDate>Mon, 15 Jun 2026 10:04:22 +0000</pubDate>
      <link>https://dev.to/supun_lakmal_0a085459856f/i-deleted-my-entire-backend-and-put-the-database-in-the-url-bar-instead-3pdo</link>
      <guid>https://dev.to/supun_lakmal_0a085459856f/i-deleted-my-entire-backend-and-put-the-database-in-the-url-bar-instead-3pdo</guid>
      <description>&lt;p&gt;&lt;strong&gt;What if I told you a web app could store its entire database in the address bar, no server, no sign-up, no login, and still keep your data private?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That sounds like a hack. It's actually the whole architecture. Let me show you how I built it, and then I want to hear whether you think this is genius or a terrible idea. (Honestly, I go back and forth myself.)&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: why does sharing a calendar require an account?
&lt;/h2&gt;

&lt;p&gt;You've felt this pain. You want to share a quick schedule with a client or a friend, and your only real options are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google Calendar or Outlook → account sign-ins, clunky permissions, and handing your data to a tech giant.&lt;/li&gt;
&lt;li&gt;Build a custom app → a Node.js backend, a PostgreSQL database, JWT auth, and a monthly AWS bill… just to share a few dates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both felt absurd for something so simple. I wanted something instant, private, and frictionless. No sign-ups. No backend. No access controls. Just a link.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "aha" moment: the URL &lt;em&gt;is&lt;/em&gt; the database
&lt;/h2&gt;

&lt;p&gt;Here's the realization that started it all: &lt;strong&gt;for lightweight data, the URL itself can act as the database.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Hash Calendar&lt;/strong&gt;, a fully client-side app where your events, timezones, and settings live entirely in the URL hash (everything after the &lt;code&gt;#&lt;/code&gt;). The server stores &lt;em&gt;nothing&lt;/em&gt;. Sharing a calendar is just copying your URL and pasting it into Slack, WhatsApp, or email. Open the link, and the calendar rebuilds itself on your machine exactly as the sender left it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"But if the data is in the link, doesn't anyone with the link have my data?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Great question, and that's where it gets interesting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making it private: encryption that never touches a server
&lt;/h2&gt;

&lt;p&gt;Before any data hits the URL, it can be encrypted &lt;strong&gt;locally&lt;/strong&gt; with a password. Intercept the link all you want without the password; it's noise. No server ever sees your plain-text data or your password. Ever.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it actually works (the 5-step engine)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;State serialization&lt;/strong&gt; → Every event, timezone, and setting is captured as a JSON object.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aggressive compression&lt;/strong&gt; → URLs cap out around ~2,000 characters, so the JSON gets compressed down to a fraction of its size.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AES-GCM encryption (Web Crypto API)&lt;/strong&gt; → If you lock the calendar, the browser encrypts the payload with a key derived from your password. 100% local.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Base64 encoding&lt;/strong&gt; → The (optionally encrypted) payload is made URL-safe and appended to the hash. The URL updates live as you type.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client-side hydration&lt;/strong&gt; → Open the link, and the process runs in reverse: decode → decrypt → decompress → parse → render. Full calendar restored in milliseconds.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;The result is a lightning-fast, privacy-first tool that costs basically nothing to host. Not every web app needs a database sometimes; the address bar is enough.&lt;/p&gt;

&lt;p&gt;You can try it free at &lt;a href="https://hashcalendar.online" rel="noopener noreferrer"&gt;hashcalendar.online&lt;/a&gt;, and the core engine is fully open-source if you want to see exactly how the encryption and state management work.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Now I want your take 👇&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Would you actually ship a "database-in-the-URL" app in production, or is this a fun toy?&lt;/li&gt;
&lt;li&gt;What's the most unconventional place &lt;em&gt;you've&lt;/em&gt; ever stored application state?&lt;/li&gt;
&lt;li&gt;Where would this architecture break down first?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drop a comment&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>privacy</category>
      <category>javascript</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Auto Tag on Package Version Change - GitHub Action</title>
      <dc:creator>Supun Lakmal</dc:creator>
      <pubDate>Sun, 25 May 2025 05:39:58 +0000</pubDate>
      <link>https://dev.to/supun_lakmal_0a085459856f/auto-tag-on-package-version-change-github-action-3ajm</link>
      <guid>https://dev.to/supun_lakmal_0a085459856f/auto-tag-on-package-version-change-github-action-3ajm</guid>
      <description>&lt;p&gt;🚀 Excited to Share: Auto Tag on Package Version Change - GitHub Action&lt;/p&gt;

&lt;p&gt;I've created a GitHub Action that automates version tagging for Node.js projects! &lt;/p&gt;

&lt;p&gt;🛠️ Key Features:&lt;br&gt;
• Automatically creates Git tags from package.json versions&lt;br&gt;
• Supports multiple environments (dev, qa, prod)&lt;br&gt;
• Custom suffix mapping for different branches&lt;br&gt;
• Zero-configuration required&lt;br&gt;
• Prevents duplicate tags&lt;/p&gt;

&lt;p&gt;🔍 Perfect for teams who want to:&lt;br&gt;
• Automate release management&lt;br&gt;
• Maintain clean version control&lt;br&gt;
• Streamline deployment workflows&lt;br&gt;
• Reduce manual tagging errors&lt;/p&gt;

&lt;p&gt;🌟 Try it out: &lt;a href="https://github.com/supunlakmal/action-tag-on-package-version-example" rel="noopener noreferrer"&gt;https://github.com/supunlakmal/action-tag-on-package-version-example&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love to hear your thoughts and feedback! Feel free to star ⭐ the repo if you find it useful.&lt;/p&gt;

</description>
      <category>github</category>
      <category>githubactions</category>
      <category>opensource</category>
      <category>cicd</category>
    </item>
    <item>
      <title>Introducing supunlakmal/hooks: 60+ Production-Ready React Hooks in TypeScript</title>
      <dc:creator>Supun Lakmal</dc:creator>
      <pubDate>Fri, 09 May 2025 09:40:17 +0000</pubDate>
      <link>https://dev.to/supun_lakmal_0a085459856f/introducing-supunlakmalhooks-60-production-ready-react-hooks-in-typescript-3emh</link>
      <guid>https://dev.to/supun_lakmal_0a085459856f/introducing-supunlakmalhooks-60-production-ready-react-hooks-in-typescript-3emh</guid>
      <description>&lt;h1&gt;
  
  
  🚀 Introducing &lt;code&gt;supunlakmal/hooks&lt;/code&gt;: 60+ Production-Ready React Hooks in TypeScript
&lt;/h1&gt;

&lt;p&gt;I'm thrilled to share my open-source project: &lt;a href="https://github.com/supunlakmal/hooks" rel="noopener noreferrer"&gt;&lt;code&gt;supunlakmal/hooks&lt;/code&gt;&lt;/a&gt; — a comprehensive collection of over 60 reusable React hooks, all crafted in TypeScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔧 Why This Library?
&lt;/h2&gt;

&lt;p&gt;In the dynamic world of React development, reusable hooks can significantly streamline your workflow. This library offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Extensive Collection&lt;/strong&gt;: Hooks for various use-cases, from UI interactions to browser APIs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type-Safe&lt;/strong&gt;: Built entirely with TypeScript for robust type-checking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple API&lt;/strong&gt;: Designed for ease of use with minimal boilerplate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSR Compatible&lt;/strong&gt;: Safe to use in server-side rendering environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic Cleanup&lt;/strong&gt;: Handles listeners, timers, and observers correctly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📦 Getting Started
&lt;/h2&gt;

&lt;p&gt;Install the package:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

npm install @supunlakmal/hooks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
  </channel>
</rss>
