<?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: Abdul-Qawi Laniyan</title>
    <description>The latest articles on DEV Community by Abdul-Qawi Laniyan (@laniyanabdulqawi).</description>
    <link>https://dev.to/laniyanabdulqawi</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2711881%2F9b2d4108-08fb-4bea-b199-775f4ad388f2.png</url>
      <title>DEV Community: Abdul-Qawi Laniyan</title>
      <link>https://dev.to/laniyanabdulqawi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/laniyanabdulqawi"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Abdul-Qawi Laniyan</dc:creator>
      <pubDate>Sun, 11 Jan 2026 20:37:02 +0000</pubDate>
      <link>https://dev.to/laniyanabdulqawi/-4c8e</link>
      <guid>https://dev.to/laniyanabdulqawi/-4c8e</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/laniyanabdulqawi" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F2711881%2F9b2d4108-08fb-4bea-b199-775f4ad388f2.png" alt="laniyanabdulqawi"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/laniyanabdulqawi/wallets-are-the-new-auth-layer-2pg5" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Wallets Are the New Auth Layer&lt;/h2&gt;
      &lt;h3&gt;Abdul-Qawi Laniyan ・ Jan 11&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#web3&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#authjs&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>programming</category>
      <category>web3</category>
      <category>authjs</category>
    </item>
    <item>
      <title>Wallets Are the New Auth Layer</title>
      <dc:creator>Abdul-Qawi Laniyan</dc:creator>
      <pubDate>Sun, 11 Jan 2026 20:36:37 +0000</pubDate>
      <link>https://dev.to/laniyanabdulqawi/wallets-are-the-new-auth-layer-2pg5</link>
      <guid>https://dev.to/laniyanabdulqawi/wallets-are-the-new-auth-layer-2pg5</guid>
      <description>&lt;p&gt;If you have implemented authentication in Web2, Web3 wallets should not feel strange.&lt;br&gt;
They solve the same problem using a cleaner trust model.&lt;/p&gt;

&lt;p&gt;Authentication has always been about one thing: &lt;em&gt;Can this user prove control over an identity?&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Web3 does not change the question, it simply changes who stores the proof.&lt;/p&gt;
&lt;h3&gt;
  
  
  Web2 Authentication Is Stateful by Design
&lt;/h3&gt;

&lt;p&gt;PS: stateful means applications remember information (its "state") from past interactions, using that context to process new requests&lt;/p&gt;

&lt;p&gt;In Web2, identity lives on your servers.&lt;/p&gt;

&lt;p&gt;A typical login flow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User submits email and password&lt;/li&gt;
&lt;li&gt;Backend validates against stored credentials&lt;/li&gt;
&lt;li&gt;Session or JWT is issued&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even OAuth follows the same structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identity is asserted by Google or GitHub&lt;/li&gt;
&lt;li&gt;Your system trusts a third party as the source of truth&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates three structural properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Secrets must be stored&lt;/li&gt;
&lt;li&gt;Identity is platform-bound&lt;/li&gt;
&lt;li&gt;The backend is responsible for protection and recovery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most Web2 auth problems are not mistakes they are simply consequences of this model.&lt;/p&gt;
&lt;h3&gt;
  
  
  Wallet Authentication Removes Stored Secrets
&lt;/h3&gt;

&lt;p&gt;Wallet-based auth flips the architecture. There is no password, no credential database, and no identity provider.&lt;/p&gt;

&lt;p&gt;A wallet is just a key pair:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Public key (address) → user identifier&lt;/li&gt;
&lt;li&gt;Private key → proof of control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Authentication is done by signing data, not submitting secrets.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Wallet Login Flow
&lt;/h3&gt;

&lt;p&gt;Here is the exact flow, expressed in terms a Web2 engineer already understands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Server generates a random challenge (nonce)&lt;/li&gt;
&lt;li&gt;Client asks the wallet to sign the nonce&lt;/li&gt;
&lt;li&gt;Server verifies the signature using the wallet address&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If verification passes, the user is authenticated.&lt;/p&gt;

&lt;p&gt;This is public-key authentication. The same model used by SSH.&lt;br&gt;
You can read in detail &lt;a href="https://www.cloudflare.com/learning/access-management/what-is-ssh/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Little example&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;// server&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nonce&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generateRandomNonce&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nf"&gt;storeNonce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;nonce&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// client&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;signature&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;signMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nonce&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// server&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isValid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;verifySignature&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;nonce&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;signature&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isValid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;authenticateUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&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;No password comparison, secrets stored, simply cryptographic verification.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why This Is Decentralization in Practice
&lt;/h3&gt;

&lt;p&gt;This is where decentralization stops being philosophical.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users own their identity&lt;/li&gt;
&lt;li&gt;Platforms cannot silently revoke access&lt;/li&gt;
&lt;li&gt;One identity works across many applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The backend no longer controls authentication. It only verifies math.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Wallets Do Not Solve
&lt;/h3&gt;

