צינור הלידים
שתי שכבות שלא סומכות זו על זו - כל בקשה חתומה עם חותמת זמן, וכל פנייה נשמרת ב-D1 לפני שנשלח מייל
החלק שמהנדס יעריך הוא חלוקת האמון: אף שכבה באתר לא סומכת על השכבה שלפניה. edge middleware חוסם scrapers ו-CORS proxies עוד לפני שהעמוד מוגש, ו-CSP מחמיר עם פונטים self-hosted מצמצם את משטח התקיפה בדפדפן. צינור הלידים בנוי כשתי רשויות נפרדות - ה-API ב-Vercel חותם כל בקשה ב-HMAC-SHA256 עם חותמת זמן, וה-Worker בצד Cloudflare מאמת את החתימה ודוחה בקשות מחוץ לחלון הזמן, כך שגם מי שמכיר את כתובת ה-Worker לא יכול להזריק לידים או לשדר מחדש בקשה ישנה. D1 הוא מקור האמת: השמירה קורית לפני שליחת המייל וסטטוס השליחה מתעדכן אחריה, אז פנייה לא הולכת לאיבוד גם כששירות המייל נופל. ובצד התוכן, שני ההאבים ו-14 עמודי ההסבר לא נכתבו ידנית אלא נוצרים דטרמיניסטית מקובץ content.json אחד דרך generator ב-Node - וגם העמוד הזה עצמו נוצר באותו צינור שהוא מתאר.
מה זה
זה האתר שאתם גולשים בו ברגע זה. פורטפוליו אישי בעברית RTL מלאה, בנוי vanilla HTML+CSS+JS בלי שום build step - Vercel מגיש את הקבצים בדיוק כמו שנכתבו. ב-sitemap יש 44 עמודים: עמוד הבית, עמוד המאמרים ועמוד יצירת הקשר, 25 מאמרי עומק בשלוש קטגוריות, האב פרויקטים, האב מחקר, ו-14 עמודי הסבר לפרויקטים ולמחקר.
הבעיה
רוב אתרי הפורטפוליו הם אחד משניים: כרטיס ביקור דק בלי תוכן אמיתי, או template כבד על framework שגורר מאות dependencies בשביל עמודים שהם בסופו של דבר סטטיים. רציתי משהו שלישי - אתר מהיר שאני מבין כל שורה בו, עם תוכן עומק אמיתי, שנשאר פשוט לתחזוקה לאורך זמן.
עברית מוסיפה שכבת קושי משלה: RTL מלא עם מונחים טכניים באנגלית בתוך המשפט דורש CSS עם logical properties ומשמעת bidi בכל עמוד. ומעבר לזה, טופס יצירת קשר אמיתי הוא backend לכל דבר - אימות, שמירה, שליחת מייל - וזה בדיוק החלק שאתרים סטטיים בדרך כלל מוותרים עליו או מוסרים לשירות צד שלישי.
מה בניתי
את שכבת התוכן: 25 מאמרי עומק בשלוש קטגוריות - AI עם 9, Agents עם 8 ו-API & MCP עם 8 - כל אחד מבוסס על המקור הראשוני שלו ועבר בדיקת עובדות. לצדם שני האבים: פרויקטים עם 10 עמודי הסבר ומחקר עם 4, וכולם נוצרים מ-content.json אחד דרך generator ב-Node, כך שכל העמודים זהים בדיוק בעיצוב.
את השכבה החזותית: hero עם constellation canvas חי - 70 נקודות בדסקטופ, 26 במובייל, מכבד reduced-motion - ופונטים self-hosted כך שהטיפוגרפיה לא תלויה באף שרת חיצוני. ואת שכבת ההגנה: CSP מחמיר, edge middleware שחוסם scrapers ו-CORS proxies, וצינור לידים חתום HMAC מקצה לקצה.
איך זה עובד
אין build. Vercel מגיש את הקבצים כמו שהם, וכל מה שנראה כמו מערכת תבניות הוא בעצם script ב-Node שרץ מקומית ופולט HTML סטטי. התוצאה: בצד הלקוח אין node_modules ואין bundler, אין supply chain של חבילות להיחשף דרכו, ואין שום דבר בין הקוד שכתבתי לבין מה שהדפדפן מקבל.
טופס יצירת הקשר הוא המערכת הרצינית באתר. הפנייה עוברת אימות Turnstile בצד ה-API של Vercel, נחתמת ב-HMAC-SHA256 עם חותמת זמן, ונשלחת ל-Cloudflare Worker שמאמת את החתימה ואת חלון הזמן, שומר את הליד ב-D1 ורק אז שולח מייל דרך Resend. סטטוס המייל מתעדכן חזרה ב-D1, כך שכל פנייה מתועדת גם אם שליחת המייל נכשלת.
התוצאה
אתר חי עם 44 עמודים בעברית RTL מלאה: בלי framework, בלי build, עם פונטים שמוגשים מהדומיין עצמו ועם backend אמיתי מאחורי הטופס. המבנה הפשוט הזה הוא שמאפשר לתחזק לבד אתר בסדר גודל כזה - כל עמוד פרויקט או מחקר חדש הוא עוד רשומה ב-content.json ועוד הרצה של ה-generator.
והרפרנס העצמי נסגר: העמוד שקראתם עכשיו נוצר באותו pipeline שהוא מתאר.