<?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: Biya Paul</title>
    <description>The latest articles on DEV Community by Biya Paul (@bpsmartdesign).</description>
    <link>https://dev.to/bpsmartdesign</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%2F853085%2F9736998b-80d5-4170-8ebd-24e2d0c52514.jpg</url>
      <title>DEV Community: Biya Paul</title>
      <link>https://dev.to/bpsmartdesign</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bpsmartdesign"/>
    <language>en</language>
    <item>
      <title>Two and a half months with an intruder in our repositories</title>
      <dc:creator>Biya Paul</dc:creator>
      <pubDate>Fri, 11 Sep 2026 00:32:19 +0000</pubDate>
      <link>https://dev.to/bpsmartdesign/two-and-a-half-months-with-an-intruder-in-our-repositories-4a69</link>
      <guid>https://dev.to/bpsmartdesign/two-and-a-half-months-with-an-intruder-in-our-repositories-4a69</guid>
      <description>&lt;p&gt;&lt;em&gt;On 6 September 2026, an antivirus quarantined a 32 KB "font file" in one of our projects. That file was a trojan. It had been running on our workstation since 22 June, had rewritten commits in eighteen repositories, and had spread to a collaborator's machine. Here is what happened, what we did, and what we are keeping from it.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  An ordinary morning, two details that did not add up
&lt;/h2&gt;

&lt;p&gt;It started with two observations that, taken separately, would have worried nobody. On opening the machine, every one of our repositories showed a pending pull we could not account for. And every one of them had triggered an automatic deployment on GitHub overnight, which had failed.&lt;/p&gt;

&lt;p&gt;An hour later, the antivirus reported that it had quarantined a file named &lt;code&gt;fa-solid-400.woff2&lt;/code&gt; in the &lt;code&gt;public/fonts&lt;/code&gt; folder of a marketing site. A Font Awesome font. Except that a font by that name weighs more than 100 KB and starts with the binary signature &lt;code&gt;wOF2&lt;/code&gt;. This one weighed 32,874 bytes and started with several hundred spaces, followed by unreadable JavaScript.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgt708z13e8itpo6p2ipt.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgt708z13e8itpo6p2ipt.png" alt="Real and Fake font comparaison" width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A real font starts with "wOF2". The fake one starts with spaces, then code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What we found when we dug
&lt;/h2&gt;

&lt;p&gt;We spent the afternoon examining, read-only, our whole workspace: about sixty repositories. The picture that came out was far wider than the one flagged file.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Eighteen repositories affected&lt;/strong&gt;, across three GitHub organisations, including client projects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A first injection on &lt;strong&gt;22 June&lt;/strong&gt;, in a marketing site. Seventy-seven days before detection.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A signature in the git history&lt;/strong&gt;: in every affected repository, the last commit had been copied verbatim, same message, same author date, but with a truncated committer name and a &lt;code&gt;-0700&lt;/code&gt; timezone, the US west coast. Those copies had been force-pushed with our own SSH key.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A collaborator's workstation&lt;/strong&gt; carried the same signature from late August: they had cloned an already infected repository.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A last malicious push the day before&lt;/strong&gt;, at 15:21. The malware was still active while we were looking for it.&lt;/p&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frmm4ulhlfli13dropitq.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frmm4ulhlfli13dropitq.png" alt="Maliciel PolinRider Vicious activity" width="800" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Seventy-seven silent days, then fifteen projects hit in ten days.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The mechanism itself fitted in three files. A &lt;code&gt;.vscode/tasks.json&lt;/code&gt; declared a hidden task that ran the fake font with Node.js as soon as the folder was opened in VS Code. A &lt;code&gt;.vscode/settings.json&lt;/code&gt; enabled automatic tasks so the editor would not ask. And in one variant, the same code was appended after a long run of spaces at the end of &lt;code&gt;tailwind.config.js&lt;/code&gt;, &lt;code&gt;vite.config.js&lt;/code&gt; or &lt;code&gt;eslint.config.mjs&lt;/code&gt;, to run on every build, including in our pipelines and Docker images. We go through all of it in a second, more technical article.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the malware had within reach
&lt;/h2&gt;

&lt;p&gt;A trojan of this kind is not trying to break anything. It is after credentials. For two and a half months it had access to everything on the workstation of an independent developer working for several clients:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;SSH keys, without a passphrase, that opened both GitHub and the production server;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;the &lt;code&gt;.env&lt;/code&gt; files of thirteen projects, with their payment, AI, email, storage and database keys;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;passwords saved in the browser and open sessions;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;deployment secrets, exposed in the pipelines its own pushes had triggered.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of that was encrypted by anything other than the Windows session. That is the hardest lesson of this story: cleaning the machine is only the beginning. The real remediation is making everything that was copied worthless.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we did, in order
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Cut off access
&lt;/h3&gt;

