
רדאר · מערכת לידים ומכירות
כלי פנימי · לידים ומכירות · React · Node · SQLiteרדאר היא מערכת הלידים והמכירות שבניתי לעסק שלי. היא מוצאת בגוגל מפות עסקים שירותיים שאין להם אתר, שהאתר שלהם לא עובד טוב או שלא רואים אותם בגוגל, בודקת כל אתר, מדרגת, מכינה פנייה אישית אחת שמבוססת רק על מה שנמצא בפועל, ומלווה כל ליד עד שהוא לקוח. לא פחות חשוב: היא בנויה כך שאי אפשר לפנות לאותו עסק פעמיים, לשלוח בלי יממה של אישור, או לפנות למי שביקש שלא.
נתונים מומצאים · נפתח בטאב חדש

3 דברים לנסות בדמו
הדמו הוא המערכת עצמה, עם 45 עסקים מומצאים של משתמשת בדויה, נועה לוי מ"סטודיו נועה". כל לחיצה משנה את הנתונים בזיכרון הדפדפן, ורענון מחזיר להתחלה.
לעצור פנייה לפני שהיא יוצאת
גללו ל"ממתינים לאישור". כל עסק שם עוד בחלון של 24 שעות. לחצו "בטל" ליד אחד מהם, והוא יורד מהרשימה ולא יקבל שום הודעה.
לשלוח ביד, ליד אחד בכל פעם
קראו את ההודעה המוכנה. "פתח וואטסאפ" מסביר מה היה קורה במערכת האמיתית, ו"נשלח — הבא" מעביר לליד הבא ומזיז את הקודם לשלב "נשלח" במכירות.
להזיז ליד בלוח המכירות
גררו את "קייטרינג טעמים" מעמודת "ענה" לעמודת "שיחה", והספירה בשתי העמודות מתעדכנת. בנייד, בוחרים שלב מהרשימה "העבר ל…" שבכרטיס.
30 שניות, אם אתה ממהר.
למצוא עסקים שבאמת צריכים אתר, לבדוק כל אחד בעצמי, לכתוב פנייה שלא נשמעת כמו דיוור, לזכור למי כבר פניתי, ולעקוב אחרי מי שענה. וכל זה בתוך גבולות החוק, שמתיר לפנות לבית עסק פעם אחת בלבד.
קודם כתבתי את הכללים, ורק אחר כך את המערכת. כל שליחה, במייל או בוואטסאפ, עוברת בשער אחד שבודק חסימה, פנייה קודמת, נוסח תקין, יממת אישור, תקרה ושעות. את המשימות הידניות היא עושה לבד, ואת ההחלטות משאירה לי.
מערכת שרצה אצלי מקומית ומותקנת כאפליקציה, עם 8 מסכים מסריקה ועד לוח מכירות, גישה מהנייד, גיבוי יומי ו-283 בדיקות אוטומטיות. ולצידה דמו ציבורי מאותו קוד, עם נתונים מומצאים, שכל אחד יכול לנסות.
לידים זה לא רשימה. זו אחריות.
אני בונה אתרים לעסקים קטנים, ולקוחות חדשים מגיעים מכמה כיוונים: מהאתר שלי, מהמלצות, ומעסקים שאני מוצא בעצמי. את החלק האחרון עשיתי ביד, והוא היה איטי ומפוזר. אבל מה שהטריד אותי יותר מהזמן היה הסיכון לפנות למישהו פעמיים, או בטענה שלא נכונה.
עבודה ידנית שלא נגמרת
לחפש תחום ועיר בגוגל מפות, לפתוח אתר אחרי אתר, לבדוק אם הוא נפתח בנייד ואם יש בו כפתור חיוג, ולנסח הודעה. לכל עסק בנפרד.
פנייה אחת, לפי החוק
תיקון 40 לחוק התקשורת מתיר פנייה חד-פעמית לבית עסק. מי שלא ענה לא מקבל תזכורת, ומי שביקש שלא יפנו אליו לא שומע ממני שוב. זה צריך להיות מובטח בקוד, לא בזיכרון שלי.
הודעה שנשמעת כמו אדם
רוב העסקים שאני פונה אליהם הם אדם אחד. "שלכם" ו"השב הסר" נשמעים כמו רשימת תפוצה. ההודעה צריכה להיות אישית, קצרה, ולהתבסס על משהו שבעל העסק באמת מרגיש.
לידים בכל מקום
פניות מבונה ההצעות באתר, הצעות מחיר ששלחתי, הפניות והוספה ידנית ישבו במקומות שונים. מי שכבר בקשר איתי לא אמור לקבל פנייה "קרה" רק כי הופיע גם בסריקה.
מעקב אחרי מי שענה
כשמישהו עונה, מתחיל תהליך מכירה: שיחה, הצעה, החלטה. בלי מקום אחד לצעד הבא, ליד חם מתקרר.
מידע על אנשים
גם עסק קטן הוא לפעמים אדם פרטי. המאגר צריך להישאר אצלי, להתגבות, להימחק בזמן, ולעמוד בתקנות הגנת הפרטיות.
המטרה לא הייתה לשלוח יותר, אלא לשלוח נכון. כל מנגנון ברדאר שואל קודם אם מותר ואם יש סיבה אמיתית לפנות, ורק אחר כך שולח.
מסריקה ועד לקוח, בשלבים קטנים.
כל שלב הוא משימה נפרדת שרצה ברקע לפי לוח זמנים, וכל אחת מהן מדווחת למסך התקינות. אני נכנס בעיקר למסך "היום", שמסודר לפי סדר הפעולות שלי באותו בוקר.
שאלה אחת: כמה שווה לפנות לעסק הזה עכשיו?
שלושה סגמנטים
בלי אתר (או רק דף ברשת חברתית), אתר גרוע (שבור, לא בנייד, איטי, נראה נטוש), ואתר שלא רואים בגוגל (מקום נמוך בגוגל מפות, מעט ביקורות מול המובילים בתחום).
סימני פעילות
עסק עם הרבה ביקורות טובות בגוגל עולה בציון, עסק בלי ביקורות יורד. ממצא טכני בלבד, כמו תיאור חסר לגוגל, מוסיף קצת לציון, אבל לא מצדיק פנייה לבדו.
ציון שלומד
אחרי 15 פניות בתחום, הציון מתכוונן לפי מי שעונה בפועל, עד 10 נקודות לכל כיוון. אזור הבית מקבל תוספת קטנה, והסריקה מכסה את כל הארץ לפי ניקוד ולא לפי מיקום.
חום במילים, לא במספרים
הציון מתורגם למילה אחת שמופיעה בכל המסכים ובסינון. אותו מקור אמת לשרת ולמסך, כדי ש"חם" יהיה אותו "חם" בכל מקום.
חמישה כללים שאסור לשבור.
הם כתובים בראש מסמך העבודה של הפרויקט, ולכל אחד מהם יש בדיקה אוטומטית. כל הודעה, במייל או בוואטסאפ, עוברת בשער אחד בקוד, ואין דרך לשלוח בלי לעבור בו.
מי שברשימת החסימה לא מקבל כלום
לקוחות קיימים, האתרים שלי, מי שביקש הסרה ומי שהמייל אליו חזר. סירוב נקלט גם כשהוא כתוב במילים חופשיות, כמו "לא מעוניין" או "לא רלוונטי".
פנייה אחת לעסק, לתמיד
אין פולואפ אוטומטי. הודעה שנייה נשלחת רק אם העסק ענה. המערכת בודקת גם כפילויות לפי טלפון, מייל ודומיין, לא רק לפי שם.
יממה לאישור
ליד חדש לא יוצא לפני 24 שעות מרגע שנמצא, וגם לא לפני 24 שעות מהפעם האחרונה שהנוסח נכתב או נערך. כל טיוטה שהשתנתה גלויה לי יממה לפני שהיא נשלחת.
תקרות, ועצירה לבד
3 מיילים ביום, אחר כך 5, ותקרה של 8. רק בימים א'–ה' בין 9:00 ל-11:00, ולא בחגים. אם יותר מ-5% מהמיילים חוזרים, או ששני עסקים ביקשו הסרה באותו שבוע, השליחה נעצרת ואני מקבל התראה.
לא ממציאים
"שמתי לב ש..." נכתב רק אם הבדיקה מצאה את זה בפועל. אין ממצא, אין משפט. ורק דברים שבעל עסק מרגיש: לא מוצאים אותו בגוגל, אין אתר, האתר לא עובד בנייד, איטי או בלי כפתור חיוג.
וואטסאפ תמיד ביד
המערכת מכינה את ההודעה ופותחת את השיחה, ואני שולח. אין במייל מחירים ואין קישורים, יש שורת זיהוי ושורת יציאה, ואין פיקסל שעוקב מי פתח.

