Khoa Pham
Khoa Pham

Ohayo

Swift Discovery

Discover all the tech

Featured

My year in review 2020

Issue #715

I remember this time last year in December 2019, I spent almost every single bit of my free time on Puma because I want a Swift friendly version of fastlane that suits my need and leverages Swift 5 features.

Here’s my review of my …

How to use Claude Code hooks

Issue #1032

Claude Code runs fast. Sometimes too fast — you walk away, come back, and have no idea if it finished or is still working. Hooks solve this.

A hook is a shell command that runs automatically at specific points in Claude’s lifecycle. …

How to run Claude Code indefinitely

Issue #1031

Claude Code is good at completing tasks, but it stops when it thinks it’s done. For small, well-scoped work that’s fine. For larger projects — building out a feature, getting a test suite green, or scaffolding an entire app — …

How to use beads to manage tasks with Claude Code

Issue #1030

Most task systems give Claude a flat list and hope for the best. Beads is different. It tracks dependencies between tasks and only surfaces work that is actually ready — no blockers, no wasted effort.

Let’s use beads via its CLI …

How to use claude-mem to retrieve previous context in Claude Code

Issue #1029

Claude Code ships with two built-in memory systems. CLAUDE.md lets you write persistent instructions. Auto memory lets Claude write its own notes across sessions. Understanding both — and then knowing when to add claude-mem on top — is …

How to delegate tasks in parallel with sub agents and worktree in Claude Code

Issue #1028

Running one Claude session at a time is fine for small tasks. For larger work — building a feature while fixing a bug, writing tests while refactoring — you need parallelism. Claude Code provides two tools for this: sub-agents and git …

What we can learn from Claude Code source leak

Issue #1027

On March 31, 2026, Anthropic accidentally shipped a 59.8MB sourcemap file with a routine update to Claude Code. The file, bundled into npm package version 2.1.88, exposed nearly 2,000 files and 500,000 lines of source code to anyone who …

How to use Claude Code with tips from Boris Cherny

Issue #1026

Boris Cherny created Claude Code. He also uses it more heavily than almost anyone. He runs dozens of sessions at once, automates team workflows, and uses features most developers haven’t tried. These are his techniques.

Run Multiple …

How to style glass effect with corner radius for NSWindow on macOS

Issue #1025

macOS windows look best when they blend with the desktop — the translucent, frosted-glass look that makes panels feel native rather than opaque blocks of UI. There are two ways to achieve this depending on your deployment target. …

How to auto approve Claude Code permission

Issue #1024

Every time Claude Code wants to read a file, run a command, or write to disk, it asks for permission. For a first session on an unfamiliar project, that’s fine. But when you’re deep in a trusted codebase and clicking …

How to setup Terminal tools for Mac

Issue #1023

The default Terminal.app works, but it lacks the speed and features that modern development demands. A well-configured terminal setup makes navigation faster, Git operations visual, and file searching instant. This guide walks through …

How to automate browsing web with AI

Issue #1022

Web scraping used to mean writing brittle scripts that broke whenever a site changed. Now AI agents can browse the web like humans do. They read pages, click buttons, fill forms, and extract data without you writing CSS selectors for …

What AI tools to use with Claude Code

Issue #1021

Claude Code has built-in memory, but power users want more. These tools add deeper context tracking, task management, and access to the wider ecosystem.

Context & Memory

Tools that help Claude remember.

claude-mem

Saves what Claude …

What AI tools to use for iOS development

Issue #1020

AI coding assistants struggle with Swift. They suggest deprecated APIs. They miss SwiftUI performance issues. They write concurrency code that crashes at runtime.

The iOS community has built tools to fix this. Agent skills teach AI …

How to redact log in GitHub Action

Issue #1019

GitHub Actions logs every command you run. Anyone with repository access can see these logs.

When workflows handle customer data like social security numbers, this creates a problem. A single oversight can expose sensitive information. …

How to style hierarchy in SwiftUI

Issue #1018

Visual hierarchy is what separates polished apps from cluttered ones. When elements compete for attention equally, users struggle to know where to focus. SwiftUI provides powerful tools for creating hierarchy—through layered backgrounds, …

How to check frame navigation in WKWebView

Issue #1017

When your app loads web content with embedded iframes, deciding which navigations to allow becomes surprisingly tricky. A click in an ad banner behaves differently than a click on the main page content, and WKWebView’s delegate …

How to load parallel requests in Swift

Issue #1016

Loading data from multiple API endpoints is one of the most common tasks in iOS development. When your app needs to fetch a user’s profile, their recent orders, and notification count all at once, the naive approach is to call them …

How to group sub views with separator in SwiftUI

Issue #1015

Building a container view that wraps child views and places dividers between them sounds simple. But until iOS 18, SwiftUI didn’t give us a clean way to iterate over child views. Let’s look at how this problem was solved …

How to iterate sequence in Swift

Issue #1014

You need to loop through arrays, make sequences, change data, and repeat tasks. Swift has many ways to do this beyond the basic for loop. Knowing your options helps you write clearer code.

The Standard For Loop

The for-in loop handles the …

How to use custom UIKit trait in SwiftUI

Issue #1013

iOS 17 gave us custom UIKit traits. You can now propagate values through your view hierarchy using the trait collection system. But getting those same values into SwiftUI requires a bridge. The UITraitBridgedEnvironmentKey protocol …

Khoa Pham

Hello, I’m Khoa

I’m a thinker and storyteller with a passion for exploring the intersection of creativity and technology

🧑‍💻 I love crafting high quality and useful apps
🔥 I love open source. My GitHub open source has 2.3k followers with packages that are integrated by 45k+ apps and over 3.4m+ downloads on CocoaPods.
✍️ I write here on my blog and on Medium, which has over 2.7k+ followers with tons of articles and 90k+ monthly views.
🖥 Follow me for sharings about Swift, SwiftUI, iOS and macOS development.
Hei