<!DOCTYPE html><html lang="en"> <head><!-- Global Metadata --><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><meta name="generator" content="Astro v5.8.1"><link rel="preload" href="/fonts/atkinson-regular.woff" as="font" type="font/woff" crossorigin><link rel="preload" href="/fonts/atkinson-bold.woff" as="font" type="font/woff" crossorigin><!-- Canonical URL --><link rel="canonical" href="https://cuong.io/"><!-- Primary Meta Tags --><title>Home | Code Centre</title><meta name="title" content="Home | Code Centre"><meta name="description" content="Welcome to Code Centre, a blog for developers and those who are interested in AIs."><!-- Open Graph / Facebook --><meta property="og:type" content="website"><meta property="og:url" content="https://cuong.io/"><meta property="og:title" content="Home | Code Centre"><meta property="og:description" content="Welcome to Code Centre, a blog for developers and those who are interested in AIs."><meta property="og:image" content="https://cuong.io/logo-vibe-code.png?v2"><!-- Twitter --><meta property="twitter:card" content="summary"><meta property="twitter:url" content="https://cuong.io/"><meta property="twitter:title" content="Home | Code Centre"><meta property="twitter:description" content="Welcome to Code Centre, a blog for developers and those who are interested in AIs."><meta property="twitter:image" content="https://cuong.io/logo-vibe-code.png?v2"><!-- Sitemap --><link rel="sitemap" href="/sitemap-index.xml"><!-- RSS Feed --><link rel="alternate" type="application/rss+xml" title="Home | Code Centre" href="https://cuong.io/rss.xml"><!-- Global Scripts --><script src="/js/theme.js"></script><script src="/js/scroll.js"></script><!-- Animation disabled: <script is:inline src="/js/animate.js"></script> --><script defer src="/js/copy.js"></script><!-- <ViewTransitions  /> --><script type="module">document.addEventListener("astro:before-swap",e=>[...e.newDocument.head.querySelectorAll('link[as="font"]')].forEach(o=>o.remove()));</script><link rel="stylesheet" href="/_astro/about.BrMOYwBC.css"></head> <body> <header id="header" class="w-full h-16 " data-astro-cid-3ef6ksr2> <div class="w-full h-full mx-auto px-5 max-w-[760px]">  <div class="relative h-full w-full" data-astro-cid-3ef6ksr2> <div class="absolute left-0 top-1/2 -translate-y-1/2 flex gap-6 items-center" data-astro-cid-3ef6ksr2> <a href="/" class="flex gap-1 text-current hover:text-black dark:hover:text-white transition-colors duration-300 ease-in-out" data-astro-cid-3ef6ksr2> <div class="uppercase text-base md:text-xl font-bold mt-1 md:mt-0" data-astro-cid-3ef6ksr2> Code Centre </div> </a> <!-- Mobile X Subscribe link --> <a href="https://x.com/codecentrevibe" target="_blank" rel="noopener noreferrer" class="flex md:hidden items-center gap-1 uppercase text-current hover:text-black dark:hover:text-white transition-colors duration-300 ease-in-out" data-astro-cid-3ef6ksr2> <svg class="w-4 h-4 fill-current" data-astro-cid-3ef6ksr2> <use href="/social.svg#twitter-x" data-astro-cid-3ef6ksr2></use> </svg> <span class="text-xs" data-astro-cid-3ef6ksr2>Subscribe</span> </a> <div class="border-l border-black/40 dark:border-white/40 h-[18px] hidden md:block" data-astro-cid-3ef6ksr2></div> <nav class="hidden md:flex items-center justify-center text-base gap-6 uppercase" data-astro-cid-3ef6ksr2> <a href="/" class="h-8 px-1 md:mt-1 text-current flex items-center justify-center transition-colors duration-300 ease-in-out border-b-4 border-black dark:border-white" data-astro-cid-3ef6ksr2>  Blogs </a><a href="/about" class="h-8 px-1 md:mt-1 text-current flex items-center justify-center transition-colors duration-300 ease-in-out hover:bg-black/5 dark:hover:bg-white/20 hover:text-black dark:hover:text-white" data-astro-cid-3ef6ksr2>  About </a><a href="https://x.com/codecentrevibe" target="_blank" rel="noopener noreferrer" class="h-8 px-1 md:mt-1 text-current flex items-center justify-center transition-colors duration-300 ease-in-out hover:bg-black/5 dark:hover:bg-white/20 hover:text-black dark:hover:text-white" data-astro-cid-3ef6ksr2> <svg class="w-4 h-4 mr-1 fill-current" data-astro-cid-3ef6ksr2> <use href="/social.svg#twitter-x" data-astro-cid-3ef6ksr2></use> </svg> Subscribe </a> </nav> </div> <nav aria-label="Site utilities" class="absolute right-0 top-1/2 -translate-y-1/2 flex gap-1" data-astro-cid-3ef6ksr2> <a href="/search" title="Search" aria-label="Search blog posts and projects on Code Centre" class="hidden md:flex size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-3ef6ksr2> <svg class="size-full" data-astro-cid-3ef6ksr2> <use href="/ui.svg#search" data-astro-cid-3ef6ksr2></use> </svg> </a> <a href="/rss.xml" target="_blank" title="RSS Feed" aria-label="Rss feed for Code Centre" class="hidden md:flex size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-3ef6ksr2> <svg class="size-full" data-astro-cid-3ef6ksr2> <use href="/ui.svg#rss" data-astro-cid-3ef6ksr2></use> </svg> </a> <button id="header-theme-button" title="Toggle Theme" aria-label="Toggle light and dark theme" class="hidden md:flex size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-3ef6ksr2> <svg class="size-full block dark:hidden" data-astro-cid-3ef6ksr2> <use href="/ui.svg#sun" data-astro-cid-3ef6ksr2></use> </svg> <svg class="size-full hidden dark:block" data-astro-cid-3ef6ksr2> <use href="/ui.svg#moon" data-astro-cid-3ef6ksr2></use> </svg> </button> <button id="header-drawer-button" title="Menu" aria-label="Toggle drawer open and closed" class="flex md:hidden size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-3ef6ksr2> <svg class="size-full" data-astro-cid-3ef6ksr2> <use href="/ui.svg#menu" data-astro-cid-3ef6ksr2></use> </svg> </button> </nav> </div>  </div> </header>  <script>
  function toggleDrawer() {
    const drawer = document.getElementById("drawer")
    const drawerButton = document.getElementById("header-drawer-button")
    drawer?.classList.toggle("open")
    drawerButton?.classList.toggle("open")
  }

  function initializeDrawerButton() {
    const drawerButton = document.getElementById("header-drawer-button")
    drawerButton?.addEventListener("click", toggleDrawer)
  }

  document.addEventListener("astro:after-swap", initializeDrawerButton)
  initializeDrawerButton()