&lt;p&gt;As great as this is, it doesn't solve all problems. &lt;/p&gt;

&lt;p&gt;Wallets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Solve authentication&lt;/li&gt;
&lt;li&gt;Do not solve authorization&lt;/li&gt;
&lt;li&gt;Do not manage user profiles&lt;/li&gt;
&lt;li&gt;Do not prevent key loss&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You still need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Role management&lt;/li&gt;
&lt;li&gt;Permissions&lt;/li&gt;
&lt;li&gt;Application-level user data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wallets replace login systems, not the application logic.&lt;/p&gt;

&lt;p&gt;If you remember one thing, remember this:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Wallets are &lt;strong&gt;SSH keys&lt;/strong&gt; for users instead of servers.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Once you view them that way, wallet-based auth stops being exotic&lt;br&gt;
and starts looking like an obvious evolution of identity systems.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>web3</category>
      <category>authjs</category>
    </item>
    <item>
      <title>Whisper Board: Building a Private, Decentralized Messaging Experience with Waku</title>
      <dc:creator>Abdul-Qawi Laniyan</dc:creator>
      <pubDate>Mon, 03 Nov 2025 23:11:00 +0000</pubDate>
      <link>https://dev.to/laniyanabdulqawi/whisper-board-building-a-private-decentralized-messaging-experience-with-waku-2o79</link>
      <guid>https://dev.to/laniyanabdulqawi/whisper-board-building-a-private-decentralized-messaging-experience-with-waku-2o79</guid>
      <description>&lt;p&gt;Decentralized messaging is the future of censorship-resistant, privacy-first communication.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Whisper Board&lt;/strong&gt; is a lightweight, anonymous chat app powered by &lt;a href="https://waku.org/" rel="noopener noreferrer"&gt;Waku protocol&lt;/a&gt;, designed to showcase how easy it is to integrate Waku into a modern web stack.&lt;/p&gt;

&lt;p&gt;Here is the &lt;a href="https://github.com/Oladotunlaniyan/whisper-waku-chat" rel="noopener noreferrer"&gt;repo&lt;/a&gt; and live &lt;a href="https://whisper-waku-chat.vercel.app/" rel="noopener noreferrer"&gt;app&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Why Decentralized Messaging?
&lt;/h4&gt;

&lt;p&gt;Most recently, we've seen how fragile centralized systems can be. A single AWS outage in the US-East region, knocked out major apps, even Signal, a privacy-first messenger, across Central and Eastern Europe. Billions of messages delayed, communities cut off, and trust shaken.&lt;br&gt;
Here is a full &lt;a href="https://aws.amazon.com/message/101925/" rel="noopener noreferrer"&gt;report&lt;/a&gt; on what happened.&lt;/p&gt;

&lt;p&gt;When all communication routes depend on a few corporate data centers, resilience becomes an illusion.&lt;/p&gt;

&lt;p&gt;Decentralized messaging changes that: it doesn’t rely on one server, company, or geography. Messages flow peer-to-peer, so even if one node fails, the network stays alive. It’s more than just privacy, it’s about robustness, autonomy, and continuity.&lt;/p&gt;

&lt;p&gt;In this article, you'll learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The architecture behind a simple Whisper Board built with waku&lt;/li&gt;
&lt;li&gt;How to connect to and use Waku in your own app&lt;/li&gt;
&lt;li&gt;How messages flow through the network&lt;/li&gt;
&lt;li&gt;How to onboard and contribute as a new developer&lt;/li&gt;
&lt;li&gt;Visual diagrams to aid understanding&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Architecture Overview
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Diagram: System Components
&lt;/h3&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%2Fw36ihlilw8ard9g8gwxp.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%2Fw36ihlilw8ard9g8gwxp.png" alt="whisper board flow" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;File structure :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src
├── components
│   ├── MessageCard.tsx
│   └── MessageForm.tsx
├── hooks
├── lib
├── pages
│   ├── Index.tsx
│   └── NotFound.tsx
├── services
│   ├── MessageService.ts
│   └── WakuService.ts
├── types
├── App.css
├── App.tsx
├── index.css
├── main.tsx
├── vite-env.d.ts
.gitignore
bun.lockb
components.json
eslint.config.js
index.html
package-lock.json
package.json
postcss.config.js
README.md
tailwind.config.ts
tsconfig.app.json
tsconfig.json
tsconfig.node.json
vite.config.ts
&amp;lt;/pre&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: Built in React, styled with Tailwind and shadcn-ui.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hooks&lt;/strong&gt;: &lt;code&gt;useWaku&lt;/code&gt; handles node connection, &lt;code&gt;useMessages&lt;/code&gt; manages sending/receiving.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Services&lt;/strong&gt;: &lt;code&gt;WakuService&lt;/code&gt; manages the Waku node, &lt;code&gt;MessageService&lt;/code&gt; handles message flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Waku Node&lt;/strong&gt;: Lightweight node connects to the decentralized network.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Technologies Used
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; Vite
&lt;span class="p"&gt;-&lt;/span&gt; TypeScript
&lt;span class="p"&gt;-&lt;/span&gt; React
&lt;span class="p"&gt;-&lt;/span&gt; shadcn-ui
&lt;span class="p"&gt;-&lt;/span&gt; Tailwind CSS
&lt;span class="p"&gt;-&lt;/span&gt; Waku JS SDK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How the App Works
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Connecting to Waku
&lt;/h3&gt;

