[← หน้ารวม](../index.html)

# dailyMu — Specification / PRD

ระบบวอลเปเปอร์มงคล — **2 ส่วน: เดลี่มู (ฟรี) + Personal Wallpaper (AI)**
เอกสารนี้ใช้ส่งต่อ dev · คู่กับ [`docs/user-flow.html`](user-flow.html) (ผังฉบับล่าสุด) และ `prototype/index.html`

| | |
|---|---|
| สถานะ | Draft 2 — ปรับตามสถาปัตยกรรม 2 ส่วน |
| อัปเดต | 13 สิงหาคม 2569 |
| ขอบเขตงานชุดนี้ | **workflow และ UX เท่านั้น** — ไม่รวมหลังบ้าน (เฟสถัดไป) ไม่รวมการวิเคราะห์ต้นทุน |
| ยังไม่เคาะ | ตัวเลขแพลน · ราคาเครดิต · รายการสไตล์สุดท้าย (ดูข้อ 15) |

> ⚠️ **ถ้าข้อความในเอกสารนี้ขัดกับ `docs/user-flow.html` ให้ยึด `user-flow.html`**
> ผังคือแหล่งความจริงล่าสุด เอกสารนี้ขยายรายละเอียดของผัง

---

## 1. ภาพรวมผลิตภัณฑ์

ฟีเจอร์วอลเปเปอร์มงคล เป็น **ส่วนหนึ่งของโปรเจกต์ dailyMu** ไม่ใช่ทั้งแอป

**ทางเข้าทางเดียว แล้วให้ลูกค้าเลือกประเภท:**

| | ส่วนที่ 1 — 🌸 วอลเปเปอร์เดลี่มู | ส่วนที่ 2 — 🎨 Personal Wallpaper |
|---|---|---|
| ราคา | **ฟรี** | แพลน + เครดิต |
| ที่มาของภาพ | คลังที่แอดมินอัปไว้หลังบ้าน | **AI สร้างเฉพาะชั้นฉาก** + ประกอบชั้นอื่นด้วยโค้ด |
| ลูกค้าเลือกอะไร | ด้านที่อยากเสริม 1–2 ด้าน (ขั้นตอนเดียว) | ด้าน · สี · องค์เทพ · สไตล์ · prompt (5 ขั้นตอน) |
| ภาพซ้ำกับคนอื่นได้ไหม | ได้ — แต่ **เลขมงคลต่างกันตามดวงแต่ละคน** | ไม่ซ้ำ |
| ต้นทุนต่อครั้ง | ~0 | ค่า token |
| โควตา | 1 ครั้ง/วัน · รีเซ็ตเที่ยงคืน · ขอเปลี่ยนใหม่ได้สัปดาห์ละ 1 | ตามแพลน แล้วหักเครดิต |
| ประวัติ | ปฏิทินของฉัน (เก็บ id) | คลังภาพ (**เก็บไฟล์จริง**) |
| ลายน้ำ | ไม่มี | ไม่มี |

**ส่วนฟรีไม่ใช่ตัวอย่างของส่วนเสียเงิน** แต่เป็นสินค้าคนละชิ้นที่สมบูรณ์ในตัวเอง
ส่วนฟรีสร้างนิสัยกลับมาทุกวันตามชื่อแอป แล้วใช้หน้าผลลัพธ์เป็นจุดชวนไปส่วน AI
**ถ้าทำส่วนฟรีให้ด้อยลงเพื่อบีบให้จ่าย จะเสียทั้งนิสัยการกลับมาและโอกาสขายไปพร้อมกัน**

**สิ่งที่ทำให้ต่างจากการแจกวอลเปเปอร์ทั่วไป:**
สีและเลขไม่ได้มาจากความชอบหรือการสุ่ม แต่คำนวณจาก **วันเกิดของลูกค้า × ด้านที่อยากเสริม** ตามระบบทักษาปกรณ์
และทั้งสองอย่างมาจาก **ดาวดวงเดียวกัน** เสมอ จึงสอดคล้องกันโดยธรรมชาติ ไม่ใช่ของสองอย่างที่จับมาแปะรวมกัน
ระบบจึงอธิบายได้ทุกครั้งว่าทำไมต้องเป็นสีนี้ และบอกได้ด้วยว่าสีไหนที่ควรเลี่ยง (สีกาลกิณี)

**กลุ่มเป้าหมาย:** ผู้ใช้ชาวไทยที่สนใจเรื่องมงคล/สายมู อายุ 20–45 ใช้มือถือเป็นหลัก

**Disclaimer ที่ต้องแสดงในแอป:**
> เนื้อหาในแอปอ้างอิงความเชื่อและตำราโหราศาสตร์ไทย จัดทำขึ้นเพื่อเป็นงานศิลปะและกำลังใจ ไม่ได้รับประกันผลลัพธ์ใด ๆ

---

## 2. ตรรกะหลัก — ทักษาปกรณ์

> ✅ **ข้อนี้ไม่เปลี่ยนตามสถาปัตยกรรมใหม่** — ใช้เหมือนกันทั้งสองส่วน

### 2.1 ข้อมูลดาว

`num` คือ **เลขประจำดาว** ใช้เป็นเลขมงคล — ระบบเดียวกับสี ต่างแค่อ่านคนละคอลัมน์

```js
const PLANETS = {
  sun : {name:'อาทิตย์',   num:1, colors:['แดงสด'],                                       hex:'#D93A3A', deep:'#7E1A1A', light:false},
  mon : {name:'จันทร์',    num:2, colors:['ขาว','ครีม','เหลืองอ่อน'],                      hex:'#FDF6E3', deep:'#E3CF9C', light:true },
  tue : {name:'อังคาร',    num:3, colors:['ชมพู','แดงแก่'],                               hex:'#E85D8A', deep:'#9C1F49', light:false},
  wed : {name:'พุธ',       num:4, colors:['เขียว'],                                       hex:'#2E7D4F', deep:'#123A25', light:false},
  sat : {name:'เสาร์',     num:7, colors:['ดำ','ม่วงเข้ม'],                               hex:'#26232E', deep:'#000000', light:false},
  thu : {name:'พฤหัสบดี',  num:5, colors:['ส้ม','กรัก','เหลืองแก่'],                       hex:'#E8862B', deep:'#7E4109', light:false},
  rahu: {name:'ราหู',      num:8, colors:['ม่วงเม็ดมะปราง','ทองสัมฤทธิ์','เทาควันบุหรี่'],  hex:'#6B3FA0', deep:'#2F1A50', light:false},
  fri : {name:'ศุกร์',     num:6, colors:['ฟ้า','น้ำเงิน'],                               hex:'#2A6FD6', deep:'#0F3572', light:false},
};
```

`light: true` หมายถึงพื้นหลังสีอ่อน ต้องสลับสีตัวอักษรเป็นสีเข้ม — มีแค่ดาวจันทร์

### 2.2 สูตร

```js
const CYCLE = ['sun','mon','tue','wed','sat','thu','rahu','fri'];   // ลำดับดาวของทักษา
const POSITIONS = ['boriwan','ayu','det','si','mula','utsaha','montri','kalakini'];

function colorAt(birthKey, posKey){
  const birthIdx = CYCLE.indexOf(planetOf(birthKey));
  return CYCLE[(birthIdx + POSITIONS.indexOf(posKey)) % 8];
}
```

`planetOf()` แปลงวันเกิดเป็นดาว โดย **พุธกลางคืน → ราหู** (จุดที่พลาดกันบ่อย)

### 2.3 ความหมายของ 8 ตำแหน่ง

| key | ชื่อ | ความหมาย |
|---|---|---|
| `boriwan` | บริวาร | คนรอบข้าง ครอบครัว ลูกน้อง ผู้ติดตาม |
| `ayu` | อายุ | สุขภาพ ร่างกาย ความเป็นอยู่ |
| `det` | เดช | อำนาจ บารมี ชื่อเสียง หน้าที่การงาน |
| `si` | ศรี | เสน่ห์ ความรัก สิริมงคล |
| `mula` | มูละ | ทรัพย์สิน เงินทอง ต้นทุน |
| `utsaha` | อุตสาหะ | ความพยายาม การเรียน ความสำเร็จ |
| `montri` | มนตรี | ผู้ใหญ่อุปถัมภ์ การเจรจา ผู้สนับสนุน |
| `kalakini` | กาลกิณี | สิ่งที่ควรหลีกเลี่ยง — **ห้ามใช้เป็นสีหลัก** |

### 2.4 ตารางสำเร็จรูป (pre-computed) — ใช้ตรวจงาน

สร้างจากสูตรข้างบน ช่องขวาสุดตัวหนาคือสีกาลกิณี

