<?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>Forem: Jit Chakraborty</title>
    <description>The latest articles on Forem by Jit Chakraborty (@jit_chakraborty_4222410eb).</description>
    <link>https://forem.com/jit_chakraborty_4222410eb</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%2F3817182%2F545e9a39-cc7b-4b24-8061-d94bfcec3cf0.jpg</url>
      <title>Forem: Jit Chakraborty</title>
      <link>https://forem.com/jit_chakraborty_4222410eb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jit_chakraborty_4222410eb"/>
    <language>en</language>
    <item>
      <title>I wasted 20 days debugging Capacitor SQLite — turns out it was basically dead</title>
      <dc:creator>Jit Chakraborty</dc:creator>
      <pubDate>Sun, 05 Apr 2026 18:27:56 +0000</pubDate>
      <link>https://forem.com/jit_chakraborty_4222410eb/i-wasted-20-days-debugging-capacitor-sqlite-turns-out-it-was-basically-dead-31ej</link>
      <guid>https://forem.com/jit_chakraborty_4222410eb/i-wasted-20-days-debugging-capacitor-sqlite-turns-out-it-was-basically-dead-31ej</guid>
      <description>&lt;p&gt;This one was painful.&lt;/p&gt;

&lt;p&gt;I was integrating SQLite into my app (EchoId), and like most people in the Ionic/Capacitor ecosystem, I went with Capacitor SQLite. Seemed like the obvious choice.&lt;/p&gt;

&lt;p&gt;Big mistake.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Nothing worked properly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;random failures&lt;/li&gt;
&lt;li&gt;inconsistent behavior across devices&lt;/li&gt;
&lt;li&gt;methods not behaving as expected&lt;/li&gt;
&lt;li&gt;docs that didn’t match reality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At first, I assumed it was my fault. Misconfiguration, bad setup, something subtle.&lt;/p&gt;

&lt;p&gt;So I did what every dev does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reinstalled everything&lt;/li&gt;
&lt;li&gt;rewrote integration multiple times&lt;/li&gt;
&lt;li&gt;tried different versions&lt;/li&gt;
&lt;li&gt;followed every tutorial I could find&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Still broken.&lt;/p&gt;

&lt;h2&gt;
  
  
  The worst part
&lt;/h2&gt;

&lt;p&gt;There was no clear information anywhere.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Documentation was outdated&lt;/li&gt;
&lt;li&gt;GitHub issues were vague or unanswered&lt;/li&gt;
&lt;li&gt;StackOverflow had half-answers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even AI tools (yes, including ChatGPT) kept suggesting:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“maybe try this”&lt;br&gt;
“maybe it’s that”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nothing concrete. Just guesses.&lt;/p&gt;

&lt;h2&gt;
  
  
  What was actually going on
&lt;/h2&gt;

&lt;p&gt;After ~20 days of digging, I found the real issue:&lt;/p&gt;

&lt;p&gt;👉 The plugin was effectively deprecated / not properly maintained at that time&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%2Fx396112x8wxtatvuw7qw.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%2Fx396112x8wxtatvuw7qw.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not clearly stated.&lt;br&gt;
Not documented properly.&lt;br&gt;
Just silently… unreliable.&lt;/p&gt;

&lt;p&gt;That’s why nothing made sense.&lt;/p&gt;

&lt;h2&gt;
  
  
  The decision
&lt;/h2&gt;

&lt;p&gt;At that point, I stopped trying to “fix” it.&lt;/p&gt;

&lt;p&gt;Switched to:&lt;/p&gt;

&lt;p&gt;👉 Cordova SQLite&lt;/p&gt;

&lt;p&gt;Also, credit where it’s due — big respect to the original author (@jepiqueau) for the work and contributions.&lt;/p&gt;

&lt;p&gt;Yeah, older.&lt;br&gt;
Yeah, less “modern”.&lt;/p&gt;

&lt;p&gt;But guess what?&lt;/p&gt;

&lt;p&gt;It just works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Stable database operations&lt;/li&gt;
&lt;li&gt;Predictable behavior&lt;/li&gt;
&lt;li&gt;No random failures&lt;/li&gt;
&lt;li&gt;No wasting days debugging ghosts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;EchoId still uses it today — and it runs perfectly.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Don’t assume the popular option is stable&lt;/li&gt;
&lt;li&gt;If something feels fundamentally broken, it probably is&lt;/li&gt;
&lt;li&gt;Docs + ecosystem health matter more than “modern stack”&lt;/li&gt;
&lt;li&gt;Know when to stop debugging and switch tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The plugin has since been moved to the Capgo organization, and from what I’ve seen it might be in a much better state now.&lt;/p&gt;

