<?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 Rafay</title>
    <description>The latest articles on DEV Community by Abdul Rafay (@rafay99epic).</description>
    <link>https://dev.to/rafay99epic</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%2F1094214%2F6168fb39-6bee-446c-a765-69acf77b7577.jpeg</url>
      <title>DEV Community: Abdul Rafay</title>
      <link>https://dev.to/rafay99epic</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rafay99epic"/>
    <language>en</language>
    <item>
      <title>dotenv-vault Is Deprecated — Here's Your Migration Path</title>
      <dc:creator>Abdul Rafay</dc:creator>
      <pubDate>Mon, 20 Jul 2026 09:39:11 +0000</pubDate>
      <link>https://dev.to/rafay99epic/dotenv-vault-is-deprecated-heres-your-migration-path-21ke</link>
      <guid>https://dev.to/rafay99epic/dotenv-vault-is-deprecated-heres-your-migration-path-21ke</guid>
      <description>&lt;p&gt;If your team syncs environment variables with &lt;code&gt;dotenv-vault&lt;/code&gt;, you've probably seen the notices by now: the project is deprecated. The &lt;code&gt;.env.vault&lt;/code&gt; file format is &lt;a href="https://dotenvx.com/docs/env-vault-file" rel="noopener noreferrer"&gt;officially marked deprecated&lt;/a&gt;, &lt;code&gt;dotenv-vault-core&lt;/code&gt; has pointed users elsewhere for a while, and active development has moved to &lt;a href="https://dotenvx.com/" rel="noopener noreferrer"&gt;dotenvx&lt;/a&gt; — built by Mot, the same developer who created the original &lt;code&gt;dotenv&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Nothing is going to break tomorrow. But building on a deprecated secrets format is a slow leak: no fixes, no new integrations, and every new teammate asking "wait, why are we using this?" Here's an honest map of where to go.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you actually lose
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;dotenv-vault&lt;/code&gt; did three jobs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Encrypted your .env files&lt;/strong&gt; into a &lt;code&gt;.env.vault&lt;/code&gt; file you could commit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Synced them&lt;/strong&gt; across the team through dotenv.org&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separated environments&lt;/strong&gt; (development, staging, production) with one key each&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Any replacement needs to cover those three jobs — and ideally fix the things that were always awkward: key distribution still happened out-of-band, there was no per-person access control, and no record of who read what.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 1: dotenvx (the official successor)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dotenvx.com/" rel="noopener noreferrer"&gt;dotenvx&lt;/a&gt; is the path the dotenv creator recommends, and there's an &lt;a href="https://github.com/dotenvx/dotenvx-ext-vault" rel="noopener noreferrer"&gt;official migration extension&lt;/a&gt; for converting &lt;code&gt;.env.vault&lt;/code&gt; files.&lt;/p&gt;

&lt;p&gt;Its model: encrypted &lt;code&gt;.env&lt;/code&gt; files live in your repo, decrypted at runtime with a private key. It's free, open source, works with any language, and requires no account.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it fits:&lt;/strong&gt; solo developers and teams comfortable with encrypted-files-in-git. &lt;strong&gt;Where it doesn't:&lt;/strong&gt; the private key still has to reach every teammate and every CI job through some other channel — which for most small teams means it gets pasted into Slack, the exact problem you were trying to solve. There's also no per-person access control and no audit trail; whoever holds the key holds everything.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 2: hosted secrets managers (Doppler, Infisical)
&lt;/h2&gt;

&lt;p&gt;Both are mature, both solve team sync properly, both price &lt;strong&gt;per seat&lt;/strong&gt; — Doppler's Team plan runs &lt;a href="https://www.doppler.com/pricing" rel="noopener noreferrer"&gt;$21/user/month&lt;/a&gt;, Infisical's Pro is &lt;a href="https://infisical.com/pricing" rel="noopener noreferrer"&gt;$18/identity/month&lt;/a&gt; where machines count as identities too. For a six-person team that's $1,300–1,500 a year, and machine identities push it higher. We keep honest comparisons of both, including where they beat us: &lt;a href="https://www.envpilot.dev/vs/doppler" rel="noopener noreferrer"&gt;Envpilot vs Doppler&lt;/a&gt; and &lt;a href="https://www.envpilot.dev/vs/infisical" rel="noopener noreferrer"&gt;Envpilot vs Infisical&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 3: Envpilot (what we built)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.envpilot.dev" rel="noopener noreferrer"&gt;Envpilot&lt;/a&gt; is an open-source (MIT) environment variable manager built for exactly the team that used dotenv-vault: small, moving fast, no dedicated ops person.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No files in the repo at all.&lt;/strong&gt; &lt;code&gt;envpilot run -- npm run dev&lt;/code&gt; injects variables straight into the process; nothing secret touches disk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team sync with actual access control&lt;/strong&gt; — role-based, per-variable permissions, and an audit log of who read what, when, from where.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-environment values&lt;/strong&gt; with enforced key uniqueness — &lt;code&gt;DATABASE_URL&lt;/code&gt; for development and production are separate variables that can never silently collide.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flat pricing.&lt;/strong&gt; Free for 3 teammates and 3 projects; the paid tier is one flat price per organization, not per seat. Adding your seventh developer costs nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encrypted in a dedicated vault&lt;/strong&gt; — our database stores only reference IDs, never plaintext secret values. &lt;a href="https://github.com/rafay99-epic/envpilot.dev" rel="noopener noreferrer"&gt;The whole platform is MIT-licensed on GitHub&lt;/a&gt;, so you can read exactly how that works.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The 10-minute migration
&lt;/h2&gt;