</script> <div id="drawer" class="fixed inset-0 h-0 z-50 overflow-hidden flex flex-col items-center justify-center md:hidden bg-neutral-100 dark:bg-neutral-900 transition-[height] duration-300 ease-in-out" data-astro-cid-hxtyo74s> <!-- Close button aligned with header hamburger button --> <div class="absolute top-4 right-5" data-astro-cid-hxtyo74s> <button id="drawer-close-button" aria-label="Close menu" class="size-9 rounded-full p-2 items-center justify-center bg-black/10 dark:bg-white/10 hover:bg-black/20 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out flex" data-astro-cid-hxtyo74s> <svg class="size-full" data-astro-cid-hxtyo74s> <use href="/ui.svg#menu" data-astro-cid-hxtyo74s></use> </svg> </button> </div> <nav class="flex flex-col items-center space-y-2" data-astro-cid-hxtyo74s> <a href="/" class="flex items-center justify-center px-3 py-1 rounded-full hover:text-black dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/20 transition-colors duration-300 ease-in-out pointer-events-none bg-black dark:bg-white text-white dark:text-black" data-astro-cid-hxtyo74s>  Blogs </a><a href="/about" class="flex items-center justify-center px-3 py-1 rounded-full text-current hover:text-black dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/20 transition-colors duration-300 ease-in-out" data-astro-cid-hxtyo74s>  About </a> </nav> <div class="flex gap-1 mt-5" data-astro-cid-hxtyo74s> <a href="/search" aria-label="Search blog posts and projects on Code Centre" class="size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-hxtyo74s> <svg class="size-full" data-astro-cid-hxtyo74s> <use href="/ui.svg#search" data-astro-cid-hxtyo74s></use> </svg> </a> <a href="/rss.xml" target="_blank" aria-label="Rss feed for Code Centre" class="size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-hxtyo74s> <svg class="size-full" data-astro-cid-hxtyo74s> <use href="/ui.svg#rss" data-astro-cid-hxtyo74s></use> </svg> </a> <button id="drawer-theme-button" aria-label="Toggle light and dark theme" class="size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-hxtyo74s> <svg class="block dark:hidden size-full" data-astro-cid-hxtyo74s> <use href="/ui.svg#sun" data-astro-cid-hxtyo74s></use> </svg> <svg class="hidden dark:block size-full" data-astro-cid-hxtyo74s> <use href="/ui.svg#moon" data-astro-cid-hxtyo74s></use> </svg> </button> </div> </div>  <script>
  function closeDrawer() {
    const drawer = document.getElementById("drawer")
    const drawerButton = document.getElementById("header-drawer-button")
    drawer?.classList.remove("open")
    drawerButton?.classList.remove("open")
  }

  function initializeDrawerCloseButton() {
    const closeButton = document.getElementById("drawer-close-button")
    closeButton?.addEventListener("click", closeDrawer)
  }

  document.addEventListener("astro:after-swap", initializeDrawerCloseButton)
  initializeDrawerCloseButton()