&lt;p&gt;Before anything else, from a phone rather than the affected workstation: delete every SSH key on the GitHub account, change the password, sign out all sessions, revoke access tokens and authorised applications. Without a key, the malware cannot push anything, wherever it is.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Clean the workstation
&lt;/h3&gt;

&lt;p&gt;We chose an in-place clean-up over a reinstall, for lack of a backup drive that day, and accepting the residual risk. Quarantine of the files dropped in the temp folder, removal of stored keys and credentials, deletion of the malware's files and decoys across the eighteen repositories, purge of forty gigabytes of installed dependencies, hardening of VS Code, then a full re-test: no marker left, no process, no persistence, no suspicious connection.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Regenerate every secret
&lt;/h3&gt;

&lt;p&gt;This is the longest job. We inventoried the variable names of twenty-seven &lt;code&gt;.env&lt;/code&gt; files and the secrets of nineteen pipelines, then applied the same rule to each: create the new one at the provider, put it in place, verify, and only then revoke the old one. In that order, otherwise the application goes down while everything is put back.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Audit the server
&lt;/h3&gt;

&lt;p&gt;SSH login logs since June, authorised keys, users, scheduled jobs, services, Docker images built during the period. A new deployment key, separate from the personal key. Rebuild of every image from the cleaned repositories.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Clean the repositories and tell people
&lt;/h3&gt;

&lt;p&gt;Removal of the malware from the branches still infected on GitHub, force-push protection, mandatory signed commits, a guard workflow that fails if a signature reappears. Then a message to every collaborator and every client whose secrets had been on our workstation. Saying it quickly protects the relationship; staying silent exposes it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we are keeping
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;The antivirus did not save us. A failed push and an unexplained pull did.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;VS Code runs code when you open a folder&lt;/strong&gt;. The &lt;code&gt;task.allowAutomaticTasks&lt;/code&gt; setting exists for that, and the malware set it to on in every project. We now force it to off in our user settings, with workspace trust enabled. Opening an unknown repository is not a harmless gesture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One key for everything is one leak for everything&lt;/strong&gt;. The same SSH key, without a passphrase, opened GitHub and production. Today: a personal key with a passphrase for GitHub, one deployment key per server that lives only in the pipeline's secrets, and never one in place of the other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;npm install scripts are a way in&lt;/strong&gt;. &lt;code&gt;ignore-scripts=true&lt;/code&gt; in &lt;code&gt;~/.npmrc&lt;/code&gt; costs a few pnpm rebuild a year and closes an entire class of attacks.&lt;/p&gt;

&lt;p&gt;Git history is a free audit log. A single command, run weekly, would have revealed the rewritten commits on 22 June. We now run it every Monday:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'%h|%ad|%cd|%an|%cn|%s'&lt;/span&gt; &lt;span class="nt"&gt;--date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;iso &lt;span class="se"&gt;\&lt;/span&gt;
  | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="nt"&gt;-F&lt;/span&gt;&lt;span class="s1"&gt;'|'&lt;/span&gt; &lt;span class="s1"&gt;'$3 ~ /-0700/ || $4 != $5'&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; GitHub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;An incident is handled with a plan, not with adrenaline&lt;/strong&gt;. We wrote ours down as four procedures: detect and remove on a workstation, on a server, in the repositories, then the actions to take after an infection. They were useful the very next day, to walk the affected collaborator through the same steps.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you build with Node.js and VS Code
&lt;/h2&gt;

&lt;p&gt;Do these four things this week. They take less than an hour.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In VS Code: &lt;code&gt;task.allowAutomaticTasks&lt;/code&gt; set to &lt;code&gt;off&lt;/code&gt;, &lt;code&gt;security.workspace.trust.enabled&lt;/code&gt; checked.&lt;/li&gt;
&lt;li&gt;In &lt;code&gt;~/.npmrc&lt;/code&gt;: &lt;code&gt;ignore-scripts=true&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A passphrase on your SSH keys, and a deployment key separate from your personal key.&lt;/li&gt;
&lt;li&gt;Search your projects for a &lt;code&gt;fa-solid-400.woff2&lt;/code&gt; file of &lt;code&gt;32,874 bytes&lt;/code&gt;, and a &lt;code&gt;tasks.json&lt;/code&gt; containing &lt;code&gt;folderOpen&lt;/code&gt;. If you find one, do not open it: read the technical analysis and start by cutting off your access.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This campaign targets developers, often through fake job interviews or fake freelance assignments that come with a repository "to run". We have not yet identified our own entry point. If you have been through the same thing, write to us: comparing traces helps everyone.&lt;/p&gt;