&lt;p&gt;You don't need to convert your &lt;code&gt;.env.vault&lt;/code&gt; file — you need the decrypted values you already have locally.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Install and sign in (browser SSO, no API keys in shell history)&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @envpilot/cli
envpilot login

&lt;span class="c"&gt;# 2. Link the project folder&lt;/span&gt;
envpilot init

&lt;span class="c"&gt;# 3. Push your existing .env into an environment&lt;/span&gt;
envpilot push &lt;span class="nt"&gt;--env&lt;/span&gt; development
envpilot push &lt;span class="nt"&gt;--env&lt;/span&gt; production &lt;span class="nt"&gt;--file&lt;/span&gt; .env.production

&lt;span class="c"&gt;# 4. Verify, then delete the files&lt;/span&gt;
envpilot run &lt;span class="nt"&gt;--&lt;/span&gt; npm run dev
&lt;span class="nb"&gt;rm&lt;/span&gt; .env .env.production .env.vault .env.keys
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Teammates run steps 1–2 and they're synced — no key to hand them, because access is tied to their account, not a shared secret. When someone leaves the team, you revoke the person, not rotate every key they ever touched.&lt;/p&gt;

&lt;p&gt;CI needs variables too: the &lt;a href="https://docs.envpilot.dev/github-action" rel="noopener noreferrer"&gt;GitHub Action&lt;/a&gt; pulls them with a scoped token and masks every value in workflow logs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which one should you pick?
&lt;/h2&gt;

&lt;p&gt;Honest version: if you're solo and like the encrypted-files-in-git model, &lt;strong&gt;dotenvx&lt;/strong&gt; is free and official — use it. If you're an enterprise with compliance requirements and budget, Doppler and Infisical are proven. If you're a small team that mostly wants to stop pasting &lt;code&gt;.env&lt;/code&gt; files into Slack and know who touched what, that's the exact gap &lt;a href="https://www.envpilot.dev" rel="noopener noreferrer"&gt;we built Envpilot for&lt;/a&gt; — and the free tier covers a 3-person team end to end, no credit card.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>javascript</category>
      <category>node</category>
      <category>security</category>
    </item>
    <item>
      <title>Idea Code App: My Build Story</title>
      <dc:creator>Abdul Rafay</dc:creator>
      <pubDate>Fri, 28 Mar 2025 09:49:06 +0000</pubDate>
      <link>https://dev.to/rafay99epic/idea-code-app-my-build-story-2075</link>
      <guid>https://dev.to/rafay99epic/idea-code-app-my-build-story-2075</guid>
      <description>&lt;p&gt;Alright, let's hear it. We've all been there—you have an idea for an app that could help you out, and you realize it could help others as well. But you don’t know how to create a good application, or moreover, you have no idea how to build one.&lt;/p&gt;

&lt;p&gt;Now, you go on YouTube and start searching, and the number of videos is overwhelming. You watch one, then two, but when it comes down to actually starting from nothing, things start to get a little rough.&lt;/p&gt;

&lt;p&gt;You don’t know the app flow, how users will interact with it, or even what features you need. And that’s perfectly normal. As a beginner trying to build an app, you don’t yet understand how things should flow.&lt;/p&gt;

&lt;p&gt;The purpose of this blog post is to show you all how to build an app from scratch. I’ll go through everything—from the idea to development, all the bugs I encountered, how to solve them, and how AI can be helpful.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Idea?
&lt;/h1&gt;