עמוד ליד בדמו: הבדיקה מצאה שהאתר איטי ושאין בו כפתור חיוג, והמשפט הראשון בטיוטה נשען על הממצא הזה. ביומן רואים את הסדר: נמצא, נבדק, נוקד, נכתבה טיוטה, ואושר לשליחה אחרי 24 שעות.
הנוסח
- ביחיד. רוב העסקים ברשימה הם אדם אחד, ו"שלכם" נשמע כמו רשימת תפוצה.
- שורת יציאה של בן אדם: "אם לא מעניין אותך, תכתוב לי ולא אפנה שוב". החוק דורש דרך פשוטה לסרב, לא מילת קוד.
- שם העסק כמו שאומרים אותו. המערכת מקצרת את השם מגוגל, ואפשר לקבוע שם ידנית.
- מייל רק אם הוא של העסק. כתובת שמופיעה בספרייה עסקית ליד עשרות עסקים אחרים לא נחשבת.
- בדיקה חוזרת לפני שליחה. ליד שהטענה עליו כבר לא נכונה נסגר ולא נשלח.
פרטיות
- המאגר הוא קובץ מקומי במחשב שלי, לא בענן.
- מסמך הגדרות מאגר לפי תקנות הגנת הפרטיות: מה נשמר, למה, וכמה זמן.
- נתונים גולמיים מגוגל נמחקים אחרי 30 יום, ועסק שלא פניתי אליו נמחק אחרי 12 חודשים.
- כפתור "מחק לבקשתו" בכל ליד.
אבטחה
- כניסה עם קוד. מחוץ לבית צריך גם קוד חד-פעמי שנשלח אליי, וכל כניסה מבחוץ מדווחת.
- נעילה אחרי ניסיונות כושלים, והגנות מפני CSRF ו-DNS rebinding.
- גיבוי יומי מחוץ למאגר, 14 עותקים, ובדיקת שחזור.
בדיקות
- 283 בדיקות ב-26 קבצים, כולן עוברות (1.10.2026).
- הבדיקות רצות על מסד זמני ולא שולחות מייל אמיתי.
- בדיקה שנכשלת אם פרט אישי נכנס לקוד, ואסור לשנות את שער השליחה בלי בדיקה שמוכיחה שהחסימה עובדת.
מסך שאומר מה לעשות עכשיו.
רדאר היא כלי שנכנסים אליו כמה דקות בבוקר, מהמחשב או מהנייד. לכן כל מסך מתחיל בפעולה הבאה, לא בנתונים.
"היום" לפי סדר הפעולות
קודם מעקבים שהגיע זמנם, אחר כך תשובות שמחכות עם מענה מוצע, וואטסאפים לשליחה, מה שיוצא היום, ובסוף מי שממתין לאישור. אותו סדר שבו אני עובד.
וואטסאפ, ליד אחד בכל פעם
תור ממוין מהחם לקר, עם ההודעה כבר כתובה. לחיצה פותחת את השיחה, ו"נשלח — הבא" מסמן ועובר הלאה. גם כאן התקרה היומית נאכפת.
לוח מכירות עם גרירה
במחשב גוררים כרטיס לשלב הבא, ובנייד בוחרים מרשימה, כי גרירה בטלפון לא עובדת טוב. הצעד הבא והתאריך שלו מופיעים בכרטיס, ומה שבאיחור נצבע באדום.
כל הלידים במקום אחד
ממסך "לידים" רואים גם את מי שהגיע מהאתר, מהצעת מחיר או מהמלצה, עם סינון לפי מקור. המשפך ואחוזי המענה נספרים רק ממה שהגיע מסריקה, כדי שלא יתערבבו.
מסך תקינות
כל משימת רקע מדווחת על עצמה. אם סריקה נכשלה, אם הגיבוי ישן או אם השליחה הושהתה, זה מופיע בירוק או באדום, ולא מתגלה אחרי שבוע.
יום, לילה ואוטומטי
כל הצבעים מוגדרים פעם אחת כטוקנים סמנטיים, והרכיבים משתמשים רק בשמות. כך מצב כהה ובהיר הם אותו מסך, ולא שתי גרסאות לתחזק.
אותו מסך, ביום ובלילה.
גררו את הקו כדי להשוות. משמאל: מצב בהיר. מימין: מצב כהה.
יוםלילה
פלטה (מתוך הטוקנים של האפליקציה)
סימן וטיפוגרפיה
הסימן הוא טבעות של מכ"ם, קו סריקה כחול, ונקודה אחת שנתפסה: הליד. בזמן סריקה הקו מסתובב. מספרים מוצגים בספרות אחידות ברוחב, כדי שטבלאות לא יקפצו.
שרת קטן, מסד מקומי, ומסך אחד שמדבר רק עם ה-API.
השרת כתוב ב-Node וב-TypeScript בלי פריימוורק, והנתונים יושבים ב-SQLite במחשב שלי. המסך הוא אפליקציית React שמותקנת בכרום כמו אפליקציה רגילה, ומדבר אך ורק עם נתיבי /api. ההפרדה הזו היא מה שאפשר אחר כך לבנות דמו בלי לגעת באף מסך.
src/scanסריקה של גוגל מפות בדפדפן, בלי API בתשלום. 20 צירופים של עיר ותחום ביום, בסבב בין אזורי הארץ. הממשק מאפשר להחליף מקור בעתיד.
src/auditבודק אם האתר נפתח, אם הוא מותאם לנייד, מהיר, מעודכן ועם כפתור חיוג, ומשווה מיקום וביקורות מול המובילים בתחום ובעיר.
src/score.tsפונקציה טהורה: עסק ותוצאת בדיקה נכנסים, ויוצאים סגמנט, ציון, סיבה בעברית וערוץ (מייל, וואטסאפ או אין).
src/send/guard.tsהשער היחיד לשליחה: חסימה, מקור הליד, סטטוס, ערוץ, טיוטה תקינה, כפילות, יממת אישור, תקרה וחלון שעות. כל סירוב מוחזר עם סיבה בעברית.
src/repliesקורא את תיבת השליחה כל רבע שעה, משייך תשובה לפנייה לפי מזהה ההודעה, ומזהה סירוב גם בניסוח חופשי.
src/crmלוח השלבים, נתוני המרה לפי תחום, אזור וסגמנט, צעד הבא, ציון שלומד, סיכום שבועי, ושורה חדשה בגיליון הלקוחות כשליד נסגר.
משימות רקע
- סריקה, בדיקה, טיוטות, שליחה, תשובות, תקינות, סנכרון מכירות, סיכום שבועי, תזכורת וואטסאפ וגיבוי.
- כולן רצות מלוח המשימות של Windows ומדווחות למסך התקינות.
הטיוטות
- את הנוסח כותב מודל שפה שרץ בלי כלים, בתיקייה ריקה ועם תקרה יומית, וכל טקסט שמגיע מבחוץ מסומן אצלו כנתון ולא כהוראה.
- כל טיוטה עוברת אימות לפני שליחה: שורת יציאה, בלי מחירים ובלי קישורים.
נבנה כדי שאפשר יהיה למכור
- שום פרט שלי לא כתוב בקוד. כל מה שאישי יושב בהגדרות או בקובץ סביבה.
- מייל עם סיסמת אפליקציה, בלי פרויקט ענן ובלי חיבור שפג תוקף.
משלד לדמו ציבורי, בשבועיים.
לפי היסטוריית הגרסאות: מ-18.9.2026 ועד 1.10.2026, בחמישה שלבים.
המערכת כולה, ביום אחד ארוך
סכמה, הגדרות וחוזה API. אחר כך סריקה, בדיקת אתר, ניקוד, מסך, מייל, שליחה עם שערים, תשובות ותקינות. באותו יום עברתי מחיבור OAuth לסיסמת אפליקציה, הוספתי הצעת מחיר מתוך ליד ולוח מכירות עם גרירה, ופתחתי את הסריקה לכל הארץ. בסוף היום: סבב UX שסידר את "היום" לפי סדר פעולה והתאים את הלידים לנייד.
לפנות רק מסיבה שבעל עסק מרגיש
מנעול אבטחה ותיאור לגוגל עברו להיות שיקולים פנימיים לציון בלבד, ובמקומם נכנסו מיקום בגוגל מפות, ביקורות מול המתחרים וכפתור חיוג. נוספו קיצור שמות, תבניות לפי סוג הממצא, בדיקה חוזרת שסוגרת ליד שכבר לא מוצדק, קליטת תשובות כל רבע שעה, סיכום שבועי, ציון שלומד, ושכבת אבטחה לגישה מהנייד.
הודעה שנשמעת כמו אדם, ולידים במקום אחד
תור וואטסאפ מהיר עם אותו שער כמו במייל, ומיילים רק אם הם באמת של העסק. החום של הליד הפך למילים, הנוסח עבר ליחיד ושורת היציאה נכתבה מחדש בלי "הסר". מסך "לידים" התחיל לרכז גם פניות מהאתר, הצעות מחיר והמלצות.
אבטחה ופרטיות לפי צ'קליסט
כניסה בשני צעדים מבחוץ, שער אישור שנספר גם מהעריכה האחרונה, הסרה שנקלטת גם מכפתור "ביטול מנוי", עצירה אוטומטית אחרי כל החזרה או הסרה, גיבוי יומי מחוץ למחשב עם בדיקת שחזור, ניקוי חודשי, ומסמך הגדרות מאגר.
אותה מערכת, עם עולם מומצא
45 עסקים מומצאים, משפך עקבי בין כל המסכים, תאריכים שנגזרים מיום הכניסה, ובדיקות שמוודאות שהדמו והמערכת האמיתית לא נוגעים זה בזה.
המערכת עצמה.
כל הצילומים נלקחו מהדמו הציבורי, במצב כהה. העסקים, הטלפונים, הסכומים וההודעות מומצאים. העבירו את העכבר על מסך "היום" כדי לגלול אותו, ולחצו על כל תמונה כדי להגדיל.

