<?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: The AI producer</title>
    <description>The latest articles on DEV Community by The AI producer (@the_aiproducer_5ec354687).</description>
    <link>https://dev.to/the_aiproducer_5ec354687</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%2F4006580%2F6c044c7d-577b-47dd-9c8f-7cde8859bcd6.png</url>
      <title>DEV Community: The AI producer</title>
      <link>https://dev.to/the_aiproducer_5ec354687</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/the_aiproducer_5ec354687"/>
    <language>en</language>
    <item>
      <title>A real-time global intel dashboard with zero backend</title>
      <dc:creator>The AI producer</dc:creator>
      <pubDate>Sat, 11 Jul 2026 03:43:56 +0000</pubDate>
      <link>https://dev.to/the_aiproducer_5ec354687/a-real-time-global-intel-dashboard-with-zero-backend-3h1p</link>
      <guid>https://dev.to/the_aiproducer_5ec354687/a-real-time-global-intel-dashboard-with-zero-backend-3h1p</guid>
      <description>&lt;p&gt;Six free APIs replaced an entire dashboard backend. Here's the trick.&lt;/p&gt;

&lt;p&gt;Hosted "world monitor" products run fleets of edge functions, Redis clusters, and paid API tiers to show you a map of what's happening. SITUROOM is my counter-bet: earthquakes (USGS), natural hazards (NASA EONET), conflict news (GDELT), crypto (CoinGecko), FX (Frankfurter), and Hacker News are all keyless and CORS-friendly. So the browser does everything.&lt;/p&gt;

&lt;p&gt;The result is one static folder. Serve it with &lt;code&gt;python3 -m http.server&lt;/code&gt;. Or fork it and flip on GitHub Pages.&lt;/p&gt;

&lt;p&gt;Open the live demo: &lt;a href="https://nguyenminhduc9988.github.io/situroom/" rel="noopener noreferrer"&gt;https://nguyenminhduc9988.github.io/situroom/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What you get, all free and MIT:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A dark ops-style canvas world map: pulsing quake markers, hazard layers, tension heat. Vendored d3 — the app loads nothing from any CDN.&lt;/li&gt;
&lt;li&gt;A per-country tension index that is not a black box. The formula is ~30 lines of commented client-side code. Open devtools and recompute it. 44 offline unit tests pin it down.&lt;/li&gt;
&lt;li&gt;Honest failure modes. Each source degrades independently: live fetch, then last-good cache (STALE chip), then a committed real-data snapshot (SNAPSHOT chip). During launch testing GDELT rate-limited my IP. The board kept working and said so.&lt;/li&gt;
&lt;li&gt;A free local MCP server. Zero-dependency Python, stdio. Your agent gets get_quakes, get_tension, get_headlines — the same feeds the dashboard renders. No API key. The Python tension port is byte-identical to the JS original.&lt;/li&gt;
&lt;li&gt;Optional AI sitrep, bring-your-own-key. Any OpenAI-compatible endpoint or local Ollama. Keys never leave localStorage.&lt;/li&gt;
&lt;li&gt;PWA. Second visit serves the whole shell from the service worker: zero bytes for the app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Six sources today. Adding one is a pure normalize function, a unit test against a captured payload, and a fetch that returns null on failure. The GitHub link is in the demo's top bar — PRs welcome.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I built repolens — X-ray any GitHub repo into one interactive HTML file</title>
      <dc:creator>The AI producer</dc:creator>
      <pubDate>Fri, 10 Jul 2026 04:30:42 +0000</pubDate>
      <link>https://dev.to/the_aiproducer_5ec354687/i-built-repolens-x-ray-any-github-repo-into-one-interactive-html-file-5f83</link>
      <guid>https://dev.to/the_aiproducer_5ec354687/i-built-repolens-x-ray-any-github-repo-into-one-interactive-html-file-5f83</guid>
      <description>&lt;p&gt;&lt;em&gt;TL;DR: paste any public GitHub repo into &lt;a href="https://lens.bigwinner.work" rel="noopener noreferrer"&gt;lens.bigwinner.work&lt;/a&gt; and get an interactive architecture map — dependency graph, blast radius, health grade, security scan. Or run &lt;code&gt;uvx repolens-kit owner/repo&lt;/code&gt; locally. Open source, MIT.&lt;/em&gt;&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%2Fnx3nhu3qqktf89ve2hei.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%2Fnx3nhu3qqktf89ve2hei.png" alt="repolens dependency graph of pallets/flask with blast radius inspector" width="800" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Every time I open an unfamiliar codebase I ask the same four questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where does the mass of this thing live?&lt;/li&gt;
&lt;li&gt;Which files are the load-bearing walls?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If I change this file, what breaks?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Is there anything scary committed in here?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can answer all of these by reading code for a week. I wanted them answered in five seconds.&lt;/p&gt;

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

&lt;p&gt;One command — &lt;code&gt;repolens owner/repo&lt;/code&gt; — produces &lt;strong&gt;a single self-contained HTML file&lt;/strong&gt; (D3 inlined, zero external requests, safe to attach to a PR):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🕸️ &lt;strong&gt;Interactive dependency graph&lt;/strong&gt; — every file is a node, sized by lines of code. Color by folder, layer, git churn, or blast radius. Collision-aware labels keep it readable at 1,000+ nodes.&lt;/li&gt;
&lt;li&gt;💥 &lt;strong&gt;Blast radius&lt;/strong&gt; — click any file and see exactly how many files transitively depend on it, with a severity meter. &lt;code&gt;flask/__init__.py&lt;/code&gt; ripples to 42% of the codebase; now you know to test hard.&lt;/li&gt;
&lt;li&gt;🏥 &lt;strong&gt;Health grade (A–F)&lt;/strong&gt; — cycles, coupling, oversized files, security findings. The penalty breakdown is shown, so it's never a black-box number.&lt;/li&gt;
&lt;li&gt;🔐 &lt;strong&gt;Security scan&lt;/strong&gt; — committed keys/tokens, SQL built by string-glue, &lt;code&gt;eval&lt;/code&gt;/&lt;code&gt;exec&lt;/code&gt;, disabled TLS verification. Findings in test paths are auto-demoted.&lt;/li&gt;
&lt;li&gt;🔥 &lt;strong&gt;Hotspots &amp;amp; ownership&lt;/strong&gt; — per-file commit churn and top contributors mined from git history.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It resolves imports to files &lt;em&gt;inside the repo&lt;/em&gt; to build a real graph — Python, JS/TS, Java, Kotlin, Go, Rust, C/C++, C#, PHP, Ruby, Elixir and ~30 more. Fully-qualified imports (&lt;code&gt;com.acme.core.Engine&lt;/code&gt;) resolve by path-suffix matching with language-family guards, so a Java import never creates a fake edge to a Python file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zero-clone analysis
&lt;/h2&gt;

&lt;p&gt;The hosted version never writes a repo to disk: it streams GitHub's tarball through &lt;code&gt;tarfile&lt;/code&gt; in stream mode, filtering and size-capping files as the bytes arrive. A 100-file repo analyzes in about a second.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Browser, no install:&lt;/strong&gt; &lt;a href="https://lens.bigwinner.work" rel="noopener noreferrer"&gt;lens.bigwinner.work&lt;/a&gt; — free, no signup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terminal:&lt;/strong&gt; &lt;code&gt;uvx repolens-kit owner/repo&lt;/code&gt; (or &lt;code&gt;pip install repolens-kit&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source (MIT):&lt;/strong&gt; &lt;a href="https://github.com/nguyenminhduc9988/repolens" rel="noopener noreferrer"&gt;github.com/nguyenminhduc9988/repolens&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Honest limitations: import-based analysis can't see same-package Java references (no import statement to parse), and the hosted tier caps repos at 3,000 files — the CLI has no limits.&lt;/p&gt;

&lt;p&gt;Feedback and issues very welcome. What would &lt;em&gt;you&lt;/em&gt; want an architecture X-ray to show?&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>python</category>
      <category>devtools</category>
      <category>architecture</category>
    </item>
    <item>
      <title>7 AI Prompts I Actually Use to Run My Solo Dev Business (Copy Them Free)</title>
      <dc:creator>The AI producer</dc:creator>
      <pubDate>Tue, 07 Jul 2026 12:14:42 +0000</pubDate>
      <link>https://dev.to/the_aiproducer_5ec354687/7-ai-prompts-i-actually-use-to-run-my-solo-dev-business-copy-them-free-4e3f</link>
      <guid>https://dev.to/the_aiproducer_5ec354687/7-ai-prompts-i-actually-use-to-run-my-solo-dev-business-copy-them-free-4e3f</guid>
      <description>&lt;p&gt;I run a small software business by myself — no co-founder, no team. The thing that keeps it alive isn't a clever framework or a hot stack. It's a short list of AI prompts I've written and rewritten until they actually save me time instead of burning it.&lt;/p&gt;

