כפתור "לייק" מגיב מיד, הלב מתמלא, המונה עולה – עוד לפני שהשרת בכלל ענה. זו לא אשליית מהירות כמו במאמר על מיקרו-אינטראקציות, זה משהו רחוק יותר: הממשק מציג מצב שעדיין לא קיים, ומניח שהוא עומד להתקיים בעוד רגע. בודק איך בונים את זה בבטחה – עם נסיגה אמיתית מהשקר כשההנחה לא מתממשת, ולמה setState ידני עם catch הוא גרסה גרועה יותר של מה ש-useOptimistic נותן בחינם.
מחלקת עזר .mt-4 מפסידה לכלל .card .card__header .card__title, למרות שהיא לכאורה אמורה לנצח, כי היא נוספה מאוחר יותר. זו לא תקלה – זו ספציפיות שעושה בדיוק את מה שהיא תוכננה לעשות. @layer מציג ציר חלוקה חדש לגמרי להכרעת קונפליקטים, שפועל לפני הספציפיות, לא ביחד איתה – ויש לו מלכודת אחת לא אינטואיטיבית עד כדי כך, שאפילו חלק מהתיעוד ברשת טועה בה.
'use server' נראה כמו סוכר תחבירי מעל fetch ל-API route – ובדיוק בגלל זה רוב היישומים מתייחסים אליו כאל קריאת פונקציה רגילה. זו טעות עם השלכות קונקרטיות: כל פונקציה שמסומנת ב-'use server' הופכת לנקודת קצה ציבורית ברשת, וטופס שנבנה על המנגנון הזה עובד אפילו לפני שה-JavaScript מספיק להיטען. בודק מה באמת קורה מתחת להוראה הזו, והיכן טמונות המלכודות שלא נראות בתיעוד ממבט ראשון.
שדה בטופס אמור להאיר באדום כשה-input בפנים לא תקין. דבר פשוט – רק ש-CSS במשך 25 שנה לא ידע לשאול אלמנט מה קורה בתוכו, רק ההפך. בודק איך :has() הופך את הכיוון הזה, במה הוא שונה מקומבינטורים רגילים, והיכן העוצמה החדשה הזו באמת עולה במחיר של ביצועים.
אותה כרטיסיית מוצר נראית מצוין ברשת אבל נשברת בסרגל צד צר – למרות media query שנבחר בקפידה. הבעיה לא בקוד שלכם, אלא בשאלה שה-media query בכלל שואל: על רוחב המסך, לא על המקום שהרכיב באמת קיבל. בודק איך container queries מעבירים את השאלה הזו למקום שבו היא הייתה צריכה להישאל מלכתחילה, ומה קורה מתחת למכסה המנוע כשאלמנט הופך ל'מיכל שאילתה'.
HTML תקין הוא רק נקודת ההתחלה. גלו איך עץ הנגישות עובד בפועל, מדוע ARIA לעיתים קרובות עושה יותר נזק מתועלת ממה שנדמה, ובנו איתי אקורדיון אמיתי, אזור חי (live region) וניהול פוקוס ב-Next.js.