| วันเกิด | บริวาร | อายุ | เดช | ศรี | มูละ | อุตสาหะ | มนตรี | กาลกิณี |
|---|---|---|---|---|---|---|---|---|
| **อาทิตย์** | แดงสด | ขาว/ครีม | ชมพู/แดงแก่ | เขียว | ดำ/ม่วงเข้ม | ส้ม/กรัก | ม่วง/ทอง/เทา | **ฟ้า/น้ำเงิน** |
| **จันทร์** | ขาว/ครีม | ชมพู/แดงแก่ | เขียว | ดำ/ม่วงเข้ม | ส้ม/กรัก | ม่วง/ทอง/เทา | ฟ้า/น้ำเงิน | **แดงสด** |
| **อังคาร** | ชมพู/แดงแก่ | เขียว | ดำ/ม่วงเข้ม | ส้ม/กรัก | ม่วง/ทอง/เทา | ฟ้า/น้ำเงิน | แดงสด | **ขาว/ครีม** |
| **พุธ (กลางวัน)** | เขียว | ดำ/ม่วงเข้ม | ส้ม/กรัก | ม่วง/ทอง/เทา | ฟ้า/น้ำเงิน | แดงสด | ขาว/ครีม | **ชมพู/แดงแก่** |
| **พุธ (กลางคืน)** | ม่วง/ทอง/เทา | ฟ้า/น้ำเงิน | แดงสด | ขาว/ครีม | ชมพู/แดงแก่ | เขียว | ดำ/ม่วงเข้ม | **ส้ม/กรัก** |
| **พฤหัสบดี** | ส้ม/กรัก | ม่วง/ทอง/เทา | ฟ้า/น้ำเงิน | แดงสด | ขาว/ครีม | ชมพู/แดงแก่ | เขียว | **ดำ/ม่วงเข้ม** |
| **ศุกร์** | ฟ้า/น้ำเงิน | แดงสด | ขาว/ครีม | ชมพู/แดงแก่ | เขียว | ดำ/ม่วงเข้ม | ส้ม/กรัก | **ม่วง/ทอง/เทา** |
| **เสาร์** | ดำ/ม่วงเข้ม | ส้ม/กรัก | ม่วง/ทอง/เทา | ฟ้า/น้ำเงิน | แดงสด | ขาว/ครีม | ชมพู/แดงแก่ | **เขียว** |

คอลัมน์กาลกิณีตรงกับตำราที่อ้างอิงครบทั้ง 8 วัน (ดูแหล่งอ้างอิงท้ายเอกสาร)

### 2.5 เลขมงคล — ใช้ทักษาปกรณ์ตัวเดียวกับสี

**นี่คือจุดที่ประหยัดงานที่สุดของทั้งระบบ:** ตำราเลขมงคลไทยใช้ทักษาปกรณ์ชุดเดียวกับสีเป๊ะ ๆ
แค่อ่านค่า *เลขประจำดาว* แทน *สีประจำดาว* → **ไม่ต้องเพิ่มขั้นตอน ไม่ต้องถามอะไรเพิ่ม ไม่ต้องเขียน logic ใหม่**

```
อาทิตย์ 1 · จันทร์ 2 · อังคาร 3 · พุธ 4 · พฤหัสบดี 5 · ศุกร์ 6 · เสาร์ 7 · ราหู 8
```

```js
function luckyNumberOf(birthKey, posKey){
  return PLANETS[ CYCLE[(CYCLE.indexOf(planetOf(birthKey)) + POSITIONS.indexOf(posKey)) % 8] ].num;
}
```

**ตารางสำเร็จรูป** — ช่องขวาสุดตัวหนาคือ **เลขกาลกิณี** ที่ต้องเลี่ยง

| วันเกิด | บริวาร | อายุ | เดช | ศรี | มูละ | อุตสาหะ | มนตรี | กาลกิณี |
|---|---|---|---|---|---|---|---|---|
| **อาทิตย์** | 1 | 2 | 3 | 4 | 7 | 5 | 8 | **6** |
| **จันทร์** | 2 | 3 | 4 | 7 | 5 | 8 | 6 | **1** |
| **อังคาร** | 3 | 4 | 7 | 5 | 8 | 6 | 1 | **2** |
| **พุธ (กลางวัน)** | 4 | 7 | 5 | 8 | 6 | 1 | 2 | **3** |
| **พุธ (กลางคืน)** | 8 | 6 | 1 | 2 | 3 | 4 | 7 | **5** |
| **พฤหัสบดี** | 5 | 8 | 6 | 1 | 2 | 3 | 4 | **7** |
| **ศุกร์** | 6 | 1 | 2 | 3 | 4 | 7 | 5 | **8** |
| **เสาร์** | 7 | 5 | 8 | 6 | 1 | 2 | 3 | **4** |

แถววันอาทิตย์ตรงกับตัวอย่างในตำราที่อ้างอิงครบทั้ง 8 ตำแหน่ง (1 2 3 4 7 5 8 6)

#### กฎสำคัญ 3 ข้อ

1. **ผู้ใช้เลือกเลขเองไม่ได้** — เลขมาจากการคำนวณเท่านั้น ถ้าให้เลือกได้มันจะกลายเป็นของตกแต่ง ไม่ใช่ของมงคล และเสียจุดขายทั้งหมด
2. **เลขต้องยึด "ตำแหน่งทักษาของด้าน" เสมอ ไม่ผูกกับสีที่ผู้ใช้เลือกเอง**
   ถ้าผูกเลขกับสี ผู้ที่ฝืนเลือกสีกาลกิณี (ซึ่งระบบอนุญาตในส่วนที่ 2) จะได้ **เลขกาลกิณี** ติดไปบนวอลเปเปอร์ด้วย ซึ่งเป็นโทษโดยตรง
3. **ปิดการแสดงเลขได้** — toggle ในหน้าผลลัพธ์ **ทั้งสองส่วน** ไม่ใช่ขั้นตอนเพิ่ม
   เลขอยู่คนละชั้นกับภาพ → เปิด-ปิดได้โดยไม่ต้องเจนใหม่ ไม่เสียเครดิตซ้ำ

#### ⚠️ ข้อควรระวังเรื่องเลข 4

คนไทยเชื้อสายจีนเลี่ยงเลข 4 (สี่ = ตาย) แต่ในทักษาไทย 4 = ดาวพุธ = ปัญญา การสื่อสาร การค้า
เลข 4 ปรากฏเป็นเลขมงคลในเกือบทุกวันเกิด (ยกเว้นวันเสาร์ที่ 4 เป็นกาลกิณีอยู่แล้ว จึงไม่ถูกแสดง)

**ต้องมีคำอธิบายกำกับเลขเสมอ** เช่น *"เลข 4 คือเลขศรีของคุณ — ดาวพุธ"* ห้ามแสดงตัวเลขลอย ๆ
ไม่งั้นลูกค้าเห็นแล้วรู้สึกแย่ทันทีทั้งที่ระบบคำนวณถูก

#### สิ่งที่ห้ามทำ

**อย่าสร้างเลข 2 หลักขึ้นเอง** — เลขศาสตร์ 2 หลัก (24, 45, 56 ฯลฯ) มาจากผลรวมค่าตัวอักษรใน **ชื่อ-นามสกุล**
เป็นคนละระบบกับทักษา ถ้าจะทำต้องขอชื่อผู้ใช้เพิ่ม ไม่ใช่ปั้นขึ้นจากวันเกิด
ถ้าปั้นเองแล้วมีคนรู้ทัน จะเสียความน่าเชื่อถือของทั้งแอป

#### ต่อยอดได้ในอนาคต

- **ตรวจเบอร์โทร / เลขทะเบียน** — ตำรามีกฎเสริมว่า *ห้ามใช้เลขที่บวกกันแล้วได้เลขกาลกิณี* ใช้ทำฟีเจอร์ตรวจเลขได้เลยด้วยข้อมูลที่มีอยู่แล้ว
- **กำลังดาว** — อีกระบบดั้งเดิม บอกจำนวนจบที่ควรท่องคาถา: อาทิตย์ 6 · จันทร์ 15 · อังคาร 8 · พุธ 17 · พฤหัสบดี 19 · ศุกร์ 21 · เสาร์ 10 · ราหู 12 → ใส่ใต้คาถาบนวอลเปเปอร์ที่มีองค์เทพได้

---

## 3. Mapping: ด้านที่เสริม → ตำแหน่งทักษา

การ์ด 8 ใบ ใช้ **เหมือนกันทั้งสองส่วน** ผูกกับตำแหน่งทักษาตามนี้

| id | หัวข้อที่ลูกค้าเห็น | ตำแหน่ง | หมายเหตุ |
|---|---|---|---|
| `money` | เงินทอง ไหลมาเทมา | `mula` | |
| `love` | ความรัก มีเสน่ห์ | `si` | |
| `work` | การงาน รุ่งเรือง | `det` | |
| `health` | สุขภาพ แข็งแรง | `ayu` | |
| `study` | การเรียน สอบผ่าน | `utsaha` | |
| `support` | ผู้ใหญ่เอ็นดู | `montri` | |
| `family` | คนรอบข้าง ลูกทีม | `boriwan` | |
| `protect` | ปกป้อง แก้ดวงตก | `det` | ใช้สีเดชร่วมกับ `work` เพราะไม่มีตำแหน่งทักษาเฉพาะ แต่**ชุดองค์เทพต่างกัน** |

**เหตุผลที่ `protect` ใช้ `det`:** ทักษามี 7 ตำแหน่งที่ใช้ได้ (ตัดกาลกิณี) แต่ "ปกป้อง/แก้ดวงตก" เป็นความต้องการที่ลูกค้าสายมูถามหาบ่อยมากและไม่มีตำแหน่งตรงตัว จึงยืมสีเดช (อำนาจบารมีคุ้มครอง) แล้วสร้างความต่างที่ชุดองค์เทพ (ท้าวเวสสุวรรณ / พระราหู / พระแม่กาลี) แทน — ถ้าไม่อยากยืม ให้ตัดการ์ดนี้ออกและเหลือ 7 ใบได้

**กฎ:** เลือกได้สูงสุด 2 ด้าน · สีและเลขคำนวณจากด้าน**แรก** ที่เลือก · ด้านที่สองใช้ขยายชุดองค์เทพ (ส่วนที่ 2) และขยายเงื่อนไขจับคู่ภาพ (ส่วนที่ 1)

### 3.1 รายการด้านตั้งค่าได้จากหลังบ้าน

ตารางข้างบนเป็น**ค่าเริ่มต้น** — แอดมินเพิ่ม/แก้/ลบ/ปิด/เรียงลำดับได้ (ดู `AspectDef` ข้อ 6.2)

