<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Yong Sen Blog</title>
    <link>https://www.yongsen.space/blog</link>
    <description>Technical blog posts about web development, React, Next.js, and software engineering by Yong Sen Yeoh.</description>
    <language>en-us</language>
    <lastBuildDate>Tue, 14 Apr 2026 01:54:49 GMT</lastBuildDate>
    <atom:link href="https://www.yongsen.space/feed.xml" rel="self" type="application/rss+xml"/>

  <item>
    <title>Building a Chatbot with RAG: How Retrieval Meets the LLM</title>
    <link>https://www.yongsen.space/blog/building-a-rag-chatbot-llm-vector-search</link>
    <description>A practical look at Retrieval-Augmented Generation: embeddings, vector search, and how to wire them to an LLM—plus how this portfolio implements the same pattern with Next.js, Supabase pgvector, and Hugging Face.</description>
    <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://www.yongsen.space/blog/building-a-rag-chatbot-llm-vector-search</guid>
    <enclosure url="https://www.yongsen.space/images/blog/rag-chatbot-cover.webp" type="image/png" />
  </item>
  <item>
    <title>Essential Security Practices to Protect Your Web Applications</title>
    <link>https://www.yongsen.space/blog/essential-security-practices-protect-web-applications</link>
    <description>Practical, easy-to-apply security improvements for any online project — from security headers, rate limiting, login protection, to safe file uploads and more.</description>
    <pubDate>Mon, 24 Nov 2025 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://www.yongsen.space/blog/essential-security-practices-protect-web-applications</guid>
    <enclosure url="https://www.yongsen.space/images/blog/security-cover.webp" type="image/png" />
  </item>
  <item>
    <title>Automated MongoDB Backup to S3 with Shell Script on Ubuntu</title>
    <link>https://www.yongsen.space/blog/mongodb-backup-script-s3-upload</link>
    <description>Learn how to create an automated MongoDB backup system using shell scripts that dump databases, compress them, and upload to AWS S3 with automatic cleanup.</description>
    <pubDate>Sat, 25 Jan 2025 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://www.yongsen.space/blog/mongodb-backup-script-s3-upload</guid>
    <enclosure url="https://www.yongsen.space/images/blog/mongodb-cover.webp" type="image/png" />
  </item>
  <item>
    <title>Deploy Next.js on Ubuntu with Git, PM2, Nginx, and Certbot</title>
    <link>https://www.yongsen.space/blog/deploy-nextjs-ubuntu-git-pm2-nginx-certbot</link>
    <description>Production-ready guide to deploy a Next.js app on Ubuntu using Git for code, PM2 for process management, Nginx as reverse proxy, and Certbot for HTTPS.</description>
    <pubDate>Mon, 20 Jan 2025 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://www.yongsen.space/blog/deploy-nextjs-ubuntu-git-pm2-nginx-certbot</guid>
    <enclosure url="https://www.yongsen.space/images/blog/deployment-cover.webp" type="image/png" />
  </item>
  <item>
    <title>Generate a Self‑Signed SSL Certificate on Ubuntu (Nginx)</title>
    <link>https://www.yongsen.space/blog/self-signed-certificate-nginx-ubuntu</link>
    <description>Step-by-step guide to creating a self-signed certificate with OpenSSL and configuring Nginx with secure defaults.</description>
    <pubDate>Mon, 20 Jan 2025 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://www.yongsen.space/blog/self-signed-certificate-nginx-ubuntu</guid>
    <enclosure url="https://www.yongsen.space/images/blog/ssl-cover.webp" type="image/png" />
  </item>
  <item>
    <title>How to Set Up an FTP User on Ubuntu (vsftpd)</title>
    <link>https://www.yongsen.space/blog/setup-ftp-user-ubuntu</link>
    <description>Step-by-step guide to installing and configuring vsftpd on Ubuntu, creating a restricted FTP user, and opening firewall ports.</description>
    <pubDate>Mon, 20 Jan 2025 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://www.yongsen.space/blog/setup-ftp-user-ubuntu</guid>
    <enclosure url="https://www.yongsen.space/images/blog/ftp-cover.webp" type="image/png" />
  </item>
  <item>
    <title>Ubuntu Server Best Practices: Create &apos;ubuntu&apos; User, SSH Keys, Disable Root Login</title>
    <link>https://www.yongsen.space/blog/ubuntu-setup-switch-from-root-to-ubuntu</link>
    <description>Harden an Ubuntu server by creating a non-root user with SSH key-based access, disabling root login, and configuring sudo privileges.</description>
    <pubDate>Mon, 20 Jan 2025 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://www.yongsen.space/blog/ubuntu-setup-switch-from-root-to-ubuntu</guid>
    <enclosure url="https://www.yongsen.space/images/blog/ubuntu-cover.webp" type="image/png" />
  </item>
  <item>
    <title>Why We Need forwardRef in React: A Complete Guide</title>
    <link>https://www.yongsen.space/blog/react-forwardref-explained</link>
    <description>Understanding forwardRef in React: when to use it, why it&apos;s necessary, and practical examples for building reusable components.</description>
    <pubDate>Wed, 15 Jan 2025 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://www.yongsen.space/blog/react-forwardref-explained</guid>
    <enclosure url="https://www.yongsen.space/images/blog/react-forwardref-cover.webp" type="image/png" />
  </item>
  <item>
    <title>Understanding React Hooks: useEffect vs useMemo vs useCallback</title>
    <link>https://www.yongsen.space/blog/react-hooks-comparison</link>
    <description>A comprehensive guide to understanding when and why to use useEffect, useMemo, and useCallback in React applications.</description>
    <pubDate>Wed, 15 Jan 2025 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://www.yongsen.space/blog/react-hooks-comparison</guid>
    <enclosure url="https://www.yongsen.space/images/blog/react-cover.webp" type="image/png" />
  </item>
  </channel>
</rss>