&lt;p&gt;But back then? It was a black hole.&lt;/p&gt;

&lt;p&gt;If you’re stuck in a loop where nothing makes sense — step back and question the tool itself.&lt;/p&gt;

&lt;p&gt;Sometimes the bug isn’t in your code.&lt;/p&gt;

&lt;p&gt;If you're building real-time or offline-first apps and have dealt with similar issues, I’d like to hear what you ended up using.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>fullstack</category>
      <category>ionic</category>
      <category>programming</category>
    </item>
    <item>
      <title>WebSockets Can Stall Without Disconnecting — And It’s Worse on Android</title>
      <dc:creator>Jit Chakraborty</dc:creator>
      <pubDate>Sat, 21 Mar 2026 16:45:01 +0000</pubDate>
      <link>https://forem.com/jit_chakraborty_4222410eb/websockets-can-stall-without-disconnecting-and-its-worse-on-android-3n6e</link>
      <guid>https://forem.com/jit_chakraborty_4222410eb/websockets-can-stall-without-disconnecting-and-its-worse-on-android-3n6e</guid>
      <description>&lt;p&gt;While building a real-time messaging system, I ran into something frustrating:&lt;/p&gt;

&lt;p&gt;The WebSocket shows “connected”… but nothing works.&lt;br&gt;
No errors.&lt;br&gt;
No disconnect event.&lt;br&gt;
No messages going through.&lt;br&gt;
Just a connection that looks alive — but is effectively dead.&lt;/p&gt;

&lt;p&gt;The Problem&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%2F0a34qmg18g8ly7arex7z.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%2F0a34qmg18g8ly7arex7z.png" alt=" " width="800" height="410"&gt;&lt;/a&gt;&lt;br&gt;
On Android (especially Chrome and background scenarios), WebSockets can silently stall when:&lt;/p&gt;

&lt;p&gt;Network switches (WiFi → Mobile)&lt;br&gt;
App goes into background&lt;br&gt;
Device enters power-saving mode&lt;/p&gt;

&lt;p&gt;The connection stays OPEN, but:&lt;/p&gt;

&lt;p&gt;messages don’t send&lt;br&gt;
no events are received&lt;br&gt;
no onclose or onerror fires&lt;/p&gt;

&lt;p&gt;From the UI → everything looks fine&lt;br&gt;
From reality → it’s broken&lt;/p&gt;

&lt;p&gt;What “Connected” Actually Means&lt;/p&gt;

&lt;p&gt;WebSockets only tell you:&lt;/p&gt;

&lt;p&gt;“The connection is open”&lt;br&gt;
They don’t guarantee:&lt;br&gt;
“The connection is still usable”&lt;/p&gt;

&lt;p&gt;Here’s a typical example — the socket is technically connected:&lt;/p&gt;

&lt;p&gt;But this state alone doesn’t tell you if data is actually flowing.&lt;/p&gt;

&lt;p&gt;What Doesn’t Fix It&lt;/p&gt;

&lt;p&gt;A common approach is:&lt;/p&gt;

&lt;p&gt;“If the same user reconnects, replace the old socket”&lt;br&gt;
That helps with duplicate connections, but not this issue.&lt;br&gt;
Because here:&lt;/p&gt;

&lt;p&gt;the user never reconnects&lt;br&gt;
the connection just stalls silently&lt;br&gt;
What Actually Works&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Heartbeat (Ping/Pong)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of trusting the connection, verify it.&lt;/p&gt;

&lt;p&gt;setInterval(() =&amp;gt; {&lt;br&gt;
  socket.send(JSON.stringify({ type: "ping" }))&lt;br&gt;
}, 5000)&lt;/p&gt;

