<?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: Mahbub R</title>
    <description>The latest articles on DEV Community by Mahbub R (@mahbbrah).</description>
    <link>https://dev.to/mahbbrah</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%2F13985%2F79269fd7-8b44-478e-81b9-087686e1b875.png</url>
      <title>DEV Community: Mahbub R</title>
      <link>https://dev.to/mahbbrah</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mahbbrah"/>
    <language>en</language>
    <item>
      <title>How I Built a Chrome Extension to Improve Reading on Medium</title>
      <dc:creator>Mahbub R</dc:creator>
      <pubDate>Tue, 08 Sep 2026 16:43:54 +0000</pubDate>
      <link>https://dev.to/mahbbrah/how-i-built-a-chrome-extension-to-improve-reading-on-medium-231g</link>
      <guid>https://dev.to/mahbbrah/how-i-built-a-chrome-extension-to-improve-reading-on-medium-231g</guid>
      <description>&lt;p&gt;I read a lot of articles on Medium. Mostly technical stuff, product stories, startup ideas, and random things I find while browsing.&lt;/p&gt;

&lt;p&gt;But there were a few things about the experience that kept annoying me.&lt;/p&gt;

&lt;p&gt;One was finding an article I actually wanted to read, opening it, and then realizing it was behind a member-only restriction. If I wanted to see whether there was another publicly available version, it usually meant manually searching for it.&lt;/p&gt;

&lt;p&gt;Another thing was Dark Mode.&lt;/p&gt;

&lt;p&gt;I genuinely don't understand why Medium still doesn't have a proper native Dark Mode for reading. Maybe I'm missing something, but in 2026, opening a long article at night and getting hit with a completely white screen still feels strange.&lt;/p&gt;

&lt;p&gt;And then there was saving articles. Sometimes I find something useful and want to keep it for later, but that becomes another separate process.&lt;/p&gt;

&lt;p&gt;None of these problems are huge on their own. But when you keep running into them, they become annoying.&lt;/p&gt;

&lt;p&gt;So I started thinking about building something around that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem wasn't really finding another tool
&lt;/h2&gt;

&lt;p&gt;There are already websites and extensions trying to solve some of these problems.&lt;/p&gt;

&lt;p&gt;But a lot of them change your whole flow.&lt;/p&gt;

&lt;p&gt;You find an article on Medium, then you're redirected somewhere else. Or you need to copy the URL, open another website, paste it there, and wait for another version of the page.&lt;/p&gt;

&lt;p&gt;Some tools use proxies or their own servers in the middle.&lt;/p&gt;

&lt;p&gt;Again, nothing is necessarily wrong with that. But it never felt natural to me.&lt;/p&gt;

&lt;p&gt;I'm already on Medium. I already found the article there. Why should I need to leave the page and start another process?&lt;/p&gt;

&lt;p&gt;I wanted something that felt more integrated with the normal browsing experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  I wanted to keep the original experience
&lt;/h2&gt;

&lt;p&gt;That became the main idea behind the extension.&lt;/p&gt;

&lt;p&gt;Instead of making users go to another website or manually copy URLs around, I wanted the extension to work in the background while they were already browsing Medium.&lt;/p&gt;

&lt;p&gt;The goal was simple: open an article normally and let the extension handle the repetitive parts where possible.&lt;/p&gt;

&lt;p&gt;I didn't want it to feel like you're using a separate service.&lt;/p&gt;

&lt;p&gt;I wanted it to feel closer to something that belongs in the browser.&lt;/p&gt;

&lt;p&gt;That was probably the biggest design decision behind the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then I thought about Dark Mode
&lt;/h2&gt;

&lt;p&gt;This was a very personal frustration.&lt;/p&gt;

&lt;p&gt;I read a lot at night, and I like Dark Mode pretty much everywhere. My editor has it. My browser has it. Most apps have it.&lt;/p&gt;

&lt;p&gt;Then I go to Medium and open a long article.&lt;/p&gt;

&lt;p&gt;Bright white page.&lt;/p&gt;

&lt;p&gt;I kept wondering why there still wasn't a proper native option for this.&lt;/p&gt;

&lt;p&gt;So I added Dark Mode to the extension.&lt;/p&gt;

&lt;p&gt;Nothing revolutionary. I just wanted the option to exist.&lt;/p&gt;

&lt;p&gt;And honestly, this is one of those cases where building a small feature for yourself is sometimes enough reason to build it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Saving articles was another thing
&lt;/h2&gt;

&lt;p&gt;Sometimes I find an article that I know I'll probably need later.&lt;/p&gt;

&lt;p&gt;Maybe it's a technical explanation. Maybe it's a tutorial. Maybe it's something I want to read properly when I'm offline.&lt;/p&gt;