&lt;p&gt;Here are seven I use every single week. The exact text is in each block. Copy it, change the bracketed parts, and make it yours.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The "standup for one" prompt (mornings)
&lt;/h2&gt;

&lt;p&gt;I open my editor before I've fully woken up. This prompt turns a vague brain-dump into a focused plan so I don't spend 30 minutes deciding what to do first.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Act as my standup partner. Here are yesterday's outcomes and today's tasks: [paste].

1. Identify the single highest-leverage task today and why it matters most.
2. Flag any task carried over 2+ days and tell me whether to cut it or commit to it.
3. Give me a 3-step plan ordered by energy cost — hard thing first.
4. End with one question I should be able to answer by end of day.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. The Friday weekly reset
&lt;/h2&gt;

&lt;p&gt;Friday afternoons are for closing loops. Without this, Monday me walks into a half-finished mess.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Act as my weekly reviewer. Here's what I shipped, what slipped, and how the week felt: [paste].

1. Surface one decision that worked and one that didn't.
2. Find a recurring time-sink to automate, delegate, or delete next week.
3. Draft 3 goals for next week that ladder to a 90-day aim.
4. Tell me one thing to stop doing.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. The pull-request description writer
&lt;/h2&gt;

&lt;p&gt;Writing the PR is often longer than writing the code. This handles the boilerplate so reviewers get a clean summary.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Here is my diff: [paste].

Write a pull-request description with:
- "What" — one-line summary a reviewer can skim.
- "Why" — the user or business reason, not the implementation reason.
- "How to test" — exact reproduction steps.
- "Risk" — what could break and how to roll back.
Keep it under 150 words. No marketing tone.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. The commit-message generator
&lt;/h2&gt;

&lt;p&gt;Messy commit history makes future-you hate past-you.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Given these staged changes: [paste].

Write 3-5 conventional commits (type(scope): subject). Group related changes.
Each subject line &amp;lt;= 50 chars, imperative mood. Add a body only if the "why" is non-obvious.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. The debugging partner
&lt;/h2&gt;

&lt;p&gt;This one stops me from going down rabbit holes. It forces me to state my assumption out loud — which is usually where the bug lives.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I'm debugging this. Here is the code and the unexpected behavior: [paste].

Before suggesting fixes:
1. Restate my assumption about how the code works.
2. Point out the single line where that assumption is weakest.
3. Give me one experiment that would confirm or rule out that line as the cause.
Do not hand me a rewritten solution yet.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. The cold client email
&lt;/h2&gt;

&lt;p&gt;One client pays for a year of side-project hosting. This keeps outreach short and human.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Write a cold email to [name], who works on [their project]. I noticed [specific real thing].
Constraints:
- Under 90 words, plain text, no buzzwords.
- Lead with something useful to THEM, not me.
- One soft question, not a hard ask.
- Sound like a person, not a template.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  7. The "decide already" summarizer
&lt;/h2&gt;

&lt;p&gt;When I've collected too many notes and can't see the decision, this collapses it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Here are my scattered notes on a decision: [paste].

1. State the actual decision in one sentence (often I haven't even named it).
2. List the 2-3 real options.
3. For each, the single strongest argument for and against.
4. Tell me which option a rational outsider would pick and why.
Do not hedge. Pick.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The honest part
&lt;/h2&gt;

&lt;p&gt;These seven are the ones that stuck. I keep the full set — morning routines, weekly resets, content, client follow-ups, the unglamorous operational stuff — in a &lt;a href="https://ducminh5.gumroad.com/l/jfglpk" rel="noopener noreferrer"&gt;free starter pack of 10 prompts&lt;/a&gt; if you want to skip the writing.&lt;/p&gt;

&lt;p&gt;And if you want the whole library I work from, it's a &lt;a href="https://ducminh5.gumroad.com/l/slrlhk" rel="noopener noreferrer"&gt;68-prompt vault&lt;/a&gt; built around running a one-person business without burning out. No subscription — one-time, and the free pack covers the most useful bits if you'd rather not pay.&lt;/p&gt;

&lt;p&gt;Either way: steal the seven above first. The point isn't the pack, it's having prompts tuned enough that you actually use them.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tools</category>
      <category>opensource</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>7 Open-Source Python Tools I Built While Automating My Own Work (All Zero-Dependency)</title>
      <dc:creator>The AI producer</dc:creator>
      <pubDate>Mon, 06 Jul 2026 23:17:46 +0000</pubDate>
      <link>https://dev.to/the_aiproducer_5ec354687/7-open-source-python-tools-i-built-while-automating-my-own-work-all-zero-dependency-5h5h</link>
      <guid>https://dev.to/the_aiproducer_5ec354687/7-open-source-python-tools-i-built-while-automating-my-own-work-all-zero-dependency-5h5h</guid>
      <description>&lt;p&gt;I run a small automation setup that handles content, scheduling, and browser tasks for me. Over a few months I kept re-implementing the same building blocks: scoring prompts &lt;em&gt;before&lt;/em&gt; I ship them, guarding tool calls so a bad input can't wreck something, compressing context when it gets too long, and remembering things between runs.&lt;/p&gt;

&lt;p&gt;So I extracted them into standalone packages and open-sourced all of them. Every one is &lt;strong&gt;zero-dependency&lt;/strong&gt; (Python 3.11+ stdlib only) — &lt;code&gt;pip install&lt;/code&gt; and go, no transitive dependency hell.&lt;/p&gt;

&lt;p&gt;Here's what each does, with a real code snippet pulled from the repo.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;code&gt;prompt-bench&lt;/code&gt; — score and A/B test prompts
&lt;/h2&gt;

&lt;p&gt;The problem: I'd tweak a prompt, ship it, and only discover weeks later it was worse. Now I score prompts on 12 dimensions before they touch production.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;prompt_bench&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PromptScorer&lt;/span&gt;

&lt;span class="n"&gt;scorer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;PromptScorer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;scorer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a helpful assistant. Summarize the article.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Overall: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;overall_quality&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;suggestion&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;suggestions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  - &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;suggestion&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It also A/B-tests two variants and picks a winner with a per-dimension breakdown — useful when you're arguing with yourself over whether to add an example.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/nguyenminhduc9988/prompt-bench" rel="noopener noreferrer"&gt;github.com/nguyenminhduc9988/prompt-bench&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. &lt;code&gt;hermes-tool-guard&lt;/code&gt; — stop dangerous tool calls
&lt;/h2&gt;

&lt;p&gt;The moment you let an LLM call tools (&lt;code&gt;read_file&lt;/code&gt;, &lt;code&gt;run_shell&lt;/code&gt;, &lt;code&gt;http_get&lt;/code&gt;), you need a guard. This one validates inputs, rate-limits per tool, and blocks shell injection, path traversal, and SSRF &lt;em&gt;before&lt;/em&gt; the call runs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;tool_guard&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ToolGuard&lt;/span&gt;

&lt;span class="n"&gt;guard&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ToolGuard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;default_rate_limit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;guard&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;check_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;read_file&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;path&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/tmp/data.txt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;all_safe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;blocked_patterns&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Token-bucket rate limiting per tool, plus a rules engine with allow/deny/sanitize/log actions.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/nguyenminhduc9988/hermes-tool-guard" rel="noopener noreferrer"&gt;github.com/nguyenminhduc9988/hermes-tool-guard&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3. &lt;code&gt;agent-loop-lite&lt;/code&gt; — the Plan-Act-Observe loop
&lt;/h2&gt;

&lt;p&gt;The core agentic pattern as a tiny state machine: &lt;strong&gt;plan → execute tools → observe → replan or finish&lt;/strong&gt;. Bring your own LLM; the loop enforces transitions, manages a tool registry, and fires hooks at every step.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agent_loop&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AgentLoop&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LoopState&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;search_web&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Results for: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;save_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Saved to &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;loop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AgentLoop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search_web&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;search_web&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;query&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}}}),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;save_data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;save_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;max_iterations&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research AI trends and save a summary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Status: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, Iterations: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iterations&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hooks (&lt;code&gt;on_plan&lt;/code&gt;, &lt;code&gt;on_execute&lt;/code&gt;, &lt;code&gt;on_observe&lt;/code&gt;) make it easy to emit JSON logs of every step.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/nguyenminhduc9988/agent-loop-lite" rel="noopener noreferrer"&gt;github.com/nguyenminhduc9988/agent-loop-lite&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. &lt;code&gt;mcp-wrap&lt;/code&gt; — turn any REST API into an MCP server
&lt;/h2&gt;

