לאחרונה בנינו ופרסמנו חבילת קוד פתוח קטנה בשם shabbat-gate: תוסף ל-Cloudflare Pages/Workers שמאפשר לכל אתר “לשבות” בפועל בזמן שבת וחג, בלי לשלם על זה מחיר בדירוג בגוגל או בנראות במנועי AI.

מה בנינו

shabbat-gate מוסיפה לכל אתר יכולת אחת וספציפית: לסגור את עצמה אוטומטית לגולשים אנושיים בזמן שבת וחגי ישראל המרכזיים, ולהציג במקום זאת דף “האתר סגור” עברי ורספונסיבי. במקביל, מנועי חיפוש וסורקי AI (Google, Bing, GPTBot, ClaudeBot ועוד) ממשיכים לקבל גישה מלאה מסביב לשעון, כדי שדירוג האתר וניראותו בחיפוש לא ייפגעו לעולם.

הפרויקט פורסם בשני ערוצים: קוד המקור ב-GitHub (github.com/eyal-meshulam/shabbat-gate), וההתקנה בפועל דרך npm (npmjs.com/package/shabbat-gate). יש תיעוד מלא באנגלית ובעברית, כי קהל היעד המרכזי הוא בעלי אתרים ישראלים שומרי שבת.

למי זה מיועד

כל מי שמפעיל אתר על תשתית Cloudflare Pages/Workers ורוצה שהאתר “ישבות” בפועל בזמן שבת וחג, בלי לפגוע בקידום אורגני: עסקים שומרי שבת, ארגונים קהילתיים, אתרי תוכן דתיים, או כל מפתח שרוצה לבטא שמירת שבת גם דיגיטלית.

איך זה עובד, בקצרה

הלוגיקה רצה כ-middleware על כל בקשה שמגיעה לאתר, לפי הסדר הזה:

איך מתקינים

החבילה היא קוד פתוח וחינמי, ומתפרסמת רשמית ב-npm בשם shabbat-gate. הכתובת הרשמית: npmjs.com/package/shabbat-gate - שם, וגם ב-README ובקובץ ה-CHANGELOG שבגיטהאב, נמצא התיעוד המלא של כל האפשרויות.

בפרויקט Cloudflare Pages קיים:

npm install shabbat-gate

ואז מוסיפים קובץ functions/_middleware.ts:

import { createShabbatGate } from 'shabbat-gate';

const gate = createShabbatGate({
  siteName: 'שם האתר שלי',
  bypassParam: 'preview',
  bypassValue: 'letmein-9f3a7c',
});

export const onRequest: PagesFunction = (context) => gate(context);

latitude/longitude אופציונליים (ברירת מחדל: ירושלים, מספיק מדויק לכל ישראל), וגם renderHoldingPage אופציונלי למי שרוצה דף “סגור” מעוצב אחרת לגמרי.

איך בודקים ומדבגים

כמה כלים קיימים כדי לבדוק את זה בלי לחכות לשבת אמיתית:

  • פרמטר ה-bypass - הדרך המהירה ביותר לבדוק את האתר החי בזמן שהוא כביכול סגור: גולשים ל-?preview=letmein-9f3a7c ורואים את האתר האמיתי, בלי קשר לשעה.
  • wrangler pages dev - שרת Pages+Functions מקומי שמדמה את סביבת Cloudflare האמיתית, לבדיקת בקשות אמיתיות מול ה-middleware לפני שמפרסמים.
  • טסטים אוטומטיים - 36 טסטי vitest בחבילה עצמה, בלי צורך בסביבת Cloudflare אמיתית: רשימת הבוטים, אלגוריתם צימוד חלונות שבת/חג (כולל חג רב-יומי כמו ראש השנה, עם שני אירועי הדלקת נרות והבדלה אחת בלבד), התנהגות ה-bypass, ובעיקר fail-open - דימוי כשל רשת ווידוא שהאתר האמיתי עדיין עובר.
  • תצוגה מקדימה של דף ה”סגור” - מכיוון ש-defaultRenderHoldingPage היא פונקציה טהורה, אפשר לקרוא לה ישירות עם נתוני דוגמה ולראות בדיוק מה גולש יראה, בלי לחכות ליום שישי בערב.

לוגים - מה יש היום

נכון לעכשיו יש רק לוג שגיאה אחד בקוד, בדיוק בנקודת ה-fail-open:

console.error('shabbat-gate: failing open due to error', error);

כלומר: אם ה-fetch מ-Hebcal נכשל או שהתשובה לא תקינה, נרשמת שגיאה ל-console, והבקשה ממשיכה לאתר האמיתי. אין כרגע לוג הצלחה, לא כשגולש נחסם ולא כשהוא עובר כרגיל - רק המקרה החריג של כשל.

באתר שרץ בפועל על Cloudflare Pages רואים לוגים כאלה דרך wrangler pages deployment tail (streaming בזמן אמת מהטרמינל), או דרך לוח הבקרה של Cloudflare, תחת Functions -> Real-time Logs. אם בעתיד ירצו יותר נראות (למשל לספור כמה בקשות נחסמו בפועל), זו תוספת קלה - אבל היא לא קיימת היום, ומכוון: החבילה נשארת מינימלית ומדברת רק כשיש בעיה אמיתית.

עדכונים מאז הפרסום

מאז הפוסט המקורי (יולי 2026) החבילה המשיכה להתפתח. עיקרי התוספות:

0.1.3 - רפידת ביטחון ומתאם ל-Worker רגיל

  • bufferMinutes - סגירת האתר כמה דקות לפני הדלקת הנרות ופתיחתו כמה דקות אחרי ההבדלה, כהגנה מפני סחיפת שעון וגלישה של הרגע האחרון בדיוק בגבול.
  • createShabbatGateForWorker - מתאם לאתרי Cloudflare Worker “רגילים” עם נכסים סטטיים (static assets), לא רק Pages Functions. זה בדיוק המבנה של האתר שאתם קוראים בו עכשיו.

0.2.0 - חסימה לפי אזור הזמן של הגולש + הודעה רב-לשונית

  • enforceVisitorLocation - עד כה השער חסם לפי לוח הזמנים של ישראל בלבד, לכל גולש בעולם. עכשיו אפשר לחסום גולש גם לפי השבת במיקום שלו: האתר סגור לו אם זו שבת בישראל או במקום שממנו הוא גולש. גולש בחו”ל נשאר חסום מכניסת השבת בישראל ועד צאת השבת המקומית שלו (חגים מחושבים לו בחשבון גלותי, יום-טוב שני).
  • הודעה בשפה מקומית - לגולש מחוץ לישראל, דף ה”סגור” מציג קודם את ההודעה בעברית, ומתחתיה הודעה בשפת הדפדפן שלו. שפות מובנות: אנגלית, צרפתית, רוסית, ספרדית, גרמנית וערבית.

התיעוד המלא של כל האפשרויות נמצא ב-README ובקובץ ה-CHANGELOG בגיטהאב. כיסוי הטסטים גדל בהתאם - 36 טסטי vitest נכון ל-0.2.0.

לסיכום

shabbat-gate היא דוגמה לחבילת קוד פתוח קטנה שפותרת בעיה ספציפית וברורה: לבטא שמירת שבת דיגיטלית בלי לשלם על זה מחיר ב-SEO. הקוד קצר, הטסטים מכסים את המקרים העדינים, וההתקנה באתר קיים לוקחת כמה שורות קוד בלבד.

בונים אתר על Cloudflare ורוצים תוסף מותאם אישית, בין אם זה shabbat-gate או משהו אחר לגמרי? דברו איתנו ↗