ความจริง: ไม่มีอะไรช้าจริงสักนิดเดียว
เว็บนี้คือ performance art ฝั่ง client ล้วนๆ ไฟล์ทั้งหมดที่โหลดจริง (HTML/CSS/JS) มีขนาดเล็กมาก โหลดเสร็จในเวลาไม่ถึงวินาทีเหมือนเว็บ static ทั่วไป — ไม่มีการหน่วง network, ไม่มีการเผา bandwidth ของใครจริงๆ ทุก "ความช้า" ที่คุณเจอคือ setTimeout/setInterval ปลอมๆ ที่รันอยู่ในเบราว์เซอร์คุณเองทั้งหมด
เบื้องหลังฉากทั้ง 7
- ฉากที่ 1 (เชื่อมต่อ): ข้อความ dial-up ทยอยพิมพ์ทีละตัวอักษรด้วยตัวนับเวลาปลอม ไม่มีการต่อ modem จริง (ใครยังมี modem อยู่บ้างไหม)
- ฉากที่ 2 (progress bar): เลขเปอร์เซ็นต์ทั้งหมดมาจาก keyframe ที่เขียนไว้ล่วงหน้าในโค้ด (
lib/script.ts) วิ่งขึ้นไป 87% แล้วถอยกลับ 12% แบบตั้งใจ — โกหกแบบมีสคริปต์ - ฉากที่ 3 (ทิวทัศน์ interlaced): เป็น SVG วาดเองล้วนๆ (ภูเขา ทุ่งนา ต้นมะพร้าว พระอาทิตย์) เปิดเผยทีละแถวด้วยลำดับ interlace 4-pass แบบ GIF ยุค 90 — ไม่มีรูปถ่ายจริงถูกดาวน์โหลดเลย
- ฉากที่ 4 (โหลดฟอนต์): ตัวอักษร ▯▯▯ (tofu) ถูกแทนที่ด้วยคำจริงทีละคำ ฟอนต์จริงโหลดเสร็จตั้งแต่ต้นแล้ว นี่คือการแกล้งช้าล้วนๆ
- ฉากที่ 5 (โฆษณา): ล้อ UX โฆษณาที่ปิดไม่ได้ในยุคนี้ — และเพื่อความตลกซ้อนตลก โฆษณานี้โปรโมตโปรเจกต์อื่นในคลัง Armory ของเราเอง (ใช่ เราโฆษณาให้ตัวเอง)
- ฉากที่ 6 (99% ค้าง): ค้างไว้ 30 วินาทีตรงๆ ตามสคริปต์ มี easter egg ลับ: แตะจอ 10 ครั้งตอนค้างเพื่อข้าม (แต่ certificate จะถูกประทับตรา "ขี้โกง" ให้เห็นตลอดไป)
- ฉากที่ 7 (ปลายทาง): ประโยคเดียว + ใบประกาศความอดทนที่วาดด้วย
<canvas>แล้ว export เป็น PNG ให้ดาวน์โหลด — ข้อความและเวลาในใบประกาศคำนวณจากlib/cert.tsทั้งหมด
สถิติ "local" ที่หน้าตรงๆ
แอปนี้ไม่มี backend เก็บสถิติใครทั้งนั้น สถิติที่เห็น (จำนวนครั้งที่ถึง certificate, เวลารอสะสม) เก็บด้วย localStorage ในเครื่องคุณเองล้วนๆ — เลยพูดตรงๆ ว่า "จากผู้ใช้ทั้งหมด 1 คนบนเครื่องนี้" เพราะมันคือความจริง 100% สิ่งเดียวที่นับ "คนอื่น" ได้จริงคือ event ที่ยิงไป Umami analytics ตอนถึง certificate (นับ pageview/event รวมได้ แต่ไม่ผูกกับตัวตนใคร)
รีเฟรชกลางทาง?
มีการตรวจจับด้วย sessionStorage — ถ้าคุณรีเฟรชระหว่างทาง เว็บจะรู้ (เพราะ flag ยังอยู่ใน session) แล้วเริ่มฉากที่ 1 ใหม่พร้อมข้อความแซวที่รุนแรงขึ้นเรื่อยๆ ตามจำนวนครั้งที่รีเฟรช
แรงบันดาลใจ
มาจากความย้อนแย้งง่ายๆ: ทุกปีอินเทอร์เน็ตเร็วขึ้น เว็บไซต์แข่งกันลด Largest Contentful Paint ให้เหลือ เศษเสี้ยววินาที แต่ในความเป็นจริง experience ของเว็บจำนวนมากก็ยังรู้สึกช้าอยู่ดี (ads, dark patterns, loading spinner ที่ค้าง) — เว็บนี้เลยขอเอาความหงุดหงิดนั้นมาทำเป็นเรื่องตลก แทนที่จะบ่น ก็จำลองมันขึ้นมาแบบ "ควบคุมได้" ให้คุณหัวเราะแทนการด่า
ทำไมต้อง TDD แค่บางไฟล์
lib/script.ts (state machine 7 ฉาก, การนับ tap ข้าม, ตัวนับรีเฟรช) และ lib/cert.ts (จัดข้อความ+เวลาในใบประกาศ) คือ "ตรรกะ" ที่ผิดพลาดแล้วพังทั้งประสบการณ์ได้ เลยเทสต์ไว้แน่นๆ ส่วนการ "แสดงผลละคร" ของแต่ละฉาก (SVG, canvas, ข้อความตลก) เป็นงานสร้างสรรค์ล้วนๆ ที่ไม่มี "ถูก/ผิด" แบบทดสอบอัตโนมัติได้ เลยปล่อยให้เป็นโค้ด manual ตามที่ตาเห็น