| กฎ | ค่า | เหตุผล |
|---|---|---|
| จำนวนสูงสุด | **8 ด้าน** | เกินนี้หน้าจอลูกค้าจะแน่นและตัดสินใจยาก |
| ทุกด้านต้องผูกตำแหน่งทักษา | **บังคับ** | ตำแหน่งคือตัวกำหนดสี · ไม่ผูก = จับคู่รูปไม่ได้ |
| ตำแหน่งที่เลือกได้ | **7 ตำแหน่ง** | **กาลกิณีห้ามใช้** — เป็นสิ่งที่ต้องเลี่ยง ไม่ใช่สิ่งที่เสริม |
| ใช้ตำแหน่งซ้ำกันได้ | ✅ | เพราะมี 7 ตำแหน่งแต่ให้ได้ถึง 8 ด้าน · ตอนนี้ `การงาน` กับ `ปกป้อง` ใช้ `เดช` ร่วมกัน |
| ปิดด้าน | รูปที่แท็กไว้ยังอยู่ | เปิดกลับมาใช้ต่อได้ ไม่ต้องแท็กใหม่ |
| ลบด้าน | ถอดแท็กออกจากรูปที่ใช้ด้านนั้น | ต้องเตือนว่ามีรูปกี่ใบที่ได้รับผลกระทบ |

> **ด้านที่ใช้ตำแหน่งเดียวกันจะได้สีเดียวกันเสมอ** ต่างกันแค่ชื่อที่ลูกค้าเห็น — ตั้งใจแบบนี้ได้ ไม่ใช่ข้อผิดพลาด

> **ห้ามคัดการ์ดออกจากหน้าจอ** — แสดงครบทั้ง 8 ใบเสมอ แล้วจำกัดที่ *จำนวนที่เลือกได้* ไม่ใช่ที่ *จำนวนที่เห็น*

---

## 4. Mapping: ด้าน → องค์เทพ

ใช้ใน **ส่วนที่ 2 (STEP 3)** — เลือกหรือไม่เลือกก็ได้

| id | ชื่อ | ดูแลด้าน (`for`) |
|---|---|---|
| `lakshmi` | พระแม่ลักษมี | money, love |
| `wessuwan` | ท้าวเวสสุวรรณ | money, protect |
| `caishen` | ไฉ่ซิงเอี้ย | money |
| `sivali` | พระสีวลี | money, work |
| `ganesha` | พระพิฆเนศ | work, study |
| `trimurti` | พระตรีมูรติ | love |
| `uma` | พระแม่อุมาเทวี | love, family |
| `brahma` | ท้าวมหาพรหม | work, support, family |
| `narai` | พระนารายณ์ | work, protect |
| `guanyin` | พระแม่กวนอิม | health, support, family |
| `buddha` | พระพุทธรูปประจำวันเกิด | health, family, protect |
| `saraswati` | พระแม่สรัสวตี | study |
| `guanyu` | เทพเจ้ากวนอู | work, money, protect |
| `rahu` | พระราหู | protect |
| `kali` | พระแม่กาลี | protect |

แต่ละองค์มี `tag` (สั้น), `note` (คำอธิบาย 1–2 บรรทัด), `mantra` (คาถาบูชา)
**คาถาต้องให้ผู้รู้ตรวจทานก่อนขึ้นระบบจริง** — ข้อมูลใน prototype เป็นรูปแบบที่พบทั่วไปเท่านั้น

> **ตัวเลือก "ไม่เลือกองค์เทพ" กลับมาแล้ว** — ในโครงเดิมถูกถอดออกเพราะขัดกับระบบธีม
> พอธีมกลายเป็น "สไตล์" (ข้อ 5) ความขัดแย้งหายไป องค์เทพจึงเป็น **ตัวเลือกเสริม** ได้ตามปกติ
> คนที่ไม่สะดวกใจข้ามขั้นตอนนี้ได้เลย แล้วได้ภาพที่มีแต่ฉาก + ลายมงคล

---

## 5. สไตล์ — ใช้เฉพาะส่วนที่ 2

> 🔄 **แทนที่ระบบ "ธีม" เดิม** — ธีมเดลี่มู/ธีมองค์เทพ ไม่ใช่จุดแยกทางของ flow อีกต่อไป
> เพราะองค์เทพเป็นตัวเลือกอิสระแล้ว สไตล์จึงเป็นแค่ *อารมณ์ของภาพ* ไม่บังคับว่าจะมีองค์เทพหรือไม่

STEP 4 ให้เลือก 1 สไตล์ **ยังไม่เคาะรายการสุดท้าย** — ที่เสนอไว้ 6 แบบ:

| id | ชื่อ | อารมณ์ | หมายเหตุ |
|---|---|---|---|
| `dailymu` | โทนเดลี่มู | พาสเทลนุ่มตา ผสมสีมงคลกับขาว | **IP ของเราเอง · ควรเป็นใบแรกและเป็นค่าเริ่มต้น** |
| `thai` | ลายไทย / ยันต์ | ลายกนก ยันต์ ทองบนพื้นสีมงคล | |
| `animal` | สัตว์นำโชค | มังกร ปลาคาร์ฟ ช้าง กบคายเงิน | ต้องคุมไม่ให้สัตว์ผิดสัดส่วน |
| `chinese` | จีนมงคล | แดง-ทอง โคมไฟ เหรียญจีน | |
| `cozy` | cozy | ห้องอุ่น ๆ แสงเทียน ต้นไม้ | สไตล์ที่ปลอดภัยที่สุดสำหรับ AI |
| `cosmic` | จักรวาล | ดาว หมอก แสงออร่า | |

**ข้อกำหนด**
- การ์ดสไตล์ต้องมีตัวอย่างที่ใช้ **สีจริงของลูกค้า** ให้ตัดสินใจได้โดยไม่ต้องกดเข้าไปดู
- แต่ละสไตล์ต้อง **ล็อกพารามิเตอร์ของโมเดล** ไว้ (ดูข้อ 10 ชั้นที่ 7) เพื่อให้ภาพเป็นตระกูลเดียวกัน ไม่ใช่ 10 คนได้ 10 อารมณ์
- ทุกสไตล์ต้องรองรับ **สีมงคลครบ 8 สี** — ทดสอบกับดาวจันทร์ (พื้นอ่อน) และดาวเสาร์ (พื้นดำ) เป็นเคสยากสองขั้ว
- สไตล์ **ไม่มีผลกับเลขมงคล** — เลขยึดตำแหน่งทักษาเสมอ

---

## 6. Data model

```ts
type BirthDayKey = 'sun'|'mon'|'tue'|'wed'|'wedNight'|'thu'|'fri'|'sat';
type PlanetKey   = 'sun'|'mon'|'tue'|'wed'|'sat'|'thu'|'rahu'|'fri';
type PositionKey = 'boriwan'|'ayu'|'det'|'si'|'mula'|'utsaha'|'montri'|'kalakini';
type AspectId    = 'money'|'love'|'work'|'health'|'study'|'support'|'family'|'protect';
type StyleId     = 'dailymu'|'thai'|'animal'|'chinese'|'cozy'|'cosmic';
type Source      = 'free' | 'ai';
```

### 6.1 ผู้ใช้และสิทธิ์

```ts
interface UserProfile {
  id: string;
  name: string;
  birthDayOfWeek: BirthDayKey | null;   // มาจากระบบหลัก · null = ต้องถาม
  birthDate?: string;                   // ถ้ามีวันที่ ให้คำนวณ birthDayOfWeek เอง
  planId: string;                       // มาจากระบบแพลนของ dailyMu (นอกสโคปงานชุดนี้)
  creditBalance: number;                // ยอดเครดิตคงเหลือ · ตัวเลขนี้เป็นของระบบหลัก
}

// สิทธิ์รายวันของส่วนฟรี — 1 แถวต่อ user ต่อวัน
interface DailyEntitlement {
  userId: string;
  date: string;                 // YYYY-MM-DD ตามเวลาไทย · เส้นแบ่งวัน = เที่ยงคืน
  usedAt: string | null;        // ใช้สิทธิ์ประจำวันแล้วหรือยัง
  rerollWeek: string;           // ISO week เช่น '2569-W33'
  rerollUsedAt: string | null;  // ใช้สิทธิ์ "ขอเปลี่ยนใหม่" ของสัปดาห์นี้แล้วหรือยัง
}
```

> **`date` ต้องคิดจาก timezone เดียวกับที่ปฏิทินใช้แสดงผล** ไม่งั้นคนที่กดตอนใกล้เที่ยงคืนจะได้ 2 ครั้งในวันเดียว

### 6.2 ส่วนที่ 1 — คลังของแอดมิน + ปฏิทิน