"היום": מעקבים, תשובות עם מענה מוצע, וואטסאפים, מה שיוצא היום ומי שממתין לאישור

לוח שלבים מ"נשלח" ועד "לקוח", עם שווי עסקאות, צעד הבא ואחוזי מענה וסגירה שנספרים רק מפניות שיצאו מרדאר.

ליד אחד בכל פעם, מהחם לקר, עם הממצא והודעה שכבר כתובה. השליחה עצמה ידנית.

כל הלידים, מכל המקורות, עם חיפוש, סינון לפי מקור, סטטוס וחום, ומה שבאיחור.

המאגר לפי אזור, מפת כיסוי של עיר מול תחום, וסריקה ידנית כשצריך. בדמו הסריקה מדומה.

נשלחו, ענו, חזרו והסרות, לצד ספי העצירה האוטומטית, גרף שבועי והתבניות לכל סגמנט.

מי שכאן לא מקבל הודעה לעולם: לקוחות קיימים, הסרות, החזרות וחסימה ידנית לפי מייל, טלפון, דומיין או שם.

פרטי העסק, צעד הבא עם תאריך, שווי העסקה, והצעת המחיר שנשלחה מתוך הליד ועל כמה פעמים נצפתה.

כמה עברו מכל שלב לשלב הבא. לידים מהאתר, מהמלצה או ידניים לא עברו פנייה, ולכן לא נספרים כאן.
חמש דקות בבוקר, מהטלפון.
בנייד יש לשוניות למטה ומגירה לשאר המסכים, והלוח עובר מגרירה לבחירה מרשימה.