</script> <main>  <div class="pt-4 pb-5"> <div class="w-full h-full mx-auto px-5 max-w-[760px]">   <style>astro-island,astro-slot,astro-static-slot{display:contents}</style><script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();;(()=>{var A=Object.defineProperty;var g=(i,o,a)=>o in i?A(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a;var d=(i,o,a)=>g(i,typeof o!="symbol"?o+"":o,a);{let i={0:t=>m(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>1/0*t},o=t=>{let[l,e]=t;return l in i?i[l](e):void 0},a=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([l,e])=>[l,o(e)]));class y extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let c=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let r of h){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(let r of c){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("name")||"default"]=r.innerHTML)}let p;try{p=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(r){let s=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(s+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute("props"),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),c.disconnect(),this.childrenConnectedCallback()},c=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),c=this.getAttribute("client");if(Astro[c]===void 0){window.addEventListener(`astro:${c}`,()=>this.start(),{once:!0});return}try{await Astro[c](async()=>{let n=this.getAttribute("renderer-url"),[h,{default:p}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),u=this.getAttribute("component-export")||"default";if(!u.includes("."))this.Component=h[u];else{this.Component=h;for(let f of u.split("."))this.Component=this.Component[f]}return this.hydrator=p,this.hydrate},e,this)}catch(n){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",y)}})();</script><script>window._$HY||(e=>{let t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")?e:t(e.host&&e.host.nodeType?e.host:e.parentNode));["click", "input"].forEach((o=>document.addEventListener(o,(o=>{if(!e.events)return;let s=t(o.composedPath&&o.composedPath()[0]||o.target);s&&!e.completed.has(s)&&e.events.push([s,o])}))))})(_$HY={events:[],completed:new WeakSet,r:{},fe(){}});</script><!--xs--><astro-island uid="Z1W9BFo" data-solid-render-id="s0" component-url="/_astro/TagCloud.D_LAz2zY.js" component-export="default" renderer-url="/_astro/client.pQLKTPwM.js" props="{&quot;posts&quot;:[1,[[0,{&quot;slug&quot;:[0,&quot;2025/07/15-claude-code-best-practices-plan-mode&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Claude Code Best Practices: The Plan Mode&quot;],&quot;date&quot;:[3,&quot;2025-07-15T12:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;claude code&quot;],[0,&quot;vibe coding&quot;]]],&quot;summary&quot;:[0,&quot;Claude Code&#39;s plan mode is an super underrated feature. Learn the plan→code→debug→commit workflow that streamlines small iterations.&quot;]}]}],[0,{&quot;slug&quot;:[0,&quot;2025/07/02-gshot-copy-screenshot-utility&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;gshot-copy: A Linux Screenshot Utility for Claude Code&quot;],&quot;date&quot;:[3,&quot;2025-07-02T12:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;linux&quot;],[0,&quot;claude code&quot;],[0,&quot;miscellaneous&quot;]]],&quot;summary&quot;:[0,&quot;A simple Linux utility that streamlines taking screenshots and sharing them with Claude Code through keyboard shortcuts.&quot;]}]}],[0,{&quot;slug&quot;:[0,&quot;2025/06/24-claude-code-what-is-task-tool&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Claude Code: What is the Task Tool?&quot;],&quot;date&quot;:[3,&quot;2025-06-24T12:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;claude code&quot;],[0,&quot;trivial&quot;]]],&quot;summary&quot;:[0,&quot;&quot;]}]}],[0,{&quot;slug&quot;:[0,&quot;2025/06/24-claude-code-subagent-deep-dive&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Claude Code: Subagent Deep Dive&quot;],&quot;date&quot;:[3,&quot;2025-06-24T12:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;claude code&quot;],[0,&quot;prompt&quot;]]],&quot;summary&quot;:[0,&quot;Explore Claude Code&#39;s undocumented subagent feature for parallel task execution. Learn how to run up to 10 concurrent tasks, scale to 100+ tasks with queuing, and maximize context windows for large codebases through practical examples and performance testing&quot;]}]}],[0,{&quot;slug&quot;:[0,&quot;2025/06/23-claude-code-ide-vs-code&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Claude Code: Seamless Line Based Context with VS Code&quot;],&quot;date&quot;:[3,&quot;2025-06-23T12:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;claude code&quot;],[0,&quot;vs code&quot;],[0,&quot;trivial&quot;]]],&quot;summary&quot;:[0,&quot;Discover Claude Code&#39;s VS Code integration that automatically detects selected lines, eliminating the need for @ commands and streamlining your AI coding workflow.&quot;]}]}],[0,{&quot;slug&quot;:[0,&quot;2025/06/15-claude-code-best-practices-memory-management&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Claude Code Best Practices: Memory Management&quot;],&quot;date&quot;:[3,&quot;2025-06-15T12:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;claude code&quot;],[0,&quot;vibe coding&quot;]]],&quot;summary&quot;:[0,&quot;This post shows you some of the Claude Code best practices based on my own experience. This one is focused on memory management.&quot;]}]}],[0,{&quot;slug&quot;:[0,&quot;2025/06/09-a-commit-message-prompt&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;A Useful Prompt for Commit Messages Generation&quot;],&quot;date&quot;:[3,&quot;2025-06-09T12:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;git&quot;],[0,&quot;claude code&quot;],[0,&quot;prompt&quot;]]],&quot;summary&quot;:[0,&quot;This post shows you how to quickly generate a useful commit message and commit your changes using Claude Code. Works with other LLMs too.&quot;]}]}],[0,{&quot;slug&quot;:[0,&quot;2025/06/a-git-primer&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;A Git Primer for Vibe Coding&quot;],&quot;date&quot;:[3,&quot;2025-06-05T12:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;git&quot;],[0,&quot;vibe coding&quot;]]],&quot;summary&quot;:[0,&quot;Complete Git tutorial for beginners covering version control basics, trunk-based workflow, and essential commands. Perfect for developers new to Git and AI-assisted coding.&quot;]}]}],[0,{&quot;slug&quot;:[0,&quot;2025/05/what-is-vibe-coding&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;What is Vibe Coding: My Personal Take&quot;],&quot;date&quot;:[3,&quot;2025-05-30T12:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;vibe coding&quot;]]],&quot;summary&quot;:[0,&quot;A light introduction to vibe coding. There are different views on vibe coding. Should you be worried about that you are not following &#39;the vibe coding&#39; practices?&quot;]}]}]]]}" ssr client="load" opts="{&quot;name&quot;:&quot;TagCloud&quot;,&quot;value&quot;:true}" await-children><div data-hk=s00000 class="mb-8"><div class="flex flex-wrap gap-2 items-center"><span class="text-sm text-black/60 dark:text-white/60 font-medium mr-2">Tags:</span><!--$--><button data-hk=s000010 class="text-lg opacity-100 px-2 py-1 rounded-full transition-all duration-200 bg-black/5 dark:bg-white/10 text-black dark:text-white hover:bg-black/10 dark:hover:bg-white/20 cursor-pointer"><!--$-->claude code<!--/--><span class="ml-1 text-xs opacity-70">(<!--$-->7<!--/-->)</span></button><button data-hk=s000011 class="text-sm opacity-60 px-2 py-1 rounded-full transition-all duration-200 bg-black/5 dark:bg-white/10 text-black dark:text-white hover:bg-black/10 dark:hover:bg-white/20 cursor-pointer"><!--$-->git<!--/--><span class="ml-1 text-xs opacity-70">(<!--$-->2<!--/-->)</span></button><button data-hk=s000012 class="text-sm opacity-60 px-2 py-1 rounded-full transition-all duration-200 bg-black/5 dark:bg-white/10 text-black dark:text-white hover:bg-black/10 dark:hover:bg-white/20 cursor-pointer"><!--$-->linux<!--/--><span class="ml-1 text-xs opacity-70">(<!--$-->1<!--/-->)</span></button><button data-hk=s000013 class="text-sm opacity-60 px-2 py-1 rounded-full transition-all duration-200 bg-black/5 dark:bg-white/10 text-black dark:text-white hover:bg-black/10 dark:hover:bg-white/20 cursor-pointer"><!--$-->miscellaneous<!--/--><span class="ml-1 text-xs opacity-70">(<!--$-->1<!--/-->)</span></button><button data-hk=s000014 class="text-sm opacity-60 px-2 py-1 rounded-full transition-all duration-200 bg-black/5 dark:bg-white/10 text-black dark:text-white hover:bg-black/10 dark:hover:bg-white/20 cursor-pointer"><!--$-->prompt<!--/--><span class="ml-1 text-xs opacity-70">(<!--$-->2<!--/-->)</span></button><button data-hk=s000015 class="text-sm opacity-60 px-2 py-1 rounded-full transition-all duration-200 bg-black/5 dark:bg-white/10 text-black dark:text-white hover:bg-black/10 dark:hover:bg-white/20 cursor-pointer"><!--$-->trivial<!--/--><span class="ml-1 text-xs opacity-70">(<!--$-->2<!--/-->)</span></button><button data-hk=s000016 class="text-base opacity-80 px-2 py-1 rounded-full transition-all duration-200 bg-black/5 dark:bg-white/10 text-black dark:text-white hover:bg-black/10 dark:hover:bg-white/20 cursor-pointer"><!--$-->vibe coding<!--/--><span class="ml-1 text-xs opacity-70">(<!--$-->4<!--/-->)</span></button><button data-hk=s000017 class="text-sm opacity-60 px-2 py-1 rounded-full transition-all duration-200 bg-black/5 dark:bg-white/10 text-black dark:text-white hover:bg-black/10 dark:hover:bg-white/20 cursor-pointer"><!--$-->vs code<!--/--><span class="ml-1 text-xs opacity-70">(<!--$-->1<!--/-->)</span></button><!--/--></div></div><!--astro:end--></astro-island>   </div> </div> <div class="flex-1 py-5"> <div class="w-full h-full mx-auto px-5 max-w-[760px]">   <div> <astro-island uid="gcMoi" data-solid-render-id="s1" component-url="/_astro/Blog.ztCXOwZW.js" component-export="default" renderer-url="/_astro/client.pQLKTPwM.js" props="{&quot;tags&quot;:[1,[[0,&quot;claude code&quot;],[0,&quot;git&quot;],[0,&quot;linux&quot;],[0,&quot;miscellaneous&quot;],[0,&quot;prompt&quot;],[0,&quot;trivial&quot;],[0,&quot;vibe coding&quot;],[0,&quot;vs code&quot;]]],&quot;data&quot;:[1,[[0,{&quot;slug&quot;:[0,&quot;2025/07/15-claude-code-best-practices-plan-mode&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Claude Code Best Practices: The Plan Mode&quot;],&quot;date&quot;:[3,&quot;2025-07-15T12:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;claude code&quot;],[0,&quot;vibe coding&quot;]]],&quot;summary&quot;:[0,&quot;Claude Code&#39;s plan mode is an super underrated feature. Learn the plan→code→debug→commit workflow that streamlines small iterations.&quot;]}]}],[0,{&quot;slug&quot;:[0,&quot;2025/07/02-gshot-copy-screenshot-utility&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;gshot-copy: A Linux Screenshot Utility for Claude Code&quot;],&quot;date&quot;:[3,&quot;2025-07-02T12:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;linux&quot;],[0,&quot;claude code&quot;],[0,&quot;miscellaneous&quot;]]],&quot;summary&quot;:[0,&quot;A simple Linux utility that streamlines taking screenshots and sharing them with Claude Code through keyboard shortcuts.&quot;]}]}],[0,{&quot;slug&quot;:[0,&quot;2025/06/24-claude-code-what-is-task-tool&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Claude Code: What is the Task Tool?&quot;],&quot;date&quot;:[3,&quot;2025-06-24T12:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;claude code&quot;],[0,&quot;trivial&quot;]]],&quot;summary&quot;:[0,&quot;&quot;]}]}],[0,{&quot;slug&quot;:[0,&quot;2025/06/24-claude-code-subagent-deep-dive&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Claude Code: Subagent Deep Dive&quot;],&quot;date&quot;:[3,&quot;2025-06-24T12:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;claude code&quot;],[0,&quot;prompt&quot;]]],&quot;summary&quot;:[0,&quot;Explore Claude Code&#39;s undocumented subagent feature for parallel task execution. Learn how to run up to 10 concurrent tasks, scale to 100+ tasks with queuing, and maximize context windows for large codebases through practical examples and performance testing&quot;]}]}],[0,{&quot;slug&quot;:[0,&quot;2025/06/23-claude-code-ide-vs-code&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Claude Code: Seamless Line Based Context with VS Code&quot;],&quot;date&quot;:[3,&quot;2025-06-23T12:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;claude code&quot;],[0,&quot;vs code&quot;],[0,&quot;trivial&quot;]]],&quot;summary&quot;:[0,&quot;Discover Claude Code&#39;s VS Code integration that automatically detects selected lines, eliminating the need for @ commands and streamlining your AI coding workflow.&quot;]}]}],[0,{&quot;slug&quot;:[0,&quot;2025/06/15-claude-code-best-practices-memory-management&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Claude Code Best Practices: Memory Management&quot;],&quot;date&quot;:[3,&quot;2025-06-15T12:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;claude code&quot;],[0,&quot;vibe coding&quot;]]],&quot;summary&quot;:[0,&quot;This post shows you some of the Claude Code best practices based on my own experience. This one is focused on memory management.&quot;]}]}],[0,{&quot;slug&quot;:[0,&quot;2025/06/09-a-commit-message-prompt&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;A Useful Prompt for Commit Messages Generation&quot;],&quot;date&quot;:[3,&quot;2025-06-09T12:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;git&quot;],[0,&quot;claude code&quot;],[0,&quot;prompt&quot;]]],&quot;summary&quot;:[0,&quot;This post shows you how to quickly generate a useful commit message and commit your changes using Claude Code. Works with other LLMs too.&quot;]}]}],[0,{&quot;slug&quot;:[0,&quot;2025/06/a-git-primer&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;A Git Primer for Vibe Coding&quot;],&quot;date&quot;:[3,&quot;2025-06-05T12:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;git&quot;],[0,&quot;vibe coding&quot;]]],&quot;summary&quot;:[0,&quot;Complete Git tutorial for beginners covering version control basics, trunk-based workflow, and essential commands. Perfect for developers new to Git and AI-assisted coding.&quot;]}]}],[0,{&quot;slug&quot;:[0,&quot;2025/05/what-is-vibe-coding&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;What is Vibe Coding: My Personal Take&quot;],&quot;date&quot;:[3,&quot;2025-05-30T12:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;vibe coding&quot;]]],&quot;summary&quot;:[0,&quot;A light introduction to vibe coding. There are different views on vibe coding. Should you be worried about that you are not following &#39;the vibe coding&#39; practices?&quot;]}]}]]]}" ssr client="load" opts="{&quot;name&quot;:&quot;Blog&quot;,&quot;value&quot;:true}" await-children><div data-hk=s10000 class="space-y-8"><div data-hk=s10001><h2 class="text-lg font-medium text-black dark:text-white mb-4">2025</h2><div class="space-y-4"><div data-hk=s10002 class="flex gap-4 items-baseline leading-relaxed"><span class="text-lg text-black/60 dark:text-white/60 font-mono w-20 shrink-0">Jul 15</span><div class="flex items-baseline flex-1"><a href="/blog/2025/07/15-claude-code-best-practices-plan-mode" class="text-xl text-black dark:text-white hover:text-black/60 dark:hover:text-white/60 transition-colors leading-relaxed">Claude Code Best Practices: The Plan Mode</a><div class="hidden sm:block flex-1 mx-3 border-b border-dashed border-black/50 dark:border-white/50"></div><!--$--><span data-hk=s10003 class="hidden sm:inline text-sm text-white bg-black/80 dark:bg-white/20 dark:text-white px-2 py-1 rounded-full">claude code</span><!--/--></div></div><div data-hk=s10004 class="flex gap-4 items-baseline leading-relaxed"><span class="text-lg text-black/60 dark:text-white/60 font-mono w-20 shrink-0">Jul 02</span><div class="flex items-baseline flex-1"><a href="/blog/2025/07/02-gshot-copy-screenshot-utility" class="text-xl text-black dark:text-white hover:text-black/60 dark:hover:text-white/60 transition-colors leading-relaxed">gshot-copy: A Linux Screenshot Utility for Claude Code</a><div class="hidden sm:block flex-1 mx-3 border-b border-dashed border-black/50 dark:border-white/50"></div><!--$--><span data-hk=s10005 class="hidden sm:inline text-sm text-white bg-black/80 dark:bg-white/20 dark:text-white px-2 py-1 rounded-full">linux</span><!--/--></div></div><div data-hk=s10006 class="flex gap-4 items-baseline leading-relaxed"><span class="text-lg text-black/60 dark:text-white/60 font-mono w-20 shrink-0">Jun 24</span><div class="flex items-baseline flex-1"><a href="/blog/2025/06/24-claude-code-what-is-task-tool" class="text-xl text-black dark:text-white hover:text-black/60 dark:hover:text-white/60 transition-colors leading-relaxed">Claude Code: What is the Task Tool?</a><div class="hidden sm:block flex-1 mx-3 border-b border-dashed border-black/50 dark:border-white/50"></div><!--$--><span data-hk=s10007 class="hidden sm:inline text-sm text-white bg-black/80 dark:bg-white/20 dark:text-white px-2 py-1 rounded-full">claude code</span><!--/--></div></div><div data-hk=s10008 class="flex gap-4 items-baseline leading-relaxed"><span class="text-lg text-black/60 dark:text-white/60 font-mono w-20 shrink-0">Jun 24</span><div class="flex items-baseline flex-1"><a href="/blog/2025/06/24-claude-code-subagent-deep-dive" class="text-xl text-black dark:text-white hover:text-black/60 dark:hover:text-white/60 transition-colors leading-relaxed">Claude Code: Subagent Deep Dive</a><div class="hidden sm:block flex-1 mx-3 border-b border-dashed border-black/50 dark:border-white/50"></div><!--$--><span data-hk=s10009 class="hidden sm:inline text-sm text-white bg-black/80 dark:bg-white/20 dark:text-white px-2 py-1 rounded-full">claude code</span><!--/--></div></div><div data-hk=s1000a10 class="flex gap-4 items-baseline leading-relaxed"><span class="text-lg text-black/60 dark:text-white/60 font-mono w-20 shrink-0">Jun 23</span><div class="flex items-baseline flex-1"><a href="/blog/2025/06/23-claude-code-ide-vs-code" class="text-xl text-black dark:text-white hover:text-black/60 dark:hover:text-white/60 transition-colors leading-relaxed">Claude Code: Seamless Line Based Context with VS Code</a><div class="hidden sm:block flex-1 mx-3 border-b border-dashed border-black/50 dark:border-white/50"></div><!--$--><span data-hk=s1000a11 class="hidden sm:inline text-sm text-white bg-black/80 dark:bg-white/20 dark:text-white px-2 py-1 rounded-full">claude code</span><!--/--></div></div><div data-hk=s1000a12 class="flex gap-4 items-baseline leading-relaxed"><span class="text-lg text-black/60 dark:text-white/60 font-mono w-20 shrink-0">Jun 15</span><div class="flex items-baseline flex-1"><a href="/blog/2025/06/15-claude-code-best-practices-memory-management" class="text-xl text-black dark:text-white hover:text-black/60 dark:hover:text-white/60 transition-colors leading-relaxed">Claude Code Best Practices: Memory Management</a><div class="hidden sm:block flex-1 mx-3 border-b border-dashed border-black/50 dark:border-white/50"></div><!--$--><span data-hk=s1000a13 class="hidden sm:inline text-sm text-white bg-black/80 dark:bg-white/20 dark:text-white px-2 py-1 rounded-full">claude code</span><!--/--></div></div><div data-hk=s1000a14 class="flex gap-4 items-baseline leading-relaxed"><span class="text-lg text-black/60 dark:text-white/60 font-mono w-20 shrink-0">Jun 09</span><div class="flex items-baseline flex-1"><a href="/blog/2025/06/09-a-commit-message-prompt" class="text-xl text-black dark:text-white hover:text-black/60 dark:hover:text-white/60 transition-colors leading-relaxed">A Useful Prompt for Commit Messages Generation</a><div class="hidden sm:block flex-1 mx-3 border-b border-dashed border-black/50 dark:border-white/50"></div><!--$--><span data-hk=s1000a15 class="hidden sm:inline text-sm text-white bg-black/80 dark:bg-white/20 dark:text-white px-2 py-1 rounded-full">git</span><!--/--></div></div><div data-hk=s1000a16 class="flex gap-4 items-baseline leading-relaxed"><span class="text-lg text-black/60 dark:text-white/60 font-mono w-20 shrink-0">Jun 05</span><div class="flex items-baseline flex-1"><a href="/blog/2025/06/a-git-primer" class="text-xl text-black dark:text-white hover:text-black/60 dark:hover:text-white/60 transition-colors leading-relaxed">A Git Primer for Vibe Coding</a><div class="hidden sm:block flex-1 mx-3 border-b border-dashed border-black/50 dark:border-white/50"></div><!--$--><span data-hk=s1000a17 class="hidden sm:inline text-sm text-white bg-black/80 dark:bg-white/20 dark:text-white px-2 py-1 rounded-full">git</span><!--/--></div></div><div data-hk=s1000a18 class="flex gap-4 items-baseline leading-relaxed"><span class="text-lg text-black/60 dark:text-white/60 font-mono w-20 shrink-0">May 30</span><div class="flex items-baseline flex-1"><a href="/blog/2025/05/what-is-vibe-coding" class="text-xl text-black dark:text-white hover:text-black/60 dark:hover:text-white/60 transition-colors leading-relaxed">What is Vibe Coding: My Personal Take</a><div class="hidden sm:block flex-1 mx-3 border-b border-dashed border-black/50 dark:border-white/50"></div><!--$--><span data-hk=s1000a19 class="hidden sm:inline text-sm text-white bg-black/80 dark:bg-white/20 dark:text-white px-2 py-1 rounded-full">vibe coding</span><!--/--></div></div></div></div></div><!--astro:end--></astro-island> </div>   </div> </div>  </main> <footer class="relative bg-white dark:bg-black"> <div> <section class="py-5"> <div class="w-full h-full mx-auto px-5 max-w-screen-md">  <div class="flex items-center justify-end"> <button id="back-to-top" aria-label="Back to top of page" class="group flex w-fit p-1.5 gap-1.5 text-sm items-center border rounded hover:bg-black/5 hover:dark:bg-white/10 border-black/15 dark:border-white/20 transition-colors duration-300 ease-in-out opacity-0 translate-y-2 transition-all duration-300 ease-in-out"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="stroke-current group-hover:stroke-black group-hover:dark:stroke-white rotate-90"> <line x1="19" y1="12" x2="5" y2="12" class="scale-x-0 group-hover:scale-x-100 translate-x-3 group-hover:translate-x-0 transition-all duration-300 ease-in-out"></line> <polyline points="12 19 5 12 12 5" class="translate-x-1 group-hover:translate-x-0 transition-all duration-300 ease-in-out"></polyline> </svg> <div class="w-full group-hover:text-black group-hover:dark:text-white transition-colors duration-300 ease-in-out">
Back to top
</div> </button> </div>  </div> </section> <section class=" py-5 overflow-hidden whitespace-nowrap border-t border-black/10 dark:border-white/25"> <div class="w-full h-full mx-auto px-5 max-w-screen-md">  <nav aria-label="Footer links" class="flex justify-center items-center gap-4"> <a href="https://creativecommons.org/licenses/by/4.0/" target="_blank" rel="noopener"> <img src="https://licensebuttons.net/l/by/4.0/88x31.png" alt="Creative Commons BY 4.0"> </a> <a href="https://github.com/markhorn-dev/astro-sphere" target="_blank" rel="noopener" title="Theme based on Astro Sphere" aria-label="Astro Sphere theme on GitHub" class="group size-8 rounded-full p-1.5 flex items-center justify-center hover:bg-black/5 dark:hover:bg-white/20 transition-colors"> <svg class="size-full fill-current text-gray-600 dark:text-gray-400 group-hover:text-black group-hover:dark:text-white transition-colors"> <use href="/brand.svg#brand"></use> </svg> </a> </nav> <div class="flex justify-center mt-3"> <p class="text-gray-400 dark:text-gray-500 text-sm">
This site includes content written with the help of AI tools.
</p> </div>  </div> </section> </div> </footer> <script>
  function goBackToTop(event) {
    event.preventDefault()
    window.scrollTo({
        top: 0,
        behavior: "smooth"
    })
  }

  function toggleBackToTopVisibility() {
    const backToTop = document.getElementById("back-to-top")
    if (!backToTop) return
    
    // Show button when scrolled down more than 800px (very long content)
    const scrollThreshold = 800
    const scrolled = window.scrollY > scrollThreshold
    
    if (scrolled) {
      backToTop.classList.remove("opacity-0", "translate-y-2")
      backToTop.classList.add("opacity-100", "translate-y-0")
    } else {
      backToTop.classList.remove("opacity-100", "translate-y-0")
      backToTop.classList.add("opacity-0", "translate-y-2")
    }
  }

  function inintializeBackToTop() {
    const backToTop = document.getElementById("back-to-top")
    backToTop?.addEventListener("click", goBackToTop)
    
    // Add scroll listener to show/hide button
    window.addEventListener("scroll", toggleBackToTopVisibility)
    
    // Check initial state
    toggleBackToTopVisibility()
  }

  document.addEventListener("astro:after-swap", inintializeBackToTop)
  inintializeBackToTop()
</script> <script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'9e749d9c789bb421',t:'MTc3NTM1MDgyNA=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script><script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"0f3ed408f56145d196746c55059ab107","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body></html>