&lt;p&gt;Model Context Protocol is becoming the standard for handing tools to LLMs. Hand-writing a server per API is tedious — &lt;code&gt;mcp-wrap&lt;/code&gt; wraps a REST endpoint into an MCP server in minutes.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/nguyenminhduc9988/mcp-wrap" rel="noopener noreferrer"&gt;github.com/nguyenminhduc9988/mcp-wrap&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5. &lt;code&gt;context-window&lt;/code&gt; — compress long conversations
&lt;/h2&gt;

&lt;p&gt;When a conversation outgrows the context window, this manager compresses older turns intelligently instead of just truncating them — recent context stays verbatim, the rest gets summarized.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/nguyenminhduc9988/context-window" rel="noopener noreferrer"&gt;github.com/nguyenminhduc9988/context-window&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  6. &lt;code&gt;signet-lite&lt;/code&gt; — persistent memory for CLI agents
&lt;/h2&gt;

&lt;p&gt;SQLite + FTS5 full-text-search memory for command-line agents. Your agent remembers what it did last run without standing up a database server.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/nguyenminhduc9988/signet-lite" rel="noopener noreferrer"&gt;github.com/nguyenminhduc9988/signet-lite&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  7. &lt;code&gt;agent-memory&lt;/code&gt; — multi-layer memory system
&lt;/h2&gt;

&lt;p&gt;In-memory + file-based memory with multiple layers (short-term and long-term), for agents that need both fast recall and durable storage.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/nguyenminhduc9988/agent-memory" rel="noopener noreferrer"&gt;github.com/nguyenminhduc9988/agent-memory&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why zero dependencies?
&lt;/h2&gt;

&lt;p&gt;Every package uses only the Python standard library. That gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No version conflicts&lt;/strong&gt; — install alongside anything&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast cold starts&lt;/strong&gt; — nothing to import-resolve&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auditable&lt;/strong&gt; — you can read the whole codebase in an afternoon&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No supply-chain risk&lt;/strong&gt; — no transitive packages to vet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trade-off is writing more yourself (I reimplemented a token bucket, an FTS5 wrapper, a JSON-schema validator). For infra-style tools like these, that trade is worth it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;All seven are MIT-licensed. If you're building agents and want to compare notes, I publish more of this at &lt;a href="https://bigwinner.work" rel="noopener noreferrer"&gt;bigwinner.work&lt;/a&gt; — open-source tools and the occasional write-up.&lt;/p&gt;

&lt;p&gt;If any of these are useful, a GitHub star genuinely tells me what to build next.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;All repos live at &lt;a href="https://github.com/nguyenminhduc9988" rel="noopener noreferrer"&gt;github.com/nguyenminhduc9988&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>tools</category>
      <category>webdev</category>
    </item>
    <item>
      <title>7 Free Browser APIs You're Probably Not Using (But Should Be)</title>
      <dc:creator>The AI producer</dc:creator>
      <pubDate>Fri, 03 Jul 2026 16:04:09 +0000</pubDate>
      <link>https://dev.to/the_aiproducer_5ec354687/7-free-browser-apis-youre-probably-not-using-but-should-be-6fc</link>
      <guid>https://dev.to/the_aiproducer_5ec354687/7-free-browser-apis-youre-probably-not-using-but-should-be-6fc</guid>
      <description>&lt;p&gt;Most developers reach for libraries the moment they need clipboard access, notifications, or file handling. But modern browsers have built-in APIs for all of these — zero dependencies, zero bundle size.&lt;/p&gt;

&lt;p&gt;Here are seven browser APIs that can replace common libraries in your projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The Clipboard API
&lt;/h2&gt;

&lt;p&gt;Instead of importing clipboard libraries, use &lt;code&gt;navigator.clipboard&lt;/code&gt;:&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="c1"&gt;// Copy text to clipboard&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clipboard&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello, world!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Read from clipboard&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clipboard&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readText&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Works in all modern browsers. Requires a secure context (HTTPS or localhost).&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The Intersection Observer API
&lt;/h2&gt;

&lt;p&gt;This replaced scroll-event-based lazy loading and "is element visible?" logic. Use it for infinite scroll, reveal animations, or analytics:&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;observer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;IntersectionObserver&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;entries&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="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entry&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;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isIntersecting&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;visible&lt;/span&gt;&lt;span class="dl"&gt;'&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="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.animate-on-scroll&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;observer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;observe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No scroll listeners. No &lt;code&gt;requestAnimationFrame&lt;/code&gt;. The browser handles it efficiently.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The Notification API
&lt;/h2&gt;

&lt;p&gt;Push notifications without a service worker (for simple use cases):&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Notification&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;permission&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;granted&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Notification&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Task Complete&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Your build finished in 12 seconds.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;icon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/favicon.ico&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&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;Notification&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;permission&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;denied&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;Notification&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;requestPermission&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Great for task timers, build tools, or admin dashboards.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The File System Access API
&lt;/h2&gt;

&lt;p&gt;This lets users pick files or directories and gives you read/write access. It replaces &lt;code&gt;&amp;lt;input type="file"&amp;gt;&lt;/code&gt; for more complex use cases:&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;fileHandle&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;showOpenFilePicker&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;types&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;JSON&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;accept&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.json&lt;/span&gt;&lt;span class="dl"&gt;'&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="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fileHandle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getFile&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;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also write back with &lt;code&gt;fileHandle.createWritable()&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. The Screen Wake Lock API
&lt;/h2&gt;

&lt;p&gt;Prevent the screen from dimming during long-running processes (presentations, timers, dashboards):&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;wakeLock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wakeLock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;screen&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Later: wakeLock.release();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Useful for presentation apps, Pomodoro timers, or monitoring dashboards.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. The Vibration API
&lt;/h2&gt;

&lt;p&gt;Haptic feedback for mobile web apps:&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="c1"&gt;// Short vibration (common pattern)&lt;/span&gt;
&lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;vibrate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Pattern: vibrate, pause, vibrate&lt;/span&gt;
&lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;vibrate&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Works on Android. iOS Safari ignores it (as of 2026).&lt;/p&gt;

&lt;h2&gt;
  
  
  7. The EyeDropper API (Chrome 95+)
&lt;/h2&gt;

&lt;p&gt;Let users pick colors from anywhere on their screen:&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;eyeDropper&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;EyeDropper&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;try&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;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;eyeDropper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sRGBHex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// '#ff5733'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// User cancelled&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No need for a color picker library.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Use Browser APIs vs Libraries
&lt;/h2&gt;

&lt;p&gt;The rule is simple: if the browser has it, use it. Libraries make sense when you need cross-browser normalization, polyfills for older browsers, or significantly more features than the native API offers.&lt;/p&gt;

&lt;p&gt;For most single-page apps, dashboards, and tools, these seven APIs handle common tasks without adding a single byte to your bundle.&lt;/p&gt;

&lt;p&gt;I maintain a collection of &lt;a href="https://nguyenminhduc9988.github.io/" rel="noopener noreferrer"&gt;free browser-based tools&lt;/a&gt; that use these APIs extensively — check them out if you want to see them in production code.&lt;/p&gt;

&lt;p&gt;What browser API do you use most? Any I missed?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>tools</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I Built 30 AI Prompts for Marketers &amp; Copywriters — Every Prompt Tested in Real Campaigns</title>
      <dc:creator>The AI producer</dc:creator>
      <pubDate>Fri, 03 Jul 2026 07:36:32 +0000</pubDate>
      <link>https://dev.to/the_aiproducer_5ec354687/i-built-30-ai-prompts-for-marketers-copywriters-every-prompt-tested-in-real-campaigns-4jm7</link>
      <guid>https://dev.to/the_aiproducer_5ec354687/i-built-30-ai-prompts-for-marketers-copywriters-every-prompt-tested-in-real-campaigns-4jm7</guid>
      <description>&lt;h1&gt;
  
  
  I Built 30 AI Prompts for Marketers &amp;amp; Copywriters — Every Prompt Tested in Real Campaigns
&lt;/h1&gt;

&lt;p&gt;Marketers and copywriters: stop staring at blank screens. I've battle-tested 30 AI prompts across real campaigns — from hook-heavy headlines to objection-crushing ad copy. Every prompt is copy-paste ready for ChatGPT, Claude, or any AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Pack Exists
&lt;/h2&gt;