&lt;p&gt;Usually, that means another tool or another process.&lt;/p&gt;

&lt;p&gt;So I also added PDF export.&lt;/p&gt;

&lt;p&gt;The thinking was basically the same as before: if I'm already reading something useful, why should saving it require going somewhere else?&lt;/p&gt;

&lt;p&gt;It's not a complicated feature, but it removes another small annoyance.&lt;/p&gt;

&lt;h2&gt;
  
  
  A bunch of small frustrations can become a product
&lt;/h2&gt;

&lt;p&gt;I think that's probably what I learned most from building this.&lt;/p&gt;

&lt;p&gt;The project didn't start with some massive idea.&lt;/p&gt;

&lt;p&gt;It started with small things that kept happening:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manually checking whether another version of an article was available&lt;/li&gt;
&lt;li&gt;Having to switch between different tools&lt;/li&gt;
&lt;li&gt;Wanting Dark Mode and not having it&lt;/li&gt;
&lt;li&gt;Wanting to save something for later without another workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Individually, these are all minor problems.&lt;/p&gt;

&lt;p&gt;Together, they started to feel like a broken experience.&lt;/p&gt;

&lt;p&gt;So instead of trying to solve each one with a separate tool, I tried putting them into one browser extension.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping it simple was important
&lt;/h2&gt;

&lt;p&gt;I didn't want to turn this into one of those extensions with twenty buttons and a huge settings page.&lt;/p&gt;

&lt;p&gt;The whole reason I started building it was to remove friction.&lt;/p&gt;

&lt;p&gt;So I tried to keep that idea throughout the project.&lt;/p&gt;

&lt;p&gt;Let the repetitive stuff happen automatically where possible.&lt;/p&gt;

&lt;p&gt;Keep the optional features simple.&lt;/p&gt;

&lt;p&gt;Don't make people learn another complicated workflow just to read an article.&lt;/p&gt;

&lt;p&gt;That was pretty much the approach.&lt;/p&gt;

&lt;h2&gt;
  
  
  Still figuring it out
&lt;/h2&gt;

&lt;p&gt;The extension is still something I'm experimenting with and improving.&lt;/p&gt;

&lt;p&gt;Most of the initial ideas came from my own frustrations, which also means there are probably things I'm missing.&lt;/p&gt;

&lt;p&gt;Other people might use Medium completely differently from me.&lt;/p&gt;

&lt;p&gt;Maybe the biggest annoyance for someone else isn't article access or Dark Mode. Maybe it's organizing saved articles, typography, distraction-free reading, or something else entirely.&lt;/p&gt;

&lt;p&gt;That's why I'm interested in hearing what other people find frustrating about the reading experience.&lt;/p&gt;

&lt;p&gt;Sometimes the best product ideas are just things you've become so used to being annoyed by that you stop noticing them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The project
&lt;/h2&gt;

&lt;p&gt;Anyway, this is what I ended up building: &lt;strong&gt;Medium Paywall Remover&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Despite the name, the bigger idea behind it became improving the overall Medium reading experience rather than just solving one problem.&lt;/p&gt;

&lt;p&gt;If you're curious about the project, you can check it out here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appcrafts.online/products/medium-paywall-remover" rel="noopener noreferrer"&gt;Details at our Site&lt;/a&gt;&lt;br&gt;
&lt;a href="https://chromewebstore.google.com/detail/medium-paywall-remover/efdhnemmfmccacnamalheicnaojipooa" rel="noopener noreferrer"&gt;Try Out From Store&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But more than anything, I'd like to know: &lt;strong&gt;what is the one thing that annoys you most when reading on Medium?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Access Cpanel via SSH without password</title>
      <dc:creator>Mahbub R</dc:creator>
      <pubDate>Sat, 13 Jul 2019 06:01:00 +0000</pubDate>
      <link>https://dev.to/mahbbrah/access-cpanel-via-ssh-without-password-3e1b</link>
      <guid>https://dev.to/mahbbrah/access-cpanel-via-ssh-without-password-3e1b</guid>
      <description>&lt;p&gt;&lt;strong&gt;Hi&lt;/strong&gt;, This is my very first post in this platform. I would like to show you guys today the way you can access your cpanel without password and by setting the ssh just once! and after then by using your development machine you'll be able to login to your cpanel and access the full system without any password or any other credentials. So let's just rock it. &lt;/p&gt;

&lt;p&gt;I had previously did this same thing 2-1 years back. But I forgot now. and didn't find any good article where the process mentions properly, That's why I was messing with it for few hours and finally figured and so thought to share with you. hopefully, you'll like this post.&lt;/p&gt;

&lt;p&gt;The very first thing is we need to open up your git bash terminal or any other bash terminal you've then&lt;/p&gt;