&lt;p&gt;For this app, I was writing my notes on a website and could access them via the web. But what about mobile? It was really inconvenient to open a browser, enter a URL, and then visit my notes. And sometimes, the internet isn’t reliable. So, now what?&lt;/p&gt;

&lt;p&gt;The solution for me was simple—I needed an app where I could read all my lecture notes with offline access.&lt;/p&gt;

&lt;p&gt;With that in mind, I started writing down what I needed. The core idea was that I should be able to read my notes without an internet connection. My website already has API access, so I could call that API and render the content in the app, right?&lt;/p&gt;

&lt;p&gt;It’s simple and can be done.&lt;/p&gt;

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

&lt;p&gt;Once the core idea was set, it was time to think about what features would support it and ensure the app wasn’t misused. So, I added these features:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Offline &amp;amp; Online Access&lt;/li&gt;
&lt;li&gt;Auth System&lt;/li&gt;
&lt;li&gt;Color Choices&lt;/li&gt;
&lt;li&gt;Note-Taking&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These features would make note reading much smoother and more convenient.&lt;/p&gt;

&lt;h1&gt;
  
  
  Tech Stack
&lt;/h1&gt;

&lt;p&gt;Once you have all the features listed and know what you want, the next step is choosing a good tech stack. People say it doesn’t matter what tech stack you choose, but let me tell you—when it comes to apps, you generally have four options for the frontend:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Flutter&lt;/li&gt;
&lt;li&gt;React Native&lt;/li&gt;
&lt;li&gt;Java (Android)&lt;/li&gt;
&lt;li&gt;Swift (iOS)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And for the backend, there are several good options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Firebase&lt;/li&gt;
&lt;li&gt;Supabase&lt;/li&gt;
&lt;li&gt;Appwrite&lt;/li&gt;
&lt;li&gt;PocketBase&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All of these options have their own pros and cons. If you’d like to see a core difference between Firebase and Supabase, check out my previous &lt;a href="https://www.rafay99.com/blog/firebase-vs-supperbase/" rel="noopener noreferrer"&gt;blog post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I haven’t used PocketBase or Appwrite yet, but I’ve heard they are good options.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Choice
&lt;/h2&gt;

&lt;p&gt;For me, I’ll be using Flutter for the UI and Appwrite for the backend. The backend will handle user sync, note-taking, user authentication, and the auth gate—nothing more than that. The UI will be coded using Flutter because I use Flutter for everything, and I love its flexibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your Choice
&lt;/h2&gt;

&lt;p&gt;Don’t choose blindly—do your research and pick what makes you comfortable and what you feel confident coding in. If I weren’t used to Flutter, I would have gone with React Native, since I know how React works but have no experience with React Native. So, choose what works best for you.&lt;/p&gt;

&lt;h1&gt;
  
  
  Defining The Flow
&lt;/h1&gt;

&lt;p&gt;You know the features, you know how to choose a tech stack, now it's time to define the flow. By flow, I mean how the user will navigate from one page to another. And this is actually very simple. When a user installs your application, what will they see first? It could be a Login Screen, an Introduction Screen, a Splash Screen, anything—it all depends on your thought process and your application.&lt;/p&gt;

&lt;p&gt;Here’s the flow I created for my application:&lt;/p&gt;

&lt;h2&gt;
  
  
  The Auth Flow
&lt;/h2&gt;

&lt;p&gt;The auth flow shows how the authentication process is handled in the app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Login Flow
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Installed -&amp;gt; Introduction Screen -&amp;gt; Login -&amp;gt; Success -&amp;gt; Home Screen&lt;/li&gt;
&lt;li&gt;Installed -&amp;gt; Introduction Screen -&amp;gt; Login -&amp;gt; Failed -&amp;gt; Error Message&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Register Flow
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Installed -&amp;gt; Introduction Screen -&amp;gt; Register -&amp;gt; User Created -&amp;gt; Login -&amp;gt; Success -&amp;gt; Home Screen&lt;/li&gt;
&lt;li&gt;Installed -&amp;gt; Introduction Screen -&amp;gt; Register -&amp;gt; User NOT Created -&amp;gt; Error Message&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Auth Gate
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;User Logged In -&amp;gt; Home Screen&lt;/li&gt;
&lt;li&gt;User Not Logged In -&amp;gt; Login Screen&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Note Fetching Feature
&lt;/h2&gt;

