¿Qué hace portfolio-kup?
สร้างโปรไฟล์ของผู้ใช้จากหลักฐานจริง แล้วทำเป็นหน้าเว็บหน้าเดียวสองภาษา (ไทย/EN) ตอบผู้ใช้เป็นภาษาไทย ศัพท์เทคนิคคงภาษาอังกฤษ
ขั้นตอน
ทำตามลำดับ · ทุกคำถามที่ให้ผู้ใช้ตัดสินใช้ AskUserQuestion · เรื่องที่มีข้อมูลเยอะให้ สรุปในแชทก่อน แล้วค่อยใส่ในหน้า
1. เก็บข้อมูล
- ถามว่ามีเครื่องอื่นที่ใช้ Claude Code ไหม (ssh
user@host) · ถ้าผู้ใช้ให้มาในคำขอแล้วไม่ต้องถาม - รันสคริปต์ทุกเครื่อง (ส่งออกแค่ตัวเลข ไม่มีข้อความ prompt หรือ key):
S=~/.claude/skills/portfolio-kup/scripts; D=<scratchpad>/pk; mkdir -p $D python3 $S/collect.py > $D/local.json ssh -o BatchMode=yes user@host python3 - < $S/collect.py > $D/host1.json python3 $S/merge.py $D/*.json > $D/metrics.json # ตารางสรุปออก stderr - อ่านเนื้อหา prompt เองเพื่อประเมินเชิงคุณภาพ (
~/.claude/history.jsonlfielddisplay,project) · สุ่มอ่านกระจายทุกโปรเจกต์/ทุกเดือน · ห้ามคัดลอก key/token/รหัสผ่านที่เจอลงคำตอบหรือหน้าเว็บ ให้นับจำนวนอย่างเดียว
ข้อจำกัดที่ต้องบอกผู้ใช้:
history.jsonlนับแค่ตอนผู้ใช้พิมพ์ · ช่วงที่ปล่อย agent ทำงานยาวไม่ถูกนับ- transcript (
~/.claude/projects/**/*.jsonl) ถูกลบเมื่อเกินcleanupPeriodDays(ค่าเริ่มต้น 30 วัน) · token และเวลาที่ AI ทำงานจึงมีแค่ช่วงท้าย - เดือนที่ prompt < 100 (
enough_data: false) ตัวเลขแกว่ง ห้ามใช้เทียบ - การนับพฤติกรรมเป็นการจับคำ ใช้บอกแนวโน้ม ไม่ใช่การวัดแม่นยำ
2. ประเมิน (ตอบในแชท)
- อาชีพที่น่าจะเป็น · ระดับ (Junior / Mid / Senior) · จุดแข็ง จุดอ่อน พร้อมหลักฐาน
- ตรงไปตรงมา ไม่ชมเกินจริง · แยก "ส่งงานได้เพราะคุม AI เก่ง" ออกจาก "เข้าใจพื้นฐานเอง"
- ถ้าเจอ key/secret ในประวัติ → เตือนให้ rotate ทันที (บอกชนิด ไม่บอกค่า)
3. แบบทดสอบ (ถ้าผู้ใช้อยากรู้ว่าอ่อนจริงไหม)
- 2 รอบ รอบละ 4 ข้อผ่าน
AskUserQuestion· โจทย์เป็นสถานการณ์จากงานจริงของผู้ใช้ (stack ที่เขาใช้) - ผสม 2 แบบ: เห็นอาการ → บอกสาเหตุ กับ อธิบายกลไกข้างใต้ · ตัวเลือกยาวพอกัน ไม่ใบ้คำตอบ
- บอกกติกา: ห้ามถาม AI · ไม่รู้ให้ตอบ "ไม่รู้"
- เฉลยทุกข้อพร้อมเหตุผลสั้น ๆ แล้วสรุปเป็นรูปแบบ (เช่น อาการ 4/4 กลไก 0/4)
4. เงินเดือนและสายงาน
- ค้น
WebSearchแบบextendedหลายคำค้นพร้อมกัน (TH + EN, ปีปัจจุบัน) · ใส่ Sources ทุกครั้ง - แยก AI/ML Engineer (ทำโมเดล) ออกจาก AI Application Engineer (เอา AI ใช้ในแอป) · เรทต่างกันมาก
- คิดให้กว้างก่อน: ไล่ 8–10 อาชีพที่เข้ากับ ทักษะ + นิสัย + การเติบโต (ไม่ใช่แค่สายเทคนิค เช่น consultant, pre-sales, educator, EdTech product, freelance) · แล้ว ตัดให้เหลือ 3 สายที่เหมาะที่สุด + อาชีพรองไม่เกิน 5 ตัวเป็นป้าย · บอกอาชีพที่ "ยังไม่เหมาะ" ในแชทได้ แต่ไม่ต้องใส่ในหน้า
- ต้องมี คำแนะนำเดียวที่ชัด ว่าควรไปทางไหน (อิงเป้าหมายจากการสัมภาษณ์) พร้อมแผน 3 ช่วง
- ในหน้าเว็บแสดงเงินเดือนเป็น
*เป็นค่าเริ่มต้น ใส่ตัวเลขเมื่อผู้ใช้ขอเท่านั้น
5. สัมภาษณ์
เรียก skill grilling (หรือ grill-me) ถามเป็นรอบ ๆ ผ่าน AskUserQuestion:
เหตุผลที่อยากไปสายนั้น · ประสบการณ์กับคน/ลูกค้านอกแชท · กรอบเวลา · โปรเจกต์ที่มี (ของตัวเองหรือบริษัท) ·
เวลาว่างต่อสัปดาห์ · นิยามความสำเร็จ · เกณฑ์ไปต่อ/หยุด
- คำตอบที่ขัดกันเองหรือไม่ตอบคำถาม → ถามซ้ำ
- ชี้รูปแบบที่เห็นตรง ๆ (เช่น ไม่บังคับให้เลือกจะตอบ "รับหมด") · ไม่เห็นด้วยตรงไหนให้บอก แต่ให้ผู้ใช้ตัดสิน
- จบด้วยสรุปความเข้าใจร่วม แล้วรอผู้ใช้ยืนยันก่อนลงหน้า
6. ทำหน้าเว็บ
- คัดลอก
templates/onepage.htmlไป scratchpad แล้วแก้ เฉพาะ JSON ใน<script id="profile">· ทุกข้อความเป็น{"th":…,"en":…} Artifact→quickstart(intentother) ครั้งแรก แล้ว publish · iconprofile- แก้ตามคำติชมด้วย Edit + publish ไฟล์เดิม (URL เดิม)
กติกาการออกแบบ (มาจากคำติชมของผู้ใช้จริง · ห้ามละเมิด)
| เรื่อง | ทำ | ไม่ทำ |
|---|---|---|
| ผังหน้า | คอลัมน์เดียวอ่านบนลงล่าง · ตัวตน → 01 ทักษะ → 02 วิธีทำงาน → 03 การเติบโต → 04 ทางไปต่อ · กว้างตามจอได้ถึง 1600px | sidebar ด้านข้าง · แผงสีเข้มต่างจากแผงอื่น · fix ความกว้างแคบ |
| ทางไปต่อ (04) | กล่อง "แนะนำ" 1 คำแนะนำ + เหตุผล 1 ประโยค + แผน 3 ช่วง · การ์ด 3 สาย มีแค่ ความพร้อม / เหมาะเพราะ / ต้องเติม · ป้าย ★ แนะนำ มุมขวาบนการ์ดที่เลือก · "ทำได้เช่นกัน" เป็นป้ายแถวเดียว · "ทำอะไรก่อน" ไม่เกิน 4 ข้อ | ตารางอาชีพยาว · ป้ายขั้นตอน/ก้าวแรก/เงินเดือนในการ์ด · ข้อมูลซ้ำกับแผน 3 ช่วง (ผู้ใช้บอกว่า "รก") |
| สี | ทุกแผงใช้สีชุดเดียว (พื้นขาว ขอบบาง) · ฟ้า = soft/ดีขึ้น · ทอง = hard/เป้า · แดง = ต้องระวัง/ตอนนี้ | หลายโทนปนกัน |
| คำเตือนที่มาข้อมูล | กล่องบนสุด บอกแหล่งข้อมูลทุกแหล่ง + สิ่งที่ไม่ได้นับ + "AI ประเมิน ไม่ใช่การรับรอง" | ซ่อนที่มาไว้ท้ายหน้า |
| ภาษา | ไทยเป็นค่าเริ่มต้น + ปุ่ม ไทย/EN · ใช้ they/them หรือเลี่ยงสรรพนามในภาษาอังกฤษ | เดาเพศจากชื่อ |
| คนนอกต้องอ่านเข้าใจ | ภาษาธรรมดา · เทียบแบบ "ครึ่งหนึ่ง" "เท่าตัว" "1 ใน 3" | ชื่อโปรเจกต์ภายใน · เลขข้อสัมภาษณ์ (Q20) · ตัวเลขดิบไร้หน่วย ("43 ครั้ง", จำนวน prompt) · ศัพท์ล้วนอย่าง "502 Traefik" |
| ทักษะ | radar + ป้าย 3 ระดับ (เด่น/กลาง/ต้องเติม) อยู่ในส่วนทักษะ · Soft กับ Hard วางคู่กัน รายการมีเลข 01– และป้ายหลักฐาน · Hard ใส่ชื่อเครื่องมือ | หลอดพลัง/แถบระดับข้างนิสัย (ผู้ใช้อ่านไม่ออกว่าเต็มแปลว่าอะไร) · การ์ดสูงไม่เท่ากัน |
| นิสัย | ตั้งชื่อเป็น soft skill ที่ HR ใช้ · มี persona หนึ่งชื่อ + ประโยคเดียว · สไตล์เป็นแถบสองขั้ว · "นิสัยที่ต้องระวัง" แยกกล่อง | ใส่ผลแบบทดสอบเป็นแผงในหน้า (ผู้ใช้ให้เอาออก) |
| เวลาทำงาน | กราฟชั่วโมง เริ่ม 06:00 · วันในสัปดาห์เป็น % ของงานทั้งหมด พร้อมบรรทัดอธิบายว่า % คืออะไร | แกนตัวเลขจำนวนครั้ง |
| การเติบโต | บันได กดได้ทีละขั้น · ความสูง = ระดับความสามารถ (มีชื่อระดับบนแท่ง) · ป้าย "▼ ตอนนี้อยู่ขั้นนี้" · แต่ละขั้น: ทำได้ / ยังพลาด / จุดเปลี่ยน · "เทียบกับขั้นก่อน" เฉพาะเดือนที่ข้อมูลพอ · token เฉพาะขั้นที่มี transcript · ขั้นสุดท้ายเป็นเป้า (เส้นประทอง) | กราฟจำนวน prompt ต่อเดือน (ผู้ใช้อ่านไม่ออก) · ยัดรายละเอียดทุกขั้นพร้อมกัน |
| เงินเดือน | * + คำอธิบายในกล่องคำเตือนและท้ายหน้า | ตัวเลขเงินเดือนโดยไม่ได้ขอ |
| ความเป็นส่วนตัว | ไม่มี key, IP, hostname, อีเมล · ตัวเลขเชิงลบเขียนแบบไม่ประจาน ("เคยใส่ key ในที่ที่ไม่ควร") | publish/push หน้าโปรไฟล์จริงขึ้นที่สาธารณะโดยไม่ถาม |
ไฟล์ใน skill
scripts/collect.py· เก็บตัวเลขของเครื่องเดียว (prompt รายเดือน, พฤติกรรม, ชั่วโมง/วัน, token, timestamps) · ไม่ส่งข้อความออกscripts/merge.py· รวมหลายเครื่อง →metrics.json(รายเดือน,enough_data, % ชั่วโมงเริ่ม 06:00, % วัน, ชั่วโมงลงมือเอง vs ชั่วโมงที่ AI ทำงาน, token)templates/onepage.html· หน้าเว็บ render จาก JSON ก้อนเดียว · ข้อมูลในไฟล์เป็นตัวอย่างสมมติ
เทียบ metrics → เนื้อหาในหน้า
| metrics.json | ใช้ตรงไหน |
|---|---|
hours_pct_from_6am[].pct | hoursPctFrom6am (24 ค่า เรียงจาก 06:00) |
weekday_pct | weekdayPct |
late_night_pct | hoursNote เช่น "เกือบ 1 ใน 3 ของงานเกิดหลัง 3 ทุ่ม" |
monthly[*] ที่ enough_data | stages[i].compare.items (เทียบกับขั้นก่อน) · stages[i].peak/hot เดือนที่หนักที่สุด |
tokens[*] | stages[i].tokens (เฉพาะเดือนที่มี) · บอกสัดส่วน cache read |
hands_on_hours / ai_working_hours | สรุปในแชท "ลงมือเอง ~X ชม./สัปดาห์ · AI ทำงานให้ ~Y ชม./สัปดาห์" |
secrets_pasted > 0 | เตือนในแชท + "นิสัยที่ต้องระวัง" + ข้อแรกของ acts |
JSON ส่วน 04 ใน template
rec·title,reason,phases[](when,t,d) แนะนำ 3 ช่วงpaths[]· 3 สาย:tag,title,ready(0–100),fits,gap,pick: trueให้สายที่แนะนำ,gold: trueให้สายทำเอง/founderalso[]· ชื่ออาชีพรอง ≤5 (ข้อความล้วน)acts[]· ≤4 ข้อ (t,d)