คู่มือ Web SPA — MUJEEN Content Studio

URL ผลิต: https://www.mujeen.com/content-studio/
ระบบ: SPA (mcp_content_mujeen) Express :5190 ถูก reverse proxy มาที่ path /content-studio/
เวอร์ชันเอกสาร: 2026.10.13
หน้าจอ: จับจากโค้ดจริง (public/index.html, manage.html, sso.html) บน production

เอกสารนี้เป็นคู่มือปฏิบัติงานสำหรับผู้รับผิดชอบบทความ ไม่ใช่เอกสาร deploy (ดู SOP เทคนิคที่ docs/mujeen/07-sop-content-studio.md)


1. วัตถุประสงค์ในการสร้างระบบนี้

Content Studio ถูกสร้างขึ้นเพื่อให้ทีมงาน เรียบเรียงบทความจากคลังคำสอนของอาจารย์แขก มันตระสยาม แล้วส่งขึ้นเว็บ MUJEEN โดยมีเป้าดังนี้

เป้า ความหมายในงานจริง
ต้นฉบับอยู่ที่เดียว อ่านได้เฉพาะ mujeen-ai-agent/docs/kb (คำสอน + ศาสตร์วิหาร) ห้ามดึงอินเทอร์เน็ตหรือ repo อื่นมาเป็นต้นฉบับ
แยกหน้าที่ชัด Studio = เลือกคำสอน เรียบเรียง SEO รูปปก · Backoffice = ตรวจ แก้ เผยแพร่บนเว็บ
บัญชีงานประจำไม่ติด 2FA ใช้ staff ที่ถูกมอบหมายเป็นผู้รับผิดชอบบทความ (is_content_manager) เช่น content@mujeen.com ไม่ใช้ admin/owner เขียนทุกวัน
แหล่งหลักคือ API กดเผยแพร่แล้ว upsert ขึ้น Nest API · seed ที่ frontend เป็นสำเนา · หน้า /articles อ่านจาก API
ความรู้เข้าแชทได้ หลังเผยแพร่ เขียนไฟล์ KB markdown แล้ว ingest เข้า Qdrant เพื่อให้ท่านผู้เฝ้าวิหารอ้างบทความได้
น้ำเสียงคงที่ ภาษาไทยหลัก โทนพี่กัณฑ์ ให้กำลังใจ ชื่นชม มีคุณภาพทางการศึกษา ไม่แต่งหลักการใหม่ที่ไม่มีในต้นฉบับ

ทำไมต้องเป็น SPA แยกจาก Backoffice

flowchart LR
  A[ล็อกอิน Backoffice] -->|SSO handoff| B[Content Studio SPA]
  B --> C[เลือกคำสอนจาก KB]
  C --> D[สร้างด่วน / ขัดเกลา AI]
  D --> E[บันทึก draft / ตั้งเวลา / เผยแพร่]
  E --> F[API upsert]
  F --> G[หน้า /articles]
  F --> H[KB + RAG]

2. หน้าจอของ SPA (map จากโค้ด)

หน้า ไฟล์ URL ผลิต หน้าที่
สร้างจากคำสอน public/index.html + app.js /content-studio/ เลือก KB · headline · สร้างด่วน · SEO · เผยแพร่
ตรวจ / จัดการ public/manage.html + manage.js /content-studio/manage แดชบอร์ดสถานะ · ค้นหา · แก้ · เปลี่ยนสถานะ
SSO public/sso.html /content-studio/sso?code=…&next=… แลก one-time code เป็น JWT แล้วเด้งเข้า Studio
สไตล์ร่วม public/styles.css shared.js headline-guide.js — ธีมกระดาษ/ทอง · วันที่ไทย · พรีวิว markdown

ทางลัดจากเว็บหลัก: Backoffice เมนู Content Studio หรือหน้า /admin/articles ปุ่ม เปิด Content Studio (lib/contentStudio.ts)


3. ใครใช้ได้

บทบาท สิทธิ์ใน Studio
Owner / Admin เข้าได้ (ติด 2FA — ไม่แนะนำงานประจำ)
Staff + ผู้รับผิดชอบบทความ ใช้ Studio + จัดการบทความ ไม่บังคับ 2FA
Staff ทั่วไป ดูรายการใน Backoffice ได้ แต่สร้าง/เผยแพร่ไม่ได้
Guest อ่านเฉพาะบทความที่ published บน /articles