</description>
      <category>security</category>
      <category>github</category>
      <category>polinrider</category>
      <category>th1nkdev</category>
    </item>
    <item>
      <title>How to create an awesome Github Profile README ?</title>
      <dc:creator>Biya Paul</dc:creator>
      <pubDate>Mon, 25 Apr 2022 11:51:14 +0000</pubDate>
      <link>https://dev.to/bpsmartdesign/how-to-create-an-awesome-github-profile-readme--oim</link>
      <guid>https://dev.to/bpsmartdesign/how-to-create-an-awesome-github-profile-readme--oim</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;If you take a look of my &lt;a href="https://github.com/bpsmartdesign" rel="noopener noreferrer"&gt;GitHub profile&lt;/a&gt;, you’ll notice that it contains Github statistics, social network links and some more content, which makes my GitHub profile look more descriptive.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In this article, we’ll learn how to create a GitHub profile README, add impressive content and make a cron job to refresh it every (x) hours.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Github profile README
&lt;/h2&gt;

&lt;p&gt;GitHub that allows users to use a Markdown file named README to write details about theirself, skills, social life and increase visibility. It’s shown at the top of your GitHub home page, above the pinned repositories. Here are some examples of information that visitors may find interesting, fun, or useful in your profile README.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An "About me" section that describes your work and interests&lt;/li&gt;
&lt;li&gt;Contributions you're proud of, and context about those contributions&lt;/li&gt;
&lt;li&gt;Guidance for getting help in communities where you're involved&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Create a Github profile README
&lt;/h3&gt;

&lt;p&gt;GitHub will display your profile README on your profile page if all of the following are true.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You've created a repository with a name that matches your GitHub username.&lt;/li&gt;
&lt;li&gt;The repository is public.&lt;/li&gt;
&lt;li&gt;The repository contains a file named README.md in its root.&lt;/li&gt;
&lt;li&gt;The README.md file contains any content.&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%2Fga740j29f0ln9ksm1sy3.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%2Fga740j29f0ln9ksm1sy3.png" alt="Image description" width="800" height="771"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Add Awesome content to your Github profile
&lt;/h2&gt;

&lt;p&gt;First, Open your repository with a modern Text Editor like &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;VsCode&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now open a terminal to its directory and create a new npm project&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm init&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;We are going to use &lt;a href="https://www.npmjs.com/package/mustache" rel="noopener noreferrer"&gt;Mustache&lt;/a&gt;, which allows us to create a template and easily replace tags with data we will provide later.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm i mustache&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Create a mustache template&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
We are going to create a new mustache file in the directory.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;touch index.mustache&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Let's add some small content&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight handlebars"&gt;&lt;code&gt;My name is &lt;span class="k"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt;full_name&lt;/span&gt;&lt;span class="k"&gt;}}&lt;/span&gt; and you can see my works &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://bpmartdesign.tk"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;here.&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice the &lt;code&gt;{{___}}&lt;/code&gt; tag? That’s how Mustache recognizes something can be placed there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Generate README from mustache file template&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First, create a &lt;code&gt;index.js&lt;/code&gt; file, where we will write the code to parse data.&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Mustache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mustache&lt;/span&gt;&lt;span class="dl"&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;fs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fs&lt;/span&gt;&lt;span class="dl"&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;MUSTACHE_MAIN_DIR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./index.mustache&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cm"&gt;/**
  * DATA is the object that contains all
  * the data to be provided to Mustache
  * Notice the "full_name" property.
*/&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;DATA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;full_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;BIYA Paul&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="cm"&gt;/**
  * A - We open 'index.mustache'
  * B - We ask Mustache to render our file with the data
  * C - We create a README.md file with the generated output
  */&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateReadMe&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;MUSTACHE_MAIN_DIR&lt;/span&gt;&lt;span class="p"&gt;,&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;data&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;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;err&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;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Mustache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nx"&gt;DATA&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;README.md&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;output&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;generateReadMe&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With that, you can now run &lt;code&gt;node index.js&lt;/code&gt; in your terminal and it should generate a brand new &lt;code&gt;README.md&lt;/code&gt; file in the same directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;// Generated content in README.md
My name is BIYA Paul and and you can see my works here.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Commit and push everything. Now, you can see that your &lt;code&gt;README.md&lt;/code&gt; displayed on your Profile page has been updated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Add a CRON Job to generate your README periodically&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So, finally you have increase your visibility by creating an awesome &lt;code&gt;README.md&lt;/code&gt; file.&lt;br&gt;
But you will surely not have the time to commit and push every day to make your profile up to date.&lt;/p&gt;