```ts
// ภาพที่แอดมินอัปไว้หลังบ้าน (เฟสถัดไป ทีมทำเอง)
// ชุดงาน — แอดมินต้องสร้างชุดก่อน แล้วอัปรูปเข้าชุด · ลูกค้าไม่เห็นสิ่งนี้
interface Collection {
  id: string;
  name: string;             // เช่น "ชุดตรุษจีน 2569"
  active: boolean;          // ปิดชุด = รูปทั้งชุดหยุดถูกหยิบ แต่ยังอยู่ในคลัง
}

interface CuratedWallpaper {
  id: string;
  fileUrl: string;
  collectionId: string;     // **บังคับ** — รูปทุกใบต้องอยู่ในชุด
  planets: PlanetKey[];     // แท็ก: รูปนี้โทนสีอะไร · **1–3 สี**
  aspects: AspectId[];      // แท็ก: ใช้กับด้านไหนได้บ้าง · **1–3 ด้าน**
  style: StyleId;           // แท็ก: อารมณ์ของภาพ
  active: boolean;          // ปิดรายใบได้ แยกจากการปิดทั้งชุด
}

// ด้านที่ให้ลูกค้าเลือก — แอดมินเพิ่ม/แก้/ลบได้ **สูงสุด 8**
interface AspectDef {
  id: string;
  name: string;             // ชื่อที่ลูกค้าเห็น เช่น "เงินทอง"
  glyph: string;
  position: PositionKey;    // **บังคับ** — ตัวกำหนดว่าคนวันไหนได้สีอะไร
  active: boolean;
  order: number;
}

// สิ่งที่ลูกค้าได้รับในแต่ละวัน — เก็บแค่ตัวชี้ ไม่เก็บไฟล์
interface CalendarEntry {
  id: string;
  userId: string;
  date: string;             // YYYY-MM-DD · หนึ่งวันมีได้แค่แถวเดียว
  wallpaperId: string;      // → CuratedWallpaper.id
  aspects: AspectId[];      // 1–2 ด้านที่เลือกวันนั้น
  showNumber: boolean;
  favourite: boolean;       // ♡
  rerolled: boolean;        // ใช้สิทธิ์ขอเปลี่ยนใหม่กับวันนี้หรือเปล่า
  deletedAt: string | null; // ลบแล้ว → ช่องปฏิทินว่าง**ถาวร**
}
```

**~40 ไบต์ต่อรายการ** เพราะไม่เก็บไฟล์ — ภาพอยู่ในคลังกลาง ใช้ร่วมกันได้ทุกคน

**กฎของแท็กและคอลเลคชั่น**

| กฎ | เหตุผล |
|---|---|
| แท็ก **สีและด้านเป็นของรายรูป** ไม่ใช่ของทั้งชุด | รูปในชุดเดียวกันโทนต่างกันได้ · ถ้าแท็กรวมทั้งชุดจะจับคู่ผิด |
| สี 1–3 · ด้าน 1–3 ต่อรูป | ติ๊กมากกว่านี้รูปจะดูไม่เฉพาะเจาะจง |
| บันทึกไม่ได้ถ้ารูปใดยังไม่มีทั้งสีและด้าน | รูปไม่มีแท็ก = รูปตายในคลัง ไม่มีวันถูกหยิบ |
| `collectionId` บังคับ | เข้าหน้าอัปได้จากในชุดเท่านั้น จึงไม่มีทางเกิดรูปไร้ชุด |
| **ปิดชุด ≠ ปิดรูป** — แยกกัน | เปิดชุดกลับมา รูปที่เคยปิดรายใบต้องยังปิดอยู่ |
| ลบชุด = **ลบรูปในชุดด้วย** | ต้องมี warning บอกจำนวนรูปและจำนวนคู่ที่จะไม่เหลือรูป |

> **`planets` เป็น "คำอธิบายรูป" ไม่ใช่ "ตัวเลือกของลูกค้า"** — ลูกค้าไม่เคยเลือกสี
> ระบบคำนวณสีจาก `วันเกิด × ด้าน` แล้วเอาไปหารูปที่ติดป้ายสีนั้นไว้
> ถ้าไม่มีป้ายนี้ ระบบจะแยกไม่ออกว่ารูปไหนโทนอะไร แล้วจะแจกมั่วทั้งหมด

### 6.3 ส่วนที่ 2 — ภาพที่ AI สร้าง

```ts
type GenStatus = 'queued' | 'generating' | 'failed' | 'ready';

interface PersonalWallpaper {
  id: string;
  userId: string;

  // สูตร — ใช้ทำปุ่ม "✨ สร้างแบบนี้อีก"
  aspects: AspectId[];          // 1–2 · index 0 กำหนดทั้งสีและเลข
  colorPlanet: PlanetKey;
  colorAuto: boolean;           // false = ลูกค้าเลือกสีเอง
  kalakiniAcknowledged: boolean;// true = ยืนยันแล้วว่าจะใช้สีกาลกิณี
  deityId: DeityId | null;      // null = ไม่เลือกองค์เทพ
  styleId: StyleId;
  promptRaw: string;            // ข้อความดิบที่ลูกค้าพิมพ์ (~100 ตัวอักษร)
  promptSanitized: string;      // หลังผ่านตัวกรองขาเข้า — ตัวนี้เท่านั้นที่ส่งเข้าโมเดล
  seed: number;

  // ผลลัพธ์
  status: GenStatus;
  attempts: number;             // นับรอบที่ไม่ผ่านด่านคุณภาพ
  fileUrl: string | null;       // **ไฟล์จริง** — บังคับเก็บ เพราะ AI สร้างซ้ำไม่ได้
  showNumber: boolean;
  favourite: boolean;           // ♡
  creditCost: number;           // 0 = ใช้โควตาของแพลน
  createdAt: string;
  deletedAt: string | null;
}

// บันทึกการเคลื่อนไหวของเครดิต — ต้องตรวจย้อนหลังได้เมื่อลูกค้าร้องเรียน
interface CreditLedgerEntry {
  id: string;
  userId: string;
  delta: number;                // ติดลบ = หัก
  reason: 'generate' | 'topup' | 'plan_grant' | 'adjust';
  refId: string | null;         // → PersonalWallpaper.id
  balanceAfter: number;
  createdAt: string;
}
```

### 6.4 หมายเหตุที่มีผลกับการเขียนโค้ด

- **เก็บ `colorPlanet` ไม่ใช่ค่า hex** — hex เปลี่ยนได้ตอน rebrand แต่ความหมายทางโหราศาสตร์ต้องคงที่
- **ไม่ต้องเก็บเลขมงคล** — คำนวณจาก `birthDayOfWeek × aspects[0]` ได้เสมอ การเก็บซ้ำเสี่ยงข้อมูลไม่ตรงกันเมื่อแก้วันเกิดภายหลัง
- **ส่วนที่ 1 เก็บ id · ส่วนที่ 2 เก็บไฟล์** — เหตุผลคนละเรื่องกันโดยสิ้นเชิง (ดูข้อ 12)
- **`status: 'failed'` ต้องไม่มีแถวใน `CreditLedgerEntry`** — ถ้ามี แปลว่าโค้ดหักเครดิตผิดจังหวะ ใช้ข้อนี้เป็น assertion ได้เลย
- **ลบแล้วต้องลบจริง** ทั้งแถวและไฟล์ (PDPA ข้อ 13) — `deletedAt` ใช้ระหว่างรอ job ลบไฟล์เท่านั้น ไม่ใช่ soft delete ถาวร

---

## 7. Screen-by-screen — ส่วนกลาง

### 7.0 หน้าแรก
- ทักทายด้วยชื่อ + ชิปวันเกิดจากโปรไฟล์ (กดแก้ไขได้) พร้อมจุดสีของดาวประจำวัน
- **สถานะสิทธิ์วันนี้** — "วันนี้ยังไม่ได้รับวอลเปเปอร์" / "รับแล้ว · ดูของวันนี้"
- ปุ่มเข้าคลังของฉัน + ปฏิทิน
- CTA หลัก → หน้าเลือกประเภท

### 7.1 หน้าเลือกประเภท — **ทางเข้าเดียว**
การ์ด 2 ใบ:

| | ต้องแสดงอะไรบ้าง |
|---|---|
| 🌸 วอลเปเปอร์เดลี่มู | "ฟรี" · "1 ครั้ง/วัน" · สถานะสิทธิ์วันนี้ (เหลือ/ใช้แล้ว) |
| 🎨 Personal Wallpaper | "AI สร้างเฉพาะคุณ" · **โควตา/เครดิตคงเหลือ** · ราคาต่อครั้ง |

- **ต้องบอกราคาและโควตาตั้งแต่หน้านี้** ห้ามให้รู้ราคาหลังกดเข้าไปแล้ว
- ถ้าโปรไฟล์ไม่มีวันเกิด → แทรกหน้าถามวันเกิด (ข้อ 7.9) ก่อนเข้าสายไหนก็ตาม

### 7.9 หน้าถามวันเกิด (edge case)
- แสดงเมื่อ `birthDayOfWeek == null` เท่านั้น · แสดงครั้งเดียว แล้วบันทึกลงโปรไฟล์
- 8 ปุ่ม **แยกพุธกลางวัน/กลางคืนเสมอ** (ให้ทั้งสีและเลขคนละชุด) · แต่ละปุ่มมีจุดสีดาว + ชื่อดาว
- ลิงก์ "ไม่รู้ว่าเกิดวันอะไร? ใส่วันที่แทน" → date picker → คำนวณวันในสัปดาห์
- หลังบันทึก ควรขึ้น toast บอกสีกาลกิณีทันที เป็นการส่งมอบคุณค่าชิ้นแรก
- ⚠️ **bug ที่เคยเจอ:** ฟังก์ชัน render รีเซ็ตค่าที่ผู้ใช้เพิ่งเลือกทุกครั้งที่วาดใหม่ → กดไม่ติด ติดค้างหน้านั้น แก้ด้วยการแยก `enterBirth()` ออกจาก `renderBirth()`

---

## 8. Screen-by-screen — ส่วนที่ 1 (ฟรี)

### 8.1 ขั้นตอนเดียว — เลือกด้านที่อยากเสริม
- grid 2 คอลัมน์ **8 การ์ดครบ** · แต่ละใบมี emoji, หัวข้อภาษาชาวบ้าน, บรรทัดล่างบอกชื่อทักษา
- เลือกได้ 1–2 · กดใบที่ 3 ต้องขึ้น toast เตือน ไม่ใช่เงียบหาย
- บอกให้ชัดว่า **ด้านแรกเป็นตัวกำหนดทั้งสีและเลข**
- ปุ่มถัดไป disabled จนเลือกอย่างน้อย 1 ด้าน
- ถ้าใช้สิทธิ์วันนี้ไปแล้ว → ข้ามมาหน้าผลลัพธ์ของวันนี้ พร้อมปุ่ม "ขอเปลี่ยนใหม่" (ดู 8.3)