&lt;p&gt;I've run marketing for 3 years across SaaS, e-commerce, and info products. The bottleneck is always copy production speed. These prompts compress hours of drafting into minutes of editing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Inside (30 Prompts)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Social Media Hooks (1-6)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Generate scroll-stopping hooks for LinkedIn, Twitter/X, and Threads&lt;/li&gt;
&lt;li&gt;Write viral thread openings that drive engagement&lt;/li&gt;
&lt;li&gt;Create carousel slide copy from a single topic&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Email Marketing (7-14)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Write subject lines that get 40%+ open rates&lt;/li&gt;
&lt;li&gt;Draft welcome sequences that convert subscribers to buyers&lt;/li&gt;
&lt;li&gt;Create abandoned cart emails that recover revenue&lt;/li&gt;
&lt;li&gt;Write re-engagement campaigns for cold lists&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Landing Page Copy (15-20)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Generate above-the-fold headline + subhead combinations&lt;/li&gt;
&lt;li&gt;Write benefit-driven feature sections from product specs&lt;/li&gt;
&lt;li&gt;Create social proof sections with specific formatting&lt;/li&gt;
&lt;li&gt;Draft CTA copy variations for different funnel stages&lt;/li&gt;
&lt;li&gt;Generate objection-handling FAQ sections&lt;/li&gt;
&lt;li&gt;Write urgency/scarcity elements that feel authentic&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Content Marketing (21-26)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Generate blog post outlines from keyword research data&lt;/li&gt;
&lt;li&gt;Write SEO-optimized meta descriptions at scale&lt;/li&gt;
&lt;li&gt;Create content pillar frameworks for topic clusters&lt;/li&gt;
&lt;li&gt;Draft thought leadership angles from product features&lt;/li&gt;
&lt;li&gt;Generate listicle variations that avoid clickbait&lt;/li&gt;
&lt;li&gt;Write how-to article structures with expert positioning&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ad Copy &amp;amp; Creative (27-30)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Generate Google Ads headlines and descriptions in compliance&lt;/li&gt;
&lt;li&gt;Write Facebook ad copy for different audience segments&lt;/li&gt;
&lt;li&gt;Create product description frameworks for e-commerce&lt;/li&gt;
&lt;li&gt;Draft retargeting ad copy for different funnel stages&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get the Full Pack
&lt;/h2&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://ducminh5.gumroad.com/l/marketing-copywriting-prompts" rel="noopener noreferrer"&gt;30 AI Prompts for Marketers and Copywriters on Gumroad ($5)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use code &lt;strong&gt;SAVE40&lt;/strong&gt; for 40% off, or &lt;strong&gt;FLASH50&lt;/strong&gt; for 50% off (first 20 uses).&lt;/p&gt;

&lt;h2&gt;
  
  
  More Resources for Marketers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://nguyenminhduc9988.github.io/duc-store/" rel="noopener noreferrer"&gt;Duc Digital Store&lt;/a&gt;&lt;/strong&gt; — 19 digital products including prompt libraries, AI toolkits, and cheat sheets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://bigwinner.work/store/" rel="noopener noreferrer"&gt;BigWinner.work Store&lt;/a&gt;&lt;/strong&gt; — 12 products across prompts, checklists, and frameworks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://nguyenminhduc9988.github.io/free-tools-hub/" rel="noopener noreferrer"&gt;68 Free Developer Tools&lt;/a&gt;&lt;/strong&gt; — No signup, no limits, just tools&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://nguyenminhduc9988.github.io/" rel="noopener noreferrer"&gt;Duc Nguyen&lt;/a&gt; — Developer &amp;amp; Maker&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tools</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>I Replaced My Entire Productivity Stack With AI Prompts — Here's What Actually Worked</title>
      <dc:creator>The AI producer</dc:creator>
      <pubDate>Fri, 03 Jul 2026 04:56:47 +0000</pubDate>
      <link>https://dev.to/the_aiproducer_5ec354687/i-replaced-my-entire-productivity-stack-with-ai-prompts-heres-what-actually-worked-1e5l</link>
      <guid>https://dev.to/the_aiproducer_5ec354687/i-replaced-my-entire-productivity-stack-with-ai-prompts-heres-what-actually-worked-1e5l</guid>
      <description>&lt;h1&gt;
  
  
  I Replaced My Entire Productivity Stack With AI Prompts — Here's What Actually Worked
&lt;/h1&gt;

&lt;p&gt;For 30 days, I cancelled Sunsama, stopped using Motion, and replaced 5 paid apps with a set of ChatGPT prompts. Here's what happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Setup
&lt;/h2&gt;

&lt;p&gt;I tracked every productivity action for 30 days. Then I wrote prompts for each one — morning planning, standup prep, meeting notes, weekly reviews, content creation, and evening wind-down.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Actually Saved Time
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Morning Priority Sorting (saves 15 min/day)
&lt;/h3&gt;

&lt;p&gt;Instead of opening a planner app, I paste my task list into a prompt that ranks by impact/effort matrix. It takes 3 seconds and I get a clear priority order.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Standup Prep (saves 10 min/day)
&lt;/h3&gt;

&lt;p&gt;A prompt that turns yesterday's commits + today's calendar into a concise standup update. No more scrambling before the call.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Weekly Review (saves 30 min/week)
&lt;/h3&gt;

&lt;p&gt;40 reflection questions that I run through every Sunday. This single habit has had more impact on my productivity than any app I've ever paid for.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Content Creation (saves 2+ hours/week)
&lt;/h3&gt;

&lt;p&gt;Instead of staring at a blank editor, I use prompts for outlines, first drafts, SEO optimization, and editing passes. The content isn't AI-generated slop — it's my ideas structured faster.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Evening Wind-Down (improves sleep quality)
&lt;/h3&gt;

&lt;p&gt;A prompt that helps me process the day, identify what I'm grateful for, and mentally close open loops. Replaced my Headspace subscription.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Math
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;App&lt;/th&gt;
&lt;th&gt;Cost/year&lt;/th&gt;
&lt;th&gt;Replaced by&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sunsama&lt;/td&gt;
&lt;td&gt;$60&lt;/td&gt;
&lt;td&gt;Morning Routine + Weekly Reset prompts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Motion&lt;/td&gt;
&lt;td&gt;$96&lt;/td&gt;
&lt;td&gt;Workday Prompts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jasper&lt;/td&gt;
&lt;td&gt;$480&lt;/td&gt;
&lt;td&gt;Content Creator + Solopreneur Vault&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Calm&lt;/td&gt;
&lt;td&gt;$70&lt;/td&gt;
&lt;td&gt;Evening Wind-Down prompts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Copy.ai&lt;/td&gt;
&lt;td&gt;$288&lt;/td&gt;
&lt;td&gt;Content Creator prompts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$994&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$40 in prompt packs&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What Didn't Work
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Generic "write me a blog post" prompts&lt;/strong&gt; — Too vague, output is generic. You need structured, domain-specific prompts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompts that try to do everything&lt;/strong&gt; — The best prompts do ONE thing well. My morning prompt doesn't try to also plan my week.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Using prompts without a system&lt;/strong&gt; — The prompts work because I use them consistently at the same time every day.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Prompt Packs I Built
&lt;/h2&gt;

&lt;p&gt;After 30 days of testing, I packaged the best prompts into collections. Each one is focused on a specific daily workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://ducminh5.gumroad.com/l/morning-routine-prompts" rel="noopener noreferrer"&gt;Morning Routine Prompts&lt;/a&gt;&lt;/strong&gt; — 15 prompts for morning planning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://ducminh5.gumroad.com/l/weekly-reset-checklist" rel="noopener noreferrer"&gt;Weekly Reset Checklist&lt;/a&gt;&lt;/strong&gt; — 40 reflection questions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://ducminh5.gumroad.com/l/workday-prompts" rel="noopener noreferrer"&gt;Workday Prompts&lt;/a&gt;&lt;/strong&gt; — 20 prompts for your entire workday&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://ducminh5.gumroad.com/l/solopreneur-prompt-vault" rel="noopener noreferrer"&gt;Solopreneur Prompt Vault&lt;/a&gt;&lt;/strong&gt; — 50 prompts for one-person businesses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://ducminh5.gumroad.com/l/content-creator-prompts" rel="noopener noreferrer"&gt;Content Creator Prompts&lt;/a&gt;&lt;/strong&gt; — 30 prompts for content production&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Use code &lt;strong&gt;SAVE40&lt;/strong&gt; for 40% off any pack, or &lt;strong&gt;FLASH50&lt;/strong&gt; for 50% off (first 20 buyers).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Real Lesson
&lt;/h2&gt;