&lt;p&gt;This flow illustrates how the app operates under the hood.&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting Notes via API
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;App Opened -&amp;gt; Internet Connection -&amp;gt; Call API (Get Data) -&amp;gt; Store in Local Database -&amp;gt; Show to User&lt;/li&gt;
&lt;li&gt;App Opened -&amp;gt; NO Internet Connection -&amp;gt; Switch to Offline Mode&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Taking Notes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open App -&amp;gt; Switch to Note-Taking UI -&amp;gt; Create Note -&amp;gt; Write Some Content -&amp;gt; Save Content&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Flow Thoughts
&lt;/h2&gt;

&lt;p&gt;You can see how the app flow is structured. This is just the beginning. As you add more features, you’ll naturally have more flows to define. It’s better to set up a structure early and start coding, because as you develop, the flow will reveal itself more clearly.&lt;/p&gt;

&lt;p&gt;I’m only able to describe this flow because I’ve actually done it—I’ve built the app, faced real challenges, and figured out how each UI should connect to the next.&lt;/p&gt;

&lt;h1&gt;
  
  
  Coding
&lt;/h1&gt;

&lt;p&gt;Okay, you have everything set up. Now what? This is the question most people don’t know how to answer. You’ve got the design, the flow, the idea, and the tech stack. What’s next?&lt;/p&gt;

&lt;p&gt;Here’s the short answer: Google and use AI.&lt;/p&gt;

&lt;p&gt;In the beginning, Google &lt;em&gt;a lot&lt;/em&gt;. Don’t just rely on AI—you’ll forget what you learn that way. Google, Stack Overflow, documentation—they'll stick in your brain better. Watch some tutorials to get a solid foundation. And then... start coding.&lt;/p&gt;

&lt;h1&gt;
  
  
  My App Issues (The Rollercoaster)
&lt;/h1&gt;

&lt;p&gt;Now, let me be honest. It wasn’t all sunshine and rainbows.&lt;/p&gt;

&lt;p&gt;I initially aimed to finish the app in a week. If you look at my GitHub, it did take me about a week—but, oh boy, it wasn’t easy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Appwrite Woes
&lt;/h3&gt;

&lt;p&gt;Everything started fine. I created the UI, set up Appwrite as the backend, and things were rolling smoothly. Until... Appwrite refused to add users to my database. I tried everything, but the issues just kept stacking up. So, I decided: forget this, I’m switching to Firebase.&lt;/p&gt;

&lt;p&gt;Thankfully, I had separated my UI from my backend. All I had to do was change the backend implementation. Nothing broke in the frontend—lesson learned: keep frontend and backend loosely coupled via a repository file where all the logic meets.&lt;/p&gt;

&lt;h3&gt;
  
  
  API Struggles &amp;amp; Hive Mastery
&lt;/h3&gt;

&lt;p&gt;Once Firebase was up and running, it was time to fetch notes from my website's API. I used the &lt;code&gt;http&lt;/code&gt; package from pub.dev, which worked fine. But for some reason, the body of the notes wasn’t coming through.&lt;/p&gt;

&lt;p&gt;To handle offline data, I integrated Hive, which was great, but initially tricky to set up. I created models, commands, and started syncing API data to Hive. The issue? Still no note body! Eventually, after hours of frustration, it turned out the API itself had the problem, not Hive.&lt;/p&gt;

&lt;p&gt;Once fixed, data was flowing and saving properly.&lt;/p&gt;

&lt;h3&gt;
  
  
  UI Layer &amp;amp; Card-Based Madness
&lt;/h3&gt;

&lt;p&gt;Next challenge: UI design. There were multiple subjects, multiple lectures, and I wanted a card-based interface. One card leads to another, leading to lecture notes at the end. I made templates to dynamically pass data—whether it's research notes, lecture notes, etc.—and the experience became seamless.&lt;/p&gt;

&lt;h3&gt;
  
  
  Search: Fizzy Finder or Bust
&lt;/h3&gt;

&lt;p&gt;Search was another beast. Firebase’s built-in search? Nah, it won’t cut it. I wanted powerful search capabilities, so I turned to Fizzy Finder and built my own search functionality. This was crucial for scaling.&lt;/p&gt;

&lt;h1&gt;
  
  
  Note-Taking Feature (The Hell Moment)
&lt;/h1&gt;

&lt;p&gt;After deploying V1, I decided to add a note-taking module. The big question: What editor? Markdown, Rich Text, something else? I found &lt;a href="https://pub.dev/packages/flutter_quill" rel="noopener noreferrer"&gt;Flutter Quill&lt;/a&gt;—perfect!&lt;/p&gt;

&lt;p&gt;Or so I thought...&lt;/p&gt;