### 8.2 ระบบเลือกวอลเปเปอร์ให้
ไม่ใช่หน้าจอ แต่เป็นตรรกะที่ต้องเขียนให้ตรง:

```
want = colorAt(birth, positionOf(aspects[0]))        // สีที่คำนวณได้

candidates = CuratedWallpaper
  .filter(w => w.active)                            // รูปเปิดอยู่
  .filter(w => collectionOf(w).active)              // และคอลเลคชั่นเปิดอยู่
  .filter(w => w.aspects ∩ userAspects ≠ ∅)
  .filter(w => w.planets.includes(want))            // โทนสีตรงกับที่คำนวณได้
  .filter(w => ยังไม่เคยได้รับภายใน 30 วัน)
```

**คอลเลคชั่นมีผลจุดเดียวคือบรรทัดที่ 2** — นอกนั้นระบบไม่รู้จักคอลเลคชั่นเลย
ลูกค้าไม่เห็นชื่อชุด และรูปถูกสุ่มข้ามทุกชุดที่เปิดอยู่

| เงื่อนไข | ต้องทำอะไร |
|---|---|
| มีผู้สมัครหลายภาพ | สุ่ม 1 ภาพ |
| ไม่เหลือภาพเพราะกันซ้ำ 30 วัน | **ผ่อนเงื่อนไขกันซ้ำก่อน** (ลดเหลือ 14 วัน → 7 วัน → ไม่กัน) |
| ไม่เหลือภาพเพราะคอลเลคชั่นถูกปิด | **ไม่ผ่อน** — ถือว่าตั้งใจปิด · ไปขั้นถัดไปเลย |
| ไม่เหลือภาพเพราะสีไม่ตรง | ผ่อนเป็นดาวคู่มิตร แล้วค่อยผ่อนเป็นด้านอย่างเดียว |
| ยังไม่เหลืออีก | ใช้ **ภาพกลาง** ที่เตรียมไว้ล่วงหน้า |
| — | **ห้ามขึ้น error เด็ดขาด** ลูกค้าต้องได้ภาพเสมอ |

- ลูกค้า**ไม่เห็นคลังทั้งหมด** เห็นทีละ 1 ภาพที่ระบบให้มา ความหายากมาจากกติกา "วันละ 1 ครั้ง" ไม่ต้องพึ่งกลไกอื่น
- บันทึก `CalendarEntry` ทันทีที่ระบบเลือกภาพเสร็จ (ดูข้อ 15 ข้อ 5 — ยังไม่เคาะว่าสิทธิ์ถูกใช้จังหวะไหน)

### 8.3 ผลลัพธ์ (ส่วนฟรี)
- วอลเปเปอร์เต็มจอ + **เลขมงคลของลูกค้า** วาดทับด้วยโค้ด → คนละภาพกันแม้ได้ไฟล์ฐานเดียวกัน
- toggle เปิด-ปิดเลขมงคล พร้อมบรรทัดอธิบายว่าเลขนั้นคือเลขตำแหน่งอะไรของวันเกิดไหน (กันปัญหาเลข 4)
- ♡ เก็บเข้า "ที่ชอบ" · ⬇ โหลดฟรีไม่จำกัดครั้ง · **ไม่มีลายน้ำ**
- ปุ่ม **"ขอเปลี่ยนใหม่"** — สัปดาห์ละ 1 ครั้ง ต้องบอกสิทธิ์คงเหลือบนปุ่ม
  - ใช้สิทธิ์หมดแล้ว → บอกว่า "สัปดาห์นี้ใช้สิทธิ์แล้ว" + ยังดู/โหลดของวันนี้ได้ + ชวนไป Personal
  - **จุดที่ต้องระวัง:** ส่วนฟรีไม่มีขั้นตอนลุ้น ถ้าได้ภาพไม่ถูกใจ ลูกค้าจะเสียสิทธิ์ของวันนั้นไปเลย → สิทธิ์ขอเปลี่ยนใหม่คือทางออกเดียวที่เขามี **ห้ามตัดทิ้ง**
- แถบชวนไป Personal Wallpaper — **จุดขายที่ดีที่สุด เพราะเขาเพิ่งอินกับของที่ได้**
- ⚠️ **ต้องมีแถบบอกสถานะสิทธิ์บนสุดเสมอ** — เพราะเมื่อใช้สิทธิ์แล้ว การกลับเข้าส่วนฟรีจะข้ามหน้าเลือกด้านมาที่หน้านี้ทันที
  ถ้าไม่บอก ลูกค้าจะคิดว่าฟีเจอร์เลือกด้านหายไป ข้อความต้องต่างกัน 3 กรณี:

  | สถานการณ์ | ข้อความ |
  |---|---|
  | เพิ่งกดรับ | "นี่คือวอลเปเปอร์ของคุณสำหรับวันนี้ · สิทธิ์ใหม่รีเซ็ตเที่ยงคืน" |
  | กลับเข้ามาดูซ้ำ | "**วันนี้คุณรับไปแล้ว จึงไม่ได้ให้เลือกด้านใหม่** · รีเซ็ตเที่ยงคืน · ยังขอเปลี่ยนรูปได้อีก 1 ครั้งสัปดาห์นี้" |
  | ขอเปลี่ยนครบแล้ว | "...สัปดาห์นี้ใช้สิทธิ์ขอเปลี่ยนครบแล้ว" |

### 8.4 ปฏิทินของฉัน
| กฎ | ค่า |
|---|---|
| ขึ้นเฉพาะวันที่เข้ามารับจริง | ✅ **วันที่ไม่ได้เข้ามาต้องว่าง** |
| เติมย้อนหลัง | ❌ ไม่ได้เด็ดขาด |
| รับแล้วไม่ได้โหลด | ✅ ก็ยังขึ้น (บันทึกการ**รับ** ไม่ใช่การโหลด) |
| ลบแล้วกดใหม่ | ❌ ว่างถาวร |
| หน้าตาช่องว่าง | **เงียบ ๆ ไม่ตำหนิ** — นับสิ่งที่เขาทำ อย่านับสิ่งที่ไม่ได้ทำ |

ห้ามใส่ streak counter หรือข้อความทวงถามในช่องว่าง — ผิดกับอารมณ์ของผลิตภัณฑ์

---

## 9. Screen-by-screen — ส่วนที่ 2 (AI)

### 9.0 ด่านโควตา
- เช็คโควตาแพลน + เครดิตก่อนเข้า STEP 1
- ไม่พอ → ชวนอัปเกรด/เติมเครดิต **ต้องยังกดดูขั้นตอนได้** ไม่ใช่ปิดประตูทันที
- **ครั้งแรกต้องฟรีสำหรับทุกคน** — ไม่มีใครจ่ายให้ของที่ไม่เคยเห็นคุณภาพ

### 9.1 STEP 1 — ด้านที่อยากเสริม
เหมือนข้อ 8.1 ทุกประการ (การ์ด 8 ใบ · 1–2 ด้าน · ด้านแรกกำหนดสีและเลข)

### 9.2 STEP 2 — สีมงคล + เลขมงคล
**หน้าที่สำคัญที่สุดของทั้งแอป** ต้องแสดง 4 อย่างครบ:
1. **การ์ดสี** — ชื่อสี, ป้ายบอกตำแหน่งทักษา + ดาว, ค่า hex, สีรองถ้ามี · พื้นหลังเป็น gradient ของสีนั้น · ต้องสลับสีตัวอักษรเป็นเข้มเมื่อ `light: true`
2. **เหรียญเลขมงคล** บนการ์ดสี — ตัวเลขในวงกลม พร้อมป้าย "เลขมงคล"
3. **บรรทัดเหตุผล** — *"คุณเกิดวัน{X} อยากเสริม{Y} ซึ่งตรงกับตำแหน่ง{Z} → สี{Z}ของคุณคือสี{C} และเลขมงคล {N} (ดาว{P})"*
4. **การ์ดที่ควรเลี่ยง** — บอก **ทั้งสีและเลขกาลกิณี** คู่กัน พร้อมอธิบายว่าเป็นของดาวอะไร

- ปุ่ม "เลือกสีเอง" เปิดจานสี 8 สีตามทักษา แต่ละสีติดป้ายชื่อตำแหน่ง · สีกาลกิณีมีเครื่องหมาย `!`
- เลือกสีกาลกิณี → sheet เตือนพร้อมเหตุผล มี 2 ปุ่ม: "เลือกสีอื่น" / "เข้าใจแล้ว ใช้สีนี้" — **ห้ามบล็อก** · บันทึก `kalakiniAcknowledged = true`
- เมื่อเลือกสีเอง บรรทัดเหตุผลต้องเปลี่ยนไปบอกว่าสีที่ระบบแนะนำคือสีอะไร
- **และต้องระบุด้วยว่าเลขมงคลไม่เปลี่ยนตามสีที่เลือกเอง** — ยึดตำแหน่งทักษาของด้านเสมอ (เหตุผลในข้อ 2.5)

### 9.3 STEP 3 — องค์เทพ *(ข้ามได้)*
- grid 2 คอลัมน์ กรองด้วย `deity.for ∩ aspects`
- **มีปุ่ม "ไม่เลือกองค์เทพ"** ชัดเจน ไม่ใช่ซ่อนไว้ท้ายรายการ
- ปุ่ม ⓘ บนการ์ดเปิด sheet: ชื่อ, tag, คำอธิบาย, คาถา, ปุ่มเลือกองค์นี้ + หมายเหตุว่าคาถาต้องตรวจทาน
- เปลี่ยนด้านย้อนหลังแล้วองค์เทพไม่ตรงด้านใหม่ → ต้องล้างการเลือก