&lt;p&gt;The productivity app industry sells you complexity. You don't need 15 apps with 200 features each. You need 5-10 good prompts that you use consistently.&lt;/p&gt;

&lt;p&gt;The prompts aren't magic — they're just structured thinking. But structured thinking, applied consistently, is worth more than any subscription.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What productivity apps have you replaced with AI? Let me know in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tools</category>
      <category>productivity</category>
      <category>ai</category>
    </item>
    <item>
      <title>I Replaced 7 Productivity Apps With 200 AI Prompts — Here's What Happened</title>
      <dc:creator>The AI producer</dc:creator>
      <pubDate>Fri, 03 Jul 2026 03:46:45 +0000</pubDate>
      <link>https://dev.to/the_aiproducer_5ec354687/i-replaced-7-productivity-apps-with-200-ai-prompts-heres-what-happened-3eh9</link>
      <guid>https://dev.to/the_aiproducer_5ec354687/i-replaced-7-productivity-apps-with-200-ai-prompts-heres-what-happened-3eh9</guid>
      <description>&lt;p&gt;I used to juggle Notion, Todoist, RescueTime, Forest, a bullet journal, three browser extensions, and a whiteboard I never looked at.&lt;/p&gt;

&lt;p&gt;Then I started building prompt packs — structured AI prompts for specific moments in my day. Six months later, I've consolidated my entire productivity system into ChatGPT conversations.&lt;/p&gt;

&lt;p&gt;Here's what I replaced, what I use instead, and the one thing I didn't expect.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Actually Dropped
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Notion → Prompt pack for weekly planning.&lt;/strong&gt; I spent 45 minutes every Sunday maintaining a Notion workspace. Now I run through &lt;a href="https://ducminh5.gumroad.com/l/weekly-reset-checklist" rel="noopener noreferrer"&gt;a 40-question weekly reset checklist&lt;/a&gt; that surfaces exactly what I need to know: what shipped, what stalled, and what changes this week. Takes 20 minutes. The structured questions caught patterns my free-form Notion notes never did — like the fact that 60% of my "urgent" tasks could have been batched on Monday morning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Todoist → Workday prompt flow.&lt;/strong&gt; Instead of maintaining a task list that grew faster than I could clear it, I now use &lt;a href="https://ducminh5.gumroad.com/l/workday-prompts" rel="noopener noreferrer"&gt;a 20-prompt workday system&lt;/a&gt; that generates my actual daily plan from context. Standup prep, commit messages, PR descriptions, test case generation — each has a specific prompt. The "end-of-day shutdown" prompt alone replaced my anxious "did I forget something" scrolling habit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forest → Morning routine prompts.&lt;/strong&gt; I still like the pomodoro concept, but &lt;a href="https://ducminh5.gumroad.com/l/morning-routine-prompts" rel="noopener noreferrer"&gt;the morning routine pack&lt;/a&gt; starts my day with something more valuable than focus time: intention. Five prompts for priority triage, energy mapping, and standup preparation. I run through them while my coffee brews.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Three browser extensions → Single content creation flow.&lt;/strong&gt; As a dev who writes documentation and blog posts, I was using extensions for grammar checking, headline analysis, and readability scoring. &lt;a href="https://ducminh5.gumroad.com/l/content-creator-prompts" rel="noopener noreferrer"&gt;The content creator prompt pack&lt;/a&gt; handles all of that: ideation, outlining, drafting, and self-editing. I went from publishing one article per month to three per week.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solopreneur Problem
&lt;/h2&gt;

&lt;p&gt;The biggest gap was business strategy. As a solo founder, I needed prompts for market validation, pricing, customer communication, and growth — things no productivity app covers. &lt;a href="https://ducminh5.gumroad.com/l/solopreneur-prompt-vault" rel="noopener noreferrer"&gt;The solopreneur prompt vault&lt;/a&gt; became my AI co-founder: 50 prompts covering the full spectrum of running a one-person business.&lt;/p&gt;

&lt;h2&gt;
  
  
  The One Thing I Didn't Expect
&lt;/h2&gt;

&lt;p&gt;The evening prompts. I added &lt;a href="https://ducminh5.gumroad.com/l/evening-winddown-prompts" rel="noopener noreferrer"&gt;a wind-down pack&lt;/a&gt; expecting it to be the least useful. Instead, it changed my sleep. The "three wins" prompt — where you identify three things that went well today — genuinely shifted how I think about progress. Bad days feel survivable when you can name three concrete wins, even small ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Still Keep
&lt;/h2&gt;

&lt;p&gt;I kept one app: a simple text file for capturing random thoughts throughout the day. Everything else runs through prompts now. The system is lighter, faster, and more personalized because I can tweak prompts for exactly my context instead of adapting my workflow to an app's assumptions.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Build Your Own System
&lt;/h2&gt;

&lt;p&gt;Start with one pack. The workday prompts are the most broadly useful — they cover the core mechanics of any developer's day. Add the morning routine if you struggle with intention-setting. Add the weekly reset if you want better retrospectives without the overhead.&lt;/p&gt;

&lt;p&gt;All the packs are pay-what-you-want, so you can try the cheaper ones first. The &lt;a href="https://nguyenminhduc9988.github.io/duc-store/" rel="noopener noreferrer"&gt;full collection&lt;/a&gt; covers morning, workday, evening, weekly, content creation, freelancing, and solopreneurship.&lt;/p&gt;

&lt;p&gt;The key insight: prompts aren't about AI replacing your thinking. They're about externalizing the mechanical parts of knowledge work — formatting, structuring, checking — so your actual brainpower goes to the hard problems that deserve it.&lt;/p&gt;

&lt;p&gt;What productivity apps would you replace with AI prompts? I'm curious what other people's stacks look like.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;All prompt packs mentioned are available on &lt;a href="https://nguyenminhduc9988.github.io/duc-store/" rel="noopener noreferrer"&gt;my store&lt;/a&gt;. They're pay-what-you-want because I think developer tools should be accessible.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>ai</category>
      <category>tools</category>
    </item>
    <item>
      <title>How I Automated My Entire Developer Day Using Only ChatGPT Prompts (A Real Workflow)</title>
      <dc:creator>The AI producer</dc:creator>
      <pubDate>Fri, 03 Jul 2026 02:35:07 +0000</pubDate>
      <link>https://dev.to/the_aiproducer_5ec354687/how-i-automated-my-entire-developer-day-using-only-chatgpt-prompts-a-real-workflow-1nob</link>
      <guid>https://dev.to/the_aiproducer_5ec354687/how-i-automated-my-entire-developer-day-using-only-chatgpt-prompts-a-real-workflow-1nob</guid>
      <description>&lt;p&gt;I used to start each workday by staring at my editor for 15 minutes, figuring out what to do first. Then I'd waste another 20 minutes in standup trying to articulate my progress. By evening, I'd close my laptop with a vague sense of having done things but no idea what I actually accomplished.&lt;/p&gt;

&lt;p&gt;That changed when I stopped using ChatGPT as a question-answer tool and started using it as a day-structure tool. Here's the exact workflow I built — and the prompts behind each step.&lt;/p&gt;

&lt;h2&gt;
  
  
  6:30 AM — Morning Structure
&lt;/h2&gt;

&lt;p&gt;Before I open any code, I run one prompt that sets up my entire day:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Here are my top 5 tasks for today: [paste tasks]
Here are my meetings: [paste times]
My energy level right now: [1-10]
Generate a time-blocked schedule. Put the hardest task during my peak energy window. Include 15-minute buffers between meetings.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key insight: don't ask ChatGPT to &lt;em&gt;tell&lt;/em&gt; you what to do. Tell it what you need to do and ask it to &lt;em&gt;organize&lt;/em&gt; it. The model is great at scheduling constraints — it handles buffer times, energy matching, and meeting conflicts better than any calendar app I've tried.&lt;/p&gt;

&lt;p&gt;I keep 15 variations of this prompt in a pack I built — each one targets a different morning scenario (heavy meeting day, deep work day, deadline day, etc.).&lt;/p&gt;

&lt;h2&gt;
  
  
  9:00 AM — Standup Prep
&lt;/h2&gt;

&lt;p&gt;My standups used to be rambling updates that wasted everyone's time. Now I run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Here is my git log from yesterday: [paste]
Here are the tickets I worked on: [paste]
Generate a 3-sentence standup update: what I did, what I'm doing, what's blocked.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three sentences. That's it. My team stopped asking follow-up questions because the updates became clearer.&lt;/p&gt;

&lt;h2&gt;
  
  
  10:00 AM — Code Review
&lt;/h2&gt;