ถ้ายังไม่ถูกมอบหมาย: Backoffice → สมาชิก → คอลัมน์ผู้รับผิดชอบบทความ


4. ขั้นตอนปฏิบัติงาน

ขั้นที่ 0 — เข้าสู่ระบบ (เลือกวิธีใดวิธีหนึ่ง)

วิธีที่แนะนำ: SSO จาก Backoffice

  1. ล็อกอิน https://www.mujeen.com/login ด้วยบัญชีผู้รับผิดชอบบทความ
  2. เปิดเมนู Content Studio หรือหน้าบทความ → เปิด Content Studio
  3. ระบบเรียก POST /api/v1/auth/studio-handoff แล้วเปิด /content-studio/sso?code=…
  4. หน้า SSO แลกโค้ดอัตโนมัติ แล้วเข้าหน้าสร้างบทความ

หน้า SSO เมื่อเปิดตรงโดยไม่มีโค้ด (อย่า bookmark หน้านี้):

หน้า SSO ไม่พบรหัส

ตรวจขั้นที่ 0

วิธีสำรอง: ล็อกอินใน Studio

กางแผง เชื่อมบัญชีผู้รับผิดชอบ / Backend กรอกอีเมล/รหัส แล้วกด เข้าด้วยบัญชีผู้รับผิดชอบ

แผงเชื่อมบัญชี Backend

บนหน้าจัดการมีช่อง PIN โลคัลสำหรับเครื่องพัฒนา — บน production ให้ใช้ SSO / บัญชีผู้รับผิดชอบ ไม่ใช้ PIN เป็นทางหลัก

ตรวจขั้นที่ 0 (ล็อกอินใน Studio)


ขั้นที่ 1 — เปิดหน้าสร้าง และอ่านสถานะระบบ

เปิด https://www.mujeen.com/content-studio/

หน้าสร้างบทความ — แถบสถานะ คลังความรู้

ส่วนหัวบอกสุขภาพระบบ (จาก GET /api/health ใน app.js):

Badge ความหมาย ต้องเป็น
แหล่ง N · คำสอน N จำนวนไฟล์ในคลัง มีคำสอน (เช่น 500+)
ดัชนีแคชพร้อม โหลด KB แล้ว เขียว
AI พร้อมขัดเกลา มีคีย์ OpenRouter เขียวถ้าจะขัดเกลาภาษา
Backend API พร้อม ต่อ Nest ได้ เขียวก่อนเผยแพร่
พร้อมตรวจ/จัดการ session มีสิทธิ์ manage เขียว

แถบนำทาง 3 ขั้นของสตูดิโอ:

  1. สร้างจากคำสอน — หน้านี้
  2. ตรวจ / จัดการ — รายการทั้งหมด
  3. Backoffice เผยแพร่ — /admin/articles

วิซาร์ดในหน้า: 1. เลือกคำสอน → 2. เรียบเรียง / SEO → 3. นัดเวลา / เผยแพร่

ตรวจขั้นที่ 1


ขั้นที่ 2 — เลือกคำสอนจากคลังความรู้

