<?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: badcaptain0001</title>
    <description>The latest articles on Forem by badcaptain0001 (@rshrmcse).</description>
    <link>https://forem.com/rshrmcse</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%2F538710%2F4a7f0c90-cac7-4b63-b218-32e0bc8d9bbe.png</url>
      <title>Forem: badcaptain0001</title>
      <link>https://forem.com/rshrmcse</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rshrmcse"/>
    <language>en</language>
    <item>
      <title>ENVCRYPT: A Zero-Knowledge .env Vault for Fast-Moving Dev Teams</title>
      <dc:creator>badcaptain0001</dc:creator>
      <pubDate>Sat, 28 Feb 2026 14:19:00 +0000</pubDate>
      <link>https://forem.com/rshrmcse/envcrypt-a-zero-knowledge-env-vault-for-fast-moving-dev-teams-49pc</link>
      <guid>https://forem.com/rshrmcse/envcrypt-a-zero-knowledge-env-vault-for-fast-moving-dev-teams-49pc</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/weekend-2026-02-28"&gt;DEV Weekend Challenge: Community&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Community
&lt;/h2&gt;

&lt;p&gt;I built this for developers who move fast and pass secrets around constantly across local/dev/staging/prod.&lt;/p&gt;

&lt;p&gt;This is especially useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Indie hackers and solo builders&lt;/li&gt;
&lt;li&gt;Small startup engineering teams&lt;/li&gt;
&lt;li&gt;Students and hackathon teams&lt;/li&gt;
&lt;li&gt;Anyone currently storing secrets in plaintext files, chat apps, or notes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was simple: &lt;strong&gt;keep the workflow fast, but remove plaintext secret handling.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;ENVCRYPT (Envault)&lt;/strong&gt;, a zero-knowledge environment variable vault.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core idea
&lt;/h3&gt;

&lt;p&gt;Secrets are encrypted in the browser &lt;strong&gt;before&lt;/strong&gt; storage, so the backend only receives ciphertext.&lt;/p&gt;

&lt;h3&gt;
  
  
  Main features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Google/GitHub OAuth login&lt;/li&gt;