&lt;h4&gt;
  
  
  1. First we have to generate SSH key pair from your development machine
&lt;/h4&gt;

&lt;p&gt;to do this follow this article &lt;a href="https://help.github.com/en/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent" rel="noopener noreferrer"&gt;Generating a new SSH key&lt;/a&gt;&lt;br&gt;
(Also don't forget to add that to ssh agent like it showed on that article)&lt;br&gt;
When you're done with creating the ssh key pair we're almost 50% done. now follow the next&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Now let's import the created SSH key to cpanel
&lt;/h4&gt;

&lt;p&gt;go to your cpanel and login into it. now find out the Security tab where you'll get a option like &lt;strong&gt;SSH Access&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.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%2Ftjofkc4dtdjiri20ergk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Ftjofkc4dtdjiri20ergk.png" alt="SSH Access Option click on it"&gt;&lt;/a&gt;&lt;br&gt;
Note: &lt;em&gt;When you're on a fresh cpanel, this might not be enabled. so contact your cpanel provider and ask them to enable so you can access to cpanel via SSH.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now get inside of that option and then you'll see something like that manage ssh keys click on it&lt;br&gt;
&lt;a href="https://media.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%2Fpgvckskicui9k6njtrwx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fpgvckskicui9k6njtrwx.png" alt="manage ssh keys button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you have to import the key that you've generated earlier. to do that click on that button&lt;br&gt;
&lt;a href="https://media.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%2Fihqau8arkk32qd7dk1kx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fihqau8arkk32qd7dk1kx.png" alt="Import Key"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you'll get some fields that needs to be filled out with the information that you've generated to your development machine&lt;/p&gt;

&lt;p&gt;here is how it will look like&lt;br&gt;
&lt;a href="https://media.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%2Fbhpo5zrz35iimvj1gnjo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fbhpo5zrz35iimvj1gnjo.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and that's it! you've added your local generated ssh key pair to the cpanel where you want to access the panel without any password or security credentials.&lt;/p&gt;

&lt;h4&gt;
  
  
  Final Step is to authorize the added key pair
&lt;/h4&gt;

&lt;p&gt;Now get back one step and then you'll be able to see the list of key pair you've  and also you'll see the one we imported right away. You'll see something like this&lt;br&gt;
&lt;a href="https://media.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%2Fuvij7zljpxyp6v30y911.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fuvij7zljpxyp6v30y911.png"&gt;&lt;/a&gt;&lt;br&gt;
click on the &lt;strong&gt;manage&lt;/strong&gt; button on the right side. and then it will take you to here&lt;br&gt;
&lt;a href="https://media.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%2F7fk9y261y2pmij4wdofc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F7fk9y261y2pmij4wdofc.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you've to click on the authorize button. and that's it. we're done!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You have successfully added your local SSH key to server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you don't know yet how to login then now? &lt;br&gt;
That's super easy as well. You know the username and password of your hosting from there you'll have to use the username only and the domain name. that's it!&lt;br&gt;
example: &lt;code&gt;user_name@example.com&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;now open up your local computer bash terminal in my case it's git&lt;br&gt;
and type command like that below&lt;br&gt;
&lt;a href="https://media.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%2Fmrt98odhal5zln2roj9f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fmrt98odhal5zln2roj9f.png" alt="type in terminal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have completed all the above step successfully then you are already entered to your cpanel without typing any password.&lt;br&gt;
&lt;a href="https://media.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%2Fpkf2cg4ks12vvikgssbs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fpkf2cg4ks12vvikgssbs.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Now to keep that configuration saved so you can use it after restarting PC
&lt;/h3&gt;

&lt;p&gt;you need to do one more thing for that and that is save the private key to &lt;code&gt;ssh&lt;/code&gt; config file so that it detect every time you want to access this server and use that key against of the host.  so for that create or open the &lt;code&gt;config&lt;/code&gt; file &lt;code&gt;~/.ssh/config&lt;/code&gt; like so. and then you have to add identityFile like this way.&lt;br&gt;
&lt;code&gt;&lt;br&gt;
IdentityFile location_for_the_private_key&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Note&lt;/strong&gt;: &lt;em&gt;You can add as many identityFile you want to&lt;/em&gt;&lt;br&gt;
in my case it was &lt;code&gt;~/Downloads/soci***pector_io_rsa&lt;/code&gt; this. If you do save this config then you're done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That's it for today&lt;/strong&gt; I work as a Full-Stack engineer for around 4 years. but didn't write any article to any platform this is my first post here. Pardon if any mistake happens&lt;/p&gt;

&lt;p&gt;Thank you so much for reading this post. if you find this helpful then spread it.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>bash</category>
      <category>git</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