&lt;p&gt;This is where the biggest time save happened. Instead of writing vague "looks good LGTM" comments, I paste the diff and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Review this PR diff. Rate each section:
- 🔴 Must fix (will cause bugs)
- 🟡 Suggested (improves quality)
- 🟢 Nitpick (style preference)
Only flag 🔴 and 🟡 items. Explain why.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;My PR reviews went from 10 minutes of skimming to 2 minutes of targeted feedback. Reviewers on my team started asking what tool I was using.&lt;/p&gt;

&lt;h2&gt;
  
  
  2:00 PM — Deep Work Sprint
&lt;/h2&gt;

&lt;p&gt;After lunch, I do a single 90-minute deep work block. Before starting:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I'm working on: [describe the feature/bug]
Here's my current approach: [paste code or approach]
Generate: 1) Three things that could go wrong, 2) Two edge cases I should test, 3) One alternative approach that might be cleaner.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prompt catches about 60% of the bugs I would have discovered later during testing. Not perfect, but significantly better than my previous "just start coding" approach.&lt;/p&gt;

&lt;h2&gt;
  
  
  5:30 PM — Shutdown Ritual
&lt;/h2&gt;

&lt;p&gt;Before closing my laptop, I run a wind-down prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Here's what I planned to do today: [paste morning plan]
Here's what I actually did: [paste git log + completed tickets]
1) What did I accomplish?
2) What carried over?
3) One thing I'm proud of today
4) One thing I'll do differently tomorrow
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This 2-minute ritual replaced the "I feel like I did nothing" anxiety with a concrete sense of progress.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sunday — Weekly Reset
&lt;/h2&gt;

&lt;p&gt;Every Sunday evening, I do a 15-minute review:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Weekly review:
- Tasks completed: [paste]
- Tasks that carried over: [paste]
- Energy patterns: when did I feel most/least productive?
- What should I change about next week's schedule?
Generate a weekly summary and next week's priority list.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This single prompt caught the pattern that I was most productive between 9-11 AM on coding tasks — and almost useless between 2-3 PM (post-lunch crash). I restructured my schedule around that and gained roughly 2 productive hours per week.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Boring Practical Details
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I use ChatGPT (GPT-4o) for structured prompts like scheduling and code review. Claude for creative tasks like writing and brainstorming. The model choice matters less than prompt specificity.&lt;/li&gt;
&lt;li&gt;I keep a text file with my 15-20 go-to prompts. Not 500. Not a database. A text file. I copy-paste the relevant one and fill in the brackets.&lt;/li&gt;
&lt;li&gt;The whole routine takes about 20 minutes total across the day. The return is easily 2+ hours of recovered time from better scheduling, faster reviews, and fewer "what am I doing" moments.&lt;/li&gt;
&lt;li&gt;It took about two weeks to make this habitual. The first three days I forgot to run the morning prompt and the whole day felt unstructured again.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where to Find More
&lt;/h2&gt;

&lt;p&gt;I've collected all the prompts I use daily — morning routine, workday standups, code review templates, evening reflection, weekly resets — into organized packs. They're at &lt;a href="https://nguyenminhduc9988.github.io/duc-store/" rel="noopener noreferrer"&gt;my store&lt;/a&gt; if you want the full collection. The &lt;a href="https://ducminh5.gumroad.com/l/weekly-reset-checklist" rel="noopener noreferrer"&gt;Weekly Reset&lt;/a&gt; ($2.99) is the cheapest entry point if you just want to try the Sunday ritual.&lt;/p&gt;

&lt;p&gt;The point isn't the prompts themselves — it's the structure. Having a repeatable system for starting, executing, and closing each day removes the decision fatigue that kills most developer productivity.&lt;/p&gt;

&lt;p&gt;What does your daily workflow look like? I'm curious what other people have automated.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tools</category>
      <category>opensource</category>
    </item>
    <item>
      <title>15 AI Prompts That Actually Save Me Hours Every Week as a Developer</title>
      <dc:creator>The AI producer</dc:creator>
      <pubDate>Thu, 02 Jul 2026 23:01:28 +0000</pubDate>
      <link>https://dev.to/the_aiproducer_5ec354687/15-ai-prompts-that-actually-save-me-hours-every-week-as-a-developer-nm2</link>
      <guid>https://dev.to/the_aiproducer_5ec354687/15-ai-prompts-that-actually-save-me-hours-every-week-as-a-developer-nm2</guid>
      <description>&lt;h2&gt;
  
  
  I Tried Hundreds of AI Prompts — These 15 Actually Stick
&lt;/h2&gt;

&lt;p&gt;After using AI assistants daily for 18 months, I've accumulated a graveyard of prompts that sounded great but never made it into my workflow. These 15 are the ones I keep coming back to — not because they're flashy, but because they save real time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Morning System (3 prompts)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Daily Intention Setter&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Review my calendar, task list, and recent Slack messages. Suggest the 3 highest-impact things I should focus on today and why."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This single prompt replaced my 15-minute morning planning ritual. The AI pulls from actual context instead of my gut feeling about what's urgent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Technical Debt Triage&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Here's my codebase's open issues list: [paste]. Categorize each as quick-win (&amp;lt;30min), medium (1-2h), or strategic (&amp;gt;half-day). Suggest this week's sprint."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Turns chaos into a plan. Works especially well with GitHub issue lists pasted directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Email Briefing&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Summarize these 12 unread emails into: (a) action required from me, (b) FYI only, (c) can skip. Be ruthless."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A 20-minute email session becomes 3 minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deep Work (4 prompts)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;4. Code Review Primer&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I'm about to review a PR that touches [module]. What are the common pitfalls, security concerns, and edge cases I should check?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I paste this before every code review. It catches things I'd otherwise miss at 5 PM on a Friday.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Debugging Hypotheses&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Here's the error: [paste]. Generate 5 hypotheses for the root cause, ranked by likelihood. For each, suggest a diagnostic step."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Better than rubber-ducking. The AI generates hypotheses I wouldn't think of.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Documentation Draft&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Here's my code: [paste]. Write a README section explaining what it does, how to use it, and gotchas. Include a code example."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Documentation that doesn't feel like a chore.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Test Case Generator&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Here's a function: [paste]. Generate edge cases I haven't considered, including: empty input, null values, unicode characters, race conditions."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This has caught bugs in production code before they shipped.&lt;/p&gt;

&lt;h3&gt;
  
  
  Communication (4 prompts)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;8. Status Report Writer&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Here are my Jira tickets from this week: [paste]. Write a one-paragraph status update for the team standup and a detailed version for the sprint review."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Two documents from one paste. My PM started asking if I hired an assistant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. PR Description Template&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Here are my commits: [paste]. Write a PR description with: what changed, why, testing done, and any breaking changes."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Consistent PR descriptions without the formatting effort.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Technical Explanation Simplifier&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Explain [complex concept] to a non-technical stakeholder using an analogy. Keep it under 200 words."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For those moments when someone asks "why can't we just..." in the standup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Planning (4 prompts)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;11. Weekly Retrospective&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Here's what I accomplished this week: [list]. Here's what blocked me: [list]. Suggest 3 process improvements for next week."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Structured reflection that actually leads to change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12. Architecture Decision Framework&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I need to decide between [Option A] and [Option B] for [use case]. Compare them on: performance, maintainability, team familiarity, and migration cost. Don't pick a winner — just lay out the tradeoffs."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For when you need to think clearly, not just decide quickly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;13. Learning Path Generator&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I want to learn [technology] in 30 days. I already know [prerequisites]. Create a week-by-week plan with specific resources and a project for each week."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Better than generic tutorials because it accounts for what you already know.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;14. Meeting Prep&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I have a meeting about [topic] with [attendees] in 30 minutes. What are the 3 key questions I should ask and what data should I have ready?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Shows up prepared without the 30-minute scramble.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;15. Weekly Reset&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Ask me 10 reflection questions about my week: wins, lessons, energy levels, relationships, and priorities. Wait for my answers, then help me plan next week."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The most valuable 15 minutes of my week.&lt;/p&gt;




&lt;h2&gt;
  
  
  Want the Full Collection?
&lt;/h2&gt;

&lt;p&gt;I bundled these into organized prompt packs — morning routines, workday systems, evening wind-downs, and more. Over 200 prompts across 6 packs, all copy-paste ready for ChatGPT, Claude, or any AI.&lt;/p&gt;