&lt;p&gt;So, &lt;a href="https://docs.github.com/en/actions/getting-started-with-github-actions/about-github-actions#:~:text=Further%20reading-,About%20GitHub%20Actions,to%20create%20a%20custom%20workflow." rel="noopener noreferrer"&gt;Github Actions&lt;/a&gt; has been done for us with a lot of function to automate our process.&lt;/p&gt;

&lt;p&gt;With Actions, you can create workflows to automate tasks. Actions live in the same place as the rest of the code, in a special directory: &lt;code&gt;./.github/worflows&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ mkdir .github &amp;amp;&amp;amp; cd .github &amp;amp;&amp;amp; mkdir workflows&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In this &lt;code&gt;./workflows&lt;/code&gt; folder, create a &lt;code&gt;./main.yaml&lt;/code&gt; file that will hold our Action.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ cd ./workflows &amp;amp;&amp;amp; touch main.yaml&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Be sure your branch name is &lt;code&gt;master&lt;/code&gt; instead of &lt;code&gt;main&lt;/code&gt; if not, please rename your principal branch to &lt;code&gt;master&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If its Okay, now you can fill your &lt;code&gt;main.yaml&lt;/code&gt; file with this content&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;README build&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;master&lt;/span&gt;
  &lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;cron&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*/6&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*'&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout current repository to Master branch&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v1&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Setup NodeJs 13.x&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-node@v1&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;13.x'&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Cache dependencies and build outputs to improve workflow execution time.&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/cache@v1&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;node_modules&lt;/span&gt;
          &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ runner.os }}-js-${{ hashFiles('package-lock.json') }}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install dependencies&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm install&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Generate README file&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;node index.js&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Commit and Push new README.md to the repository&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mikeal/publish-to-github-action@master&lt;/span&gt;
        &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Congratulations&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You did it, Now you have a professionnal Github README profile, and it will be up to date every &lt;strong&gt;6&lt;/strong&gt; hours&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Remember, you can change the period by updating the line &lt;br&gt;
&lt;code&gt;- cron: '0 */6 * * *'&lt;/code&gt; by replacing &lt;code&gt;6&lt;/code&gt; to &lt;code&gt;x&lt;/code&gt; desired hours&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is Next ?
&lt;/h2&gt;

&lt;p&gt;As you have seen, you can add more dynamic contents in your Github profile like&lt;br&gt;
badges, github statistics and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Badges&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
The most important badge provider I recommend is &lt;a href="https://shields.io/" rel="noopener noreferrer"&gt;Shield.io&lt;/a&gt;. There you can customize, build and redesign the provided badge according to your own design.&lt;/p&gt;

&lt;p&gt;I am using them in mine like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight handlebars"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;Things I code with ...&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt;  &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"20"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"React"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://img.shields.io/badge/-React-45b8d8?style=flat-square&amp;amp;logo=react&amp;amp;logoColor=white"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt;  &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"20"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Vue Js"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://img.shields.io/badge/Vue.js-35495E?style=for-the-badge&amp;amp;logo=vue.js&amp;amp;logoColor=4FC08D"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  [...]
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt;  &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"20"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Laravel"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://img.shields.io/badge/Laravel-FF2D20?style=for-the-badge&amp;amp;logo=laravel&amp;amp;logoColor=white"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Links and more&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
If you want to add links, images, tables and anything else, you can just update your &lt;code&gt;index.mustache&lt;/code&gt; as template according to what you need as HTML Content (Without CSS style).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Github statistics&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
You can also show your Github statistic related to a repository, organization or profile there. Below is an example of github statistic card I use on my github page&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;img alt="bpsmartdesign's GitHub stats" src="https://github-readme-stats.vercel.app/api?username=bpsmartdesign&amp;amp;count_private=true&amp;amp;show_icons=true&amp;amp;theme=onedark" /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can get more details &lt;a href="https://github.com/anuraghazra/github-readme-stats" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/managing-your-profile-readme" rel="noopener noreferrer"&gt;Github doc&lt;/a&gt;&lt;br&gt;
&lt;a href="https://medium.com/swlh/how-to-create-a-self-updating-readme-md-for-your-github-profile-f8b05744ca91" rel="noopener noreferrer"&gt;Thomas Guilbert Article&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/supritha/how-to-have-an-awesome-github-profile-1969"&gt;Supritha Ravishankar Article&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Thank you for reading! 🙌
&lt;/h2&gt;

&lt;p&gt;Share your amazing GitHub profile in the comments down below for the world to see! :)&lt;br&gt;
&lt;a href="https://github.com/bpsmartdesign" rel="noopener noreferrer"&gt;My Github&lt;/a&gt; | &lt;a href="https://bpsmartdesign.tk/" rel="noopener noreferrer"&gt;My Portfolio&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>opensource</category>
      <category>tutorial</category>
      <category>visibility</category>
    </item>
  </channel>
</rss>
