<?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: Abhishek Verma</title>
    <description>The latest articles on Forem by Abhishek Verma (@abhishekayu).</description>
    <link>https://forem.com/abhishekayu</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%2F3846104%2Fc1e8bd32-a39f-43b2-93dd-04d875ec51b3.jpg</url>
      <title>Forem: Abhishek Verma</title>
      <link>https://forem.com/abhishekayu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/abhishekayu"/>
    <language>en</language>
    <item>
      <title>I built a CLI that tells you exactly what's on your port before killing it</title>
      <dc:creator>Abhishek Verma</dc:creator>
      <pubDate>Thu, 09 Apr 2026 11:30:21 +0000</pubDate>
      <link>https://forem.com/abhishekayu/i-built-a-cli-that-tells-you-exactly-whats-on-your-port-before-killing-it-4fba</link>
      <guid>https://forem.com/abhishekayu/i-built-a-cli-that-tells-you-exactly-whats-on-your-port-before-killing-it-4fba</guid>
      <description>&lt;p&gt;We've all been here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;lsof &lt;span class="nt"&gt;-i&lt;/span&gt; :3000
&lt;span class="go"&gt;COMMAND   PID  USER   FD   TYPE  ...
node     3877  dev   ...
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Is that my Next.js dev server? A stale process? Something else entirely? You grep, you squint, you &lt;code&gt;kill -9&lt;/code&gt; and hope for the best.&lt;/p&gt;

&lt;p&gt;I got tired of guessing. So I built &lt;strong&gt;portrm&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ptrm 3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;⚡ Port 3000 in use
→ Next.js (PID 3877)
→ running for 9s
→ memory 69.4 MB
→ next-server (v14.2.29) TERM_PROGRAM=vscode
→ user dev
→ cwd /home/dev/projects/my-app
→ detected Next.js (95% confidence)
→ 🛡️ safe to kill.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before touching anything, it shows you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What process&lt;/strong&gt; is on that port&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How long&lt;/strong&gt; it's been running&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory usage&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Working directory&lt;/strong&gt; — so you know which project it belongs to&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framework detection&lt;/strong&gt; — Next.js, Vite, Express, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety verdict&lt;/strong&gt; — whether it's safe to kill&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then it sends &lt;code&gt;SIGTERM&lt;/code&gt; first (graceful shutdown), and only escalates to &lt;code&gt;SIGKILL&lt;/code&gt; if the process doesn't exit in time. No blind force kills.&lt;/p&gt;

&lt;h2&gt;
  
  
  Works in CI and scripts too
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ptrm 3000 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clean exit codes, fully scriptable. Drop it in your Makefile or pre-start hooks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Homebrew&lt;/span&gt;
brew &lt;span class="nb"&gt;install &lt;/span&gt;abhishekayu/tap/portrm

&lt;span class="c"&gt;# Cargo&lt;/span&gt;
cargo &lt;span class="nb"&gt;install &lt;/span&gt;portrm

&lt;span class="c"&gt;# npm&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; portrm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Single static binary. No Node, no Python, no runtime deps required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built this
&lt;/h2&gt;

&lt;p&gt;On shared dev machines and in CI environments, a blind &lt;code&gt;kill -9&lt;/code&gt; on a PID you're not sure about can take down the wrong service. The "show first, kill second" approach has saved me a few times already.&lt;/p&gt;

&lt;p&gt;Built in Rust mostly for the single binary distribution and native signal handling.&lt;/p&gt;




&lt;p&gt;Repo: &lt;a href="https://github.com/abhishekayu/portrm" rel="noopener noreferrer"&gt;github.com/abhishekayu/portrm&lt;/a&gt;&lt;br&gt;
Site: &lt;a href="https://portrm.dev/" rel="noopener noreferrer"&gt;portrm.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love feedback especially if there's a workflow this breaks or a feature you'd expect.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>productivity</category>
      <category>cli</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Stop managing RBAC and feature flags separately in React</title>
      <dc:creator>Abhishek Verma</dc:creator>
      <pubDate>Fri, 27 Mar 2026 11:40:45 +0000</pubDate>
      <link>https://forem.com/abhishekayu/stop-managing-rbac-and-feature-flags-separately-in-react-m6h</link>
      <guid>https://forem.com/abhishekayu/stop-managing-rbac-and-feature-flags-separately-in-react-m6h</guid>
      <description>&lt;p&gt;Access control gets messy faster than most people expect.&lt;/p&gt;

&lt;p&gt;Most apps handle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RBAC (roles &amp;amp; permissions)&lt;/li&gt;
&lt;li&gt;Feature flags&lt;/li&gt;
&lt;li&gt;Experiments&lt;/li&gt;
&lt;li&gt;Plan-based access&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…as separate systems.&lt;/p&gt;

&lt;p&gt;That usually leads to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;duplicated logic across frontend and backend&lt;/li&gt;
&lt;li&gt;inconsistent behavior over time&lt;/li&gt;
&lt;li&gt;harder scaling as the product grows&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;At small scale, this works fine.&lt;/p&gt;

&lt;p&gt;But as your app grows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;permissions live in one place&lt;/li&gt;
&lt;li&gt;feature flags in another&lt;/li&gt;
&lt;li&gt;experiments somewhere else&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Now your logic is fragmented.&lt;/p&gt;

&lt;p&gt;You end up asking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Is this user allowed?”&lt;/li&gt;
&lt;li&gt;“Is this feature enabled?”&lt;/li&gt;
&lt;li&gt;“Is this experiment active?”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…in multiple places, with different rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  A better approach
&lt;/h2&gt;

&lt;p&gt;Instead of managing all of this separately, unify everything into a &lt;strong&gt;single access layer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;👉 Define access once&lt;br&gt;
👉 Use it everywhere&lt;/p&gt;
&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;canEdit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;access&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;can&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;edit_post&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;user&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;canEdit&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;EditButton&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Same logic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;frontend&lt;/li&gt;
&lt;li&gt;backend&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  What I’ve been building
&lt;/h2&gt;

&lt;p&gt;I’ve been working on a small library called &lt;strong&gt;React Access Engine&lt;/strong&gt; to solve this.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;RBAC&lt;/li&gt;
&lt;li&gt;ABAC&lt;/li&gt;
&lt;li&gt;Feature flags&lt;/li&gt;
&lt;li&gt;A/B experiments&lt;/li&gt;
&lt;li&gt;Plan-based access&lt;/li&gt;
&lt;li&gt;Remote config&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Into one consistent system.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;No duplicated logic&lt;/li&gt;
&lt;li&gt;Consistent behavior across layers&lt;/li&gt;
&lt;li&gt;Easier to scale&lt;/li&gt;
&lt;li&gt;Cleaner mental model&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Curious how others are solving this
&lt;/h2&gt;

&lt;p&gt;Would love to hear how you're handling access control in production apps — especially at scale.&lt;/p&gt;
&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/abhishekayu/react-access-engine" rel="noopener noreferrer"&gt;https://github.com/abhishekayu/react-access-engine&lt;/a&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://react-access-engine.dev/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;react-access-engine.dev&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>javascript</category>
      <category>react</category>
    </item>
  </channel>
</rss>
