Green Fragrance Handmade Soap Brand Site
A comprehensive brand platform built with Nuxt.js 3, migrated from PM2 to k3s/ArgoCD GitOps architecture, featuring Drizzle ORM, PostgreSQL, and MinIO storage.

Project Overview
Originally a simple image website, Green Fragrance has evolved into a production-grade cloud-native platform. It consists of a Nuxt 3 SSG frontend, a Vue 3 admin panel, and a Node.js Express backend. The entire infrastructure was modernized from a single-node PM2 setup to a k3s cluster managed by ArgoCD (GitOps). Data persistence was migrated from MySQL to PostgreSQL using Drizzle ORM for type-safety, and all media assets are now stored in S3-compatible MinIO. The system also includes comprehensive Prometheus/Grafana monitoring for HTTP metrics and database performance.
Technical Challenges & Solutions
Zero-Downtime Infrastructure Migration
Transitioning from a traditional PM2 process manager on a single VM to a containerized k3s cluster without disrupting the production site.
Storage & Database Modernization
The original MySQL + local disk storage was not scalable and difficult to backup across nodes.
Observability Implementation
Lack of visibility into backend performance, specifically S3 latency and database query bottlenecks.
Architecture

Frontend: Nuxt 3 (SSG) + Tailwind CSS. Backend: Node.js (ESM) + Express + Drizzle ORM + PostgreSQL. Storage: MinIO (S3-compatible) via aws-sdk client-s3. Infrastructure: k3s (Kubernetes) + ArgoCD (GitOps) + GitHub Actions CI/CD. Observability: Prometheus (prom-client) + Grafana, custom metrics for request duration and S3 operations. Security: Helmet, Express Rate Limit, and CSRF protection.
Learnings
This project was a masterclass in infrastructure modernization. Migrating a live system from PM2 to Kubernetes taught me how to handle containerization, secret management, and zero-downtime database migrations using ArgoCD Hooks. I also gained deep experience in S3-compatible storage and type-safe database access with Drizzle ORM, moving away from legacy MySQL patterns.