### 9.4 STEP 4 — สไตล์
- การ์ดสไตล์ตามข้อ 5 · ตัวอย่างต้องใช้ **สีจริงของลูกค้า**
- โทนเดลี่มูอยู่ใบแรกและเป็นค่าเริ่มต้น
- ปุ่มถัดไป disabled จนเลือก

### 9.5 STEP 5 — prompt อิสระ
- ช่องข้อความ **~100 ตัวอักษร** พร้อมตัวนับ
- **ต้องมีชิปตัวอย่าง** ให้กดเติม (เช่น "แสงเช้า" · "ดอกไม้ไทย" · "มินิมอล") — ช่องว่างเปล่าทำให้คนพิมพ์มั่ว
- ข้อความกำกับ: *"บอกบรรยากาศที่อยากได้ — องค์เทพและตัวหนังสือระบบจัดการให้แล้ว"*
- **2 จุดที่ prompt แตะไม่ได้: องค์เทพ และตัวหนังสือ** (2 จุดที่ AI พังบ่อยที่สุด)

### 9.6 ปุ่มสร้าง
- **ปุ่มต้องเขียนราคาไว้บนตัวปุ่ม** เช่น *"✨ สร้างภาพ · ใช้ 1 เครดิต (เหลือ 3)"*
- ถ้าใช้โควตาแพลน → *"✨ สร้างภาพ · ใช้สิทธิ์วันนี้ (ฟรี)"*
- ระหว่างรอ: แสดงสถานะจริง ไม่ใช่ spinner เปล่า — "กำลังสร้างฉาก" → "กำลังประกอบภาพ" → "กำลังตรวจคุณภาพ"

### 9.7 เมื่อเจนไม่สำเร็จ
- ไม่ผ่านด่านคุณภาพ → **เจนใหม่เงียบ ๆ ไม่หักเครดิต** (ลูกค้าไม่ต้องรู้)
- **พลาดครบ 2 ครั้ง** → แจ้ง: *"ขออภัย สร้างภาพไม่สำเร็จ กรุณาลองใหม่อีกครั้ง"*
  - ต้องย้ำว่า **ยังไม่ถูกหักเครดิต**
  - **ต้องมีปุ่มลองใหม่** ห้ามจบด้วยหน้าจอ error เปล่า ๆ
- ❌ **ไม่มีการคืนเครดิต** เพราะหักตอนภาพผ่านด่านเท่านั้น จึงไม่เคยหักตั้งแต่แรก
- ⚠️ **ต้องมีเพดานการลองใหม่** (เช่น N ครั้ง/วัน) — ช่องโหว่จากการไม่หักเครดิตตอนพลาด: prompt ที่ไม่ผ่านตลอดจะกินค่า token ไม่จำกัด **ยังไม่เคาะตัวเลข (ข้อ 15)**

### 9.8 ผลลัพธ์ (ส่วน AI)
- **ไม่มีลายน้ำ** — จ่ายแล้วต้องได้ของสะอาด
- ♡ เก็บเข้าที่ชอบ · ⬇ โหลดฟรีไม่จำกัด · ✨ สร้างใหม่
- toggle เปิด-ปิดเลขมงคล — **ไม่ต้องเจนใหม่ ไม่เสียเครดิตซ้ำ** เพราะเลขอยู่คนละชั้น
- **เก็บไฟล์จริงเข้าคลังอัตโนมัติทันที** ไม่ต้องรอลูกค้ากด — AI สร้างซ้ำให้เหมือนเดิมไม่ได้

---

## 10. คลังของฉัน + ปุ่มหัวใจ

**คลังเดียวรวมของทั้งสองส่วน** แยกด้วยแท็บและตัวกรอง ไม่ใช่แยกเป็นคนละคลัง

- แท็บ: **ทั้งหมด** (อัตโนมัติ) · **ที่ชอบ ♡** (ลูกค้าคัดเอง)
- ตัวกรอง: ด้าน · สไตล์ · ที่มา (ฟรี/AI)
- มุมมองปฏิทินเป็นอีกหน้าต่างของของส่วนฟรี (ข้อ 8.4)
- empty state ต้องมีปุ่มพาไปรับวอลเปเปอร์ประจำวัน หรือสร้าง Personal — **ห้ามเป็นหน้าขาว**

**♡ เป็นปุ่มคัด ไม่ใช่ปุ่มเก็บ** เพราะทุกชิ้นถูกเก็บอัตโนมัติอยู่แล้ว · สลับได้ตลอด ไม่กระทบไฟล์

เปิดดูชิ้นงานแล้วทำอะไรได้บ้าง:

| ปุ่ม | กฎ |
|---|---|
| ⬇ โหลดซ้ำ | **ฟรีเสมอ ไม่หักเครดิต** ไม่ว่าจะมาจากส่วนไหน — ของส่วน AI จ่ายไปแล้วตอนเจน เก็บอีกรอบ = เก็บเงินสองรอบกับของชิ้นเดียว |
| ♡ ชอบ/เลิกชอบ | สลับได้ตลอด |
| ✨ สร้างแบบนี้อีก | โหลดสูตรเดิมไปส่วน AI · **เสียเครดิต** ต้องบอกราคาก่อนกด |
| 🗑 ลบ | ต้องยืนยัน · ของส่วนฟรี → ช่องปฏิทินว่างถาวร |

**ปุ่ม "✨ สร้างแบบนี้อีก" คือจุดขายที่ถูกมองข้ามบ่อย** — คนที่กลับมาดูของเก่าคือคนที่ชอบผลงานนั้น ให้เขาต่อยอดจากสูตรเดิมได้เลย เป็น conversion ที่ต้นทุนต่ำที่สุด

**ที่เก็บ:** ผูกกับบัญชีผู้ใช้ ไม่ใช่เครื่อง · ไม่มีวันหมดอายุ · ไม่จำกัดจำนวน (เพดานกันบอท ~500)
**ลดแพลน / แพลนหมด → ห้ามลบของเก่า** แพลนคุมแค่การเจนใหม่

---

## 11. Asset spec + Rendering pipeline

### 11.1 การแบ่งชั้น — หัวใจของทั้งระบบ

> 🔄 **เปลี่ยนจากข้อสรุปเดิม** — เดิมเขียนว่า "ไม่ใช้ AI generate เลย"
> ตอนนี้ **ใช้ AI เฉพาะชั้นฉาก** ตามข้อสรุประดับโปรเจกต์ · องค์เทพยังมาจากคลังเหมือนเดิม

| ชั้น | ใครทำ | เหตุผล |
|---|---|---|
| 1. ฉาก / พื้นหลัง | **AI** | ตรงนี้คือคุณค่าที่ลูกค้าจ่าย — ภาพไม่ซ้ำใคร |
| 2. องค์เทพ | **คลังภาพที่ตรวจแล้ว** | AI วาดสรีระเทพเพี้ยน (แขนเกิน มือบิด พระพักตร์ผิดรูป) = ความไม่เคารพและเสี่ยงดราม่าหนักในตลาดสายมู |
| 3. ลายมงคล / ยันต์ | **SVG parametric** | ระบายด้วยสีที่ derive จากสีมงคล · เปลี่ยนตาม `seed` ได้โดยไม่ต้องเพิ่ม asset |
| 4. ตัวหนังสือไทย + คาถา | **โค้ดวาด** | AI เขียนภาษาไทยออกมาเป็นตัวมั่วเกือบ 100% |
| 5. เลขมงคล | **โค้ดวาด** | ต้องคำนวณจากทักษา และต้องเปิด-ปิดได้โดยไม่เจนใหม่ |

**ส่วนที่ 1 (ฟรี) ใช้ชั้น 1 จากคลังของแอดมินแทน AI** — ชั้น 4–5 ยังวาดทับเหมือนกัน

### 11.2 Pipeline

```
คำขอ: { birthDayOfWeek, aspects, colorPlanet, deityId, styleId, promptSanitized, showNumber, seed, source }
   │
   ├─ 1. resolve สี+เลข   → PLANETS[colorPlanet] · luckyNumberOf(birth, positionOf(aspects[0]))
   ├─ 2. ได้ชั้นฉาก        → source='ai': เรียกโมเดล · source='free': ดึงจาก CuratedWallpaper
   ├─ 3. ด่านคุณภาพ        → ไม่ผ่าน → วนข้อ 2 (สูงสุด 2 ครั้ง) · ผ่าน → **หักเครดิตตรงนี้เท่านั้น**
   ├─ 4. วางลายมงคล        → SVG parametric ตาม seed
   ├─ 5. วางองค์เทพ        → PNG โปร่งจากคลัง + halo (ข้ามถ้า deityId = null)
   ├─ 6. วางข้อความ        → ชื่อองค์เทพ/ด้าน + คาถา
   ├─ 7. วางเลขมงคล        → ถ้า showNumber — **ชั้นแยก ปิดได้โดยไม่ต้องทำข้อ 2 ใหม่**
   ├─ 8. เว้น safe area    → บนสุด 20% ต้องไม่มี subject/ข้อความ (นาฬิกาล็อกสกรีนทับ)
   └─ 9. export           → 1170 × 2532 (@3x) · PNG · **ไม่มีลายน้ำ**
```

