docs/spec.md อัตโนมัติ — ถ้าจะแก้เนื้อหา ให้แก้ที่ไฟล์ .md แล้วสร้างใหม่ระบบวอลเปเปอร์มงคล — 2 ส่วน: เดลี่มู (ฟรี) + Personal Wallpaper (AI)
เอกสารนี้ใช้ส่งต่อ dev · คู่กับ docs/user-flow.html (ผังฉบับล่าสุด) และ prototype/index.html
| สถานะ | Draft 2 — ปรับตามสถาปัตยกรรม 2 ส่วน |
| อัปเดต | 13 สิงหาคม 2569 |
| ขอบเขตงานชุดนี้ | workflow และ UX เท่านั้น — ไม่รวมหลังบ้าน (เฟสถัดไป) ไม่รวมการวิเคราะห์ต้นทุน |
| ยังไม่เคาะ | ตัวเลขแพลน · ราคาเครดิต · รายการสไตล์สุดท้าย (ดูข้อ 15) |
⚠️ ถ้าข้อความในเอกสารนี้ขัดกับ
docs/user-flow.htmlให้ยึดuser-flow.htmlผังคือแหล่งความจริงล่าสุด เอกสารนี้ขยายรายละเอียดของผัง
ฟีเจอร์วอลเปเปอร์มงคล เป็น ส่วนหนึ่งของโปรเจกต์ dailyMu ไม่ใช่ทั้งแอป
ทางเข้าทางเดียว แล้วให้ลูกค้าเลือกประเภท:
| ส่วนที่ 1 — 🌸 วอลเปเปอร์เดลี่มู | ส่วนที่ 2 — 🎨 Personal Wallpaper | |
|---|---|---|
| ราคา | ฟรี | แพลน + เครดิต |
| ที่มาของภาพ | คลังที่แอดมินอัปไว้หลังบ้าน | AI สร้างเฉพาะชั้นฉาก + ประกอบชั้นอื่นด้วยโค้ด |
| ลูกค้าเลือกอะไร | ด้านที่อยากเสริม 1–2 ด้าน (ขั้นตอนเดียว) | ด้าน · สี · องค์เทพ · สไตล์ · prompt (5 ขั้นตอน) |
| ภาพซ้ำกับคนอื่นได้ไหม | ได้ — แต่ เลขมงคลต่างกันตามดวงแต่ละคน | ไม่ซ้ำ |
| ต้นทุนต่อครั้ง | ~0 | ค่า token |
| โควตา | 1 ครั้ง/วัน · รีเซ็ตเที่ยงคืน · ขอเปลี่ยนใหม่ได้สัปดาห์ละ 1 | ตามแพลน แล้วหักเครดิต |
| ประวัติ | ปฏิทินของฉัน (เก็บ id) | คลังภาพ (เก็บไฟล์จริง) |
| ลายน้ำ | ไม่มี | ไม่มี |
ส่วนฟรีไม่ใช่ตัวอย่างของส่วนเสียเงิน แต่เป็นสินค้าคนละชิ้นที่สมบูรณ์ในตัวเอง ส่วนฟรีสร้างนิสัยกลับมาทุกวันตามชื่อแอป แล้วใช้หน้าผลลัพธ์เป็นจุดชวนไปส่วน AI ถ้าทำส่วนฟรีให้ด้อยลงเพื่อบีบให้จ่าย จะเสียทั้งนิสัยการกลับมาและโอกาสขายไปพร้อมกัน
สิ่งที่ทำให้ต่างจากการแจกวอลเปเปอร์ทั่วไป: สีและเลขไม่ได้มาจากความชอบหรือการสุ่ม แต่คำนวณจาก วันเกิดของลูกค้า × ด้านที่อยากเสริม ตามระบบทักษาปกรณ์ และทั้งสองอย่างมาจาก ดาวดวงเดียวกัน เสมอ จึงสอดคล้องกันโดยธรรมชาติ ไม่ใช่ของสองอย่างที่จับมาแปะรวมกัน ระบบจึงอธิบายได้ทุกครั้งว่าทำไมต้องเป็นสีนี้ และบอกได้ด้วยว่าสีไหนที่ควรเลี่ยง (สีกาลกิณี)
กลุ่มเป้าหมาย: ผู้ใช้ชาวไทยที่สนใจเรื่องมงคล/สายมู อายุ 20–45 ใช้มือถือเป็นหลัก
Disclaimer ที่ต้องแสดงในแอป:
เนื้อหาในแอปอ้างอิงความเชื่อและตำราโหราศาสตร์ไทย จัดทำขึ้นเพื่อเป็นงานศิลปะและกำลังใจ ไม่ได้รับประกันผลลัพธ์ใด ๆ
✅ ข้อนี้ไม่เปลี่ยนตามสถาปัตยกรรมใหม่ — ใช้เหมือนกันทั้งสองส่วน
num คือ เลขประจำดาว ใช้เป็นเลขมงคล — ระบบเดียวกับสี ต่างแค่อ่านคนละคอลัมน์
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 หมายถึงพื้นหลังสีอ่อน ต้องสลับสีตัวอักษรเป็นสีเข้ม — มีแค่ดาวจันทร์
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() แปลงวันเกิดเป็นดาว โดย พุธกลางคืน → ราหู (จุดที่พลาดกันบ่อย)
| key | ชื่อ | ความหมาย |
|---|---|---|
boriwan |
บริวาร | คนรอบข้าง ครอบครัว ลูกน้อง ผู้ติดตาม |
ayu |
อายุ | สุขภาพ ร่างกาย ความเป็นอยู่ |
det |
เดช | อำนาจ บารมี ชื่อเสียง หน้าที่การงาน |
si |
ศรี | เสน่ห์ ความรัก สิริมงคล |
mula |
มูละ | ทรัพย์สิน เงินทอง ต้นทุน |
utsaha |
อุตสาหะ | ความพยายาม การเรียน ความสำเร็จ |
montri |
มนตรี | ผู้ใหญ่อุปถัมภ์ การเจรจา ผู้สนับสนุน |
kalakini |
กาลกิณี | สิ่งที่ควรหลีกเลี่ยง — ห้ามใช้เป็นสีหลัก |
สร้างจากสูตรข้างบน ช่องขวาสุดตัวหนาคือสีกาลกิณี
| วันเกิด | บริวาร | อายุ | เดช | ศรี | มูละ | อุตสาหะ | มนตรี | กาลกิณี |
|---|---|---|---|---|---|---|---|---|
| อาทิตย์ | แดงสด | ขาว/ครีม | ชมพู/แดงแก่ | เขียว | ดำ/ม่วงเข้ม | ส้ม/กรัก | ม่วง/ทอง/เทา | ฟ้า/น้ำเงิน |
| จันทร์ | ขาว/ครีม | ชมพู/แดงแก่ | เขียว | ดำ/ม่วงเข้ม | ส้ม/กรัก | ม่วง/ทอง/เทา | ฟ้า/น้ำเงิน | แดงสด |
| อังคาร | ชมพู/แดงแก่ | เขียว | ดำ/ม่วงเข้ม | ส้ม/กรัก | ม่วง/ทอง/เทา | ฟ้า/น้ำเงิน | แดงสด | ขาว/ครีม |
| พุธ (กลางวัน) | เขียว | ดำ/ม่วงเข้ม | ส้ม/กรัก | ม่วง/ทอง/เทา | ฟ้า/น้ำเงิน | แดงสด | ขาว/ครีม | ชมพู/แดงแก่ |
| พุธ (กลางคืน) | ม่วง/ทอง/เทา | ฟ้า/น้ำเงิน | แดงสด | ขาว/ครีม | ชมพู/แดงแก่ | เขียว | ดำ/ม่วงเข้ม | ส้ม/กรัก |
| พฤหัสบดี | ส้ม/กรัก | ม่วง/ทอง/เทา | ฟ้า/น้ำเงิน | แดงสด | ขาว/ครีม | ชมพู/แดงแก่ | เขียว | ดำ/ม่วงเข้ม |
| ศุกร์ | ฟ้า/น้ำเงิน | แดงสด | ขาว/ครีม | ชมพู/แดงแก่ | เขียว | ดำ/ม่วงเข้ม | ส้ม/กรัก | ม่วง/ทอง/เทา |
| เสาร์ | ดำ/ม่วงเข้ม | ส้ม/กรัก | ม่วง/ทอง/เทา | ฟ้า/น้ำเงิน | แดงสด | ขาว/ครีม | ชมพู/แดงแก่ | เขียว |
คอลัมน์กาลกิณีตรงกับตำราที่อ้างอิงครบทั้ง 8 วัน (ดูแหล่งอ้างอิงท้ายเอกสาร)
นี่คือจุดที่ประหยัดงานที่สุดของทั้งระบบ: ตำราเลขมงคลไทยใช้ทักษาปกรณ์ชุดเดียวกับสีเป๊ะ ๆ แค่อ่านค่า เลขประจำดาว แทน สีประจำดาว → ไม่ต้องเพิ่มขั้นตอน ไม่ต้องถามอะไรเพิ่ม ไม่ต้องเขียน logic ใหม่
อาทิตย์ 1 · จันทร์ 2 · อังคาร 3 · พุธ 4 · พฤหัสบดี 5 · ศุกร์ 6 · เสาร์ 7 · ราหู 8
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)
คนไทยเชื้อสายจีนเลี่ยงเลข 4 (สี่ = ตาย) แต่ในทักษาไทย 4 = ดาวพุธ = ปัญญา การสื่อสาร การค้า เลข 4 ปรากฏเป็นเลขมงคลในเกือบทุกวันเกิด (ยกเว้นวันเสาร์ที่ 4 เป็นกาลกิณีอยู่แล้ว จึงไม่ถูกแสดง)
ต้องมีคำอธิบายกำกับเลขเสมอ เช่น "เลข 4 คือเลขศรีของคุณ — ดาวพุธ" ห้ามแสดงตัวเลขลอย ๆ ไม่งั้นลูกค้าเห็นแล้วรู้สึกแย่ทันทีทั้งที่ระบบคำนวณถูก
อย่าสร้างเลข 2 หลักขึ้นเอง — เลขศาสตร์ 2 หลัก (24, 45, 56 ฯลฯ) มาจากผลรวมค่าตัวอักษรใน ชื่อ-นามสกุล เป็นคนละระบบกับทักษา ถ้าจะทำต้องขอชื่อผู้ใช้เพิ่ม ไม่ใช่ปั้นขึ้นจากวันเกิด ถ้าปั้นเองแล้วมีคนรู้ทัน จะเสียความน่าเชื่อถือของทั้งแอป
การ์ด 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)
ตารางข้างบนเป็นค่าเริ่มต้น — แอดมินเพิ่ม/แก้/ลบ/ปิด/เรียงลำดับได้ (ดู AspectDef ข้อ 6.2)
| กฎ | ค่า | เหตุผล |
|---|---|---|
| จำนวนสูงสุด | 8 ด้าน | เกินนี้หน้าจอลูกค้าจะแน่นและตัดสินใจยาก |
| ทุกด้านต้องผูกตำแหน่งทักษา | บังคับ | ตำแหน่งคือตัวกำหนดสี · ไม่ผูก = จับคู่รูปไม่ได้ |
| ตำแหน่งที่เลือกได้ | 7 ตำแหน่ง | กาลกิณีห้ามใช้ — เป็นสิ่งที่ต้องเลี่ยง ไม่ใช่สิ่งที่เสริม |
| ใช้ตำแหน่งซ้ำกันได้ | ✅ | เพราะมี 7 ตำแหน่งแต่ให้ได้ถึง 8 ด้าน · ตอนนี้ การงาน กับ ปกป้อง ใช้ เดช ร่วมกัน |
| ปิดด้าน | รูปที่แท็กไว้ยังอยู่ | เปิดกลับมาใช้ต่อได้ ไม่ต้องแท็กใหม่ |
| ลบด้าน | ถอดแท็กออกจากรูปที่ใช้ด้านนั้น | ต้องเตือนว่ามีรูปกี่ใบที่ได้รับผลกระทบ |
ด้านที่ใช้ตำแหน่งเดียวกันจะได้สีเดียวกันเสมอ ต่างกันแค่ชื่อที่ลูกค้าเห็น — ตั้งใจแบบนี้ได้ ไม่ใช่ข้อผิดพลาด
ห้ามคัดการ์ดออกจากหน้าจอ — แสดงครบทั้ง 8 ใบเสมอ แล้วจำกัดที่ จำนวนที่เลือกได้ ไม่ใช่ที่ จำนวนที่เห็น
ใช้ใน ส่วนที่ 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) ความขัดแย้งหายไป องค์เทพจึงเป็น ตัวเลือกเสริม ได้ตามปกติ คนที่ไม่สะดวกใจข้ามขั้นตอนนี้ได้เลย แล้วได้ภาพที่มีแต่ฉาก + ลายมงคล
🔄 แทนที่ระบบ "ธีม" เดิม — ธีมเดลี่มู/ธีมองค์เทพ ไม่ใช่จุดแยกทางของ flow อีกต่อไป เพราะองค์เทพเป็นตัวเลือกอิสระแล้ว สไตล์จึงเป็นแค่ อารมณ์ของภาพ ไม่บังคับว่าจะมีองค์เทพหรือไม่
STEP 4 ให้เลือก 1 สไตล์ ยังไม่เคาะรายการสุดท้าย — ที่เสนอไว้ 6 แบบ:
| id | ชื่อ | อารมณ์ | หมายเหตุ |
|---|---|---|---|
dailymu |
โทนเดลี่มู | พาสเทลนุ่มตา ผสมสีมงคลกับขาว | IP ของเราเอง · ควรเป็นใบแรกและเป็นค่าเริ่มต้น |
thai |
ลายไทย / ยันต์ | ลายกนก ยันต์ ทองบนพื้นสีมงคล | |
animal |
สัตว์นำโชค | มังกร ปลาคาร์ฟ ช้าง กบคายเงิน | ต้องคุมไม่ให้สัตว์ผิดสัดส่วน |
chinese |
จีนมงคล | แดง-ทอง โคมไฟ เหรียญจีน | |
cozy |
cozy | ห้องอุ่น ๆ แสงเทียน ต้นไม้ | สไตล์ที่ปลอดภัยที่สุดสำหรับ AI |
cosmic |
จักรวาล | ดาว หมอก แสงออร่า |
ข้อกำหนด
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';
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 ครั้งในวันเดียว
// ภาพที่แอดมินอัปไว้หลังบ้าน (เฟสถัดไป ทีมทำเอง)
// ชุดงาน — แอดมินต้องสร้างชุดก่อน แล้วอัปรูปเข้าชุด · ลูกค้าไม่เห็นสิ่งนี้
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เป็น "คำอธิบายรูป" ไม่ใช่ "ตัวเลือกของลูกค้า" — ลูกค้าไม่เคยเลือกสี ระบบคำนวณสีจากวันเกิด × ด้านแล้วเอาไปหารูปที่ติดป้ายสีนั้นไว้ ถ้าไม่มีป้ายนี้ ระบบจะแยกไม่ออกว่ารูปไหนโทนอะไร แล้วจะแจกมั่วทั้งหมด
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;
}
colorPlanet ไม่ใช่ค่า hex — hex เปลี่ยนได้ตอน rebrand แต่ความหมายทางโหราศาสตร์ต้องคงที่birthDayOfWeek × aspects[0] ได้เสมอ การเก็บซ้ำเสี่ยงข้อมูลไม่ตรงกันเมื่อแก้วันเกิดภายหลังstatus: 'failed' ต้องไม่มีแถวใน CreditLedgerEntry — ถ้ามี แปลว่าโค้ดหักเครดิตผิดจังหวะ ใช้ข้อนี้เป็น assertion ได้เลยdeletedAt ใช้ระหว่างรอ job ลบไฟล์เท่านั้น ไม่ใช่ soft delete ถาวรการ์ด 2 ใบ:
| ต้องแสดงอะไรบ้าง | |
|---|---|
| 🌸 วอลเปเปอร์เดลี่มู | "ฟรี" · "1 ครั้ง/วัน" · สถานะสิทธิ์วันนี้ (เหลือ/ใช้แล้ว) |
| 🎨 Personal Wallpaper | "AI สร้างเฉพาะคุณ" · โควตา/เครดิตคงเหลือ · ราคาต่อครั้ง |
birthDayOfWeek == null เท่านั้น · แสดงครั้งเดียว แล้วบันทึกลงโปรไฟล์enterBirth() ออกจาก renderBirth()ไม่ใช่หน้าจอ แต่เป็นตรรกะที่ต้องเขียนให้ตรง:
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 เด็ดขาด ลูกค้าต้องได้ภาพเสมอ |
CalendarEntry ทันทีที่ระบบเลือกภาพเสร็จ (ดูข้อ 15 ข้อ 5 — ยังไม่เคาะว่าสิทธิ์ถูกใช้จังหวะไหน)วอลเปเปอร์เต็มจอ + เลขมงคลของลูกค้า วาดทับด้วยโค้ด → คนละภาพกันแม้ได้ไฟล์ฐานเดียวกัน
toggle เปิด-ปิดเลขมงคล พร้อมบรรทัดอธิบายว่าเลขนั้นคือเลขตำแหน่งอะไรของวันเกิดไหน (กันปัญหาเลข 4)
♡ เก็บเข้า "ที่ชอบ" · ⬇ โหลดฟรีไม่จำกัดครั้ง · ไม่มีลายน้ำ
ปุ่ม "ขอเปลี่ยนใหม่" — สัปดาห์ละ 1 ครั้ง ต้องบอกสิทธิ์คงเหลือบนปุ่ม
แถบชวนไป Personal Wallpaper — จุดขายที่ดีที่สุด เพราะเขาเพิ่งอินกับของที่ได้
⚠️ ต้องมีแถบบอกสถานะสิทธิ์บนสุดเสมอ — เพราะเมื่อใช้สิทธิ์แล้ว การกลับเข้าส่วนฟรีจะข้ามหน้าเลือกด้านมาที่หน้านี้ทันที ถ้าไม่บอก ลูกค้าจะคิดว่าฟีเจอร์เลือกด้านหายไป ข้อความต้องต่างกัน 3 กรณี:
| สถานการณ์ | ข้อความ |
|---|---|
| เพิ่งกดรับ | "นี่คือวอลเปเปอร์ของคุณสำหรับวันนี้ · สิทธิ์ใหม่รีเซ็ตเที่ยงคืน" |
| กลับเข้ามาดูซ้ำ | "วันนี้คุณรับไปแล้ว จึงไม่ได้ให้เลือกด้านใหม่ · รีเซ็ตเที่ยงคืน · ยังขอเปลี่ยนรูปได้อีก 1 ครั้งสัปดาห์นี้" |
| ขอเปลี่ยนครบแล้ว | "...สัปดาห์นี้ใช้สิทธิ์ขอเปลี่ยนครบแล้ว" |
| กฎ | ค่า |
|---|---|
| ขึ้นเฉพาะวันที่เข้ามารับจริง | ✅ วันที่ไม่ได้เข้ามาต้องว่าง |
| เติมย้อนหลัง | ❌ ไม่ได้เด็ดขาด |
| รับแล้วไม่ได้โหลด | ✅ ก็ยังขึ้น (บันทึกการรับ ไม่ใช่การโหลด) |
| ลบแล้วกดใหม่ | ❌ ว่างถาวร |
| หน้าตาช่องว่าง | เงียบ ๆ ไม่ตำหนิ — นับสิ่งที่เขาทำ อย่านับสิ่งที่ไม่ได้ทำ |
ห้ามใส่ streak counter หรือข้อความทวงถามในช่องว่าง — ผิดกับอารมณ์ของผลิตภัณฑ์
เหมือนข้อ 8.1 ทุกประการ (การ์ด 8 ใบ · 1–2 ด้าน · ด้านแรกกำหนดสีและเลข)
หน้าที่สำคัญที่สุดของทั้งแอป ต้องแสดง 4 อย่างครบ:
light: true!kalakiniAcknowledged = truedeity.for ∩ aspectsคลังเดียวรวมของทั้งสองส่วน แยกด้วยแท็บและตัวกรอง ไม่ใช่แยกเป็นคนละคลัง
♡ เป็นปุ่มคัด ไม่ใช่ปุ่มเก็บ เพราะทุกชิ้นถูกเก็บอัตโนมัติอยู่แล้ว · สลับได้ตลอด ไม่กระทบไฟล์
เปิดดูชิ้นงานแล้วทำอะไรได้บ้าง:
| ปุ่ม | กฎ |
|---|---|
| ⬇ โหลดซ้ำ | ฟรีเสมอ ไม่หักเครดิต ไม่ว่าจะมาจากส่วนไหน — ของส่วน AI จ่ายไปแล้วตอนเจน เก็บอีกรอบ = เก็บเงินสองรอบกับของชิ้นเดียว |
| ♡ ชอบ/เลิกชอบ | สลับได้ตลอด |
| ✨ สร้างแบบนี้อีก | โหลดสูตรเดิมไปส่วน AI · เสียเครดิต ต้องบอกราคาก่อนกด |
| 🗑 ลบ | ต้องยืนยัน · ของส่วนฟรี → ช่องปฏิทินว่างถาวร |
ปุ่ม "✨ สร้างแบบนี้อีก" คือจุดขายที่ถูกมองข้ามบ่อย — คนที่กลับมาดูของเก่าคือคนที่ชอบผลงานนั้น ให้เขาต่อยอดจากสูตรเดิมได้เลย เป็น conversion ที่ต้นทุนต่ำที่สุด
ที่เก็บ: ผูกกับบัญชีผู้ใช้ ไม่ใช่เครื่อง · ไม่มีวันหมดอายุ · ไม่จำกัดจำนวน (เพดานกันบอท ~500) ลดแพลน / แพลนหมด → ห้ามลบของเก่า แพลนคุมแค่การเจนใหม่
🔄 เปลี่ยนจากข้อสรุปเดิม — เดิมเขียนว่า "ไม่ใช้ AI generate เลย" ตอนนี้ ใช้ AI เฉพาะชั้นฉาก ตามข้อสรุประดับโปรเจกต์ · องค์เทพยังมาจากคลังเหมือนเดิม
| ชั้น | ใครทำ | เหตุผล |
|---|---|---|
| 1. ฉาก / พื้นหลัง | AI | ตรงนี้คือคุณค่าที่ลูกค้าจ่าย — ภาพไม่ซ้ำใคร |
| 2. องค์เทพ | คลังภาพที่ตรวจแล้ว | AI วาดสรีระเทพเพี้ยน (แขนเกิน มือบิด พระพักตร์ผิดรูป) = ความไม่เคารพและเสี่ยงดราม่าหนักในตลาดสายมู |
| 3. ลายมงคล / ยันต์ | SVG parametric | ระบายด้วยสีที่ derive จากสีมงคล · เปลี่ยนตาม seed ได้โดยไม่ต้องเพิ่ม asset |
| 4. ตัวหนังสือไทย + คาถา | โค้ดวาด | AI เขียนภาษาไทยออกมาเป็นตัวมั่วเกือบ 100% |
| 5. เลขมงคล | โค้ดวาด | ต้องคำนวณจากทักษา และต้องเปิด-ปิดได้โดยไม่เจนใหม่ |
ส่วนที่ 1 (ฟรี) ใช้ชั้น 1 จากคลังของแอดมินแทน AI — ชั้น 4–5 ยังวาดทับเหมือนกัน
คำขอ: { 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
birthDayOfWeek × aspects[0] เท่านั้น ห้ามรับค่าเลขจาก client (กันการยัดเลขกาลกิณีเข้ามา)colorPlanet เป็นสีกาลกิณีโดยไม่มี kalakiniAcknowledged — ถ้ามาจาก API ตรงต้องตรวจซ้ำที่ serverlight flag เพื่อสลับสีตัวอักษร — ดาวจันทร์พื้นครีม ถ้าใช้ตัวอักษรขาวจะอ่านไม่ออกmix-blend-mode: soft-light ทำให้ลายหายไปบนพื้นครีม — ต้องใช้ blend ปกติเมื่อ light: trueใช้ทั้งสองส่วน — ส่วนฟรีก็ประกอบองค์เทพจากคลังเดียวกัน
| หัวข้อ | ข้อกำหนด |
|---|---|
| จำนวน | 15 องค์ตามตารางข้อ 4 |
| ไฟล์ | PNG พื้นหลังโปร่งใส · ด้านสั้นไม่น้อยกว่า 2000px · แนวตั้ง |
| สไตล์ | ต้องเป็นชุดเดียวกันทั้ง 15 องค์ (เส้น สัดส่วน แสงเงา โทน) ไม่ใช่เก็บจากหลายที่ |
| สี | วาดในโทนกลาง/ทอง ให้ประกอบเข้ากับพื้นหลัง 8 สี ได้ทุกสี — ทดสอบกับดาวจันทร์ (พื้นอ่อน) และดาวเสาร์ (พื้นดำ) เป็นเคสยากสองขั้ว |
| ความเหมาะสม | สรีระและเครื่องทรงต้องถูกตามคติของแต่ละองค์ (จำนวนกร สิ่งที่ถือ พาหนะ) · ห้ามครอปตัดพระเศียรหรือพระกร · ห้ามใช้ท่าที่ดูไม่เคารพ |
| ลิขสิทธิ์ | buyout เชิงพาณิชย์ ระบุสิทธิ์ใช้ในแอปและสื่อโฆษณา แก้ไข/ย่อขยาย/ประกอบภาพได้ |
| ตรวจรับ | ให้ผู้รู้หรือที่ปรึกษาด้านความเชื่อตรวจก่อนขึ้นระบบ พร้อมกับการตรวจคาถา |
ห้ามใช้: ภาพจาก Google Images, Pinterest, สื่อโซเชียล หรือภาพถ่ายเทวรูปจากวัด/ศาลที่ไม่ได้ขออนุญาต — ใช้เชิงพาณิชย์ไม่ได้
ลายมงคลไม่ต้องจ้างวาด — เป็น SVG parametric ที่ระบบวาดเองจากสีของลูกค้า (ลายกลีบดอก · วงออร่า · ยันต์สี่เหลี่ยม · ประกาย · ตรามงคล) ถ้าอยากได้ลายพิเศษเพิ่ม ให้สั่งเป็น SVG ที่รับพารามิเตอร์สีได้
| # | ชั้น | รายละเอียด |
|---|---|---|
| 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 | คนสุ่มตรวจช่วงเปิดตัว | ดูผลจริงทุกวัน โดยเฉพาะภาพที่มีองค์เทพ |
🔄 ข้อสรุปนี้เปลี่ยนจากรอบแรก — เดิมสรุปว่าไม่ต้องทำ history เพราะสร้างซ้ำได้ฟรีจากสูตร แต่พอส่วนที่ 2 ใช้ AI แล้ว ภาพสร้างซ้ำให้เหมือนเดิมไม่ได้ และลูกค้าจ่ายเงินไปแล้ว ถ้าไม่เก็บไฟล์ = ของที่ซื้อไปหายถาวร
| ส่วนที่ 1 — ปฏิทินของฉัน | ส่วนที่ 2 — คลังภาพ | |
|---|---|---|
| เก็บอะไร | วันที่ · id ภาพ · ด้าน · เปิด/ปิดเลข | ไฟล์ภาพจริง + สูตร + เครดิตที่หัก |
| ทำไม | ไดอารี่ สร้างนิสัยกลับมา | จ่ายเงินแล้ว + AI สร้างซ้ำไม่ได้ |
| เก็บอัตโนมัติ | ✅ | ✅ |
| ความจำเป็น | มีก็ดี | บังคับ |
| ขนาด | ~40 ไบต์/รายการ | ~400–500 KB/ภาพ → 10,000 ภาพ ≈ 5 GB |
การเก็บว่าลูกค้าบูชาองค์เทพองค์ไหน และกังวลเรื่องอะไร = ข้อมูลส่วนบุคคลอ่อนไหวตามมาตรา 26
(ความเชื่อทางศาสนา และในกรณีการ์ด health คือข้อมูลสุขภาพ)
| ต้องมี | รายละเอียด |
|---|---|
| ขอความยินยอมแยก | ไม่รวมกับ consent ทั่วไปของแอป |
| ลบทีละชิ้น | ปุ่ม 🗑 ในคลัง (ข้อ 10) |
| ลบทั้งหมด | ปุ่มในหน้าตั้งค่า ลบทั้งปฏิทิน คลัง และ prompt ที่เคยพิมพ์ |
| ลบจริง | ลบไฟล์ออกจาก storage ด้วย ไม่ใช่แค่ซ่อนแถว |
| ไม่ส่งต่อ | ห้ามส่งข้อมูลองค์เทพ/ด้านให้ระบบโฆษณาหรือ analytics บุคคลที่สาม |
| prompt ที่ลูกค้าพิมพ์ | ถือเป็นข้อมูลส่วนบุคคลด้วย — ต้องลบได้และห้ามเอาไป fine-tune โดยไม่ขอ |
protect ยืมสีเดช — รับได้ หรืออยากตัดการ์ดนี้ออกให้เหลือ 7 ด้านตรงตามทักษาเป๊ะ ๆ⚠️ ตารางนี้กันไม่ให้ย้อนกลับไปทำของที่ตัดทิ้งไปแล้ว ข้อสรุปเปลี่ยนหลายรอบระหว่างทาง
| เคยตกลงว่า | ตอนนี้ | เพราะ |
|---|---|---|
| ไม่ต้องทำ history | ✅ ทำ (2 แบบ) | AI สร้างซ้ำไม่ได้ + ลูกค้าจ่ายเงินแล้ว |
| ใส่ลายน้ำกันแคปหน้าจอ | ❌ ไม่ใส่ทั้งสองส่วน | ของฟรีไม่ต้องกัน · ลายน้ำในของฟรีจะทำลาย hook รายวัน · ของที่จ่ายแล้วต้องสะอาด |
ปุ่มสุ่ม [‹][🎲][›] |
❌ ไม่มีปุ่มสุ่ม | ส่วนฟรีให้สิทธิ์วันละ 1 ครั้ง · ส่วน AI แต่ละครั้งเสียเครดิตอยู่แล้ว |
| เสี่ยงทาย / ไพ่คว่ำ 3 ใบ | ❌ ยกเลิก ไม่มีกลไกนี้ | เป็นสิ่งที่คิดเพิ่มเกินจากที่ตกลง — ส่วนฟรีมีขั้นตอนเดียวคือเลือกด้าน |
| ปุ่ม "เก็บไว้ก่อน" | 🔄 ♡ ที่ชอบ | เก็บอัตโนมัติหมดแล้ว ♡ จึงเป็นปุ่มคัด |
| โชว์ตัวเลือก 4–6 อันให้เลือก | ❌ ยกเลิก | ปล่อยให้ไล่ดูคลังหมดภายในไม่กี่วัน |
| รีเซ็ตโควตา 06:00 | 🔄 เที่ยงคืน | ใช้เส้นแบ่งวันเดียวกับปฏิทิน |
| flow 4 ขั้นตอนเดิม | 🔄 ย้ายไปเป็นส่วนที่ 2 (5 ขั้นตอน) | ส่วนฟรีเหลือขั้นตอนเดียว หลังบ้านคัดภาพไว้ให้แล้ว |
| ธีมเดลี่มู / ธีมองค์เทพ | 🔄 กลายเป็น "สไตล์" ในส่วนที่ 2 | องค์เทพเป็นตัวเลือกอิสระแล้ว ไม่ใช่จุดแยกทางของ flow |
| ถอดตัวเลือก "ไม่ระบุองค์เทพ" | 🔄 กลับมาแล้ว | ความขัดแย้งกับระบบธีมหายไปพร้อมกับธีม |
| ไม่ใช้ AI เลย | 🔄 ใช้เฉพาะชั้นฉาก | ข้อสรุประดับโปรเจกต์ · องค์เทพยังมาจากคลัง |
| เซฟไม่จำกัด ไม่มี paywall | 🔄 มีโควตาทั้งสองส่วน | ส่วนฟรี 1 ครั้ง/วัน · ส่วน AI แพลน+เครดิต |
| ดักที่การเซฟ/โหลด | 🔄 ดักที่การเจน | ต้นทุนอยู่ที่ค่า token ไม่ใช่ที่การโหลดไฟล์ · โหลดซ้ำต้องฟรีเสมอ |
ของที่ทำไปแล้วไม่เสียเปล่า — เครื่องคำนวณทักษาปกรณ์ · ตารางสีและเลขมงคล · การ์ดเลือกด้าน 8 ใบ · ตาราง mapping องค์เทพ ใช้ต่อได้ทั้งสองส่วน
| วันเกิด | ด้าน (ตำแหน่ง) | สีที่ต้องได้ | เลขที่ต้องได้ | กาลกิณี (สี / เลข) |
|---|---|---|---|---|
| เสาร์ | เงินทอง (มูละ) | แดงสด | 1 | เขียว / 4 |
| ศุกร์ | ความรัก (ศรี) | ชมพู/แดงแก่ | 3 | ม่วง/ทอง/เทา / 8 |
| พฤหัสบดี | การงาน (เดช) | ฟ้า/น้ำเงิน | 6 | ดำ/ม่วงเข้ม / 7 |
จุดที่พลาดง่าย: ศรีของวันศุกร์คือดาวอังคาร (ชมพู) ไม่ใช่ดาวอาทิตย์ (แดงสด) — ต้องเดินตามสูตร ห้ามเดา
ตรรกะร่วม
ส่วนที่ 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. แพลนหมดอายุ — ของเก่าในคลังต้องยังอยู่ครบ