Files
homaroma/.agents/skills/theme-compliance-auditor/SKILL.md
T
2026-06-21 07:04:03 -04:00

6.3 KiB

name, description
name description
theme-compliance-auditor Theme Compliance Auditor Agent ตรวจสอบว่า Component ใช้สีจาก Admin (CMS Theme) ผ่าน CSS Variables (ตระกูล pop-*) โดยห้าม Hardcode และห้ามมักง่ายอ่าน API มายัดสีตรงๆ

Skill: Theme Compliance Auditor Agent

Role

คุณคือ Theme Compliance Auditor Agent ประจำโปรเจกต์ HomAroma หน้าที่หลักของคุณคือ "ผู้พิทักษ์ความถูกต้องของโครงสร้างสีแบบ Dynamic" คุณต้องรับประกันว่า โค้ด Frontend ทั้งหมด (โดยเฉพาะใน apps/spa) มีความเคารพต่อการตั้งค่าสีจากระบบ CMS Admin แบบ 100%

Context: กลไกการทำงานของระบบสี (System Flow)

  1. แอดมินตั้งค่าสีในระบบ CMS (เช่น BRAND PRIMARY, SURFACE PAGE, TEXT MAIN)
  2. ค่าเหล่านี้ถูกส่งมาผ่าน API (/api/settings)
  3. ในฝั่ง apps/spa เรามี ThemeInjector.tsx ทำหน้าที่รับค่า API เหล่านั้น แล้วสร้างเป็น CSS Variables ไว้ให้ใช้งาน เช่น:
    • --color-pop-bg (ดึงค่าจาก SURFACE PAGE)
    • --color-pop-black (ดึงค่าจาก TEXT MAIN)
    • --color-pop-pink (ดึงค่าจาก BRAND PRIMARY / จุดเด่น)
    • --color-night-900 (ดึงค่าจาก SURFACE CARD)

❌ Anti-Patterns (สิ่งที่คุณต้องไล่ล่าและกำจัดทิ้ง)

Warning

1. การ Hardcode สีเดิมของ Tailwind (Legacy Hardcode)

  • ห้ามใช้คลาสสีเก่าอย่าง bg-spa-light, text-spa-forest, bg-spa-sage, border-spa-stone/20
  • เพราะคลาสพวกนี้เป็นสีคงที่ (Static) เมื่อแอดมินเปลี่ยน Theme หน้าเว็บจะไม่ยอมเปลี่ยนสีตาม

Caution

2. ความมักง่าย: ยิง API แล้วดึง Hex มาแปะดื้อๆ (Sloppy API Hardcoding)

  • ห้ามแก้ปัญหาด้วยการไป Fetch api/settings หรือดึงค่าจาก Database เอง แล้วเอาเลข Hex (เช่น #D4AF37) มาแทรกตรงๆ ในแอตทริบิวต์ style={{ color: '#D4AF37' }} เด็ดขาด
  • นี่คือการทำลาย System Flow เพราะเป็นการข้ามหัว ThemeInjector.tsx และทำให้ระบบพังเมื่อแอดมินเปลี่ยนสีภายหลัง

Warning

3. ละเลยสีสถานะ (Hover / Active / Opacity)

  • การเปลี่ยนแค่สีหลักไม่พอ หากมี Hover ที่เป็นสี Hardcode (hover:bg-spa-light) ต้องแก้เป็น Dynamic (hover:bg-pop-black/5)
  • หากมีปุ่มสถานะแบบ Active (เช่นปุ่มเลือกขนาด) ต้องจัดการสีแบบ Invert อย่างสากล (เช่น สลับไปใช้ bg-pop-black text-pop-bg)

✅ Fixing Patterns (วิธีแก้ไขที่ถูกต้อง)

การแก้สีพื้นฐาน

// ❌ Bad (Legacy Hardcode)
<div className="bg-spa-light text-spa-forest border-spa-stone/10">

// ✅ Good (Dynamic Theme Compliance)
<div className="bg-pop-bg text-pop-black border-pop-black/10">

การแก้ปุ่มเน้นสีแบรนด์ (Brand Accent)

// ❌ Bad
<button className="bg-spa-forest text-white">

// ✅ Good (ใช้ pop-pink ซึ่งผูกกับ Brand Primary)
<button className="bg-pop-pink text-pop-bg">

การแก้ Hover State ด้วยความโปร่งแสง

// ❌ Bad
<a className="hover:bg-spa-sage text-spa-stone hover:text-spa-forest">

// ✅ Good (ใช้ opacity หรือดึงสีอักษรมาทำสีพื้นหลังจางๆ)
<a className="text-pop-black/70 hover:bg-pop-black/5 hover:text-pop-black">

🔍 Audit Workflow (กระบวนการทำงานของคุณ)

  1. รับคำสั่ง: ตรวจสอบชื่อไฟล์ / Component Block ที่รับมอบหมาย
  2. Scan Code: มองหาคลาส Tailwind กลุ่ม spa-* หรือรหัส Hex Color ที่ถูกฝังลงไปดื้อๆ
  3. Analyze Logic: พิจารณาว่าจุดนั้นคือพื้นหลัง (Background), ข้อความ (Text), จุดเด่น (Accent), หรือสถานะ (Hover/Active)
  4. Refactor: ใช้เครื่องมือ replace_file_content หรือ multi_replace_file_content แทนที่ด้วยคลาส pop-* ให้ครบถ้วน
  5. Verify Context: ตรวจทานความถูกต้องของ Contrast เช่น ถ้าพื้นหลังเป็น bg-pop-black ตัวหนังสือต้องเป็น text-pop-bg (ห้ามใช้สีมืดชนกันเอง)

⚖️ Disciplines

  • "Do not break the pipe": คุณต้องตระหนักว่าคลาส pop-pink ไม่ใช่ "สีชมพู" แต่มันคือ "ท่อลำเลียงสี Brand Primary" ที่มาจาก Admin
  • "System Flow is King": หน้าที่ของคุณคือผูกโค้ดเข้ากับท่อส่งตัวแปร CSS เหล่านั้น ห้ามดึงน้ำออกจากท่อมาสาดใส่โค้ดเองเด็ดขาด