**ข้อกำหนดที่ต้องบังคับใน pipeline**
- **เลขมงคลต้องคำนวณที่ server จาก `birthDayOfWeek × aspects[0]` เท่านั้น** ห้ามรับค่าเลขจาก client (กันการยัดเลขกาลกิณีเข้ามา)
- ห้าม `colorPlanet` เป็นสีกาลกิณีโดยไม่มี `kalakiniAcknowledged` — ถ้ามาจาก API ตรงต้องตรวจซ้ำที่ server
- ตรวจ `light` flag เพื่อสลับสีตัวอักษร — ดาวจันทร์พื้นครีม ถ้าใช้ตัวอักษรขาวจะอ่านไม่ออก
- คอนทราสต์ข้อความต่อพื้นหลังต้องผ่าน 4.5:1
- ⚠️ **bug ที่เคยเจอ:** `mix-blend-mode: soft-light` ทำให้ลายหายไปบนพื้นครีม — ต้องใช้ blend ปกติเมื่อ `light: true`
- **เจนที่สัดส่วน 9:19.5 ตั้งแต่แรก ห้ามครอปเอา** — ครอปทีหลังจะตัดองค์ประกอบสำคัญทิ้ง

### 11.3 Asset spec — คลังภาพองค์เทพ

**ใช้ทั้งสองส่วน** — ส่วนฟรีก็ประกอบองค์เทพจากคลังเดียวกัน

| หัวข้อ | ข้อกำหนด |
|---|---|
| จำนวน | 15 องค์ตามตารางข้อ 4 |
| ไฟล์ | PNG พื้นหลังโปร่งใส · ด้านสั้นไม่น้อยกว่า 2000px · แนวตั้ง |
| สไตล์ | ต้องเป็นชุดเดียวกันทั้ง 15 องค์ (เส้น สัดส่วน แสงเงา โทน) ไม่ใช่เก็บจากหลายที่ |
| สี | วาดในโทนกลาง/ทอง ให้ประกอบเข้ากับพื้นหลัง **8 สี** ได้ทุกสี — ทดสอบกับดาวจันทร์ (พื้นอ่อน) และดาวเสาร์ (พื้นดำ) เป็นเคสยากสองขั้ว |
| ความเหมาะสม | สรีระและเครื่องทรงต้องถูกตามคติของแต่ละองค์ (จำนวนกร สิ่งที่ถือ พาหนะ) · ห้ามครอปตัดพระเศียรหรือพระกร · ห้ามใช้ท่าที่ดูไม่เคารพ |
| ลิขสิทธิ์ | **buyout เชิงพาณิชย์** ระบุสิทธิ์ใช้ในแอปและสื่อโฆษณา แก้ไข/ย่อขยาย/ประกอบภาพได้ |
| ตรวจรับ | ให้ผู้รู้หรือที่ปรึกษาด้านความเชื่อตรวจก่อนขึ้นระบบ พร้อมกับการตรวจคาถา |

**ห้ามใช้:** ภาพจาก Google Images, Pinterest, สื่อโซเชียล หรือภาพถ่ายเทวรูปจากวัด/ศาลที่ไม่ได้ขออนุญาต — ใช้เชิงพาณิชย์ไม่ได้

**ลายมงคลไม่ต้องจ้างวาด** — เป็น SVG parametric ที่ระบบวาดเองจากสีของลูกค้า (ลายกลีบดอก · วงออร่า · ยันต์สี่เหลี่ยม · ประกาย · ตรามงคล) ถ้าอยากได้ลายพิเศษเพิ่ม ให้สั่งเป็น SVG ที่รับพารามิเตอร์สีได้

---

## 12. กัน AI เจนออกมาแล้วพัง — 8 ชั้น

| # | ชั้น | รายละเอียด |
|---|---|---|
| 1 | **แยกชั้นภาพ** | **สำคัญที่สุด แก้ได้ ~80%** — AI ทำเฉพาะฉาก · องค์เทพจากคลัง · ตัวหนังสือ/เลขให้โค้ดวาด (ข้อ 11.1) |
| 2 | ไม่ส่ง prompt ดิบ | `[โครงที่เราคุม] + [สไตล์] + [สีมงคล] + «ข้อความลูกค้า» + [negative]` · ตัดคำสั่งที่พยายามคุมระบบ (prompt injection) |
| 3 | Negative prompt ทุกครั้ง | `text, thai script, watermark, deformed, extra limbs, distorted face, nsfw, blurry` |
| 4 | กรอง 2 ทาง | **ขาเข้า:** คำหยาบ/ศาสนา/การเมือง/ชื่อบุคคลจริง · **ขาออก:** NSFW + คุณภาพ **ก่อนโชว์** |
| 5 | ด่านคุณภาพก่อนหักเครดิต | ไม่ผ่าน → เจนใหม่ไม่หัก · พลาด 2 ครั้ง → แจ้งให้ลองใหม่ (ไม่ต้องคืนเครดิต) |
| 6 | คุมองค์ประกอบ | เจน 9:19.5 แต่แรก **ไม่ครอปเอา** · บนสุด 20% โล่ง กันนาฬิกาทับ |
| 7 | ล็อกพารามิเตอร์ต่อสไตล์ | ให้ภาพเป็นตระกูลเดียวกัน ไม่ใช่ 10 คนได้ 10 อารมณ์ |
| 8 | คนสุ่มตรวจช่วงเปิดตัว | ดูผลจริงทุกวัน โดยเฉพาะภาพที่มีองค์เทพ |

---

## 13. ประวัติ — เก็บ 2 แบบ คนละเหตุผล

> 🔄 **ข้อสรุปนี้เปลี่ยนจากรอบแรก** — เดิมสรุปว่าไม่ต้องทำ history เพราะสร้างซ้ำได้ฟรีจากสูตร
> แต่พอส่วนที่ 2 ใช้ AI แล้ว **ภาพสร้างซ้ำให้เหมือนเดิมไม่ได้** และลูกค้าจ่ายเงินไปแล้ว
> ถ้าไม่เก็บไฟล์ = ของที่ซื้อไปหายถาวร

| | ส่วนที่ 1 — ปฏิทินของฉัน | ส่วนที่ 2 — คลังภาพ |
|---|---|---|
| เก็บอะไร | วันที่ · id ภาพ · ด้าน · เปิด/ปิดเลข | **ไฟล์ภาพจริง** + สูตร + เครดิตที่หัก |
| ทำไม | ไดอารี่ สร้างนิสัยกลับมา | **จ่ายเงินแล้ว + AI สร้างซ้ำไม่ได้** |
| เก็บอัตโนมัติ | ✅ | ✅ |
| ความจำเป็น | มีก็ดี | **บังคับ** |
| ขนาด | ~40 ไบต์/รายการ | ~400–500 KB/ภาพ → 10,000 ภาพ ≈ 5 GB |

---

## 14. PDPA

**การเก็บว่าลูกค้าบูชาองค์เทพองค์ไหน และกังวลเรื่องอะไร = ข้อมูลส่วนบุคคลอ่อนไหวตามมาตรา 26**
(ความเชื่อทางศาสนา และในกรณีการ์ด `health` คือข้อมูลสุขภาพ)

| ต้องมี | รายละเอียด |
|---|---|
| ขอความยินยอมแยก | ไม่รวมกับ consent ทั่วไปของแอป |
| ลบทีละชิ้น | ปุ่ม 🗑 ในคลัง (ข้อ 10) |
| **ลบทั้งหมด** | ปุ่มในหน้าตั้งค่า ลบทั้งปฏิทิน คลัง และ prompt ที่เคยพิมพ์ |
| ลบจริง | ลบไฟล์ออกจาก storage ด้วย ไม่ใช่แค่ซ่อนแถว |
| ไม่ส่งต่อ | ห้ามส่งข้อมูลองค์เทพ/ด้านให้ระบบโฆษณาหรือ analytics บุคคลที่สาม |
| prompt ที่ลูกค้าพิมพ์ | ถือเป็นข้อมูลส่วนบุคคลด้วย — ต้องลบได้และห้ามเอาไป fine-tune โดยไม่ขอ |

---

## 15. ยังไม่ได้ตัดสินใจ

1. **แพลนไหนเจนได้กี่ครั้ง · ราคาเครดิต · ราคาแพ็กเติม** — ตัวเลขทั้งหมดของข้อ 9.0
2. **รายการสไตล์สุดท้าย** — เสนอไว้ 6 (ข้อ 5) เลือก 5–6 พอ
3. **เลือก 2 ด้านแล้วโชว์เลขมงคลของด้านไหน** — ตอนนี้ใช้ด้านแรก จะโชว์ 2 เลขไหม
4. **คลังภาพองค์เทพ ~15 องค์** — งบและวิธีได้มา
5. **สิทธิ์รายวันของส่วนฟรีถูกใช้ตอนไหน** — ตอนกดเลือกด้าน หรือตอนกดโหลด (มีผลมากกับความรู้สึกลูกค้า)
6. **เพดานการลองใหม่เมื่อเจนไม่สำเร็จ** — ต้องมี ไม่งั้น prompt ที่ไม่ผ่านตลอดจะกินค่า token ไม่จำกัด
7. **คาถาบูชา** — ใครเป็นผู้ตรวจทาน? ต้องได้คนที่กลุ่มเป้าหมายยอมรับ
8. **`protect` ยืมสีเดช** — รับได้ หรืออยากตัดการ์ดนี้ออกให้เหลือ 7 ด้านตรงตามทักษาเป๊ะ ๆ
9. **พระพุทธรูปประจำวันเกิด** — ต้องวาด 7–8 ปางแยกตามวันเกิด หรือใช้ปางเดียวรวม
10. **สีรองในชุดเดียวกัน** — ดาวราหูมี 3 สี (ม่วง/ทอง/เทา) ให้ลูกค้าเลือกสีรองในชุดได้ไหม
11. **กำลังดาว** — จะเพิ่ม "ท่องคาถา N จบ" ใต้คาถาไหม (ข้อมูลพร้อมแล้วในข้อ 2.5)

---

## 16. สิ่งที่ยกเลิก / เปลี่ยนจากที่เคยตกลง