&lt;p&gt;Use code &lt;strong&gt;DEV40&lt;/strong&gt; for 40% off any pack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://ducminh5.gumroad.com/l/morning-routine-prompts" rel="noopener noreferrer"&gt;Morning Routine Prompts&lt;/a&gt; — 15 prompts for focused mornings&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ducminh5.gumroad.com/l/evening-winddown-prompts" rel="noopener noreferrer"&gt;Evening Wind-Down Prompts&lt;/a&gt; — 25 prompts for better sleep&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ducminh5.gumroad.com/l/solopreneur-prompt-vault" rel="noopener noreferrer"&gt;Solopreneur Prompt Vault&lt;/a&gt; — 50 prompts for one-person businesses&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ducminh5.gumroad.com/l/content-creator-prompts" rel="noopener noreferrer"&gt;Content Creator Prompts&lt;/a&gt; — 30 prompts for writers and creators&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ducminh5.gumroad.com/l/workday-prompts" rel="noopener noreferrer"&gt;Workday Prompts&lt;/a&gt; — 20 prompts for the full workday&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More free tools at &lt;a href="https://nguyenminhduc9988.github.io/free-tools-hub/" rel="noopener noreferrer"&gt;ToolNest — 68 Free Developer Tools&lt;/a&gt; and the &lt;a href="https://nguyenminhduc9988.github.io/duc-store/" rel="noopener noreferrer"&gt;Digital Product Store&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Which prompts from this list would you actually use? I'm curious what sticks for other developers.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tools</category>
      <category>opensource</category>
    </item>
    <item>
      <title>15 Git Commands That Save Me Hours Every Week (And Why Most Developers Don't Know Them)</title>
      <dc:creator>The AI producer</dc:creator>
      <pubDate>Thu, 02 Jul 2026 21:33:53 +0000</pubDate>
      <link>https://dev.to/the_aiproducer_5ec354687/15-git-commands-that-save-me-hours-every-week-and-why-most-developers-dont-know-them-4gd9</link>
      <guid>https://dev.to/the_aiproducer_5ec354687/15-git-commands-that-save-me-hours-every-week-and-why-most-developers-dont-know-them-4gd9</guid>
      <description>&lt;p&gt;Most developers use 10 Git commands and Google the rest. That wastes 15+ minutes every day searching for the right syntax.&lt;/p&gt;

&lt;p&gt;After 8 years of daily Git usage, here are the 15 commands that actually save me hours every week — organized by the problem they solve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Daily Workflow (5 commands)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;git switch -c &amp;lt;branch&amp;gt;&lt;/code&gt; — Create and switch in one step
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git switch &lt;span class="nt"&gt;-c&lt;/span&gt; feature/payment-refactor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replaces &lt;code&gt;git checkout -b&lt;/code&gt;. Cleaner, explicit intent. Added in Git 2.23.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;code&gt;git restore --staged &amp;lt;file&amp;gt;&lt;/code&gt; — Unstage without losing changes
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git restore &lt;span class="nt"&gt;--staged&lt;/span&gt; package-lock.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replaces &lt;code&gt;git reset HEAD &amp;lt;file&amp;gt;&lt;/code&gt;. Your working directory stays intact.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;code&gt;git switch -&lt;/code&gt; — Jump back to previous branch
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git switch feature/auth
&lt;span class="c"&gt;# ... work ...&lt;/span&gt;
git switch -  &lt;span class="c"&gt;# back to main&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instant context switching. No need to remember branch names.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;code&gt;git commit -v&lt;/code&gt; — See diff in your editor while committing
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Shows the full diff in your commit message buffer. Catches stray &lt;code&gt;console.log&lt;/code&gt; before they ship.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. &lt;code&gt;git log --oneline --graph --all -20&lt;/code&gt; — Visual history at a glance
&lt;/h3&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;--oneline&lt;/span&gt; &lt;span class="nt"&gt;--graph&lt;/span&gt; &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="nt"&gt;-20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alias this. You'll use it 20x/day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fixing Mistakes (5 commands)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6. &lt;code&gt;git commit --amend --no-edit&lt;/code&gt; — Fix the last commit silently
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add forgotten-file.js
git commit &lt;span class="nt"&gt;--amend&lt;/span&gt; &lt;span class="nt"&gt;--no-edit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adds staged changes to previous commit without opening editor.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. &lt;code&gt;git reset --soft HEAD~1&lt;/code&gt; — Undo commit, keep changes staged
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reset &lt;span class="nt"&gt;--soft&lt;/span&gt; HEAD~1
&lt;span class="c"&gt;# changes still staged, ready to re-commit properly&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Perfect for splitting one messy commit into two clean ones.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. &lt;code&gt;git restore &amp;lt;file&amp;gt;&lt;/code&gt; — Discard working directory changes
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git restore broken-experiment.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replaces &lt;code&gt;git checkout -- &amp;lt;file&amp;gt;&lt;/code&gt;. Safer — won't switch branches by accident.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. &lt;code&gt;git reflog&lt;/code&gt; — The time machine
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reflog
&lt;span class="c"&gt;# find the hash you want&lt;/span&gt;
git reset &lt;span class="nt"&gt;--hard&lt;/span&gt; &amp;lt;&lt;span class="nb"&gt;hash&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recovers "lost" commits, reset mistakes, rebase gone wrong. Never truly loses data.&lt;/p&gt;

&lt;h3&gt;
  
  
  10. &lt;code&gt;git bisect&lt;/code&gt; — Find the bug-introducing commit automatically
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git bisect start
git bisect bad HEAD
git bisect good v2.0.0
&lt;span class="c"&gt;# Git checks out middle commit — test, mark good/bad, repeat&lt;/span&gt;
git bisect reset
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Binary search through history. Finds the exact commit that broke something in log₂(n) steps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Branch Management (5 commands)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  11. &lt;code&gt;git branch --merged&lt;/code&gt; / &lt;code&gt;--no-merged&lt;/code&gt; — Clean up merged branches
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch &lt;span class="nt"&gt;--merged&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; main | xargs git branch &lt;span class="nt"&gt;-d&lt;/span&gt;
git branch &lt;span class="nt"&gt;--no-merged&lt;/span&gt;  &lt;span class="c"&gt;# shows work-in-progress&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Safe cleanup. &lt;code&gt;--merged&lt;/code&gt; only deletes fully merged branches.&lt;/p&gt;

&lt;h3&gt;
  
  
  12. &lt;code&gt;git worktree add ../hotfix main&lt;/code&gt; — Parallel work without stashing
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git worktree add ../hotfix main
&lt;span class="nb"&gt;cd&lt;/span&gt; ../hotfix
&lt;span class="c"&gt;# fix critical bug on main&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ../main
git worktree remove ../hotfix
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Multiple working directories from one repo. No stash/unstash dance.&lt;/p&gt;

&lt;h3&gt;
  
  
  13. &lt;code&gt;git push --force-with-lease&lt;/code&gt; — Safe force push
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push &lt;span class="nt"&gt;--force-with-lease&lt;/span&gt; origin feature/auth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fails if someone else pushed to the branch. Prevents overwriting teammates' work.&lt;/p&gt;

&lt;h3&gt;
  
  
  14. &lt;code&gt;git fetch --prune&lt;/code&gt; — Clean up dead remote refs
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git fetch &lt;span class="nt"&gt;--prune&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Removes local tracking branches for deleted remote branches. Run weekly.&lt;/p&gt;

&lt;h3&gt;
  
  
  15. &lt;code&gt;git maintenance start&lt;/code&gt; — Background repo optimization
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git maintenance start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Runs &lt;code&gt;gc&lt;/code&gt;, commit-graph, prefetch in background. Keeps large repos fast automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  More Developer Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🛠️ &lt;strong&gt;&lt;a href="https://nguyenminhduc9988.github.io/free-tools-hub/" rel="noopener noreferrer"&gt;68+ Free Developer Tools&lt;/a&gt;&lt;/strong&gt; — No signup, no limits&lt;/li&gt;
&lt;li&gt;📚 &lt;strong&gt;&lt;a href="https://nguyenminhduc9988.github.io/duc-store/" rel="noopener noreferrer"&gt;Digital Product Store&lt;/a&gt;&lt;/strong&gt; — 39 checklists, prompts, cheat sheets&lt;/li&gt;
&lt;li&gt;🏪 &lt;strong&gt;&lt;a href="https://bigwinner.work/store/" rel="noopener noreferrer"&gt;BigWinner.work Store&lt;/a&gt;&lt;/strong&gt; — All products in one hub&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>tools</category>
      <category>opensource</category>
      <category>git</category>
    </item>
    <item>
      <title>9 Git Mistakes That Broke My Codebase (And the Exact Command That Fixed Each One)</title>
      <dc:creator>The AI producer</dc:creator>
      <pubDate>Thu, 02 Jul 2026 16:49:45 +0000</pubDate>
      <link>https://dev.to/the_aiproducer_5ec354687/9-git-mistakes-that-broke-my-codebase-and-the-exact-command-that-fixed-each-one-3fi1</link>
      <guid>https://dev.to/the_aiproducer_5ec354687/9-git-mistakes-that-broke-my-codebase-and-the-exact-command-that-fixed-each-one-3fi1</guid>
      <description>&lt;p&gt;We've all been there. A &lt;code&gt;git push --force&lt;/code&gt; that wiped a teammate's work. A merge gone wrong. A commit on the wrong branch at 11pm. After years of using Git daily, I've made every mistake on this list — and each one taught me the one command that undoes it.&lt;/p&gt;

&lt;p&gt;Here are the 9 mistakes that caused the most pain, and the exact recovery command for each.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. I committed to the wrong branch
&lt;/h2&gt;

&lt;p&gt;You meant to commit on &lt;code&gt;feature/login&lt;/code&gt;, but you were on &lt;code&gt;main&lt;/code&gt;. The commit is already there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch feature/login   &lt;span class="c"&gt;# create the branch at current commit&lt;/span&gt;
git reset &lt;span class="nt"&gt;--hard&lt;/span&gt; HEAD~1    &lt;span class="c"&gt;# move main back one commit&lt;/span&gt;
git checkout feature/login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The commit isn't lost — &lt;code&gt;git branch&lt;/code&gt; captured it before you moved &lt;code&gt;main&lt;/code&gt; back.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. I used &lt;code&gt;git push --force&lt;/code&gt; and wiped someone's work
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;--force&lt;/code&gt; overwrites the remote history. If a teammate pushed first, their work vanishes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix (use &lt;code&gt;--force-with-lease&lt;/code&gt; instead):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push &lt;span class="nt"&gt;--force-with-lease&lt;/span&gt; origin feature/login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;--force-with-lease&lt;/code&gt; checks that the remote hasn't moved since your last fetch. If it has, the push is rejected. This single flag has saved me more times than I can count.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. I ran &lt;code&gt;git reset --hard&lt;/code&gt; and "lost" uncommitted work
&lt;/h2&gt;

&lt;p&gt;You had hours of uncommitted changes, ran &lt;code&gt;git reset --hard&lt;/code&gt;, and panic set in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reflog
git checkout &amp;lt;commit-sha&amp;gt; &lt;span class="nt"&gt;--&lt;/span&gt; path/to/file
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git keeps unreachable objects for ~30 days. &lt;code&gt;git reflog&lt;/code&gt; shows every HEAD movement — find the commit where your work existed and restore it. Your changes are almost never truly gone.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. I merged the wrong branch and the history is a mess
&lt;/h2&gt;

&lt;p&gt;You merged &lt;code&gt;main&lt;/code&gt; into &lt;code&gt;feature&lt;/code&gt; by accident, and now the merge commit is polluting your branch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reset &lt;span class="nt"&gt;--hard&lt;/span&gt; ORIG_HEAD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;ORIG_HEAD&lt;/code&gt; points to where you were before the last dangerous operation (merge, reset, rebase). It's Git's built-in undo for the last "big" action.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. I accidentally added secrets to a commit (and pushed)
&lt;/h2&gt;

&lt;p&gt;You committed an API key and pushed to a public repo. Deleting it in a new commit isn't enough — it lives in history forever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git filter-repo &lt;span class="nt"&gt;--path&lt;/span&gt; .env &lt;span class="nt"&gt;--invert-paths&lt;/span&gt;
git push &lt;span class="nt"&gt;--force&lt;/span&gt;
&lt;span class="c"&gt;# THEN rotate the key immediately — assume it's compromised&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;a href="https://github.com/newren/git-filter-repo" rel="noopener noreferrer"&gt;&lt;code&gt;git filter-repo&lt;/code&gt;&lt;/a&gt; (the modern replacement for &lt;code&gt;filter-branch&lt;/code&gt;). But the real fix is prevention: &lt;strong&gt;rotate the secret immediately&lt;/strong&gt;. Once it's on a public remote, consider it leaked.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. I did a messy merge commit when I wanted a clean history
&lt;/h2&gt;

&lt;p&gt;Your pull request has 47 merge commits and looks like a bowl of spaghetti.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix (rebase before merging):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git fetch origin
git rebase origin/main
git push &lt;span class="nt"&gt;--force-with-lease&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rebasing replays your commits on top of the latest &lt;code&gt;main&lt;/code&gt;, giving a linear, readable history. Always rebase on your feature branch — never rebase a shared branch.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. I committed a huge file and the repo is now 500MB
&lt;/h2&gt;

&lt;p&gt;Someone committed a 200MB video. Now every clone is slow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git filter-repo &lt;span class="nt"&gt;--strip-blobs-bigger-than&lt;/span&gt; 10M
git push &lt;span class="nt"&gt;--force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This removes large blobs from history. Going forward, add the file to &lt;code&gt;.gitignore&lt;/code&gt; and consider &lt;a href="https://git-lfs.com/" rel="noopener noreferrer"&gt;Git LFS&lt;/a&gt; for legitimately large assets.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. I cherry-picked a commit and got confusing conflicts
&lt;/h2&gt;

&lt;p&gt;Cherry-picking is fragile — it applies a single commit's diff, which may not apply cleanly if surrounding code changed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix (understand what cherry-pick actually does):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git cherry-pick &amp;lt;sha&amp;gt;
&lt;span class="c"&gt;# if conflicts:&lt;/span&gt;
git mergetool        &lt;span class="c"&gt;# resolve manually&lt;/span&gt;
git cherry-pick &lt;span class="nt"&gt;--continue&lt;/span&gt;
&lt;span class="c"&gt;# to abort and start over:&lt;/span&gt;
git cherry-pick &lt;span class="nt"&gt;--abort&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;git cherry-pick --abort&lt;/code&gt; lets you bail out cleanly and rethink whether cherry-pick is even the right tool.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. I deleted a branch I still needed
&lt;/h2&gt;

&lt;p&gt;You ran &lt;code&gt;git branch -d feature/old&lt;/code&gt; and realized you still needed it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reflog                    &lt;span class="c"&gt;# find the commit the branch pointed to&lt;/span&gt;
git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; feature/old &amp;lt;sha&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Even deleted branches leave a trail in &lt;code&gt;git reflog&lt;/code&gt;. Find the SHA and recreate the branch pointing at it.&lt;/p&gt;




&lt;h2&gt;
  
  
  The pattern: &lt;code&gt;git reflog&lt;/code&gt; is your safety net
&lt;/h2&gt;

&lt;p&gt;Almost every "I lost my work" panic is solvable with &lt;code&gt;git reflog&lt;/code&gt;. It records every HEAD movement, even after resets and deletes. Git is designed to be forgiving — work is rarely gone forever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My daily safety routine:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Commit early, commit often (small commits are easy to undo)&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;--force-with-lease&lt;/code&gt;, never bare &lt;code&gt;--force&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Before any destructive command, check &lt;code&gt;git status&lt;/code&gt; and &lt;code&gt;git stash&lt;/code&gt; if unsure&lt;/li&gt;
&lt;li&gt;Learn &lt;code&gt;git reflog&lt;/code&gt; — it's the difference between panic and calm&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;If you found this useful, I keep a free collection of &lt;strong&gt;68 browser-based developer tools&lt;/strong&gt; (JSON formatter, regex tester, base64, JWT decoder, and more) — all client-side, no signup, no tracking:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://nguyenminhduc9988.github.io/free-tools-hub/" rel="noopener noreferrer"&gt;Free Tools Hub — 68 Tools&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And for a complete Git reference, I put together two guides — a &lt;strong&gt;Git Workflow Checklist&lt;/strong&gt; (47 commands for daily work) and a &lt;strong&gt;Git &amp;amp; GitHub Power User Toolkit&lt;/strong&gt; (50 commands and workflows):&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://ducminh5.gumroad.com/l/git-workflow-checklist" rel="noopener noreferrer"&gt;Git Workflow Checklist&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href="https://ducminh5.gumroad.com/l/qsyhfm" rel="noopener noreferrer"&gt;Git Power User Toolkit&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💸 &lt;strong&gt;Launch deal:&lt;/strong&gt; Use code &lt;strong&gt;DEV40&lt;/strong&gt; at checkout for &lt;strong&gt;40% off&lt;/strong&gt; any guide (limited to 100 uses).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What's the worst Git mistake you've recovered from? Drop it in the comments — I'm building a list of recovery stories.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tools</category>
      <category>opensource</category>
      <category>git</category>
    </item>
  </channel>
</rss>
