<?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: Samanuai</title>
    <description>The latest articles on Forem by Samanuai (@night_slayer).</description>
    <link>https://forem.com/night_slayer</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%2F3709663%2Fd584c787-ba41-4f98-bbf8-c1b45d5ea765.jpg</url>
      <title>Forem: Samanuai</title>
      <link>https://forem.com/night_slayer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/night_slayer"/>
    <language>en</language>
    <item>
      <title>I Built a LeetCode CLI That Tracks Your Solve Time and Saves Solution Versions</title>
      <dc:creator>Samanuai</dc:creator>
      <pubDate>Tue, 13 Jan 2026 18:53:11 +0000</pubDate>
      <link>https://forem.com/night_slayer/i-built-a-leetcode-cli-that-tracks-your-solve-time-and-saves-solution-versions-1fok</link>
      <guid>https://forem.com/night_slayer/i-built-a-leetcode-cli-that-tracks-your-solve-time-and-saves-solution-versions-1fok</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;If you've ever grinded LeetCode, you know the pain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Constantly switching between browser and editor&lt;/li&gt;
&lt;li&gt;No way to track how long problems actually take you&lt;/li&gt;
&lt;li&gt;Losing your brute-force solution after optimizing&lt;/li&gt;
&lt;li&gt;No timer to simulate real interview pressure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I solved all of this by building &lt;strong&gt;leetcode-cli&lt;/strong&gt; — a full LeetCode workflow that runs entirely in your terminal.&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%2Fgithub.com%2Fnight-slayer18%2Fleetcode-cli%2Fraw%2Fmain%2Fdocs%2Fdemo.gif" 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%2Fgithub.com%2Fnight-slayer18%2Fleetcode-cli%2Fraw%2Fmain%2Fdocs%2Fdemo.gif" alt="Demo" width="760" height="476"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What It Does
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📋 List &amp;amp; Solve Problems
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;leetcode list &lt;span class="nt"&gt;-d&lt;/span&gt; medium        &lt;span class="c"&gt;# Filter by difficulty&lt;/span&gt;
leetcode show 1                &lt;span class="c"&gt;# View problem&lt;/span&gt;
leetcode pick 1                &lt;span class="c"&gt;# Generate solution file&lt;/span&gt;
leetcode &lt;span class="nb"&gt;test &lt;/span&gt;1                &lt;span class="c"&gt;# Test locally&lt;/span&gt;
leetcode submit 1              &lt;span class="c"&gt;# Submit to LeetCode&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Files are auto-organized by difficulty and category:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;leetcode/
├── Easy/
│   └── Array/
│       └── 1.two-sum.java
└── Medium/
    └── String/
        └── 3.longest-substring.java
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ⏱️ Interview Timer
&lt;/h3&gt;

&lt;p&gt;Practice under real pressure with difficulty-based defaults:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;leetcode timer 1               &lt;span class="c"&gt;# Easy: 20min, Medium: 40min, Hard: 60min&lt;/span&gt;
leetcode timer 1 &lt;span class="nt"&gt;-m&lt;/span&gt; 30         &lt;span class="c"&gt;# Custom: 30 minutes&lt;/span&gt;
leetcode timer &lt;span class="nt"&gt;--stats&lt;/span&gt;         &lt;span class="c"&gt;# See your solve time history&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The timer tracks your times so you can measure improvement over weeks.&lt;/p&gt;

&lt;h3&gt;
  
  
  📸 Solution Snapshots
&lt;/h3&gt;

&lt;p&gt;Save different approaches and compare them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;leetcode snapshot save 1 &lt;span class="s2"&gt;"brute-force"&lt;/span&gt;
&lt;span class="c"&gt;# ... optimize your solution ...&lt;/span&gt;
leetcode snapshot save 1 &lt;span class="s2"&gt;"optimized"&lt;/span&gt;
leetcode snapshot diff 1 1 2   &lt;span class="c"&gt;# Compare the two&lt;/span&gt;
leetcode snapshot restore 1 brute-force  &lt;span class="c"&gt;# Go back if needed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Never lose a working solution again.&lt;/p&gt;

&lt;h3&gt;
  
  
  👥 Collaborative Coding
&lt;/h3&gt;

&lt;p&gt;Practice with a partner using room codes:&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;# Person 1&lt;/span&gt;
leetcode collab host 1         &lt;span class="c"&gt;# Creates room: ABC123&lt;/span&gt;

&lt;span class="c"&gt;# Person 2&lt;/span&gt;
leetcode collab &lt;span class="nb"&gt;join &lt;/span&gt;ABC123

&lt;span class="c"&gt;# Both solve, then compare&lt;/span&gt;
leetcode collab compare
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Great for mock interviews with friends.&lt;/p&gt;

&lt;h3&gt;
  
  
  📁 Workspaces
&lt;/h3&gt;

&lt;p&gt;Keep different contexts separate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;leetcode workspace create interview &lt;span class="nt"&gt;-w&lt;/span&gt; ~/lc-interview
leetcode workspace create daily &lt;span class="nt"&gt;-w&lt;/span&gt; ~/lc-daily
leetcode workspace use interview
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each workspace has its own config, timer history, and snapshots.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔄 Git Sync
&lt;/h3&gt;

&lt;p&gt;Auto-backup solutions to GitHub:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;leetcode config &lt;span class="nt"&gt;--repo&lt;/span&gt; https://github.com/you/leetcode-solutions.git
leetcode &lt;span class="nb"&gt;sync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @night-slayer18/leetcode-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or with Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull nightslayer/leetcode-cli:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;leetcode login     &lt;span class="c"&gt;# Paste your LeetCode cookies&lt;/span&gt;
leetcode daily     &lt;span class="c"&gt;# Get today's challenge&lt;/span&gt;
leetcode pick 1    &lt;span class="c"&gt;# Start solving&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Why I Built This
&lt;/h2&gt;

&lt;p&gt;I was tired of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Opening Chrome just to see the problem&lt;/li&gt;
&lt;li&gt;Not knowing if I was getting faster&lt;/li&gt;
&lt;li&gt;Losing my first approach after refactoring&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now my entire LeetCode workflow lives in the terminal, and I have data on my improvement.&lt;/p&gt;




&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/night-slayer18/leetcode-cli" rel="noopener noreferrer"&gt;night-slayer18/leetcode-cli&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;npm:&lt;/strong&gt; &lt;a href="https://www.npmjs.com/package/@night-slayer18/leetcode-cli" rel="noopener noreferrer"&gt;@night-slayer18/leetcode-cli&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://night-slayer18.github.io/leetcode-cli/" rel="noopener noreferrer"&gt;night-slayer18.github.io/leetcode-cli&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If this helps your LeetCode grind, give it a ⭐ on GitHub!&lt;/p&gt;

&lt;p&gt;What features would you want to see next? Let me know in the comments 👇&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>leetcode</category>
      <category>cli</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
