Claude Code
בניתי את האתר הזה עם AI. הנה מה שאף אחד לא מספר לכם
אתר שלם שנבנה בשיחה עם סוכן, כולל כל המקומות שבהם זה כמעט התפוצץ. עם מספרים, לא עם התלהבות.
האתר שאתם קוראים בו את זה הוא שולחן עבודה של Windows 95. אפשר לגרור בו אייקונים, לפתוח חלונות, לשחק שולה מוקשים ולצייר בצייר שמחובר למודל תמונות. הוא נבנה כמעט כולו בשיחה עם סוכן AI.

זה החלק שכולם מספרים. החלק שאף אחד לא מספר הוא שבדרך היו ארבעה באגים שהיו יכולים לעלות לי כסף אמיתי או מבקרים אמיתיים, וכל אחד מהם היה בלתי נראה. לא קרסו, לא הופיעה שגיאה אדומה. הכל נראה עובד.
זה המדריך שהייתי רוצה לקרוא לפני שהתחלתי.
מה יושב מתחת למכסה המנוע
לפני הסיפורים, ההרכב. אני מפרט אותו כי הבחירות האלה הן שקבעו כמה זה עולה לי בחודש, וזה בערך אפס.
| שכבה | מה בחרתי | כמה זה עולה |
|---|---|---|
| דומיין | Cloudflare Registrar | $10.46 לשנה, מחיר קבוע |
| הרצה | Cloudflare Workers | חינם בהיקפים שלי |
| מסד נתונים | Cloudflare D1 (SQLite) | חינם בהיקפים שלי |
| מיילים | Resend | חינם עד 3,000 בחודש |
| תמונות AI | Gemini Flash Image | $0.039 לתמונה |
| אנליטיקס | Cloudflare Web Analytics | חינם, בלי קוקיז |
הרעיון המרכזי: הכל על ספק אחד. הדומיין, ההרצה, מסד הנתונים והאנליטיקס יושבים באותו מקום, ולכן אין רגעים של "מי מדבר עם מי" ואין חשבון שני להתחקות אחריו.
באג ראשון: הדף הראשי הגיש את האתר הישן
לאתר היה עיצוב קודם. כשעברנו לשולחן העבודה, חסמנו את כל הכתובות הישנות והפנינו אותן לחדש. הכל נבדק, הכל עבד.
חוץ מדבר אחד: הכתובת החשופה. evyataryizhak.com בלי שום המשך.
החוק שכתבנו כיסה את /he/* ואת /en/*. הוא לא כיסה את /. וכך הדרך הכי נפוצה בעולם להגיע לאתר - להקליד את השם בשורת הכתובת - הייתה הראוט היחיד שעקף את החסימה והגיש את העיצוב הישן.
באג שני: הבדיקות היו אדומות ואף אחד לא ראה
לפרויקט הייתה חבילת בדיקות אוטומטיות. 11 בדיקות. במסמך ההעברה כתוב "11 טסטים", וזה נשמע מצוין.
כשהרצתי אותן, 10 מתוך 11 נכשלו. הן נכשלו מאז השינוי של הלילה הקודם, כי כל בדיקה חוץ מהראשונה כוונה לעמוד שעכשיו מוחזר בהפניה.
והבדיקה על הדף הראשי? היא עברה. היא עברה כי העמוד הישן סיפק בדיוק את מה שהיא ביקשה. הבדיקה שהייתה אמורה לתפוס את הבאג הראשון היא זו שנתנה לו לעבור.
חבילת בדיקות שאף אחד לא מריץ היא לא רשת ביטחון. היא תפאורה.
מה שעשיתי: בניתי אותן מחדש סביב מה שהאתר באמת מגיש היום, והשארתי את הבדיקות של העמודים הרדומים כ"מדולגות במפורש, עם סיבה" במקום למחוק אותן. מחיקה מסתירה שהכיסוי נעלם. דילוג מתועד אומר בדיוק מה לא נבדק ולמה.
באג שלישי: ההגבלה שלא הגבילה כלום
לצייר באתר יש מנוע AI, וכל לחיצה עולה כסף אמיתי. אז הייתה בקוד הגבלה: שלוש תמונות ליום לכל מבקר.
רק שההגבלה נספרה בזיכרון של התהליך. Cloudflare מייצרת ומוחקת תהליכים כאלה כל הזמן, ולכן המונה התאפס שוב ושוב. ההערה בקוד אפילו הודתה בזה במילים "מהמורה, לא חומה".
כלומר: הייתה לי הגנה על הארנק שנראתה קיימת לגמרי, ולא הגבילה אף אחד.

מה בניתי במקום
שני שערים נפרדים, שניהם במסד הנתונים:
מכסה לכל מבקר, לתמיד
שלוש תמונות ונגמר, לא מתחדש למחרת. נספר גם לפי עוגייה שחיה 10 שנים וגם לפי כתובת IP מגובבת. מחקתם עוגיות? ה-IP עוד סופר. החלפתם רשת? העוגייה עוד סופרת.
תקרה חודשית גלובלית
80 תמונות בחודש לכל האתר. זה מה שבאמת מבטיח את החשבון, כי הוא מחזיק גם אם מישהו עקף את השער הראשון.
פרט קטן שמשנה הרבה: המכסה נגבית רק אחרי שהתמונה באמת חזרה. אם המודל נכשל, זה לא אוכל למבקר אחת משלוש ולא נספר בתקציב. אחרת אנשים משלמים על הכישלונות שלכם.
באג רביעי, והאהוב עליי: האנליטיקס שדיווח אפס לנצח
הדלקתי אנליטיקס. הדשבורד אמר "מופעל". יכולתי לעצור שם ולהיות מרוצה.
אבל בדקתי מה באמת קורה בדפדפן, והסקריפט של האנליטיקס החזיר שגיאה. הסיבה: לאתר יש מדיניות אבטחה שמתירה סקריפטים רק מהדומיין של עצמו. Cloudflare מזריקה את סקריפט המדידה שלה אחרי שהמדיניות הזאת נכתבה, ולכן הדפדפן סירב לטעון אותה.
התוצאה הייתה מושלמת בגיהינומיות שלה: דשבורד שמראה "פעיל", ואפס נתונים. לתמיד. בלי אף הודעת שגיאה במקום שמישהו מסתכל בו.
"מופעל" זה לא "עובד". תמיד תבדקו שהנתון באמת נוחת, לא שהמתג דלוק.
והדבר שכמעט הרס הכל: התאמה לפי משך
לאתר יש 25 סרטונים. גיליתי שהאודיו שלהם נדחס לרבע איכות, ושהמאסטרים המקוריים שמורים במחשב. המשימה: להחזיר את פס הקול המקורי לכל סרטון.
הדרך המתבקשת: להתאים כל קובץ אתר למאסטר שלו לפי משך. אותו אורך, כנראה אותו סרטון.
זה נכשל, ובשקט. בספרייה יש כמה קליפים באורך 15.04 שניות בדיוק. ההתאמה הדביקה את אותו מאסטר לשלושה סרטונים שונים, ואת פס הקול של סרטון אחד לקליפ אחר לגמרי.
מה שעשיתי במקום: השוויתי את האודיו עצמו. חילצתי מקטע מכל קובץ והרצתי קורלציה. התאמות אמיתיות יצאו 0.96 עד 1.00, והמועמד הבא בתור ישב על אפס. הפרדה חדה, בלי ניחושים.
ואז בדקתי סנכרון בכל קובץ בנפרד אחרי המיזוג, כי אודיו נכון בהיסט של רבע שנייה הוא עדיין באג. כל 25 יצאו על אפס.
מה זה אומר על עבודה עם סוכן
כל הבאגים שסיפרתי עליהם נכתבו על ידי AI, ורובם גם נתפסו על ידי AI. זה לא סתירה, זו הנקודה.
סוכן טוב כותב קוד מהר. הוא גם כותב קוד שנראה נכון. שני הדברים האלה יחד הם בדיוק מה שהופך את הבדיקה לחשובה יותר, לא פחות.
שלושת הכללים שאני עובד לפיהם עכשיו
- אל תסתפקו ב"זה עובד", תבקשו ראיה. לא "הפעלתי אנליטיקס" אלא "המונה עלה מ-6 ל-7 אחרי ביקור". לא "הוספתי הגבלה" אלא "הקריאה הרביעית חזרה חסומה".
- תחשדו בהצלחות שקטות. אם משהו עבר בפעם הראשונה ולא הפתיע אתכם בכלום, יש סיכוי טוב שהוא לא באמת נבדק.
- תשאלו מה יקרה כשזה ייכשל. ההבדל בין הצייר שעולה $40 בשנה לצייר שעולה $400 הוא לא איכות הקוד. הוא השאלה "מה קורה אם מישהו יריץ את זה בלולאה".
מה זה עולה בפועל
אתר חי, עם מסד נתונים, מיילים אוטומטיים, מנוע תמונות ואנליטיקס:
| פריט | לשנה |
|---|---|
| דומיין | $10.46 |
| הרצה, מסד נתונים, אנליטיקס | $0 |
| מיילים | $0 |
| מנוע התמונות, בתקרה שהגדרתי | עד $38 |
| סה"כ | פחות מ-$50 |
המספר הזה אפשרי רק בגלל התקרות. בלי הן, שורה אחת הייתה "תלוי כמה אנשים ישחקו", וזה לא מספר שאפשר לישון איתו.
השורה התחתונה
AI לא הפך בניית אתרים לחינם או למיידית. הוא הזיז את העבודה: פחות זמן על כתיבת קוד, הרבה יותר זמן על לוודא שמה שנכתב באמת עושה את מה שהוא אומר.
ארבעת הבאגים כאן לא היו שגיאות תחביר. הם היו פערים בין מה שהקוד הצהיר לבין מה שהוא עשה. אף אחד מהם לא היה קורס. כולם היו נשארים חודשים.
אם אתם בונים משהו עם סוכן, זה הכישור שכדאי לפתח: לא לכתוב פרומפטים טובים יותר, אלא לדעת איך לבדוק תוצאה.