&lt;p&gt;I installed it, ran the emulator... and everything broke. Dependency hell. Turns out Flutter Quill v2.9 had conflicts with my Introduction Screen package. I had to pick one. So, Introduction Screen had to go. I rebuilt the entire introduction UI from scratch with custom animations and flows. Painful—but fun.&lt;/p&gt;

&lt;p&gt;Once that was sorted, Hive became my best friend again. I created &lt;code&gt;Hive Operations&lt;/code&gt; and &lt;code&gt;Note Taking Actions&lt;/code&gt; services. I set up controllers, wired everything up, and data was being saved smoothly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Google Keep-Inspired UI
&lt;/h3&gt;

&lt;p&gt;For displaying notes, I wanted something like Google Keep. I wasn’t sure how to achieve this, so I turned to Google Studio AI—it generated a UI I didn’t &lt;em&gt;love&lt;/em&gt;, but hey, it worked.&lt;/p&gt;

&lt;h3&gt;
  
  
  CRUD’s Biggest Nightmare: Deleting Notes
&lt;/h3&gt;

&lt;p&gt;Deleting notes became my nemesis. I wanted a recycle bin feature. Hive doesn’t support moving content between boxes. So, I had to manually copy content from one Hive box to another, then delete it, and vice versa if restoring. Hive team, if you’re reading: please add move support—it would make life so much easier!&lt;/p&gt;

&lt;h1&gt;
  
  
  The Sync Layer (The Final Boss 💀)
&lt;/h1&gt;

&lt;p&gt;One thing left: the sync layer.&lt;/p&gt;

&lt;p&gt;All notes were stored locally, but users needed backups in the cloud. Easy in theory, painful in practice.&lt;/p&gt;

&lt;p&gt;Where should sync happen? How should users know if their data is backed up? At first, I triggered sync on save, update, delete—but it slowed down the app by 2-5 seconds. Not acceptable.&lt;/p&gt;

&lt;p&gt;Solution? Sync runs when the app launches. It detects changes and pushes them to Firebase. I added settings to give users control over sync, and made sure sync runs off the main thread so the UI stays smooth. (Shoutout to AI for helping me figure this out—I was lost!)&lt;/p&gt;

&lt;h1&gt;
  
  
  Wrapping It Up
&lt;/h1&gt;

&lt;p&gt;After all the battles, late nights, and debug sessions, I finally had a polished app. I called it &lt;strong&gt;MS Bridge&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Every flow, feature, and issue taught me something valuable. And trust me, whatever app you’re building, you’ll hit similar hurdles. Just stay patient, keep separating concerns, Google like crazy, and enjoy the ride!&lt;/p&gt;

&lt;h1&gt;
  
  
  Try It Out Yourself
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Download App
&lt;/h3&gt;

&lt;p&gt;The app isn’t live on the Google Play Store just yet, but you can still give it a spin!&lt;br&gt;
Simply head over to my website or download it directly using the link below:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="http://rafay99.com/downloads/app/msbridge/release/MSBridge-release.apk" rel="noopener noreferrer"&gt;Download MSBridge APK&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
   Explore the Codebase
&lt;/h3&gt;

&lt;p&gt;Curious to see how I built this? Check out the entire codebase on GitHub:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/rafay99-epic/MSBridge" rel="noopener noreferrer"&gt;MSBridge GitHub Repository&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’d love to hear your thoughts!&lt;br&gt;
Tell me how I coded, what you liked (or didn’t), and how badly I might have messed things up 😄.&lt;br&gt;
Drop your feedback, suggestions, or even a roast in the comment section—I’m all ears! 👇&lt;/p&gt;

&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;Now, it’s time for some final thoughts. I did this not just because I’m getting a blog post and a future video out of it, but more importantly—because it was fun. Coding for fun is something I’ve missed, and writing down my thoughts, sharing my experiences—that’s something I truly enjoy.&lt;/p&gt;

&lt;p&gt;Here’s the thing: don’t be afraid. You’re an engineer. You’re &lt;em&gt;meant&lt;/em&gt; to break things, to see how they unfold, to figure out how things can be done. Coding is fun. Find an idea, and start building. It might look like chaos at times—some parts definitely felt like that—but I genuinely enjoyed every bit of it.&lt;/p&gt;

&lt;p&gt;So go on, start coding.&lt;/p&gt;

&lt;p&gt;Until then, goodbye nerds.&lt;/p&gt;




&lt;p&gt;Check out the original article at &lt;a href="https://www.rafay99.com/blog/idea_to_app/" rel="noopener noreferrer"&gt;rafay99.com&lt;/a&gt; for the full story!&lt;/p&gt;

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