&lt;li&gt;Project-based secret organization&lt;/li&gt;
&lt;li&gt;Add single variables or bulk import from &lt;code&gt;.env&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Client-side encryption with &lt;strong&gt;Argon2id + AES-256-GCM&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Ciphertext-only storage (&lt;code&gt;value_encrypted&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;In-memory key handling + auto-lock&lt;/li&gt;
&lt;li&gt;One-click &lt;code&gt;.env&lt;/code&gt; export (decrypted in-browser)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security model
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;API rejects plaintext &lt;code&gt;value&lt;/code&gt; payloads&lt;/li&gt;
&lt;li&gt;Database stores encrypted values only&lt;/li&gt;
&lt;li&gt;RLS policies isolate user data&lt;/li&gt;
&lt;li&gt;Even with a DB leak, attacker gets ciphertext without your decryption key&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Live app: &lt;a href="https://envcrypt.vercel.app/" rel="noopener noreferrer"&gt;https://envcrypt.vercel.app/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub repo: &lt;a href="https://github.com/badcaptain0001/envault" rel="noopener noreferrer"&gt;https://github.com/badcaptain0001/envault&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Next.js 16 (App Router, TypeScript)&lt;/li&gt;
&lt;li&gt;React 19&lt;/li&gt;
&lt;li&gt;Tailwind CSS v4 + shadcn/ui&lt;/li&gt;
&lt;li&gt;Supabase (Auth + Postgres + RLS)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;hash-wasm&lt;/code&gt; (Argon2id) + Web Crypto API (AES-256-GCM)&lt;/li&gt;
&lt;li&gt;Zustand&lt;/li&gt;
&lt;li&gt;Vitest&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Implementation highlights
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Derive encryption key locally from master password with Argon2id&lt;/li&gt;
&lt;li&gt;Encrypt each secret with AES-GCM + random IV&lt;/li&gt;
&lt;li&gt;Persist only encrypted payloads&lt;/li&gt;
&lt;li&gt;Decrypt only in-browser during explicit export action&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>showdev</category>
    </item>
    <item>
      <title>GitHub Copilot CLI Challenge Git Workflow Automator</title>
      <dc:creator>badcaptain0001</dc:creator>
      <pubDate>Sun, 15 Feb 2026 01:53:30 +0000</pubDate>
      <link>https://forem.com/rshrmcse/github-copilot-cli-challenge-git-workflow-automator-2n92</link>
      <guid>https://forem.com/rshrmcse/github-copilot-cli-challenge-git-workflow-automator-2n92</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;Git Workflow Automator (GWA)&lt;/strong&gt;, a terminal-first Python CLI to simplify common Git workflows.&lt;/p&gt;

&lt;p&gt;It provides a single interface for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;gwa start&lt;/code&gt; (start branch workflow)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gwa commit&lt;/code&gt; (commit flow)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gwa sync&lt;/code&gt; (sync with remote)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gwa pr&lt;/code&gt; (PR workflow)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gwa doctor&lt;/code&gt; (diagnostics)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built this because Git workflows are repetitive and easy to break under pressure.&lt;br&gt;&lt;br&gt;
The goal was to reduce friction and make daily Git operations faster from the terminal.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Repo: &lt;a href="https://github.com/badcaptain0001/gcli-zero" rel="noopener noreferrer"&gt;https://github.com/badcaptain0001/gcli-zero&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video Walkthrough: &lt;a href="https://drive.google.com/file/d/1QzVznGCSWH2MQE4eKfd3EW6ZR6hmQhbX/view?usp=sharing" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1QzVznGCSWH2MQE4eKfd3EW6ZR6hmQhbX/view?usp=sharing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Optional Screenshots: 
&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%2Ff88jn21dzcerrkwes6vf.png" alt="Screenshot" width="800" height="714"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run locally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/badcaptain0001/gcli-zero.git
&lt;span class="nb"&gt;cd &lt;/span&gt;gcli-zero
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv
&lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate
python &lt;span class="nt"&gt;-m&lt;/span&gt; pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-U&lt;/span&gt; pip setuptools wheel
python &lt;span class="nt"&gt;-m&lt;/span&gt; pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'.[dev]'&lt;/span&gt;
pytest &lt;span class="nt"&gt;-q&lt;/span&gt;
gwa &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;I used Copilot CLI iteratively while building the project.&lt;/p&gt;

&lt;p&gt;Key prompts I used:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;Scaffold a Python CLI project from scratch named git-workflow-automator with src package layout, tests folder, pyproject.toml, and a console script named gwa.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Generate minimal starter code for the package and CLI entrypoint using argparse.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Add commands start, commit, sync, pr, and doctor with dry-run support.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Create pydantic-based configuration loading from .gwa.toml with sensible defaults.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Add policy enforcement for branch naming and conventional commit message validation.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Add JSONL audit logging under .git/gwa/audit.jsonl with timestamp, command, status, and metadata.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Create pytest tests for config, policy, audit, and a basic integration flow.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Improve README with installation, usage, and testing instructions.&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Copilot CLI sped up scaffolding and first-pass implementation.&lt;br&gt;&lt;br&gt;
I manually reviewed and refined code for behavior, reliability, and test coverage.&lt;br&gt;&lt;br&gt;
Detailed prompt-by-prompt notes are in &lt;code&gt;COPILOT_LOG.md&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>I Built a VS Code Extension That Tracks Real Coding Time</title>
      <dc:creator>badcaptain0001</dc:creator>
      <pubDate>Sat, 14 Feb 2026 05:09:34 +0000</pubDate>
      <link>https://forem.com/rshrmcse/i-built-a-vs-code-extension-that-tracks-real-coding-time-1pik</link>
      <guid>https://forem.com/rshrmcse/i-built-a-vs-code-extension-that-tracks-real-coding-time-1pik</guid>
      <description>&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%2Fy1ii4wnzcajxehoo962t.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%2Fy1ii4wnzcajxehoo962t.png" alt="product home" width="800" height="479"&gt;&lt;/a&gt;&lt;br&gt;
I made Lync Life, a VS Code extension + web dashboard that tracks coding time automatically and tries to count only real coding activity (with better idle/suspend handling).&lt;br&gt;
Product: &lt;a href="https://www.lync.life/" rel="noopener noreferrer"&gt;lync.life&lt;/a&gt;&lt;br&gt;
What it does:&lt;/p&gt;

&lt;p&gt;automatic tracking in VS Code&lt;br&gt;
syncs to cloud dashboard&lt;br&gt;
daily session/time insights&lt;br&gt;
API-key based setup&lt;br&gt;
I’m still improving sync edge cases (reinstall/new key/device scenarios), so I’d love honest feedback from devs:&lt;/p&gt;

&lt;p&gt;Does the tracked time feel accurate for your workflow?&lt;br&gt;
Is onboarding clear enough?&lt;br&gt;
What one metric/feature should I build next?&lt;br&gt;
Product: &lt;a href="https://www.lync.life/" rel="noopener noreferrer"&gt;lync.life&lt;/a&gt;&lt;br&gt;
Portfolio: &lt;a href="https://rishabhsharma.vercel.app/" rel="noopener noreferrer"&gt;https://rishabhsharma.vercel.app/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>programming</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to Connect Mongo db with Node JS &amp; Express JS</title>
      <dc:creator>badcaptain0001</dc:creator>
      <pubDate>Sat, 27 Jan 2024 10:59:54 +0000</pubDate>
      <link>https://forem.com/rshrmcse/how-to-connect-mongo-db-with-node-js-express-js-35hh</link>
      <guid>https://forem.com/rshrmcse/how-to-connect-mongo-db-with-node-js-express-js-35hh</guid>
      <description>&lt;p&gt;Setting Up a Node.js Project&lt;br&gt;
Initialize Node.js Project: Create a new folder for your project and run npm init to initialize a new Node.js project.&lt;/p&gt;

&lt;p&gt;Install Dependencies&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install express mongoose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Connecting MongoDB with Mongoose&lt;br&gt;
Set up a basic Express application in your index.js file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const express = require("express");
const app = express();
const PORT = process.env.PORT || 3000;
require("./dbconnection.js")

app.listen(PORT, () =&amp;gt; {
  console.log(`Server is running on port ${PORT}`);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set up a Db connection file dbconnection.js file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const mongoose = require("mongoose");
const express = require("express");
require("dotenv").config();
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
mongoose.connect(process.env.MONGODB_URI, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

const db = mongoose.connection;
db.once("open", (_) =&amp;gt; {
  console.log("Database connected:", process.env.MONGODB_URI);
});

db.on("error", (err) =&amp;gt; {
  console.error("connection error:", err);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;by replacing process.env.MONGODB_URI with you own url&lt;/p&gt;

&lt;p&gt;Go to terminal and type npm start&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Congratulatios! you db has been connected now you can start playaround it&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to create a POST api With Mongo DB and Node JS</title>
      <dc:creator>badcaptain0001</dc:creator>
      <pubDate>Wed, 24 Jan 2024 14:24:33 +0000</pubDate>
      <link>https://forem.com/rshrmcse/how-to-create-a-post-api-with-mongo-db-and-node-js-2473</link>
      <guid>https://forem.com/rshrmcse/how-to-create-a-post-api-with-mongo-db-and-node-js-2473</guid>
      <description>&lt;p&gt;first you have to build connection with you database for that will create db.js file you have to import this file in you main file named as index.js or server.js file you can see that in bottom code snippets&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const mongoose = require("mongoose");
const express = require("express");
require("dotenv").config();
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
mongoose.connect(process.env.MONGODB_URI, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

const db = mongoose.connection;
db.once("open", (_) =&amp;gt; {
  console.log("Database connected:", process.env.MONGODB_URI);
});

db.on("error", (err) =&amp;gt; {
  console.error("connection error:", err);
});
Create a usermodel.js file in your node js project

const moongoose = require("mongoose");
const userSchema = new moongoose.Schema({
    name: { type: String, required: true },
    email: { type: String, required: true }
    phone: { type: Number, required: true }
    //---- you can add multiple parameters over here
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;module.exports = moongoose.model("user", userSchema);&lt;br&gt;
now will will create a route file where are going to access this schema and build api to store data on database&lt;/p&gt;

&lt;p&gt;create a userroutes.js file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const express = require("express");
const router = express.Router();
const user= require("./usermodel.js");

//-------- api structure -------------------
router.post("/adduser", async (req, res) =&amp;gt; {
    const { name , email, phone} = req.body;
    try {
        const newUser= new user({
            name,
            email,
            phone
        });
        const savedUser = await newUser.save();
        res.status(200).json(savedUser);
    } catch (err) {
        res.status(500).json(err);
    }
});


module.exports = router; //======&amp;gt;dont for get to add

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you might already have this file named as server.js or index.js in your folder stucture where you are going to build you api structure&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const express = require("express");
const bodyParser = require("body-parser");
const app = express();
var cors = require("cors");
app.use(express.urlencoded({ extended: true }));
app.use(bodyParser.json());
require("./db");


const User = require("./userroutes.js");


app.use("/api", User);

const server = app.listen(process.env.PORT, () =&amp;gt; {
  console.log(`listening on port ${process.env.PORT}!`);
});

server;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;so now you can create more apis&lt;/p&gt;

&lt;p&gt;Happy Coding !&lt;/p&gt;

</description>
      <category>mongodb</category>
      <category>javascript</category>
      <category>node</category>
      <category>database</category>
    </item>
  </channel>
</rss>
