diff --git a/ADMIN_MCP_SECTION_GUIDE.md b/ADMIN_MCP_SECTION_GUIDE.md index f6ea5b1..c45f6ea 100644 --- a/ADMIN_MCP_SECTION_GUIDE.md +++ b/ADMIN_MCP_SECTION_GUIDE.md @@ -1,6 +1,6 @@ # DBK Platform Admin Section Guide -> **Platform scope:** This guide describes shared CMS administration capabilities. Product and content examples are tenant-specific; HomAroma is the reference tenant. +> **Platform scope:** This guide describes shared CMS administration capabilities. Product and content examples are tenant-specific; HomAroma is the reference tenant. See [`docs/PLATFORM_OVERVIEW.md`](docs/PLATFORM_OVERVIEW.md). This guide explains the dynamic page blocks available in the Page Builder and what each block contains. @@ -138,7 +138,7 @@ This guide explains the dynamic page blocks available in the Page Builder and wh ### `SCENT_NOTES_BREAKDOWN` -- Purpose: Fragrance layer breakdown +- Purpose: Fragrance layer breakdown (reference tenant vertical block; pattern for multi-tier attribute breakdowns) - Contains: - `title` localized string optional - `description` localized string optional diff --git a/ARCHITECTURE_DECISIONS.md b/ARCHITECTURE_DECISIONS.md index c569f8c..ee4369d 100644 --- a/ARCHITECTURE_DECISIONS.md +++ b/ARCHITECTURE_DECISIONS.md @@ -1,6 +1,6 @@ # Architecture Decisions — DBK Platform -> **Platform scope:** HomAroma references in this ADR are reference-tenant context unless a decision explicitly names an operational resource. +> **Platform scope:** DBK Platform architecture decisions. HomAroma references in this ADR are reference-tenant context unless a decision explicitly names an operational resource. See [`docs/PLATFORM_OVERVIEW.md`](docs/PLATFORM_OVERVIEW.md). > บันทึกการตัดสินใจเชิงสถาปัตยกรรม (ADR) จากการประชุมทีม > อัปเดตล่าสุด: 2026-07-12 diff --git a/BUSINESS_ANALYTICS_MAPS_PLAN.md b/BUSINESS_ANALYTICS_MAPS_PLAN.md index 3d9c6a8..2da9a2a 100644 --- a/BUSINESS_ANALYTICS_MAPS_PLAN.md +++ b/BUSINESS_ANALYTICS_MAPS_PLAN.md @@ -1,7 +1,7 @@ # แผนการพัฒนาและคู่มือสร้างแผนที่ Malaysia & Vietnam Map -> **Platform capability plan:** Geographic coverage, data availability, and analytics configuration must be enabled and validated per tenant. -สำหรับเมนู Business Analytics บนระบบ HomAroma Admin +> **Platform capability plan:** Geographic coverage, data availability, and analytics configuration are platform capabilities enabled per tenant. HomAroma is the reference tenant. See [`docs/PLATFORM_OVERVIEW.md`](docs/PLATFORM_OVERVIEW.md). +สำหรับเมนู Business Analytics บนระบบ DBK Platform Admin (Multi-tenant & Multi-region) เอกสารนี้รวบรวมรายละเอียด แหล่งข้อมูล Open-source Repositories สำหรับดาวน์โหลดไฟล์ GeoJSON สถาปัตยกรรมทางเทคนิค และแผนขั้นตอนการนำไปพัฒนาต่อยอดให้เหมือนกับ **Omnichannel Sales Map (แผนที่ประเทศไทย)** เดิม diff --git a/CUSTOM_BLOCK_FLOW_GUIDE.md b/CUSTOM_BLOCK_FLOW_GUIDE.md index b0fe0f6..b97216f 100644 --- a/CUSTOM_BLOCK_FLOW_GUIDE.md +++ b/CUSTOM_BLOCK_FLOW_GUIDE.md @@ -1,8 +1,8 @@ -# Custom Block Flow Guide +# Custom Block Flow Guide — DBK Platform -> **Platform scope:** This guide describes shared CMS block workflows. Content examples belong to their named tenant. +> **Platform scope:** This guide describes shared CMS block workflows for DBK Platform. Content examples (e.g. `BakeryCategories`) belong to their named tenant. HomAroma is the reference tenant. See [`docs/PLATFORM_OVERVIEW.md`](docs/PLATFORM_OVERVIEW.md). -เอกสารนี้อธิบาย Flow การสร้าง Custom Block สำหรับ HomAroma Page Builder โดยใช้ `BakeryCategories` เป็นตัวอย่างจริง เพื่อให้เพิ่ม block ถัดไปได้โดยไม่ต้อง hardcode section type ใหม่ทุกครั้ง +เอกสารนี้อธิบาย Flow การสร้าง Custom Block สำหรับ DBK Platform Page Builder โดยใช้ `BakeryCategories` เป็นตัวอย่าง tenant จริง เพื่อให้เพิ่ม block ถัดไปได้โดยไม่ต้อง hardcode section type ใหม่ทุกครั้ง ## แนวคิดหลัก diff --git a/PRISMA7_GUIDE.md b/PRISMA7_GUIDE.md index 7960271..db78fb9 100644 --- a/PRISMA7_GUIDE.md +++ b/PRISMA7_GUIDE.md @@ -1,14 +1,14 @@ -# Prisma 7 — คู่มือการเชื่อมต่อและทำ Seed (ไม่งงอีกต่อไป) +# Prisma 7 — คู่มือการเชื่อมต่อและทำ Seed — DBK Platform + +> **Platform engineering guide:** Any HomAroma seed data in this guide is reference-tenant data. Validate the target tenant database and seed strategy before use. See [`docs/PLATFORM_OVERVIEW.md`](docs/PLATFORM_OVERVIEW.md). -> **Platform engineering guide:** Any HomAroma seed data in this guide is reference-tenant data. Validate the target tenant database and seed strategy before use. - xx > **สำคัญมาก:** Prisma 7 เปลี่ยนวิธีการเชื่อมต่อฐานข้อมูลอย่างพื้นฐาน > ถ้าเคยใช้ Prisma 4, 5, หรือ 6 มาก่อน — ของเก่าพวกนั้น **ใช้ไม่ได้อีกแล้ว** --- -## 1. สิ่งที่เปลี่ยนไปจาก Prisma 6fdss → Prisma 7 +## 1. สิ่งที่เปลี่ยนไปจาก Prisma 5/6 → Prisma 7 | เรื่อง | Prisma 5/6 (เก่า) | Prisma 7 (ใหม่) | |---|---|---| diff --git a/docs/DOCUMENTATION_MIGRATION.md b/docs/DOCUMENTATION_MIGRATION.md index 20240b8..2d779c9 100644 --- a/docs/DOCUMENTATION_MIGRATION.md +++ b/docs/DOCUMENTATION_MIGRATION.md @@ -13,6 +13,15 @@ See [Platform Overview](PLATFORM_OVERVIEW.md) for terminology. - `PROJECT_SYSTEM_SUMMARY.md` - `PROJECT_MANAGEMENT_PERSPECTIVE.md` - `LLM_MCP_GUIDE.md` +- `ARCHITECTURE_DECISIONS.md` +- `CUSTOM_BLOCK_FLOW_GUIDE.md` +- `ADMIN_MCP_SECTION_GUIDE.md` +- `PRISMA7_GUIDE.md` +- `mcp_update.md` +- `implementation_plan.md` +- `frontend-comparison.md` +- `BUSINESS_ANALYTICS_MAPS_PLAN.md` +- `goal.section.md` These documents now introduce DBK Platform before mentioning HomAroma and explain the platform/tenant boundary. diff --git a/frontend-comparison.md b/frontend-comparison.md index 32302c4..2d58c1d 100644 --- a/frontend-comparison.md +++ b/frontend-comparison.md @@ -1,79 +1,71 @@ -# สรุปความแตกต่างและเป้าหมายการใช้งาน: `apps/ssr` vs `apps/website` +# สรุปความแตกต่างและเป้าหมายการใช้งาน: `apps/spa` vs `apps/website` — DBK Platform -> **Platform architecture note:** Any HomAroma-specific routes, data, or branding cited below are reference-tenant examples. +> **Platform architecture note:** DBK Platform integrates two complementary frontend applications. HomAroma is the reference tenant; tenant-specific routes or branding cited below are reference examples. See [`docs/PLATFORM_OVERVIEW.md`](docs/PLATFORM_OVERVIEW.md). -เอกสารนี้สรุปความแตกต่างเชิงสถาปัตยกรรม (Architecture) และจุดประสงค์การใช้งานระหว่าง Frontend ทั้งสองระบบในโปรเจกต์ HomAroma เพื่อให้ทีมพัฒนาเข้าใจว่าควรเลือกใช้หรือพัฒนาต่อยอดที่โปรเจกต์ใด +เอกสารนี้สรุปความแตกต่างเชิงสถาปัตยกรรม (Architecture) และจุดประสงค์การใช้งานระหว่าง Frontend ทั้งสองระบบใน DBK Platform เพื่อให้ทีมพัฒนาเข้าใจว่าควรเลือกใช้หรือพัฒนาต่อยอดที่โปรเจกต์ใด ## ตารางเปรียบเทียบ (Comparison Table) -| คุณสมบัติ (Feature) | `apps/website` (SPA) | `apps/ssr` (Next.js) | +| คุณสมบัติ (Feature) | `apps/spa` (Mobile / Social Commerce) | `apps/website` (Main Public Website) | | :--- | :--- | :--- | | **สถาปัตยกรรมพื้นฐาน** | Single Page Application (SPA) | Server-Side Rendering (SSR) | -| **เครื่องมือ / Framework**| React 19 + Vite | Next.js 15 (App Router) + React 19 | +| **เครื่องมือ / Framework**| React 19 + Vite + Tailwind CSS | Next.js 15 (App Router) + React 19 + Tailwind CSS | | **การประมวลผล (Rendering)**| Client-side Rendering (ประมวลผลที่เบราว์เซอร์) | Server-side Rendering (ประมวลผลที่เซิร์ฟเวอร์ก่อนส่งให้ผู้ใช้) | -| **เป้าหมายหลัก (Use Case)** | **LINE OA / LIFF App**, Web App ที่เน้นความลื่นไหล | **SEO**, การค้นหาผ่าน Google, หน้าเว็บสาธารณะ | -| **จุดเด่น** | ทำงานลื่นไหลเหมือนแอปมือถือ (ไม่กระตุกตอนเปลี่ยนหน้า), เหมาะกับ Webview ในแอปพลิเคชัน | ทำ SEO ได้ดีมาก Bot สามารถอ่านข้อมูลสินค้าได้ทันที, โหลดหน้าแรกได้ไว | -| **จุดด้อย** | ทำ SEO ได้ยาก (Bot ของ Google อาจจะอ่านข้อมูลไม่ครบเพราะต้องรอ JavaScript ทำงาน) | ต้องใช้ทรัพยากรฝั่ง Server ในการรัน (Node.js Process), ซับซ้อนกว่าในการตั้งค่า | -| **รูปแบบการ Deploy** | **Static Files** (HTML/CSS/JS) เสิร์ฟผ่าน Nginx โดยตรง ไม่ต้องมี Node.js รันเป็นพื้นหลัง | **Node.js Server** ต้องใช้ PM2 รัน `next start` และใช้ Nginx ทำ Reverse Proxy | -| **ตำแหน่งไฟล์บน Server**| `/home/ti/projects/MyNginxMain/nginx/html/homaroma.shop/website` | `/home/ti/projects/homaroma-ssr` | -| **คำสั่ง Build** | `bun run build` (ได้โฟลเดอร์ `dist`) | `bun run build` (ได้โฟลเดอร์ `.next`) | -| **Service ที่ทำงาน**| ไม่มี (Nginx จัดการทั้งหมด) | **PM2** ชื่อ process: `homaroma-ssr` รันบนพอร์ต `3001` | -| **การจัดการ Routing** | `react-router-dom` (ประมวลผลที่ฝั่ง Client ทั้งหมด) | Next.js App Router (มีระบบ File-based routing) | -| **การจัดการ State** | Zustand | React Context / Zustand / Server Components | -| **ความเหมาะสมของระบบ Login**| เหมาะสมกับ **LINE LIFF Login** และ Token-based auth เพราะมี Context แบบ SPA | เหมาะกับ Cookie-based Auth (NextAuth/Auth.js) หรือ Session | +| **เป้าหมายหลัก (Use Case)** | **LINE OA / LIFF App**, Mobile-first commerce, Retention | **SEO**, การค้นหาผ่าน Google, หน้าเว็บแบรนด์สาธารณะ | +| **จุดเด่น** | ทำงานลื่นไหลเหมือนแอปมือถือ (ไม่กระตุกตอนเปลี่ยนหน้า), เหมาะกับ Webview ใน LINE | ทำ SEO ได้ดีมาก Bot ของ Search Engine อ่านข้อมูลสินค้าได้ทันที, โหลดหน้าแรกได้ไว | +| **จุดด้อย** | ทำ SEO ได้ยาก (Bot ของ Google อาจจะอ่านข้อมูลไม่ครบเพราะต้องรอ JavaScript) | ต้องใช้ทรัพยากรฝั่ง Server ในการรัน (Node.js Process), ซับซ้อนกว่าในการตั้งค่า | +| **รูปแบบการ Deploy** | **Static Files** (HTML/CSS/JS) เสิร์ฟผ่าน Nginx โดยตรง | **Node.js Server** รันด้วย PM2 / Bun และใช้ Nginx ทำ Reverse Proxy | +| **คำสั่ง Build** | `cd apps/spa && bun run build` (ได้โฟลเดอร์ `dist`) | `cd apps/website && bun run build` (ได้โฟลเดอร์ `.next`) | +| **การจัดการ Routing** | `react-router-dom` (ประมวลผลที่ฝั่ง Client ทั้งหมด) | Next.js App Router (File-based routing with Server Components) | +| **การจัดการ State** | Zustand | React Context / Zustand / Server State | +| **ความเหมาะสมของระบบ Auth**| เหมาะสมกับ **LINE LIFF Login** และ Token-based auth เพราะมี Context แบบ SPA | เหมาะกับ Cookie-based Auth / Server Session | --- ## สรุปแนวทางการพัฒนา (Development Guidelines) -### 1. เลือกใช้ `apps/website` เมื่อ: -- คุณต้องการพัฒนาฟีเจอร์ที่ให้ลูกค้าเปิดใช้งานผ่าน **LINE Official Account (LIFF Menu)** +### 1. เลือกใช้ `apps/spa` เมื่อ: +- คุณต้องการพัฒนาฟีเจอร์ที่ให้ลูกค้าเปิดใช้งานผ่าน **LINE Official Account (LIFF Menu)** หรือ Social Commerce - เน้นประสบการณ์ผู้ใช้แบบ **App-like UX** ที่ต้องการความรวดเร็วในการกดเปลี่ยนหน้า เช่น ระบบตะกร้าสินค้าแบบ Popup หรือ Dashboard ส่วนตัวลูกค้า -- ไม่สนใจเรื่อง SEO (เช่น หน้าจัดการโปรไฟล์ลูกค้าส่วนตัว, หน้า Checkout) +- ไม่เน้นเรื่อง Public Search SEO (เช่น หน้าจัดการโปรไฟล์ลูกค้าส่วนตัว, หน้าสะสมแต้ม, หน้า Checkout) -### 2. เลือกใช้ `apps/ssr` เมื่อ: +### 2. เลือกใช้ `apps/website` เมื่อ: - เป็นหน้าเพจที่ต้องการดึงดูดลูกค้าใหม่ (Acquisition) ผ่าน Search Engine (Google) -- หน้าสินค้า (Product Details), หมวดหมู่สินค้า (Category), หรือบทความ (Blog) ที่คุณอยากให้แชร์ลิงก์แล้วขึ้นภาพ Preview (Open Graph) ที่สวยงามบน Facebook/LINE -- เป็นหน้าหลัก (Landing Page) ที่เน้นความน่าเชื่อถือและต้องการโหลดให้เร็วที่สุดตั้งแต่ครั้งแรกที่เปิด +- หน้าสินค้า (Product Details), หมวดหมู่สินค้า (Category), หรือบทความ (Blog) ที่ต้องการแชร์ลิงก์แล้วมี Rich Snippets / Open Graph สวยงามบน Facebook/LINE/X +- เป็นหน้าหลัก (Landing Page) ที่เน้นความน่าเชื่อถือและต้องการโหลดให้เร็วที่สุดตั้งแต่ครั้งแรกที่เปิด (Core Web Vitals) --- ## ข้อมูลเชิงลึกด้านการ Build & Deploy (Server Config) -อ้างอิงจากการตั้งค่าในสคริปต์ `serverinfo/post-receive` บน Server ปัจจุบัน -### 📱 1. `apps/website` (Single Page Application) +### 📱 1. `apps/spa` (Single Page Application) ระบบนี้ถูกคอมไพล์เป็นไฟล์ Static (HTML, CSS, JS) ซึ่งไม่มีการทำงานของ Server-side รันอยู่เบื้องหลัง -- **คำสั่ง Build:** `cd apps/website && bun run build` +- **คำสั่ง Build:** `cd apps/spa && bun run build` - **สิ่งที่ได้จากการ Build:** โฟลเดอร์ `dist/` -- **ตำแหน่งไฟล์ปลายทาง (Target Directory):** - `/home/ti/projects/MyNginxMain/nginx/html/homaroma.shop/website` -- **การจัดการ Environment:** ต้องประกาศตัวแปรแวดล้อมก่อนสั่ง Build เสมอ (เช่น `export VITE_LIFF_ID=...`) เพื่อให้ Vite ฝังค่าเข้าไปในไฟล์โค้ด - **การตั้งค่า Nginx ที่จำเป็น (Routing Configuration):** เพื่อให้ระบบ React Router ทำงานได้โดยไม่เกิด 404 Error Nginx ต้องถูกตั้งค่าให้โยน Path ที่ไม่รู้จักกลับไปหา `index.html` เสมอ ```nginx location / { - root /usr/share/nginx/html/homaroma.shop/website; + root /usr/share/nginx/html/tenant/spa; index index.html; try_files $uri $uri/ /index.html; # <--- บังคับให้ SPA จัดการ Route เอง } ``` -### 🌍 2. `apps/ssr` (Next.js Application) -ระบบนี้ต้องการ Node.js Server (รันผ่าน PM2) เพื่อประมวลผลข้อมูลที่ฝั่งเซิร์ฟเวอร์ทุกครั้งที่มีคนเปิดหน้าเว็บ (หรือประมวลผลไว้ล่วงหน้า) -- **คำสั่ง Build:** `cd apps/ssr && bun run build` -- **สิ่งที่ได้จากการ Build:** โฟลเดอร์ `.next/` และไฟล์ Source Code -- **ตำแหน่งไฟล์ปลายทาง (Target Directory):** - `/home/ti/projects/homaroma-ssr` +### 🌍 2. `apps/website` (Next.js Application) +ระบบนี้ต้องการ Server Runtime (Node.js หรือ Bun) เพื่อประมวลผลข้อมูลที่ฝั่งเซิร์ฟเวอร์ +- **คำสั่ง Build:** `cd apps/website && bun run build` +- **สิ่งที่ได้จากการ Build:** โฟลเดอร์ `.next/` - **การจัดการ Service (PM2):** - ต้องสั่งรันให้แอปทำงานอยู่เบื้องหลังเสมอด้วยคำสั่ง: + รันแอปเป็น background process เช่น: ```bash - pm2 start /home/ti/projects/homaroma-ssr/node_modules/.bin/next --name homaroma-ssr -- start -p 3001 + pm2 start npm --name "website-ssr" -- start ``` - **การตั้งค่า Nginx ที่จำเป็น (Reverse Proxy):** - Nginx จะไม่ได้เสิร์ฟไฟล์ตรงๆ เหมือน SPA แต่ทำหน้าที่เป็นประตูส่ง Request ต่อไปให้ PM2 (ที่พอร์ต 3001) + Nginx ทำหน้าที่เป็น Reverse Proxy ส่ง Request ต่อไปให้ Next.js: ```nginx location / { - proxy_pass http://127.0.0.1:3001; + proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; @@ -83,4 +75,4 @@ ``` --- -*Generated by Antigravity AI on 2026-05-01* +*Updated for DBK Platform architecture standards* diff --git a/goal.section.md b/goal.section.md index 798beec..f4ed702 100644 --- a/goal.section.md +++ b/goal.section.md @@ -1,6 +1,6 @@ # ระบบ CMS Pages และ Section Block ของ DBK Platform -> **Platform scope:** HomAroma content blocks are reference-tenant examples, not a restriction on tenant verticals. +> **Platform scope:** HomAroma content blocks are reference-tenant examples, not a restriction on tenant verticals. See [`docs/PLATFORM_OVERVIEW.md`](docs/PLATFORM_OVERVIEW.md). ## การทำงานของระบบ CMS Pages และ Section Block diff --git a/tools/gitea.ts b/tools/gitea.ts index e744894..59b41a6 100644 --- a/tools/gitea.ts +++ b/tools/gitea.ts @@ -104,7 +104,7 @@ async function main() { } } } else if (sub === 'create') { - const [,, head, base, title, ...bodyParts] = args; + const [, head, base, title, ...bodyParts] = args; const body = bodyParts.join(' ') || ''; if (!head || !base || !title) { console.error('Usage: bun tools/gitea.ts prs create [body]');