&lt;p&gt;The custom hook &lt;a href="https://github.com/Oladotunlaniyan/whisper-waku-chat/blob/main/src/hooks/useWaku.ts" rel="noopener noreferrer"&gt;&lt;code&gt;useWaku.ts&lt;/code&gt;&lt;/a&gt; initializes and manages the Waku node:&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="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;isConnecting&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isConnected&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useWaku&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;On mount, calls &lt;code&gt;wakuService.initialize()&lt;/code&gt; to connect to Waku peers.&lt;/li&gt;
&lt;li&gt;Cleans up on unmount via &lt;code&gt;wakuService.stop()&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Code Reference
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//src/hooks/useWaku.ts &lt;/span&gt;
&lt;span class="cm"&gt;/* https://github.com/Oladotunlaniyan/whisper-waku-chat/blob/main/src/hooks/useWaku.ts*/&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;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEffect&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;react&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;wakuService&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;../services/WakuService&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;useWaku&lt;/span&gt; &lt;span class="o"&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="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;isConnecting&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setIsConnecting&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;isConnected&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setIsConnected&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setError&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;initWaku&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;wakuService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isReady&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;setIsConnected&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="nf"&gt;setIsConnecting&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;setError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;wakuService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="nf"&gt;setIsConnected&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;setError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Failed to connect to Waku&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;setIsConnecting&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&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="nf"&gt;initWaku&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;return &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="nx"&gt;wakuService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stop&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;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;isConnecting&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isConnected&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&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;h3&gt;
  
  
  Messaging Flow
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Sequence Diagram: Sending and Receiving a Message
&lt;/h4&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%2Fcyfnd248tnrphk7bnisi.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%2Fcyfnd248tnrphk7bnisi.png" alt="Sequence diagram" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Core Flow
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;User submits a message via the UI (&lt;code&gt;MessageForm&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Hook &lt;code&gt;useMessages&lt;/code&gt; calls &lt;code&gt;messageService.publishMessage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;MessageService&lt;/code&gt; encodes and pushes the message to the Waku network.&lt;/li&gt;
&lt;li&gt;Node listens for incoming messages and updates UI in real time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Key Code References
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//name=src/services/MessageService.ts &lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MessageService&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nf"&gt;getEncoder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;wakuService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getNode&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createEncoder&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;contentTopic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;CONTENT_TOPIC&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;publishMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;wakuService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getNode&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;encoder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getEncoder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;timestamp&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encodeMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lightPush&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;encoder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;subscribeToMessages&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;onMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;WhisperMessage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;wakuService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getNode&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;decoder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getDecoder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;decoder&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;wakuMessage&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;wakuMessage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;decoded&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decodeMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;wakuMessage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;onMessage&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;decoded&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;-&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;decoded&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;decoded&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;timestamp&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="k"&gt;return &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="cm"&gt;/* unsubscribe logic */&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;h2&gt;
  
  
  Onboarding: Steps for Beginner Contributors
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Getting Started
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Clone the Repository&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Oladotunlaniyan/whisper-waku-chat.git
&lt;span class="nb"&gt;cd &lt;/span&gt;whisper-waku-chat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install Dependencies&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run the App&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Open &lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt; in your browser.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Edit Code Locally&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Most logic lives in &lt;code&gt;src/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Message logic: &lt;code&gt;src/services/MessageService.ts&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Waku node logic: &lt;code&gt;src/services/WakuService.ts&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;UI: &lt;code&gt;src/components/&lt;/code&gt;, &lt;code&gt;src/pages/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Contribution Guide
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Follow the onboarding steps above for local development.&lt;/li&gt;
&lt;li&gt;Make sure you have Node.js and npm installed (&lt;a href="https://github.com/nvm-sh/nvm#installing-and-updating" rel="noopener noreferrer"&gt;guide&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Follow the onboarding steps above for local development.&lt;/li&gt;
&lt;li&gt;Submit issues or pull requests for improvements, bug fixes, or new features.&lt;/li&gt;
&lt;li&gt;For UI tweaks, edit files in &lt;code&gt;src/components/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;For protocol logic, edit &lt;code&gt;src/services/WakuService.ts&lt;/code&gt; and &lt;code&gt;src/services/MessageService.ts&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  First-Time Contributor Tips
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Start by reading the &lt;a href="https://github.com/Oladotunlaniyan/whisper-waku-chat/blob/main/README.md" rel="noopener noreferrer"&gt;README&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Use the hooks and services as your entry points for understanding message flow.&lt;/li&gt;
&lt;li&gt;To add a feature, create a new component in &lt;code&gt;src/components/&lt;/code&gt; and integrate with hooks/services.&lt;/li&gt;
&lt;li&gt;For debugging, use console logs in services and hooks.&lt;/li&gt;
&lt;li&gt;Ask for help or suggestions via GitHub Issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Visuals
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;System Architecture Diagram&lt;/strong&gt; (see above)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sequence Diagram for Messaging&lt;/strong&gt; (see above)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI Screenshot&lt;/strong&gt;: (Add your own screenshot or generate one from running the app.)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Whisper Waku Chat is a simple but powerful demo of decentralized, anonymous messaging using Waku.&lt;br&gt;&lt;br&gt;
With a modern React frontend and the Waku JS SDK, it’s easy for new developers to get started and contribute.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next Steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fork the repo, run locally, and start hacking!&lt;/li&gt;
&lt;li&gt;Check out the &lt;a href="https://docs.waku.org/" rel="noopener noreferrer"&gt;Waku docs&lt;/a&gt; for protocol details.&lt;/li&gt;
&lt;li&gt;Join the Waku dev community for support and collaboration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.waku.org/" rel="noopener noreferrer"&gt;Waku Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.gg/7BfK9Yk" rel="noopener noreferrer"&gt;Waku Discord&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Oladotunlaniyan/whisper-waku-chat" rel="noopener noreferrer"&gt;Whisper Waku Chat on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a very simple implementation of the Waku protocol, in subsequent articles I will be increasing functionality and complexity of the whisper board. This includes using new methods, explaining more core concepts etc. &lt;/p&gt;

</description>
      <category>web3</category>
      <category>development</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>RealFi is the financial revolution we need</title>
      <dc:creator>Abdul-Qawi Laniyan</dc:creator>
      <pubDate>Tue, 14 Oct 2025 16:03:19 +0000</pubDate>
      <link>https://dev.to/laniyanabdulqawi/realfi-is-the-financial-revolution-we-need-4ad6</link>
      <guid>https://dev.to/laniyanabdulqawi/realfi-is-the-financial-revolution-we-need-4ad6</guid>
      <description>&lt;p&gt;Communities are living ecosystems, and at the core of every thriving ecosystem is finance. From the small market women pooling savings to fund each other’s businesses, to migrants sending money home to sustain families, finance is the invisible current that keeps societies alive. But for too long, that current has been controlled by centralized institutions, slow, costly, and often out of reach for the people who need it most.&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%2F2mmk5zill2wvzr91qrmv.jpg" 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%2F2mmk5zill2wvzr91qrmv.jpg" alt="community finance" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a small Nigerian town, Fatima, a trader, once waited two days for her remittance to arrive from her son abroad, losing part of it to transfer fees. In Kenya, a women’s cooperative tracked daily savings with handwritten ledgers, hoping no error would erase months of effort. For millions like them, finance has long felt like a wall instead of a bridge. RealFi is tearing down that wall - one community at a time.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does RealFi Really Mean
&lt;/h3&gt;

&lt;p&gt;RealFi stands for real-world finance, financial tools built on emerging technology like Web3, designed to work in real life. It’s about giving people access to fair, transparent, and community-owned systems that help them save, send, and grow money.&lt;/p&gt;

&lt;p&gt;Unlike speculative crypto projects, RealFi focuses on utility, not hype, simply empowering people, not platforms. It brings finance back to the people, ensuring that every transaction builds trust, ownership, and opportunity.&lt;/p&gt;

&lt;h3&gt;
  
  
  RealFi is already changing our communities
&lt;/h3&gt;

&lt;p&gt;Across the world, RealFi tools are already rewriting the financial story.&lt;/p&gt;

&lt;p&gt;In Kenya, women’s savings groups are using blockchain-powered apps like Kotani Pay to pool funds and distribute microloans transparently, reducing mistrust and record-keeping errors.&lt;br&gt;
In the Philippines, migrant workers are sending remittances home in seconds through stablecoin wallets, bypassing the high fees that used to cut into their families’ income.&lt;br&gt;
In Brazil, small business owners are accessing community-backed microloans using decentralized finance protocols like Goldfinch, which connects global lenders to local entrepreneurs without requiring a traditional bank.&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%2F7qrmhg3usg59qkna2bz0.jpg" 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%2F7qrmhg3usg59qkna2bz0.jpg" alt="Market" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each of these communities is proof that finance doesn’t have to be controlled from the top down, it can grow from the ground up, rooted in cooperation and transparency.&lt;/p&gt;

&lt;p&gt;Money has always been a shared story, a belief that something has value because people trust it does. Over time, that story was captured by systems serving institutions more than individuals. Fees, friction, and exclusion became the price of “trust.”&lt;/p&gt;

&lt;p&gt;RealFi rewrites that story. With Web3 and decentralization, people are no longer just users of financial systems, they become stakeholders.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smart contracts replace middlemen.&lt;/li&gt;
&lt;li&gt;Tokens replace gatekeepers.&lt;/li&gt;
&lt;li&gt;Communities become the new institutions of finance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is ownership. People can finally control their savings, credit, and future without waiting for permission.&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%2Fkoqhf8d0l5dmxpi6c3vy.jpg" 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%2Fkoqhf8d0l5dmxpi6c3vy.jpg" alt="community powered finance" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Heart of RealFi
&lt;/h3&gt;

&lt;p&gt;RealFi is awesome, but it isn’t about replacing the old system overnight; it’s about reimagining it. It’s finance that works for real people in real places, from the mother receiving a fair remittance to the student raising funds for school through a global cooperative.&lt;/p&gt;

&lt;p&gt;As Web3 continues to evolve, RealFi’s success won’t be measured in token prices or hype, but in lives changed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A farmer accessing fair credit.&lt;/li&gt;
&lt;li&gt;A trader saving securely.&lt;/li&gt;
&lt;li&gt;A family finally in control of their future.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s the promise of RealFi, finance that belongs to the people, built by the people, for the people.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why It Matters
&lt;/h3&gt;

&lt;p&gt;Projects supported by &lt;a href="https://www.fundingthecommons.io/" rel="noopener noreferrer"&gt;Funding the Commons&lt;/a&gt; are showing how technology and community collaboration can make finance fair again. By focusing on access, sovereignty, and collective strength, RealFi ensures that progress isn’t just digital — it’s deeply human.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>programming</category>
      <category>fundingthecommons</category>
    </item>
    <item>
      <title>Why Whisper Failed and How Waku is Building the Future of Web3 Communication</title>
      <dc:creator>Abdul-Qawi Laniyan</dc:creator>
      <pubDate>Mon, 15 Sep 2025 08:03:23 +0000</pubDate>
      <link>https://dev.to/laniyanabdulqawi/why-whisper-failed-and-how-waku-is-building-the-future-of-web3-communication-52g0</link>
      <guid>https://dev.to/laniyanabdulqawi/why-whisper-failed-and-how-waku-is-building-the-future-of-web3-communication-52g0</guid>
      <description>&lt;p&gt;Blockchain technology is powerful, but it doesn’t inherently guarantee privacy. It offers pseudonymous transactions {the use of a fictitious or false name (a pseudonym) instead of a real, legal name to engage in online activities. &lt;/p&gt;

&lt;p&gt;When Ethereum was first conceived, its creators envisioned more than just a decentralized financial system. They imagined a complete ecosystem where computation, storage, and communication could take place without central control the &lt;strong&gt;&lt;em&gt;"holy trinity"&lt;/em&gt;&lt;/strong&gt; of censorship resistance. To achieve this, three core technologies were introduced:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ethereum for decentralized computation&lt;/li&gt;
&lt;li&gt;Swarm for decentralized storage&lt;/li&gt;
&lt;li&gt;Whisper for peer-to-peer communication&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%2Fvfqc17l13opwi08sdktg.webp" 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%2Fvfqc17l13opwi08sdktg.webp" alt="https://blog.shutter.network/the-holy-trinity-of-censorship-resistance-in-ethereum/" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;Whisper: The First Attempt at Decentralized Messaging&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;Whisper was designed to enable private, censorship-resistant messaging between users and decentralized applications (dApps). At its core, it allowed encrypted messages to be sent across a distributed network, ensuring anonymity and resistance to surveillance.&lt;/p&gt;

&lt;p&gt;However, its design quickly showed limitations. Every node in the network had to process every single message, regardless of relevance. While this approach was simple, it became:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resource-heavy – excessive bandwidth and storage usage&lt;/li&gt;
&lt;li&gt;Mobile-unfriendly – drained battery and consumed resources&lt;/li&gt;
&lt;li&gt;Spam-prone – no effective protection against malicious traffic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As adoption grew, these flaws became unbearable. Whisper was ambitious, but its lack of scalability prevented it from being viable in real-world applications.&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%2Fdp9gamq0ux2s9mw01kms.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%2Fdp9gamq0ux2s9mw01kms.png" alt="calleum labs" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://mycryptopedia.com/ethereum-whisper-a-detailed-guide/" rel="noopener noreferrer"&gt;Read more about Whisper here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;The Birth of Waku&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Recognizing Whisper’s shortcomings, Vac — the research arm of &lt;a href="https://status.app/" rel="noopener noreferrer"&gt;Status&lt;/a&gt;, introduced Waku in 2018 as its successor. Waku started as a fork of Whisper, preserving its core ideas but re-engineering the design for practicality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Waku v1: A Bridge Protocol&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Released in 2020, Waku v1 kept much of Whisper’s architecture but stripped away unnecessary complexity. This made it easier for developers experimenting with Whisper to migrate their applications without starting over. However, it was only a stepping stone. The architectural flaws of Whisper were too deep, and the ecosystem needed a more radical redesign.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Waku v2: A Complete Rewrite&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The real breakthrough came with Waku v2, a full redesign of the protocol. Instead of broadcasting every message to every node, Waku v2 adopted &lt;a href="https://docs.rs/libp2p-gossipsub/latest/libp2p_gossipsub/" rel="noopener noreferrer"&gt;libp2p GossipSub&lt;/a&gt; for message dissemination.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important clarification&lt;/strong&gt;: In GossipSub, all nodes still relay messages, but the protocol optimizes dissemination to avoid duplication and reduce overhead. Waku achieves true scalability by combining GossipSub with &lt;strong&gt;sharding&lt;/strong&gt;, which splits the network into smaller subsets. While many nodes may subscribe to all shards, sharding helps reduce bandwidth requirements across the network.&lt;/p&gt;

&lt;p&gt;Waku v2 also introduced &lt;strong&gt;modularity&lt;/strong&gt;. Instead of being a single monolithic protocol, Waku became a family of protocols tailored for different communication needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Relay – efficient message broadcasting via GossipSub&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Store – offline messaging with store-and-forward&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Filter – lets light clients only receive relevant messages&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;RLN (Rate Limiting Nullifiers) – spam resistance while preserving privacy&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lightpush – allows light clients to push messages without running a full relay node&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SDS (Scalable Data Sync) – enables efficient synchronization of structured data&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This modular design gives developers flexibility. Whether building a real-time chat app, notification system, or DAO coordination tool, Waku v2 provides the right building blocks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;The Waku Network&lt;/u&gt;&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%2Fzfzf18hpkzks0rg0igl3.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%2Fzfzf18hpkzks0rg0igl3.png" alt="Waku architecture" width="800" height="629"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Waku v2 powers the Waku Network, a communication service network that integrates multiple Waku protocols into production-ready infrastructure.&lt;/p&gt;

&lt;p&gt;The Waku Network leverages RLN protection to ensure spam resistance while maintaining privacy. By running Waku nodes, developers and users contribute to a censorship-resistant, privacy-preserving communication layer for Web3.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Why Waku Matters&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Whisper was the first bold attempt at decentralized communication, but scalability limited its impact. Waku builds on that vision, evolving it into a practical, modular, and production-ready protocol family. With the Waku Network live, developers now have a strong foundation to embed secure, censorship-resistant messaging into their dApps.&lt;/p&gt;

&lt;p&gt;Get Started With Waku&lt;/p&gt;

&lt;p&gt;If you’re building in Web3, now is the time to explore Waku: &lt;/p&gt;

&lt;p&gt;👉 Check out the &lt;a href="https://rfc.vac.dev/vac/" rel="noopener noreferrer"&gt;Vac RFCs&lt;/a&gt; to dive deeper into protocol specifications. &lt;/p&gt;

&lt;p&gt;👉 Explore the Waku Network and learn how you can run a &lt;a href="https://docs.waku.org/guides/nwaku/run-node" rel="noopener noreferrer"&gt;node&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;👉 Install the Waku SDKs – &lt;a href="https://github.com/waku-org/js-waku" rel="noopener noreferrer"&gt;js-waku&lt;/a&gt; for JavaScript/TypeScript, or nim-waku for Nim-based implementations. &lt;/p&gt;

&lt;p&gt;👉 Experiment with &lt;a href="https://blog.waku.org/build-dapps-using-waku-and-vue-js/" rel="noopener noreferrer"&gt;integrating Waku into your dApps&lt;/a&gt; for messaging, notifications, or coordination. &lt;/p&gt;

&lt;p&gt;👉 Explore example apps – check out &lt;a href="https://github.com/waku-org/examples.waku.org" rel="noopener noreferrer"&gt;waku-examples&lt;/a&gt; for hands-on demos like chat apps and pub/sub messaging. &lt;/p&gt;

&lt;p&gt;👉 Join the &lt;a href="https://discord.waku.org/" rel="noopener noreferrer"&gt;developer community&lt;/a&gt; – follow discussions, ask questions, and stay updated on new RFCs via Vac’s RFC hub&lt;/p&gt;

&lt;p&gt;Decentralization is not just about money – it’s about communication, too. Waku is making that vision real, you can go through the official docs &lt;a href="https://waku.org/about/roadmap" rel="noopener noreferrer"&gt;here&lt;/a&gt; for more research/technical depth.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>tutorial</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How Codex Storage Could Redefine Healthcare Data Security and Privacy</title>
      <dc:creator>Abdul-Qawi Laniyan</dc:creator>
      <pubDate>Tue, 26 Aug 2025 15:37:45 +0000</pubDate>
      <link>https://dev.to/laniyanabdulqawi/how-codex-storage-could-redefine-healthcare-data-security-and-privacy-5g8d</link>
      <guid>https://dev.to/laniyanabdulqawi/how-codex-storage-could-redefine-healthcare-data-security-and-privacy-5g8d</guid>
      <description>&lt;p&gt;Healthcare systems around the world struggle with a core challenge: &lt;em&gt;How to store sensitive patient data securely&lt;/em&gt; while still making it easily accessible when needed.&lt;/p&gt;

&lt;p&gt;Medical records are sensitive, containing personal health information (PHI) that demands stringent security and privacy measures. Traditional centralized systems often face challenges like data breaches, interoperability issues, and limited patient control. Patients frequently struggle to access their own records or share them seamlessly with healthcare providers across institutions. What if there was a way to flip this model, so that patients control who sees their data while healthcare providers only access it with explicit permission?&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem with Today’s Medical Records
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Data fragmentation – Records are scattered across clinics, labs, and hospitals.&lt;/li&gt;
&lt;li&gt;Weak security – Centralized databases are lucrative targets for cyberattacks.&lt;/li&gt;
&lt;li&gt;Lack of control – Patients rarely know who has accessed their data.&lt;/li&gt;
&lt;li&gt;Interoperability gaps – Sharing across different institutions is messy and slow.
These issues don’t just frustrate patients and hospitals/clinics, they create real risks in emergencies where fast and accurate access to medical records is critical.&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%2Fto3vj7jcfvxghnm9kyia.jpeg" 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%2Fto3vj7jcfvxghnm9kyia.jpeg" alt="Hospital traditional records" width="278" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is where Codex storage comes in.&lt;/p&gt;

&lt;p&gt;This article explores an innovative use case—leveraging Codex storage to securely manage medical records with patient-controlled access. It’s written to be clear and valuable for both technical and non-technical readers. &lt;/p&gt;

&lt;h3&gt;
  
  
  What is Codex Storage ?
&lt;/h3&gt;

&lt;p&gt;Traditional systems are prone to a lot of privacy and security issues as stated above. Codex is a new way to store files securely using a network of computers around the world, not just one company’s servers. It’s like splitting a photo album into puzzle pieces, spreading them across many people’s computers, and the system is designed with ease of use and access, making sure you can always get it back, no matter what happens.&lt;/p&gt;

&lt;h4&gt;
  
  
  Codex is built to be:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Safe: Your data won’t disappear, even if some computers break or get attacked.&lt;/li&gt;
&lt;li&gt;Private: No one can peek at your files or censor them.&lt;/li&gt;
&lt;li&gt;Open: Anyone with a computer can help store data and join the network.&lt;/li&gt;
&lt;li&gt;Cheap: It uses smart tricks to store data without needing tons of space.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  How does this amazing technology work ?
&lt;/h4&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%2Fcwoxuzntuveq80z0anuc.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%2Fcwoxuzntuveq80z0anuc.png" alt="codex procedure step-by-step" width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's break that down step-by-step : &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Breaking Files into Pieces (Erasure Coding): When you upload a file, Codex splits it into chunks, creates backup pieces using math, and distributes them across many computers worldwide. You only need a subset of those pieces to rebuild your file, making storage both reliable and cost-efficient.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Verifying Storage (Proof of Retrievability): Codex regularly checks that storage providers still hold your data by sending cryptographic “proofs” instead of the actual file. These proofs are logged on a blockchain, ensuring integrity without exposing your data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Repairing Data (Lazy Repair): If some pieces go missing, Codex can recreate them from the remaining ones and redistribute them. This on-demand repair keeps data safe for years without wasting resources.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Incentives and Payments (CDX Token): Storage providers earn tokens (CDX) for keeping files safe. Payments are enforced by smart contracts, with penalties if providers lose data. This marketplace model keeps storage competitive, secure, and decentralized.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Peer-to-Peer Network : Codex runs on a global P2P network. Files are uploaded, stored, and retrieved directly between participants, without central control. This makes the system resistant to outages, censorship, and data silos.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In short, Codex splits, secures, verifies, repairs, and incentivizes storage, creating a system where data is always safe, private, and under your control. If you would like to go into more technical details, you can read more in the &lt;a href="https://docs.codex.storage/learn/whitepaper" rel="noopener noreferrer"&gt;whitepaper&lt;/a&gt; and &lt;a href="https://docs.codex.storage/" rel="noopener noreferrer"&gt;official docs&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  So how can this be applied to healthcare data ?
&lt;/h3&gt;

&lt;p&gt;Here's how such a system would work in practice&lt;br&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%2F1nao3t5ao1n75p51w3op.jpg" 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%2F1nao3t5ao1n75p51w3op.jpg" alt="Health care traditional folders" width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Patient-Controlled Access&lt;br&gt;
Patients hold private keys to their records, granting or revoking access as needed. Smart contracts enforce time-bound or purpose-specific permissions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;End-to-End Encryption&lt;br&gt;
Records are encrypted before storage, so only authorized parties can decrypt them. Even Codex node operators can’t view the data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Interoperability &amp;amp; Accessibility&lt;br&gt;
Decentralized storage enables global access and easy sharing across hospitals, clinics, or borders. Patients use a secure app to manage their records.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Immutable Audit Trail&lt;br&gt;
All access is logged on the blockchain, creating a tamper-proof history that ensures transparency and regulatory compliance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cost-Effective &amp;amp; Scalable&lt;br&gt;
Codex’s peer-to-peer model cuts centralized server costs while scaling to handle everything from simple records to large medical images&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Benefits of This Approach:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Patient empowerment – Users truly own their medical history.&lt;/li&gt;
&lt;li&gt;Improved security – Eliminates central databases as attack targets.&lt;/li&gt;
&lt;li&gt;Better care – Fast, secure sharing means accurate diagnoses and fewer errors.&lt;/li&gt;
&lt;li&gt;Compliance friendly – A patient-controlled model aligns with regulations like HIPAA and GDPR.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Imagine Alice(a patient), diagnosed with a chronic condition requiring care from multiple specialists. With Codex, Alice uploads her medical history—lab results, imaging, and prescriptions—to the platform, encrypted with her private key. She grants temporary access to her cardiologist for a consultation and later shares specific records with a research study, all without compromising her privacy. If Alice travels abroad, her records remain accessible to verified providers, ensuring continuity of care.&lt;/p&gt;

&lt;p&gt;Hospitals benefit too. By leveraging Codex, they reduce infrastructure costs, mitigate data breach risks, and comply with regulations through immutable logs. Researchers can access anonymized datasets with patient consent, accelerating medical breakthroughs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges and Considerations
&lt;/h3&gt;

&lt;p&gt;While promising, this use case requires addressing challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User Education: Patients must understand key management to avoid losing access to their records.&lt;/li&gt;
&lt;li&gt;Regulatory Compliance: Integration with existing healthcare regulations requires careful design.&lt;/li&gt;
&lt;li&gt;Adoption: Healthcare providers must adopt Codex-compatible systems, necessitating industry collaboration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Codex's decentralized storage opens the door to a future where patients are empowered to control their medical data, healthcare providers operate more efficiently, and trust in data security is paramount. By combining encryption, decentralization, and patient-centric design, Codex can redefine medical record management, making healthcare more secure, accessible, and equitable.&lt;/p&gt;

&lt;h4&gt;
  
  
  Where Is Codex Now? (As of August 2025)
&lt;/h4&gt;

&lt;p&gt;Codex is still in testing, like a beta version of a game. Here’s the status:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Testnet: You can try it now, but it’s in “alpha” (early stage), so data might get erased during tests. They launched a version in 2024 where anyone can join, and a paid version (with CDX rewards) started in mid-2025.&lt;/li&gt;
&lt;li&gt;Mainnet: The real, fully working version is planned for late 2025. It’ll have the core features (uploading, storing, fixing) first, with extras like encryption coming later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next Steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start Here: Visit &lt;a href="https://codex.storage" rel="noopener noreferrer"&gt;https://codex.storage&lt;/a&gt; and click “Join the Testnet.” Follow the guide to run a node or upload a file.&lt;/li&gt;
&lt;li&gt;Ask Questions: Pop into the Codex Discord and say, “I’m new, how do I get started?” The community is friendly and will help&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;click here to subscribe to the Codex official &lt;a href="https://codex.storage/?ref=blog.codex.storage" rel="noopener noreferrer"&gt;newsletter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Curiosity Note 😽: You can look at this &lt;a href="https://share.hackyguru.com/" rel="noopener noreferrer"&gt;project&lt;/a&gt; built by Guru using codex and also this &lt;a href="https://blog.codex.storage/exploring-codex/" rel="noopener noreferrer"&gt;article&lt;/a&gt; by Guru as well that explores other use cases.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>development</category>
      <category>dataprivacy</category>
    </item>
  </channel>
</rss>