แผงซ้าย (#sourceList):

  1. ค้นหาในช่อง ค้นหาคำสอน / หัวข้อ
  2. กรองชนิด: คำสอนอาจารย์แขก (ค่าเริ่มต้น) / ทั้งหมดในขอบเขต / KB อื่น (spiritual/public)
  3. คลิกการ์ดเพื่อเลือก (แนะนำ 1–2 · สูงสุด 4)
  4. กด รีเฟรช ถ้าเพิ่ง ingest คำสอนใหม่

การ์ดแสดงชื่อ ชิป “คำสอน” หรือ “KB” โดเมน และใจความสั้น

ตรวจขั้นที่ 2


ขั้นที่ 3 — วางแผน copy แล้วสร้างด่วน

แผง เรียบเรียงบทความ เดินตามเส้นทาง 7 บท:

  1. คอนเซปต์ / Unique / Unfair advantage / กลุ่มแรก
  2. Direct + Indirect + Awareness
  3. หวังผล → Lead type · ฝึก 10 หัวจาก Lead 2 ประเภท
  4. ติ๊ก LF8 แล้วเติม benefit 8 บรรทัด
  5. สูตร + 8 ข้อก่อนโพสต์ + CTA
  6. Sale page: โครง IMTFD · Email: subject 5 วัน + upsale
  7. วาง Headline 3 หัวก่อน แล้วสร้างด่วน

ตรวจขั้นที่ 3


ขั้นที่ 4 — เรียบเรียง SEO รูปปก ภาษาจีน

หลังสร้างด่วน ฟอร์มแก้ไขจะเปิด (#preview):

Headline Slug วันที่ SEO รูปปก

เนื้อหา markdown

SEO Meta และ Checklist

ช่อง ต้องทำ
Headline หัวข้อหลักตามสไตล์ที่เลือก มีหัวสำรองให้คลิกได้
Slug อังกฤษตัวเล็ก ขีดกลาง ไม่มีช่องว่าง
วันที่แสดงบนบทความ วันที่ที่ผู้อ่านเห็น
ตั้งเวลาเผยแพร่ล่วงหน้า ถ้ายังไม่ปล่อยทันที — ใช้ปุ่ม +3/+5/+7/+10/+14 วัน
Subheadline 1–2 ประโยค บอกว่าอ่านแล้วได้อะไร
รูปปก อัปโหลด หรือ สร้างภาพจากบทความ (ห้ามมีตัวอักษร/โลโก้/หน้าองค์เทพในภาพ)
Meta Title ≤ 70 หัวบน Google
Meta Description ≤ 160 คำอธิบายผลการค้นหา
Checklist SEO ต้องเป็น ชื่อ✓ · สรุป✓ · รูปปก✓ · meta✓
ชื่อ/เนื้อหาจีน ไม่บังคับ — กดสร้างชื่อจีน / สร้างเนื้อหาจีนทั้งบท หลังไทยครบ
สลับพรีวิว / พรีวิวมือถือ ดูโครงใกล้หน้าเว็บก่อนบันทึก

ถ้าภาษายังแข็ง กด ขัดเกลาด้วย AI (timeout ~25 วินาที ถ้าช้าจะคงฉบับด่วนไว้)

ตรวจขั้นที่ 4


ขั้นที่ 5 — บันทึก ตั้งเวลา หรือเผยแพร่

ปุ่มแถวเดียวกับสร้างด่วน (หลังมีบทความแล้วจะกดได้):

ปุ่ม ผล ใช้เมื่อ
บันทึกฉบับร่าง POST /api/drafts ยังไม่พร้อมโชว์
อัปเดต frontend (ฉบับร่าง) publish status=draft + seed ให้ Backoffice เห็นแต่เว็บสาธารณะยังไม่โชว์
เผยแพร่บนเว็บ status=published + revalidate + KB พร้อมให้ผู้อ่านแล้ว
ตั้งเวลา (กรอก datetime) คง draft จนถึงเวลา · job API ทุก 60 วินาที นัดคิวล่วงหน้า

หลังสำเร็จจะมีกล่องขั้นถัดไป: ดูบนเว็บ / ไปตรวจจัดการ / เปิด Backoffice

ตรวจขั้นที่ 5 (ฉบับร่าง)

ตรวจขั้นที่ 5 (ตั้งเวลา)

ตรวจขั้นที่ 5 (เผยแพร่ทันที)


ขั้นที่ 6 — ตรวจ / จัดการ (/content-studio/manage)

แดชบอร์ดและตารางบทความ

ตัวเลขบนสุด: ฉบับร่าง · นัดเวลา · เผยแพร่แล้ว · ค้างซิงก์

  1. ค้นหาชื่อ/slug หรือกรองสถานะ
  2. ดูคอลัมน์ แหล่ง — ต้องเป็น “ขึ้น API แล้ว” ถ้าตั้งใจให้อยู่บนเว็บ
  3. แถวละปุ่ม: แก้ไข · เผยแพร่ / เป็นฉบับร่าง · เก็บแล้ว
  4. ในแผงแก้ไข: บันทึก + อัปเดต frontend · เผยแพร่ · เป็นฉบับร่าง · เก็บแล้ว

ตรวจขั้นที่ 6


ขั้นที่ 7 — ตรวจบนเว็บสาธารณะ

หน้ารวมบทความสาธารณะ

  1. เปิด https://www.mujeen.com/articles
  2. หาแท็กที่ติดไว้ แล้วเปิด slug
  3. เทียบ Headline, วันที่, รูปปก, ย่อหน้าแรกกับใน Studio
  4. (ถ้าใช้ RAG) ถามท่านผู้เฝ้าวิหารด้วยใจความบทความ ว่าดึงได้หรือไม่

ตรวจขั้นที่ 7


5. Checklist ปิดงานประจำวัน

ทำตามลำดับนี้ทุกครั้งที่ “ส่งบทความแล้ว”

  1. ต้นฉบับมาจากคลังคำสอนที่เลือก ไม่แต่งหลักใหม่
  2. Headline / Subheadline / Kicker แยกกันชัด
  3. SEO ครบสี่ข้อ · รูปปกใช้ได้
  4. สถานะตรงเจตนา: draft / scheduled / published
  5. หน้าจัดการแหล่ง = ขึ้น API แล้ว (ถ้าเผยแพร่)
  6. /articles/<slug> เปิดได้ (ถ้าเผยแพร่)
  7. Backoffice สถานะตรงกัน
  8. ไม่ทิ้ง draft ที่ scheduled_at ผิดวัน
  9. ไม่ใช้บัญชี admin เขียนงานประจำ (เลี่ยง 2FA ค้างคิว)

6. เมื่อผิดปกติ — ตรวจเป็นขั้น

อาการ ตรวจอะไร อย่าทำ
SSO ไม่เข้า Redis · โค้ดหมดอายุ 60s · สิทธิ์ content manager รีเฟรชหน้า /sso
คลังว่าง badge ดัชนี · กดรีเฟรช · path KB บนเซิร์ฟเวอร์ ไปก็อปข้อความจากยูทูบมาวางเป็นต้นฉบับ
สร้างด่วน timeout เลือกแหล่งน้อยลง (1–2) แล้วกดอีกครั้ง กดขัดเกลาพร้อมกันหลายรอบ
ขัดเกลาไม่สำเร็จ ระบบคงฉบับด่วนไว้ — แก้มือได้ ล้างฟอร์มทิ้ง
ตั้งเวลาแล้วไม่ออก ดู scheduled_at · Redis lock · สถานะยัง draft เผยแพร่ซ้ำหลายครั้งในนาทีเดียวกัน
หน้า slug 404 ยังเป็น draft · revalidate ยังไม่ทัน · slug ผิด เปลี่ยน slug หลังมีลิงก์แชร์แล้วโดยไม่ตั้ง redirect
Staff แก้ไม่ได้ ยังไม่ถูกมอบหมายผู้รับผิดชอบ ใช้ PIN production เป็นทางหลัก
RAG ไม่เจอบทความ ต้อง publish จริง และ ingest webhook ทำงาน คาดหวังว่า draft จะเข้าแชท

7. แผนที่ปุ่ม ↔ โค้ด (สำหรับตรวจระบบ)

UI ฟังก์ชัน API Studio
รีเฟรชคลัง loadSources GET /api/sources
สร้างด่วน generateFast POST /api/generate
ขัดเกลาด้วย AI polishAi POST /api/polish
บันทึกฉบับร่าง saveDraft POST /api/drafts
อัปเดต frontend / เผยแพร่ publish POST /api/publish
อัปโหลดรูปปก coverFile change POST /api/upload-cover
สร้างภาพจากบทความ generateCover POST /api/generate-cover
ชื่อจีน / เนื้อหาจีน generateTitleZh / generateContentZh /api/generate-title-zh · /api/generate-content-zh
นำเข้าแพ็ก importHandoffPack POST /api/import-handoff
เข้าบัญชี btnBackendLogin POST /api/backend/login
SSO sso.html POST /api/backend/sso-exchange
รายการจัดการ loadArticles GET /api/manage/articles
แก้จากตาราง saveEditor PUT /api/manage/articles/:id
เปลี่ยนสถานะแถว onRowAction POST .../status · DELETE (เก็บแล้ว)

Backoffice เปิด Studio: mujeen-frontend/lib/contentStudio.ts → POST /api/v1/auth/studio-handoff


8. สิ่งที่คู่มือนี้ไม่ครอบ (ตั้งใจ)


อัปเดตล่าสุด: 2026-10-13 — จับหน้าจอจาก https://www.mujeen.com/content-studio/ ตามโค้ดใน mcp_content_mujeen/public/