<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cozi</title><link>https://cozi.dev/</link><description>Recent content on Cozi</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 02 Jul 2026 14:00:00 +0700</lastBuildDate><atom:link href="https://cozi.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>Git Worktrees: Run Claude Code in Parallel Without the Chaos</title><link>https://cozi.dev/posts/git-worktrees-parallel-claude-code/</link><pubDate>Thu, 02 Jul 2026 14:00:00 +0700</pubDate><guid>https://cozi.dev/posts/git-worktrees-parallel-claude-code/</guid><description>You&amp;rsquo;re deep in a feature branch with Claude Code chewing through a refactor.</description></item><item><title>MCP: Stop Copy-Pasting Between Claude and Your Tools</title><link>https://cozi.dev/posts/mcp-connect-claude-to-your-tools/</link><pubDate>Wed, 01 Jul 2026 12:00:00 +0700</pubDate><guid>https://cozi.dev/posts/mcp-connect-claude-to-your-tools/</guid><description>Here&amp;rsquo;s a workflow you&amp;rsquo;ve probably done a hundred times. You ask Claude to help with a bug.</description></item><item><title>Custom Slash Commands: Stop Retyping the Same Prompt</title><link>https://cozi.dev/posts/custom-slash-commands-claude-code/</link><pubDate>Mon, 15 Jun 2026 15:30:00 +0700</pubDate><guid>https://cozi.dev/posts/custom-slash-commands-claude-code/</guid><description>There&amp;rsquo;s a prompt you type all the time. Maybe it&amp;rsquo;s &amp;ldquo;review this diff for security issues, focus on auth and input validation, ignore style nits.</description></item><item><title>Refactoring Go with Claude Code</title><link>https://cozi.dev/posts/refactoring-go-with-claude-code/</link><pubDate>Mon, 15 Jun 2026 12:00:00 +0700</pubDate><guid>https://cozi.dev/posts/refactoring-go-with-claude-code/</guid><description>Go code ages well, mostly. The language doesn&amp;rsquo;t change much, the standard library stays stable, and idiomatic Go from five years ago still looks fine today.</description></item><item><title>Plan Mode: Make Claude Think Before It Types</title><link>https://cozi.dev/posts/plan-mode-make-claude-think-first/</link><pubDate>Fri, 12 Jun 2026 12:00:00 +0700</pubDate><guid>https://cozi.dev/posts/plan-mode-make-claude-think-first/</guid><description>There&amp;rsquo;s a failure mode with AI coding tools that everyone recognizes: you describe a change, the model immediately starts editing files, and three minutes later you&amp;rsquo;re reverting half of it because it ran off in the wrong direction.</description></item><item><title>Subagents: Stop Burning Your Context Window</title><link>https://cozi.dev/posts/subagents-stop-burning-your-context-window/</link><pubDate>Thu, 11 Jun 2026 12:00:00 +0700</pubDate><guid>https://cozi.dev/posts/subagents-stop-burning-your-context-window/</guid><description>Here&amp;rsquo;s a pattern I kept hitting with Claude Code: I ask it to fix something, it goes off and reads fifteen files to figure out where the problem lives, and by the time it starts actually fixing things, half the context window is gone.</description></item><item><title>Claude Code Hooks That Earn Their Keep</title><link>https://cozi.dev/posts/claude-code-hooks-that-earn-their-keep/</link><pubDate>Wed, 10 Jun 2026 11:00:00 +0700</pubDate><guid>https://cozi.dev/posts/claude-code-hooks-that-earn-their-keep/</guid><description>Most of what I tell Claude Code, I only have to say once and it sticks for the session.</description></item><item><title>Writing a CLAUDE.md That Actually Helps</title><link>https://cozi.dev/posts/writing-a-claude-md-that-actually-helps/</link><pubDate>Tue, 09 Jun 2026 14:30:00 +0700</pubDate><guid>https://cozi.dev/posts/writing-a-claude-md-that-actually-helps/</guid><description>Most CLAUDE.md files I see are either empty or a dumping ground.</description></item><item><title>Leveling Up Claude Code with Superpowers</title><link>https://cozi.dev/posts/leveling-up-claude-code-with-superpowers/</link><pubDate>Tue, 09 Jun 2026 09:39:43 +0700</pubDate><guid>https://cozi.dev/posts/leveling-up-claude-code-with-superpowers/</guid><description>A while back I wrote about spec-driven development with Spec Kit, which fixed the &amp;ldquo;the agent built the wrong thing&amp;rdquo; problem by making me write the spec before any code.</description></item><item><title>Spec-Driven Development with GitHub Spec Kit</title><link>https://cozi.dev/posts/spec-driven-development-with-github-spec-kit/</link><pubDate>Sun, 07 Jun 2026 22:00:00 +0700</pubDate><guid>https://cozi.dev/posts/spec-driven-development-with-github-spec-kit/</guid><description>I have been using AI coding agents long enough to know the failure mode by heart.</description></item><item><title>Monitoring and Distributed Tracing with Grafana, Prometheus, Loki &amp; Tempo</title><link>https://cozi.dev/posts/monitoring-and-distributed-tracing-with-grafana-prometheus-loki-and-tempo/</link><pubDate>Mon, 01 Dec 2025 11:34:20 +0700</pubDate><guid>https://cozi.dev/posts/monitoring-and-distributed-tracing-with-grafana-prometheus-loki-and-tempo/</guid><description>Why I Built a Small Observability Stack Over the last few years, my systems have become more distributed: multiple services, containers, and external dependencies all talking to each other.</description></item><item><title>Serving AWS S3 private content with Golang and AWS SDK for Go v2</title><link>https://cozi.dev/posts/serving-aws-s3-private-content-with-golang-and-aws-sdk-for-go-v2/</link><pubDate>Mon, 05 Feb 2024 22:08:46 -0600</pubDate><guid>https://cozi.dev/posts/serving-aws-s3-private-content-with-golang-and-aws-sdk-for-go-v2/</guid><description>Have you ever wanted to serve private files from your AWS S3 storage to your users, but making the bucket public is not a safe option?</description></item><item><title>Setting up a virtual environment with Vagrant for testing</title><link>https://cozi.dev/posts/setting-up-a-virtual-environment-with-vagrant-for-testing/</link><pubDate>Wed, 11 Oct 2023 02:31:18 -0500</pubDate><guid>https://cozi.dev/posts/setting-up-a-virtual-environment-with-vagrant-for-testing/</guid><description>In the world of software development, testing is a critical aspect of ensuring the reliability and functionality of your applications.</description></item><item><title>Golang Create Combinations From N Arrays</title><link>https://cozi.dev/posts/golang-create-combinations-from-n-arrays/</link><pubDate>Sat, 24 Sep 2022 20:31:26 +0700</pubDate><guid>https://cozi.dev/posts/golang-create-combinations-from-n-arrays/</guid><description>This snippet is useful when you need create combinations from n arrays with picking one element from each array.</description></item><item><title>MongoDB query get n records of each group (aggregation)</title><link>https://cozi.dev/posts/mongodb-query-get-n-records-of-each-group-aggregation/</link><pubDate>Mon, 04 Jul 2022 16:16:38 +0700</pubDate><guid>https://cozi.dev/posts/mongodb-query-get-n-records-of-each-group-aggregation/</guid><description>For example, you might want to get 5 members of each group in your application.</description></item><item><title>Transfer files to new server using Ansible</title><link>https://cozi.dev/posts/transfer-files-to-new-server-using-ansible/</link><pubDate>Fri, 24 Jun 2022 22:11:23 +0700</pubDate><guid>https://cozi.dev/posts/transfer-files-to-new-server-using-ansible/</guid><description>This is a simple Ansible playbook to use when I need to transfer files from the current server to a new server.</description></item><item><title>Advanced Go Custom Error Implement</title><link>https://cozi.dev/posts/advanced-go-custom-error-implement/</link><pubDate>Sat, 08 Jan 2022 09:39:12 +0700</pubDate><guid>https://cozi.dev/posts/advanced-go-custom-error-implement/</guid><description>In the previous post, we have implemented our custom error:</description></item><item><title>Go Custom Error Implement</title><link>https://cozi.dev/posts/go-custom-error-implement/</link><pubDate>Sat, 01 Jan 2022 16:30:42 +0700</pubDate><guid>https://cozi.dev/posts/go-custom-error-implement/</guid><description>Have you ever checked the error definition to see what it is?</description></item><item><title>Clean Disk Space</title><link>https://cozi.dev/posts/clean-disk-space/</link><pubDate>Fri, 10 Dec 2021 20:22:24 +0700</pubDate><guid>https://cozi.dev/posts/clean-disk-space/</guid><description>Clean disk space You might run out of SSD space with your laptop or server.</description></item><item><title>Cozi Goes Dark</title><link>https://cozi.dev/posts/cozi-goes-dark/</link><pubDate>Sun, 21 Nov 2021 22:46:53 +0700</pubDate><guid>https://cozi.dev/posts/cozi-goes-dark/</guid><description>Today, I decided to change cozi.dev to dark mode and I found out a quite awesome CSS property: color-scheme.</description></item><item><title>How To Use Multiple SSH Keys Effectively</title><link>https://cozi.dev/posts/how-to-use-multiple-ssh-keys-effectively/</link><pubDate>Sun, 10 Oct 2021 17:28:27 +0700</pubDate><guid>https://cozi.dev/posts/how-to-use-multiple-ssh-keys-effectively/</guid><description>If you work on multiple projects, you might need to use multiple ssh key pairs for more security, right?</description></item><item><title>Building Golang Docker Image For Production</title><link>https://cozi.dev/posts/building-golang-docker-image-for-production/</link><pubDate>Tue, 03 Aug 2021 10:19:05 +0700</pubDate><guid>https://cozi.dev/posts/building-golang-docker-image-for-production/</guid><description>Today, we have modern applications and modern systems to manage and scale our containers.</description></item><item><title>Launching InformerCat</title><link>https://cozi.dev/posts/launching-informercat/</link><pubDate>Sun, 20 Jun 2021 20:59:59 +0700</pubDate><guid>https://cozi.dev/posts/launching-informercat/</guid><description>Yes, my another new project informercat.com :) that I wanna share with you today which currently in BETA mode.</description></item><item><title>Prevent multiple Webpack instances lazy loading conflict</title><link>https://cozi.dev/posts/prevent-multiple-webpack-instances-lazy-loading-conflict/</link><pubDate>Mon, 03 May 2021 14:51:48 +0700</pubDate><guid>https://cozi.dev/posts/prevent-multiple-webpack-instances-lazy-loading-conflict/</guid><description>If you have been running multiple webpack instances with lazy loading, you must define the loading chunk function name in your webpack config.</description></item><item><title>Compile pre-processors to CSS for runtime uses</title><link>https://cozi.dev/posts/compile-pre-processors-to-css-for-runtime-uses/</link><pubDate>Sun, 14 Mar 2021 22:47:14 +0700</pubDate><guid>https://cozi.dev/posts/compile-pre-processors-to-css-for-runtime-uses/</guid><description>In some cases, you might just want to compile your pre-processors styles like SCSS, LESS to CSS and assign it to a variable then do something with it at runtime.</description></item><item><title>Use Vue dynamic components to build multiple layouts web app</title><link>https://cozi.dev/posts/use-vue-dynamic-components-to-build-multiple-layouts-web-app/</link><pubDate>Sat, 06 Mar 2021 15:14:24 +0700</pubDate><guid>https://cozi.dev/posts/use-vue-dynamic-components-to-build-multiple-layouts-web-app/</guid><description>This feature may not be used too much but it&amp;rsquo;s a useful and powerful feature of Vue.</description></item><item><title>Convert HTML to JSON data structure online</title><link>https://cozi.dev/posts/convert-html-to-json-data-structure-online/</link><pubDate>Sat, 30 Jan 2021 15:50:56 +0700</pubDate><guid>https://cozi.dev/posts/convert-html-to-json-data-structure-online/</guid><description>Today, I will introduce a tool that help you to convert HTML to JSON data structure online:</description></item><item><title>How to using Tailwind CSS 2 with Vue 3</title><link>https://cozi.dev/posts/how-to-using-tailwind-css-2-with-vue-3/</link><pubDate>Wed, 30 Dec 2020 12:28:05 +0700</pubDate><guid>https://cozi.dev/posts/how-to-using-tailwind-css-2-with-vue-3/</guid><description>I used to choose Bulma as CSS framework for my personal projects.</description></item><item><title>How to archive zero downtime deployments in Kubernetes</title><link>https://cozi.dev/posts/how-to-archive-zero-downtime-deployments-in-kubernetes/</link><pubDate>Fri, 20 Nov 2020 05:21:53 +0700</pubDate><guid>https://cozi.dev/posts/how-to-archive-zero-downtime-deployments-in-kubernetes/</guid><description>It was worse when you need to wait until late at night to deploy your app in production because you scare to break users&amp;rsquo; experience when the short downtime happens after deployment.</description></item><item><title>Easy way to get started with Vim as your IDE</title><link>https://cozi.dev/posts/easy-way-to-get-started-with-vim-as-your-ide/</link><pubDate>Sat, 07 Nov 2020 10:57:34 +0700</pubDate><guid>https://cozi.dev/posts/easy-way-to-get-started-with-vim-as-your-ide/</guid><description>You want to use Vim as your IDE, but don&amp;rsquo;t know how to get started?</description></item><item><title>Vue CLI 4 build statics for an existing app - Part 2</title><link>https://cozi.dev/posts/vue-cli-4-build-statics-for-an-existing-app-part-2/</link><pubDate>Fri, 23 Oct 2020 16:39:14 +0700</pubDate><guid>https://cozi.dev/posts/vue-cli-4-build-statics-for-an-existing-app-part-2/</guid><description>In the previous part, we have updated Vue CLI config to output static files that we can manually inject to anywhere.</description></item><item><title>Gmob - Go Mongodb Driver document builder</title><link>https://cozi.dev/posts/gmob-go-mongodb-driver-document-builder/</link><pubDate>Sat, 03 Oct 2020 08:48:07 +0700</pubDate><guid>https://cozi.dev/posts/gmob-go-mongodb-driver-document-builder/</guid><description>When I worked with Mongo Go Driver, it was complicate to make a search, or update query document(s) with dynamic conditions.</description></item><item><title>Launching Supics</title><link>https://cozi.dev/posts/launching-supics/</link><pubDate>Sun, 27 Sep 2020 10:24:15 +0700</pubDate><guid>https://cozi.dev/posts/launching-supics/</guid><description>A few days ago, I launched supics.com which is my another side project that let people download/upload wallpapers for any devices.</description></item><item><title>MongoDB filter by nested object field</title><link>https://cozi.dev/posts/mongodb-filter-by-nested-object-field/</link><pubDate>Sun, 30 Aug 2020 21:21:50 +0700</pubDate><guid>https://cozi.dev/posts/mongodb-filter-by-nested-object-field/</guid><description>Consider our logs collection contains with each document has a set of logItems, each item store sold status and price:</description></item><item><title>Automate build and publish Docker Image with GitLab CI</title><link>https://cozi.dev/posts/automate-build-and-publish-docker-image-with-gitlab-ci/</link><pubDate>Sun, 02 Aug 2020 08:29:24 +0700</pubDate><guid>https://cozi.dev/posts/automate-build-and-publish-docker-image-with-gitlab-ci/</guid><description>If you&amp;rsquo;re using GitLab then you have a free container registry for your projects.</description></item><item><title>Effective testing API with Insomnia</title><link>https://cozi.dev/posts/effective-testing-api-with-insomnia/</link><pubDate>Sat, 18 Jul 2020 10:44:34 +0700</pubDate><guid>https://cozi.dev/posts/effective-testing-api-with-insomnia/</guid><description>Introduction If you are developer working with API then you may using Insomnia or Postman for testing them.</description></item><item><title>Debugging Go http server with VS Code</title><link>https://cozi.dev/posts/debugging-go-http-server-with-vs-code/</link><pubDate>Sun, 28 Jun 2020 22:56:42 +0700</pubDate><guid>https://cozi.dev/posts/debugging-go-http-server-with-vs-code/</guid><description>Like the title said, in this article we will do debugging go application with VS Code and Go extension.</description></item><item><title>Inject Vue instance into an iframe that create in runtime</title><link>https://cozi.dev/posts/inject-vue-instance-into-an-iframe-that-create-in-runtime/</link><pubDate>Sun, 21 Jun 2020 22:59:16 +0700</pubDate><guid>https://cozi.dev/posts/inject-vue-instance-into-an-iframe-that-create-in-runtime/</guid><description>Introduction Have you had ever wanted your component style won&amp;rsquo;t be affected by any third-party style and too lazy to create a new page to put it into iframe src?</description></item><item><title>Building a simple microservices using Go Micro and Echo frameworks</title><link>https://cozi.dev/posts/building-a-simple-microservices-using-go-micro-and-echo-frameworks/</link><pubDate>Wed, 10 Jun 2020 21:48:16 +0700</pubDate><guid>https://cozi.dev/posts/building-a-simple-microservices-using-go-micro-and-echo-frameworks/</guid><description>Introduction In this article, we will learn how to build a simple microservices using Go Micro and Echo frameworks.</description></item><item><title>Vue CLI 4 build statics for an existing app</title><link>https://cozi.dev/posts/vue-cli-4-build-statics-for-an-existing-app/</link><pubDate>Sat, 30 May 2020 09:24:20 +0700</pubDate><guid>https://cozi.dev/posts/vue-cli-4-build-statics-for-an-existing-app/</guid><description>Introduction By default, Vue CLI build target is App which means your static will auto inject to a static index.</description></item><item><title>Moving to macOS...</title><link>https://cozi.dev/posts/moving-to-macos/</link><pubDate>Thu, 28 May 2020 21:33:52 +0700</pubDate><guid>https://cozi.dev/posts/moving-to-macos/</guid><description>After several years of using Ubuntu laptop for programming, I have decided to upgrade my laptop 👨‍💻.</description></item><item><title>Simple Django Vue Websocket Chat Application Using Channels</title><link>https://cozi.dev/posts/simple-django-vue-websocket-chat-application-using-channels/</link><pubDate>Sun, 17 May 2020 14:17:27 +0700</pubDate><guid>https://cozi.dev/posts/simple-django-vue-websocket-chat-application-using-channels/</guid><description>Introduction In this article, we will create a simple chat application using django, vue and channels.</description></item><item><title>Writing Simple Go Echo Websocket Test Recipe</title><link>https://cozi.dev/posts/writing-simple-go-echo-websocket-test-recipe/</link><pubDate>Tue, 05 May 2020 22:37:57 +0700</pubDate><guid>https://cozi.dev/posts/writing-simple-go-echo-websocket-test-recipe/</guid><description>Introduction Today, I&amp;rsquo;ll show you how I set up a simple test for WebSocket using gorilla/websocket in Echo framework and how it makes me more confident with my code 😄</description></item><item><title>How to set up Drone CI for GitHub using Ansible</title><link>https://cozi.dev/posts/how-to-setup-drone-ci-for-github-using-ansible/</link><pubDate>Fri, 01 May 2020 06:57:22 +0700</pubDate><guid>https://cozi.dev/posts/how-to-setup-drone-ci-for-github-using-ansible/</guid><description>Introduction This tutorial will show you how to set up Drone CI for GitHub using Ansible.</description></item><item><title>About</title><link>https://cozi.dev/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cozi.dev/about/</guid><description>Hey, I&amp;rsquo;m Tung Quach Software engineer from Vietnam. I mostly do backend and cloud stuff - Go, distributed systems, and all the unglamorous plumbing that keeps services alive.</description></item><item><title>Archives</title><link>https://cozi.dev/archives/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cozi.dev/archives/</guid><description/></item><item><title>Hire me</title><link>https://cozi.dev/hire-me/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cozi.dev/hire-me/</guid><description>Work with me I&amp;rsquo;m a backend-leaning full-stack engineer. I build APIs, services, and the cloud infra they run on - and I care just as much about whether it survives production as whether it looks good in a demo.</description></item><item><title>Portfolio</title><link>https://cozi.dev/portfolio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cozi.dev/portfolio/</guid><description>A mix of stuff I&amp;rsquo;m still building and projects I&amp;rsquo;ve since shelved.</description></item></channel></rss>