&lt;p&gt;The server responds with a pong.&lt;br&gt;
If that stops → the connection is dead.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Track Activity&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Keep track of the last message received:&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%2Fynmoy86wzdckazhx5g3x.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%2Fynmoy86wzdckazhx5g3x.png" alt=" " width="800" height="454"&gt;&lt;/a&gt;&lt;br&gt;
if (Date.now() - lastMessageTime &amp;gt; TIMEOUT) {&lt;br&gt;
  socket.close()&lt;br&gt;
  reconnect()&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;If no activity → force reconnect.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Don’t Wait for onclose
If you rely on:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;onclose&lt;br&gt;
onerror&lt;br&gt;
You’ll miss silent failures.&lt;br&gt;
Why This Matters&lt;/p&gt;

&lt;p&gt;The worst part about this issue:&lt;/p&gt;

&lt;p&gt;It doesn’t break loudly — it fails silently.&lt;br&gt;
Which means:&lt;/p&gt;

&lt;p&gt;users think they’re connected&lt;br&gt;
messages don’t arrive&lt;br&gt;
debugging becomes painful&lt;/p&gt;

&lt;p&gt;Curious if others have hit this — especially on Android — and how you handled it.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>sideprojects</category>
      <category>security</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Using AI on a 15,000+ Line Codebase Is Broken (Unless You Do This)</title>
      <dc:creator>Jit Chakraborty</dc:creator>
      <pubDate>Fri, 20 Mar 2026 09:42:29 +0000</pubDate>
      <link>https://forem.com/jit_chakraborty_4222410eb/using-ai-on-a-15000-line-codebase-is-broken-unless-you-do-this-4g83</link>
      <guid>https://forem.com/jit_chakraborty_4222410eb/using-ai-on-a-15000-line-codebase-is-broken-unless-you-do-this-4g83</guid>
      <description>&lt;p&gt;I tried using AI on a 15k+ line codebase. It failed badly. Wrong changes, broken logic, random imports — classic. Then I changed how I used it, and it started saving me weeks of work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI doesn’t understand large codebases. You can’t just paste a repo and say:&lt;/p&gt;

&lt;p&gt;“refactor this”&lt;br&gt;
It will:&lt;/p&gt;

&lt;p&gt;miss dependencies&lt;/p&gt;

&lt;p&gt;break existing flows&lt;/p&gt;

&lt;p&gt;hallucinate logic&lt;/p&gt;

&lt;p&gt;touch things you didn’t ask for&lt;br&gt;
I learned this the hard way.&lt;/p&gt;

&lt;p&gt;The Setup&lt;/p&gt;

&lt;p&gt;This is not a small project.&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%2Fl6l49148ih35leiwv0xy.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%2Fl6l49148ih35leiwv0xy.png" alt=" " width="200" height="950"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Multiple screens, services, storage layers — not something AI can “just understand”.&lt;/p&gt;

&lt;p&gt;What Actually Worked&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Stop dumping the whole codebase&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;p&gt;“Here’s my project, fix X”&lt;br&gt;
Do:&lt;/p&gt;

&lt;p&gt;give only relevant files&lt;/p&gt;

&lt;p&gt;explain relationships manually&lt;br&gt;
AI is not context-aware at scale. You have to simulate context.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Give strict instructions (like a junior dev)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Bad:&lt;/p&gt;

&lt;p&gt;“Improve this”&lt;br&gt;
Good:&lt;br&gt;
“Modify this function only. Do not change API shape. Do not touch unrelated files.”&lt;br&gt;
The difference is massive.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;One change at a time&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Don’t do:&lt;/p&gt;

&lt;p&gt;“Refactor this entire flow”&lt;br&gt;
Do:&lt;br&gt;
break into small steps&lt;br&gt;
verify each change&lt;br&gt;
then move forward&lt;br&gt;
AI works best iteratively, not in one shot.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Expect it to fail so always keep backup&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It will:&lt;/p&gt;

&lt;p&gt;generate wrong logic&lt;br&gt;
miss edge cases&lt;br&gt;
introduce bugs&lt;br&gt;
Example:&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%2Fs0fhf4y929xtselo57w7.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%2Fs0fhf4y929xtselo57w7.png" alt=" " width="800" height="383"&gt;&lt;/a&gt;&lt;br&gt;
This is where you review like a senior — not trust blindly.&lt;br&gt;
The Real Insight&lt;br&gt;
AI didn’t replace my work. It compressed months into days, but only because I guided it properly. If you treat AI like magic, it breaks. If you treat it like a junior dev, it becomes powerful.&lt;br&gt;
Final Thought&lt;br&gt;
AI is not bad at large codebases. Most people are just bad at using it correctly. If you're working on bigger projects, stop prompting lazily. That’s the real bottleneck.&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>sideprojects</category>
      <category>security</category>
      <category>ai</category>
    </item>
    <item>
      <title>How EchoId Actually Handles Privacy</title>
      <dc:creator>Jit Chakraborty</dc:creator>
      <pubDate>Wed, 18 Mar 2026 18:02:15 +0000</pubDate>
      <link>https://forem.com/jit_chakraborty_4222410eb/how-echoid-actually-handles-privacy-3dmd</link>
      <guid>https://forem.com/jit_chakraborty_4222410eb/how-echoid-actually-handles-privacy-3dmd</guid>
      <description>&lt;p&gt;Most “privacy-focused” messaging apps still collect metadata.&lt;/p&gt;

&lt;p&gt;Even if messages are encrypted, servers often know:&lt;/p&gt;

&lt;p&gt;who you talk to&lt;/p&gt;

&lt;p&gt;when you talk&lt;/p&gt;

&lt;p&gt;how often&lt;/p&gt;

&lt;p&gt;That’s still surveillance.&lt;/p&gt;

&lt;p&gt;So while building EchoId, I focused on reducing what the system can know.&lt;/p&gt;

&lt;p&gt;Core Approach&lt;/p&gt;

&lt;p&gt;Instead of building a “smart” backend, I kept the server dumb.&lt;/p&gt;

&lt;p&gt;It only acts as a relay.&lt;/p&gt;

&lt;p&gt;No storage. No analytics. No logging of messages.&lt;/p&gt;

&lt;p&gt;If there’s nothing stored, there’s nothing to leak.&lt;/p&gt;

&lt;p&gt;Encryption&lt;/p&gt;

&lt;p&gt;Messages are encrypted using AES before being sent.&lt;/p&gt;

&lt;p&gt;This means:&lt;/p&gt;

&lt;p&gt;Server never sees plaintext&lt;/p&gt;

&lt;p&gt;Messages are unreadable in transit&lt;/p&gt;

&lt;p&gt;Even if intercepted, they’re useless without the key&lt;/p&gt;

&lt;p&gt;Server Design&lt;/p&gt;

&lt;p&gt;The backend does only 3 things:&lt;/p&gt;

&lt;p&gt;Accept message payload&lt;/p&gt;

&lt;p&gt;Forward it to recipient&lt;/p&gt;

&lt;p&gt;Drop it&lt;/p&gt;

&lt;p&gt;No database for messages. No history.&lt;/p&gt;

&lt;p&gt;What This Solves&lt;/p&gt;

&lt;p&gt;No message analysis&lt;/p&gt;

&lt;p&gt;No stored conversations&lt;/p&gt;

&lt;p&gt;Reduced metadata exposure&lt;/p&gt;

&lt;p&gt;No user profiling&lt;/p&gt;

&lt;p&gt;What’s Still Hard&lt;/p&gt;

&lt;p&gt;This doesn’t magically solve everything.&lt;/p&gt;

&lt;p&gt;Challenges I’m still working on:&lt;/p&gt;

&lt;p&gt;Key exchange (secure + simple)&lt;/p&gt;

&lt;p&gt;Preventing abuse without tracking users&lt;/p&gt;

&lt;p&gt;Handling offline delivery without storage&lt;/p&gt;

&lt;p&gt;Scaling relay without introducing logs&lt;/p&gt;

&lt;p&gt;Philosophy&lt;/p&gt;

&lt;p&gt;Privacy isn’t about adding encryption.&lt;/p&gt;

&lt;p&gt;It’s about removing the ability to collect data at all.&lt;/p&gt;

&lt;p&gt;EchoId is still early, but the direction is clear:&lt;br&gt;
Less data &amp;gt; more protection&lt;/p&gt;

&lt;p&gt;Repo&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/fabulousman12/echoid-open_source" rel="noopener noreferrer"&gt;https://github.com/fabulousman12/echoid-open_source&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  buildinpublic #privacy #opensource
&lt;/h1&gt;

</description>
      <category>privacy</category>
      <category>buildinpublic</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>dev challange</title>
      <dc:creator>Jit Chakraborty</dc:creator>
      <pubDate>Mon, 16 Mar 2026 10:47:31 +0000</pubDate>
      <link>https://forem.com/jit_chakraborty_4222410eb/dev-challange-4lni</link>
      <guid>https://forem.com/jit_chakraborty_4222410eb/dev-challange-4lni</guid>
      <description></description>
    </item>
    <item>
      <title>Why Privacy Matters in Messaging</title>
      <dc:creator>Jit Chakraborty</dc:creator>
      <pubDate>Mon, 16 Mar 2026 10:34:59 +0000</pubDate>
      <link>https://forem.com/jit_chakraborty_4222410eb/why-privacy-matters-in-messaging-2d9g</link>
      <guid>https://forem.com/jit_chakraborty_4222410eb/why-privacy-matters-in-messaging-2d9g</guid>
      <description>&lt;p&gt;Most modern messaging apps put ease of use first, but privacy is often not as important. A lot of services keep track of not just the content of your messages, but also metadata like who you talk to, when you send messages, and how often you talk to them.&lt;/p&gt;

&lt;p&gt;This information can tell you a lot about a person's life and relationships, even if you don't read the message itself.&lt;/p&gt;

&lt;p&gt;This means that privacy shouldn't be an afterthought. It must be included in the design of the system from the start.&lt;/p&gt;

&lt;p&gt;Encrypting Messages&lt;/p&gt;

&lt;p&gt;Before being sent over the network, messages in my project EchoId are encrypted.&lt;br&gt;
The Advanced Encryption Standard (AES) is used by the system to encrypt the message itself.&lt;/p&gt;

&lt;p&gt;AES is a symmetric encryption algorithm, which means that the same key is used to encrypt and decrypt data.&lt;/p&gt;

&lt;p&gt;This is what the basic process looks like:&lt;/p&gt;

&lt;p&gt;An AES key is made at random.&lt;/p&gt;

&lt;p&gt;That AES key is used to encrypt the message.&lt;/p&gt;

&lt;p&gt;RSA encrypts the AES key itself.&lt;/p&gt;

&lt;p&gt;The encrypted key and message are sent together.&lt;/p&gt;

&lt;p&gt;People often call this method "hybrid encryption."&lt;/p&gt;

&lt;p&gt;What is the purpose of this design?&lt;/p&gt;

&lt;p&gt;AES is a very fast way to encrypt message data.&lt;/p&gt;

&lt;p&gt;RSA is used to safely share the AES key.&lt;/p&gt;

&lt;p&gt;This lets messages stay encrypted while still being sent quickly.&lt;/p&gt;

&lt;p&gt;What This Means&lt;/p&gt;

&lt;p&gt;In simple terms, the message you send is converted into unreadable data before it leaves your device. Only the intended receiver, who can decrypt the AES key, can turn that data back into the original message.&lt;/p&gt;

&lt;p&gt;The goal is to ensure that even if the network or server is compromised, the message content itself cannot be read.&lt;/p&gt;

&lt;p&gt;Final Note&lt;/p&gt;

&lt;p&gt;This is something I’m currently experimenting with while building EchoId, a privacy-focused messaging system exploring encrypted communication and WebRTC-based calls.&lt;br&gt;
Open source:&lt;br&gt;
&lt;a href="https://github.com/fabulousman12/echoid-open_source" rel="noopener noreferrer"&gt;https://github.com/fabulousman12/echoid-open_source&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>privacy</category>
      <category>sideprojects</category>
      <category>security</category>
    </item>
    <item>
      <title>I built EchoId – a privacy-focused messaging app with encrypted chat and voice calls</title>
      <dc:creator>Jit Chakraborty</dc:creator>
      <pubDate>Sun, 15 Mar 2026 15:00:13 +0000</pubDate>
      <link>https://forem.com/jit_chakraborty_4222410eb/i-built-echoid-a-privacy-focused-messaging-app-with-encrypted-chat-and-voice-calls-2ang</link>
      <guid>https://forem.com/jit_chakraborty_4222410eb/i-built-echoid-a-privacy-focused-messaging-app-with-encrypted-chat-and-voice-calls-2ang</guid>
      <description>&lt;h1&gt;
  
  
  I built EchoId – a privacy-focused messaging app with encrypted chat and voice calls
&lt;/h1&gt;

&lt;p&gt;I recently built &lt;strong&gt;EchoId&lt;/strong&gt;, a personal project exploring secure communication and privacy-focused application design.&lt;/p&gt;

&lt;p&gt;The idea behind the project was simple: create a messaging platform that avoids analytics, tracking scripts, or behavioral profiling. It’s not a company or commercial product — just an independent project I built while experimenting with encryption and realtime communication systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Encrypted messaging&lt;/li&gt;
&lt;li&gt;Voice calls using WebRTC&lt;/li&gt;
&lt;li&gt;No analytics or tracking&lt;/li&gt;
&lt;li&gt;Lightweight backend designed for simple communication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project is still evolving, and I’m mainly interested in feedback from developers and privacy-minded users.&lt;/p&gt;

&lt;p&gt;If anyone is interested in the architecture, encryption approach, or implementation details, I’d be happy to discuss them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project website:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://echoidchat.online" rel="noopener noreferrer"&gt;https://echoidchat.online&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open source repository:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/fabulousman12/echoid-open_source" rel="noopener noreferrer"&gt;https://github.com/fabulousman12/echoid-open_source&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>privacy</category>
      <category>sideprojects</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