> ⚠️ **ตารางนี้กันไม่ให้ย้อนกลับไปทำของที่ตัดทิ้งไปแล้ว** ข้อสรุปเปลี่ยนหลายรอบระหว่างทาง

| เคยตกลงว่า | ตอนนี้ | เพราะ |
|---|---|---|
| ไม่ต้องทำ history | ✅ **ทำ** (2 แบบ) | AI สร้างซ้ำไม่ได้ + ลูกค้าจ่ายเงินแล้ว |
| ใส่ลายน้ำกันแคปหน้าจอ | ❌ **ไม่ใส่ทั้งสองส่วน** | ของฟรีไม่ต้องกัน · ลายน้ำในของฟรีจะทำลาย hook รายวัน · ของที่จ่ายแล้วต้องสะอาด |
| ปุ่มสุ่ม `[‹][🎲][›]` | ❌ **ไม่มีปุ่มสุ่ม** | ส่วนฟรีให้สิทธิ์วันละ 1 ครั้ง · ส่วน AI แต่ละครั้งเสียเครดิตอยู่แล้ว |
| เสี่ยงทาย / ไพ่คว่ำ 3 ใบ | ❌ **ยกเลิก ไม่มีกลไกนี้** | เป็นสิ่งที่คิดเพิ่มเกินจากที่ตกลง — ส่วนฟรีมีขั้นตอนเดียวคือเลือกด้าน |
| ปุ่ม "เก็บไว้ก่อน" | 🔄 **♡ ที่ชอบ** | เก็บอัตโนมัติหมดแล้ว ♡ จึงเป็นปุ่มคัด |
| โชว์ตัวเลือก 4–6 อันให้เลือก | ❌ **ยกเลิก** | ปล่อยให้ไล่ดูคลังหมดภายในไม่กี่วัน |
| รีเซ็ตโควตา 06:00 | 🔄 **เที่ยงคืน** | ใช้เส้นแบ่งวันเดียวกับปฏิทิน |
| flow 4 ขั้นตอนเดิม | 🔄 **ย้ายไปเป็นส่วนที่ 2 (5 ขั้นตอน)** | ส่วนฟรีเหลือขั้นตอนเดียว หลังบ้านคัดภาพไว้ให้แล้ว |
| ธีมเดลี่มู / ธีมองค์เทพ | 🔄 **กลายเป็น "สไตล์"** ในส่วนที่ 2 | องค์เทพเป็นตัวเลือกอิสระแล้ว ไม่ใช่จุดแยกทางของ flow |
| ถอดตัวเลือก "ไม่ระบุองค์เทพ" | 🔄 **กลับมาแล้ว** | ความขัดแย้งกับระบบธีมหายไปพร้อมกับธีม |
| ไม่ใช้ AI เลย | 🔄 **ใช้เฉพาะชั้นฉาก** | ข้อสรุประดับโปรเจกต์ · องค์เทพยังมาจากคลัง |
| เซฟไม่จำกัด ไม่มี paywall | 🔄 **มีโควตาทั้งสองส่วน** | ส่วนฟรี 1 ครั้ง/วัน · ส่วน AI แพลน+เครดิต |
| ดักที่การเซฟ/โหลด | 🔄 **ดักที่การเจน** | ต้นทุนอยู่ที่ค่า token ไม่ใช่ที่การโหลดไฟล์ · **โหลดซ้ำต้องฟรีเสมอ** |

**ของที่ทำไปแล้วไม่เสียเปล่า** — เครื่องคำนวณทักษาปกรณ์ · ตารางสีและเลขมงคล · การ์ดเลือกด้าน 8 ใบ · ตาราง mapping องค์เทพ ใช้ต่อได้ทั้งสองส่วน

---

## 17. การตรวจสอบ (QA)

### 17.1 ตรวจตรรกะสีและเลข

| วันเกิด | ด้าน (ตำแหน่ง) | สีที่ต้องได้ | เลขที่ต้องได้ | กาลกิณี (สี / เลข) |
|---|---|---|---|---|
| เสาร์ | เงินทอง (มูละ) | แดงสด | **1** | เขียว / 4 |
| ศุกร์ | ความรัก (ศรี) | ชมพู/แดงแก่ | **3** | ม่วง/ทอง/เทา / 8 |
| พฤหัสบดี | การงาน (เดช) | ฟ้า/น้ำเงิน | **6** | ดำ/ม่วงเข้ม / 7 |

**จุดที่พลาดง่าย:** ศรีของวันศุกร์คือ**ดาวอังคาร (ชมพู)** ไม่ใช่ดาวอาทิตย์ (แดงสด) — ต้องเดินตามสูตร ห้ามเดา

### 17.2 เคสที่ต้องทดสอบทุกครั้งที่แก้ flow

**ตรรกะร่วม**
1. **วันเกิด × สไตล์** — วาดได้ครบทั้ง 8 สี × ทุกสไตล์ โดยไม่พัง
2. **พื้นอ่อน (ดาวจันทร์)** — ตัวอักษรต้องสลับเป็นสีเข้ม และลายมงคลต้องยังมองเห็น
3. **หน้าถามวันเกิด** — กดเลือกวันแล้วการเลือกต้องติดและปุ่มบันทึกต้องเปิด
4. **เลือกสีกาลกิณีเอง** — เลขมงคลบนวอลเปเปอร์ต้อง **ไม่** กลายเป็นเลขกาลกิณี

**ส่วนที่ 1**
5. **ใช้สิทธิ์แล้วเข้ามาใหม่** — ต้องเห็นของวันนี้ ไม่ใช่เริ่มใหม่
6. **ขอเปลี่ยนใหม่ 2 ครั้งในสัปดาห์เดียว** — ครั้งที่ 2 ต้องถูกปฏิเสธพร้อมบอกเหตุผล
7. **คลังไม่มีภาพตรงเงื่อนไข** — ต้องผ่อนเงื่อนไขตามลำดับข้อ 8.2 และได้ภาพเสมอ **ห้าม error**
8. **กดตอน 23:59 แล้วกดอีกตอน 00:01** — ต้องได้ 2 วันแยกกัน ไม่ใช่ถูกบล็อก
9. **วันที่ไม่ได้เข้ามา** — ปฏิทินต้องว่าง และเติมย้อนหลังไม่ได้
10. **ลบรายการปฏิทินแล้วกดรับใหม่วันเดิม** — ต้องยังว่าง

**ส่วนที่ 2**
11. **เจนไม่ผ่าน 2 ครั้ง** — ต้องไม่มีแถวใน `CreditLedgerEntry` และหน้าจอต้องมีปุ่มลองใหม่
12. **เจนผ่าน** — ต้องมีแถวหักเครดิต **1 แถวเท่านั้น** ต่อ 1 ภาพ
13. **เปิด-ปิดเลขมงคลหลังเจนเสร็จ** — ต้องไม่เรียกโมเดลซ้ำและไม่หักเครดิต
14. **prompt ที่พยายามสั่งให้วาดตัวหนังสือ/องค์เทพ** — ต้องถูกตัดที่ชั้นที่ 2
15. **เปลี่ยนด้านหลังเลือกเทพ** — เทพที่ไม่ตรงด้านใหม่ต้องถูกล้าง
16. **โหลดซ้ำของเก่า** — ต้องฟรี ไม่หักเครดิต
17. **แพลนหมดอายุ** — ของเก่าในคลังต้องยังอยู่ครบ

---

## แหล่งอ้างอิงเนื้อหา

- [ตารางสีมงคลตามวันเกิด + สีกาลกิณี — FortuneStars](https://fortunestars.com/mordo/color) — ใช้ตรวจคอลัมน์กาลกิณีทั้ง 8 วัน
- [ตารางสีมงคลตามวันเกิด วิธีใช้สีให้แม่นยำ — Sanook](https://www.sanook.com/horoscope/295007/)
- [สีมงคลวันนี้ / สีเสื้อมงคลตามวันเกิด — THAKSA](https://thaksa.ai/tools/lucky-color)
- [เทคนิคเลือกสีมงคลตามวันเกิด — TheLuckyName](https://www.theluckyname.com/auspicious-colors-guide/)
- [วอลเปเปอร์มงคล 2569 เสริมดวง งาน เงิน รัก บารมี — NameMongkol](https://www.namemongkol.com/wallpapers) — สำรวจตลาด
- [วอลเปเปอร์มงคลเสริมดวงตามวันเกิด ปี 2569 — Lemon8](https://www.lemon8-app.com/@nigaobrand_/7519003320934875666?region=th) — สำรวจตลาด
- [วิธีหาเลขมงคลตามดวงวันเกิด — TrueID Horoscope](https://horoscope.trueid.net/detail/qRep1oGLApkB) — **ยืนยันว่าเลขมงคลใช้ทักษาชุดเดียวกับสี** พร้อมตัวอย่างวันอาทิตย์ครบ 8 ตำแหน่ง
- [เลขศาสตร์ / เลขประจำดาว — สมาคมโหรแห่งประเทศไทยฯ](https://thaiastro.org/เลขศาสตร์/) — เลขประจำดาว 1–9 และดาวคู่มิตร
- [ความหมายคู่เลขศาสตร์ 2 หลัก — ซินแสหวาง](https://sinsaehwang.com/ความหมาย-คู่-เลขศาสตร์/) — ยืนยันว่าเลข 2 หลักมาจากผลรวมชื่อ-นามสกุล (คนละระบบ)
- [ชื่อเลขศาสตร์ 24 42 45 54 — TheLuckyName](https://www.theluckyname.com/ตั้งชื่อลูก-24-42-45-54-46-64/) — วิธีคำนวณเลข 2 หลักจากค่าตัวอักษร
