<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Lei&apos;s Blog</title>
  <subtitle>Lei&apos;s personal blog featuring AI Agent trends and development, Golang, frontend with SolidJS, Kubernetes operations, Emacs, functional programming with Clojure, entrepreneurship, B2B application development, fintech, and reflections on Silicon Valley engineering culture vs Chinese teams.</subtitle>
  <link href="https://blog.leiw.ai/feed.xml" rel="self" type="application/atom+xml"/>
  <link href="https://blog.leiw.ai/" rel="alternate" type="text/html"/>
  <id>https://blog.leiw.ai/</id>
  <updated>2026-03-20T00:00:00.000Z</updated>
  <author>
    <name>Lei</name>
  </author>
  <generator>Astro</generator>
  <entry>
    <title>Two Years With AI — From Assistants to Agents to AI Systems</title>
    <link href="https://blog.leiw.ai/blog/2026-03-20-two-years-with-ai/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2026-03-20-two-years-with-ai/</id>
    <published>2026-03-20T00:00:00.000Z</published>
    <updated>2026-03-20T00:00:00.000Z</updated>
    <summary>A personal journey through the AI stack: from coding assistants to embeddings, RAG, agents, and multi-agent platforms.</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="ai"/>
    <category term="agents"/>
    <category term="llm"/>
    <category term="rag"/>
    <category term="engineering"/>
    <category term="ai-assisted-coding"/>
  </entry>
  <entry>
    <title>Quick Start: Deploying Applications with Flux (Infra-Owned Registry)</title>
    <link href="https://blog.leiw.ai/blog/2026-01-31-flux-quick-start-infra-owned-registry/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2026-01-31-flux-quick-start-infra-owned-registry/</id>
    <published>2026-01-31T00:00:00.000Z</published>
    <updated>2026-01-31T00:00:00.000Z</updated>
    <summary>A practical guide to deploying applications with Flux using a shared installation and infra-owned app registry pattern, keeping app repos clean while enabling predictable GitOps workflows.</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="flux"/>
    <category term="gitops"/>
    <category term="kubernetes"/>
    <category term="kustomize"/>
    <category term="devops"/>
  </entry>
  <entry>
    <title>Why I Switched Back from SolidJS to React in the Gen‑AI Era</title>
    <link href="https://blog.leiw.ai/blog/2026-01-24-swtich-from-solidjs-to-react-in-gen-ai-era/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2026-01-24-swtich-from-solidjs-to-react-in-gen-ai-era/</id>
    <published>2026-01-24T00:00:00.000Z</published>
    <updated>2026-01-24T00:00:00.000Z</updated>
    <summary>Reflections on framework choice, AI‑generated code, and why React regained the edge over SolidJS.</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="react"/>
    <category term="solidjs"/>
    <category term="genai"/>
    <category term="frontend"/>
    <category term="engineering"/>
    <category term="ai-assisted-coding"/>
  </entry>
  <entry>
    <title>Deploying Zot Registry</title>
    <link href="https://blog.leiw.ai/blog/deploying-zot-registry/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/deploying-zot-registry/</id>
    <published>2026-01-22T00:00:00.000Z</published>
    <updated>2026-01-22T00:00:00.000Z</updated>
    <summary>A practical guide to deploying the Zot OCI registry with Nginx, systemd, and basic auth.</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="containers"/>
    <category term="registry"/>
    <category term="devops"/>
    <category term="infrastructure"/>
    <category term="zot"/>
  </entry>
  <entry>
    <title>How to Remove a File from Git Without Deleting It Locally</title>
    <link href="https://blog.leiw.ai/blog/2026-01-22-remove-from-git/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2026-01-22-remove-from-git/</id>
    <published>2026-01-22T00:00:00.000Z</published>
    <updated>2026-01-22T00:00:00.000Z</updated>
    <summary>A practical guide to stopping Git from tracking files, keeping local copies, and safely removing sensitive files from repository history.</summary>
    <author>
      <name>Lei</name>
    </author>
    <category term="git"/>
    <category term="version-control"/>
    <category term="security"/>
    <category term="developer-tools"/>
  </entry>
  <entry>
    <title>Modern Python Package Structure with pyproject.toml, uv, Scripts, and FastAPI</title>
    <link href="https://blog.leiw.ai/blog/2025-12-08-python-package-structure/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2025-12-08-python-package-structure/</id>
    <published>2025-12-08T00:00:00.000Z</published>
    <updated>2025-12-08T00:00:00.000Z</updated>
    <summary>A concise guide to building a clean, modern Python project using pyproject.toml, uv, scripts, and FastAPI.</summary>
    <author>
      <name>Lei</name>
    </author>
    <category term="python"/>
    <category term="uv"/>
    <category term="fastapi"/>
    <category term="packaging"/>
    <category term="tutorial"/>
  </entry>
  <entry>
    <title>Managing Multiple GPG Keys and YubiKey Setup</title>
    <link href="https://blog.leiw.ai/blog/2025-11-06-manage-gpg-keys-and-yubikey-setup/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2025-11-06-manage-gpg-keys-and-yubikey-setup/</id>
    <published>2025-11-05T00:00:00.000Z</published>
    <updated>2025-11-05T00:00:00.000Z</updated>
    <summary>A practical guide to managing multiple GPG private keys — exporting, importing, backing up, and securely storing them on a YubiKey for signing, encryption, and SSH authentication.</summary>
    <author>
      <name>Lei</name>
    </author>
    <category term="security"/>
    <category term="GPG"/>
    <category term="YubiKey"/>
    <category term="encryption"/>
    <category term="Git"/>
    <category term="macOS"/>
  </entry>
  <entry>
    <title>Inside MCP: Develop your first MCP Server</title>
    <link href="https://blog.leiw.ai/blog/2025-09-04-inside-mcp-4-first-mcp/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2025-09-04-inside-mcp-4-first-mcp/</id>
    <published>2025-09-04T00:00:00.000Z</published>
    <updated>2025-09-04T00:00:00.000Z</updated>
    <summary>A step-by-step guide for developers to build and test MCP servers that connect agents with real systems.</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="MCP"/>
    <category term="AI Agents"/>
    <category term="Integration"/>
    <category term="Developer Guide"/>
    <category term="Inside MCP"/>
  </entry>
  <entry>
    <title>Inside MCP: Designing Agent Workflows with MCP</title>
    <link href="https://blog.leiw.ai/blog/2025-09-03-inside-mcp-3-workflows/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2025-09-03-inside-mcp-3-workflows/</id>
    <published>2025-09-03T00:00:00.000Z</published>
    <updated>2025-09-03T00:00:00.000Z</updated>
    <summary>How agents use MCP to power real-world workflows, from enterprise use cases to event-driven systems and multi-step orchestration.</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="MCP"/>
    <category term="AI Agents"/>
    <category term="Workflows"/>
    <category term="Inside MCP"/>
  </entry>
  <entry>
    <title>Inside MCP: How MCP Connects Agents to Data and Systems</title>
    <link href="https://blog.leiw.ai/blog/2025-09-02-inside-mcp-2-connect-agent/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2025-09-02-inside-mcp-2-connect-agent/</id>
    <published>2025-09-02T00:00:00.000Z</published>
    <updated>2025-09-02T00:00:00.000Z</updated>
    <summary>A look at how the Model Context Protocol (MCP) bridges agents with databases, SaaS applications, and legacy systems.</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="MCP"/>
    <category term="AI Agents"/>
    <category term="Integration"/>
    <category term="Data Access"/>
    <category term="Inside MCP"/>
  </entry>
  <entry>
    <title>Inside MCP: The Missing Link Between Agents and the Real World</title>
    <link href="https://blog.leiw.ai/blog/2025-09-01-inside-mcp-1-intro/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2025-09-01-inside-mcp-1-intro/</id>
    <published>2025-09-01T00:00:00.000Z</published>
    <updated>2025-09-01T00:00:00.000Z</updated>
    <summary>An introduction to the Model Context Protocol (MCP) and how it enables AI agents to connect with real systems, data, and workflows.</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="MCP"/>
    <category term="AI Agents"/>
    <category term="Integration"/>
    <category term="Context Protocol"/>
    <category term="Inside MCP"/>
  </entry>
  <entry>
    <title>Designing Configuration for Open-Source Go Libraries</title>
    <link href="https://blog.leiw.ai/blog/2025-08-31-opensource-library-golang/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2025-08-31-opensource-library-golang/</id>
    <published>2025-08-31T00:00:00.000Z</published>
    <updated>2025-08-31T00:00:00.000Z</updated>
    <summary>Best practices for balancing configuration, environment variables, and functional options when building open-source Go libraries.</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="golang"/>
    <category term="open-source"/>
    <category term="configuration"/>
    <category term="best-practices"/>
  </entry>
  <entry>
    <title>Go Standard Layered Structure and Flattened pkg Modules (A Personal Practice Note)</title>
    <link href="https://blog.leiw.ai/blog/2025-08-22-go-pkg-flat/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2025-08-22-go-pkg-flat/</id>
    <published>2025-08-22T00:00:00.000Z</published>
    <updated>2025-08-22T00:00:00.000Z</updated>
    <summary>An introduction to common Go project structures and a personal improvement: using flattened module directories under pkg to avoid excessive subfolders and duplicate package names.</summary>
    <author>
      <name>Lei</name>
    </author>
    <category term="Golang"/>
    <category term="Project Structure"/>
    <category term="pkg"/>
    <category term="Architecture"/>
    <category term="Practice"/>
  </entry>
  <entry>
    <title>PostgreSQL Reference Guide: Administration, Configuration, and Troubleshooting</title>
    <link href="https://blog.leiw.ai/blog/2021-08-09-postgres/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2021-08-09-postgres/</id>
    <published>2021-08-09T00:00:00.000Z</published>
    <updated>2021-08-09T00:00:00.000Z</updated>
    <summary>A comprehensive guide to PostgreSQL database administration, configuration, and common operations</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="postgres"/>
    <category term="database"/>
    <category term="sql"/>
    <category term="administration"/>
    <category term="devops"/>
  </entry>
  <entry>
    <title>AWS Reference Guide: CLI, S3, EventBridge, and Best Practices</title>
    <link href="https://blog.leiw.ai/blog/2021-08-08-aws/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2021-08-08-aws/</id>
    <published>2021-08-08T00:00:00.000Z</published>
    <updated>2021-08-08T00:00:00.000Z</updated>
    <summary>A comprehensive guide to AWS concepts, services, and best practices</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="aws"/>
    <category term="cloud"/>
    <category term="computing"/>
    <category term="s3"/>
    <category term="eventbridge"/>
    <category term="iam"/>
    <category term="cli"/>
  </entry>
  <entry>
    <title>Emacs Reference Guide: Tips, Tricks, and Troubleshooting</title>
    <link href="https://blog.leiw.ai/blog/2021-08-08-emacs/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2021-08-08-emacs/</id>
    <published>2021-08-08T00:00:00.000Z</published>
    <updated>2021-08-08T00:00:00.000Z</updated>
    <summary>A comprehensive guide to Emacs configuration, features, and common solutions to problems</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="emacs"/>
    <category term="configuration"/>
    <category term="magit"/>
    <category term="dired"/>
    <category term="lsp"/>
    <category term="productivity"/>
  </entry>
  <entry>
    <title>Docker Reference Guide: Tips, Configurations, and Best Practices</title>
    <link href="https://blog.leiw.ai/blog/2021-08-08-docker/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2021-08-08-docker/</id>
    <published>2021-08-08T00:00:00.000Z</published>
    <updated>2021-08-08T00:00:00.000Z</updated>
    <summary>Docker Reference Guide: Tips, Configurations, and Best Practices</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="tech"/>
    <category term="docker"/>
    <category term="containers"/>
    <category term="devops"/>
    <category term="kubernetes"/>
    <category term="ci-cd"/>
  </entry>
  <entry>
    <title>Building a Secure Static Website with S3, CloudFront, and Route 53</title>
    <link href="https://blog.leiw.ai/blog/2019-09-10-aws-static-website-https-s3-cloudfront/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2019-09-10-aws-static-website-https-s3-cloudfront/</id>
    <published>2019-09-10T00:00:00.000Z</published>
    <updated>2019-09-10T00:00:00.000Z</updated>
    <summary>Building a Secure Static Website with S3, CloudFront, and Route 53</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="tech"/>
    <category term="aws"/>
    <category term="s3"/>
    <category term="cloudfront"/>
    <category term="route53"/>
    <category term="static-site"/>
  </entry>
  <entry>
    <title>Configuring Private DNS with Route 53 Private Hosted Zones in AWS VPC</title>
    <link href="https://blog.leiw.ai/blog/2019-01-10-aws-vpc-private-hosted-zones/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2019-01-10-aws-vpc-private-hosted-zones/</id>
    <published>2019-01-10T00:00:00.000Z</published>
    <updated>2019-01-10T00:00:00.000Z</updated>
    <summary>Configuring Private DNS with Route 53 Private Hosted Zones in AWS VPC</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="tech"/>
    <category term="aws"/>
    <category term="route53"/>
    <category term="vpc"/>
    <category term="dns"/>
    <category term="networking"/>
  </entry>
  <entry>
    <title>Amazon EKS: Setting Up and Managing Kubernetes on AWS</title>
    <link href="https://blog.leiw.ai/blog/2018-12-15-aws-eks-setup-management/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2018-12-15-aws-eks-setup-management/</id>
    <published>2018-12-15T00:00:00.000Z</published>
    <updated>2018-12-15T00:00:00.000Z</updated>
    <summary>Amazon EKS: Setting Up and Managing Kubernetes on AWS</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="tech"/>
    <category term="aws"/>
    <category term="kubernetes"/>
    <category term="eks"/>
    <category term="devops"/>
    <category term="cloud"/>
  </entry>
  <entry>
    <title>Configuring Time Synchronization for EC2 Docker Clusters</title>
    <link href="https://blog.leiw.ai/blog/2018-10-15-aws-ec2-docker-ntp-configuration/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2018-10-15-aws-ec2-docker-ntp-configuration/</id>
    <published>2018-10-15T00:00:00.000Z</published>
    <updated>2018-10-15T00:00:00.000Z</updated>
    <summary>Configuring Time Synchronization for EC2 Docker Clusters</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="tech"/>
    <category term="aws"/>
    <category term="ec2"/>
    <category term="docker"/>
    <category term="ntp"/>
    <category term="time-synchronization"/>
  </entry>
  <entry>
    <title>Nginx quickstart</title>
    <link href="https://blog.leiw.ai/blog/2018-10-03-nginx-quickstart/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2018-10-03-nginx-quickstart/</id>
    <published>2018-10-03T00:00:00.000Z</published>
    <updated>2018-10-03T00:00:00.000Z</updated>
    <summary>Nginx quickstart</summary>
    <author>
      <name>Lei</name>
    </author>
    <category term="nginx"/>
    <category term="quickstart"/>
    <category term="devops"/>
  </entry>
  <entry>
    <title>Configuring Cross-Origin Resource Sharing (CORS) for Amazon S3 Buckets</title>
    <link href="https://blog.leiw.ai/blog/2018-09-04-aws-s3-cors-configuration/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2018-09-04-aws-s3-cors-configuration/</id>
    <published>2018-09-04T00:00:00.000Z</published>
    <updated>2018-09-04T00:00:00.000Z</updated>
    <summary>Configuring Cross-Origin Resource Sharing (CORS) for Amazon S3 Buckets</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="tech"/>
    <category term="aws"/>
    <category term="s3"/>
    <category term="web-development"/>
    <category term="security"/>
  </entry>
  <entry>
    <title>SSH Tunnel (SSH Port forwarding)</title>
    <link href="https://blog.leiw.ai/blog/2018-05-24-ssh-tunnel/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2018-05-24-ssh-tunnel/</id>
    <published>2018-05-24T00:00:00.000Z</published>
    <updated>2018-05-24T00:00:00.000Z</updated>
    <summary>Guide to SSH tunnels including local, remote, and dynamic port forwarding, plus server and client configuration.</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="ssh"/>
    <category term="tunneling"/>
    <category term="networking"/>
    <category term="security"/>
  </entry>
  <entry>
    <title>SSH Escape Sequences: How to Terminate and Control SSH Sessions</title>
    <link href="https://blog.leiw.ai/blog/2017-09-27-ssh/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2017-09-27-ssh/</id>
    <published>2017-09-27T00:00:00.000Z</published>
    <updated>2017-09-27T00:00:00.000Z</updated>
    <summary>SSH Escape Sequences: How to Terminate and Control SSH Sessions</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="tech"/>
    <category term="linux"/>
    <category term="ssh"/>
    <category term="terminal"/>
  </entry>
  <entry>
    <title>Writing IAM Policies: How to Grant Access to an Amazon S3 Bucket</title>
    <link href="https://blog.leiw.ai/blog/2017-09-27-aws-iam-policy-for-s3/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2017-09-27-aws-iam-policy-for-s3/</id>
    <published>2017-09-27T00:00:00.000Z</published>
    <updated>2017-09-27T00:00:00.000Z</updated>
    <summary>Writing IAM Policies: How to Grant Access to an Amazon S3 Bucket</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="tech"/>
  </entry>
  <entry>
    <title>Essential Networking Command-Line Tools Reference</title>
    <link href="https://blog.leiw.ai/blog/2017-09-27-networking-tools/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2017-09-27-networking-tools/</id>
    <published>2017-09-27T00:00:00.000Z</published>
    <updated>2017-09-27T00:00:00.000Z</updated>
    <summary>Essential Networking Command-Line Tools Reference</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="tech"/>
    <category term="networking"/>
    <category term="linux"/>
    <category term="command-line"/>
  </entry>
  <entry>
    <title>Getting Started with AWS ECS CLI: Installation and Configuration</title>
    <link href="https://blog.leiw.ai/blog/2017-09-27-aws-ecscli/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2017-09-27-aws-ecscli/</id>
    <published>2017-09-27T00:00:00.000Z</published>
    <updated>2017-09-27T00:00:00.000Z</updated>
    <summary>Getting Started with AWS ECS CLI: Installation and Configuration</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="tech"/>
    <category term="aws"/>
    <category term="ecs"/>
    <category term="cli"/>
  </entry>
  <entry>
    <title>AWS ECS Guide: Policies, Load Balancing, and Troubleshooting</title>
    <link href="https://blog.leiw.ai/blog/2017-09-04-ecs/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2017-09-04-ecs/</id>
    <published>2017-09-04T00:00:00.000Z</published>
    <updated>2017-09-04T00:00:00.000Z</updated>
    <summary>AWS ECS Guide: Policies, Load Balancing, and Troubleshooting</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="tech"/>
    <category term="aws"/>
    <category term="ecs"/>
    <category term="containers"/>
    <category term="load-balancing"/>
  </entry>
  <entry>
    <title>AWS ECS: Essential IAM Policies and Configuration Notes</title>
    <link href="https://blog.leiw.ai/blog/2017-09-04-aws-ecs-notes/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2017-09-04-aws-ecs-notes/</id>
    <published>2017-09-04T00:00:00.000Z</published>
    <updated>2017-09-04T00:00:00.000Z</updated>
    <summary>AWS ECS: Essential IAM Policies and Configuration Notes</summary>
    <author>
      <name>Lei Wang</name>
    </author>
    <category term="tech"/>
  </entry>
  <entry>
    <title>Two ways of running command in subshell</title>
    <link href="https://blog.leiw.ai/blog/2017-09-02-subshell-commands/" rel="alternate" type="text/html"/>
    <id>https://blog.leiw.ai/blog/2017-09-02-subshell-commands/</id>
    <published>2017-09-02T00:00:00.000Z</published>
    <updated>2017-09-02T00:00:00.000Z</updated>
    <summary>Two ways of running command in subshell</summary>
    <author>
      <name>Lei</name>
    </author>
    <category term="shell"/>
    <category term="bash"/>
    <category term="subshell"/>
  </entry>
</feed>