אותו קוד, עולם מומצא, ושום דבר לא יוצא מהדפדפן.
הדמו הוא לא סרטון ולא העתק. זו אותה אפליקציה בדיוק, עם כל שמונת המסכים ועמוד הליד, מחשב ונייד, יום ולילה. ההבדל היחיד הוא מאיפה מגיעים הנתונים.
יירוט במקום אחד
כל בקשת נתונים באפליקציה פונה ל-/api. בדמו, קובץ אחד מיירט את הבקשות ועונה מהזיכרון, באותו מבנה בדיוק כמו השרת. אין אף תנאי מיוחד בתוך המסכים.
משתמשת בדויה
נועה לוי מ"סטודיו נועה", בונת אתרים מחיפה, עם 45 עסקים מומצאים. הטלפונים בפורמט 050-000-XXXX, והמיילים והאתרים בסיומת example.
קישורים יוצאים נחסמים
וואטסאפ, ג'ימייל, חיוג ומייל לא נפתחים, ובמקומם מופיעה הודעה קצרה שמסבירה מה היה קורה במערכת האמיתית. מספר מומצא עלול להיות של מישהו אמיתי.
תמיד "היום"
התאריכים נגזרים מרגע הכניסה, כך שהדמו תמיד מציג "נשלח הבוקר" ו"באיחור מלפני יומיים", ולא ארכיון ישן.
מה שומר על ההפרדה
- הדמו נטען רק בבנייה של הדמו. הבנייה האמיתית לא מכילה ממנו אף שורה.
- קוד הדמו לא מייבא קוד שרץ מהמערכת, רק הגדרות של טיפוסים.
- בדיקה שנכשלת אם שם, טלפון, מייל, סיסמה או מפתח של הבעלים מופיעים בקוד הדמו או בקבצים שמתפרסמים.
- שמות העסקים בדמו הושוו ידנית מול עותק של המאגר האמיתי, ואין ביניהם התאמה.
- נוסח ההודעות בדמו זהה לתבניות של המערכת האמיתית: ביחיד, ממצא אמיתי ושורת יציאה של אדם.
- תיקייה סטטית של בערך מגה-בייט אחד, בלי שרת ובלי הגדרות. רענון מחזיר את הכול להתחלה.
רוצים מערכת כזו לעסק שלכם?
אני בונה כלים פנימיים שחוסכים עבודה ידנית: מעקב לידים, תהליכי מכירה ומשימות שחוזרות על עצמן, עם הכללים של העסק שלכם כתובים בתוך הקוד.
בואו נדבר →