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

3 דברים לנסות בדמו.
הדמו הוא אותה מערכת בדיוק, עם עסק בדוי בשם "ישראל ישראלי · סטודיו". אפשר ללחוץ על הכול: השינויים נשמרים בדפדפן שלכם בלבד, ורענון מחזיר להתחלה.
אשרו קבלה ותראו אותה יוצאת מהתור
לחצו "אשר" על אחת הקבלות. היא נרשמת, יוצאת מהרשימה, ומספר הפריטים שממתינים לכם יורד, גם בכותרת וגם בסרגל הצד. ליד כל קבלה כתוב כמה המערכת בטוחה בסיווג, ולמה היא שואלת.
פתחו את התור ←שאלו שאלה על הכסף
לחצו על "כמה נשאר לי עד תקרת עוסק פטור?" או על אחת ההצעות האחרות. התשובה מופיעה בראש הרשימה, עם המספרים של העסק הבדוי והסבר מה המשמעות שלהם.
פתחו את השאלות ←סגרו ממצא של כסף שיוצא בלי תמורה
המסך מציג מנוי שלא משתמשים בו, מנוי שהתייקר בלי הודעה ועוד. לחצו "סמן כטופל" על אחד מהם, ומספר הממצאים הפתוחים יורד.
פתחו את הסקירה ←נתונים מומצאים · נפתח בטאב חדש
30 שניות, אם אתה ממהר.
הכסף של עסק קטן מהבית מפוזר בין בנק, כרטיסים, כמה תיבות מייל, מערכת חשבוניות ואתרים של גופים. המועדים מול רשויות המס לא מחכים, וכל טעות שקטה בספרים עולה כסף.
מחקר לפני קוד, מערכת שרצה מקומית, ותור אחד שאליו מגיע כל מה שהמערכת לא בטוחה בו. כל כלל מס יושב בטבלה עם מקור, וכל שינוי בלוגיקה מגיע עם בדיקה.
23 מסכים בקוד אחד, למחשב ולנייד, שמחוברים לבנק, לכרטיסים ולמייל ומתעדכנים כל לילה. ולצידם דמו ציבורי שבנוי מאותו קוד בדיוק, עם נתונים מומצאים.
ניירת בכל מקום, ומועדים שלא מחכים.
כמי שמנהל סטודיו מהבית, הצד הכספי שלי היה מפוזר: קבלות בכמה תיבות מייל, תנועות בבנק ובכרטיסים, חשבוניות במערכת אחת ומידע על פנסיה וחיסכון באתרים של גופים שונים. רציתי מקום אחד שבו אני רואה הכול, ושיגיד לי מה לעשות ומתי.
מסמכים מכל כיוון
קבלה מגיעה במייל, בצילום מהטלפון, כקובץ PDF או בתוך גוף ההודעה. כל ערוץ דרש פעולה אחרת, ומה שלא טופל באותו רגע נשכח.
מועדים שאסור לפספס
דיווח מע"מ, מקדמות לביטוח לאומי, הפקדות פנסיה וקרן השתלמות שההטבה עליהן נסגרת ב-31.12, והדוח השנתי. כל אחד מהם בלוח זמנים משלו.
כסף שדולף בשקט
מנוי שהתייקר בלי הודעה, מנוי שאף אחד לא משתמש בו, דמי ניהול גבוהים בקופה שאף פעם לא בדקתי. אף אחד מהם לא מופיע בדף הבנק כבעיה.
מספר שגוי גרוע ממספר חסר
תוכנה שמשלימה סכום בניחוש נותנת תחושת סדר, אבל טעות שקטה בספרים יכולה להפוך לקנס. לכן ההחלטה הראשונה הייתה שהמערכת לא מנחשת.
עסקי ופרטי באותו כרטיס
חלק מההוצאות מוכרות במלואן, חלק בחלקן וחלק בכלל לא. הסיווג צריך להיעשות פעם אחת ולהיזכר, ולא להיעשות מחדש בכל חודש.
מידע רגיש מאוד
סיסמאות בנק, תדפיסים ומסמכי מס. לא רציתי לשלוח אותם לשירות ענן של מישהו אחר, ולכן המערכת נבנתה לרוץ אצלי.
"מערכת אחת שמנהלת את כל צד החשבונות והמס של העסק, מא' ועד ת': קולטת, מסווגת, מחשבת, מזכירה ומכינה כל דיווח לרמת 'לחץ שלח'." כך הגדרתי את המטרה במסמך התכנון, ב-9.9.2026, לפני שורת הקוד הראשונה.
כל מסמך נכנס מדלת אחת.
לא משנה מאיפה הגיע המידע: הוא עובר באותה דרך, ומה שהמערכת לא בטוחה בו מחכה לי בתור אחד. ככה זה נראה בפועל.
מקומי קודם
- השרת רץ על המחשב שלי ומאזין רק לעצמו.
- כל הנתונים בקובץ מסד נתונים אחד, עם גיבוי מוצפן כל לילה.
- סיסמאות הבנק מוצפנות במחשב, ולא יוצאות ממנו.
- מהנייד נכנסים דרך רשת פרטית מוצפנת, בלי לפתוח פורט בנתב.
ספר חוקי אחד
- מערכת החשבוניות נשארת הספר החוקי. פנקס לא מפיק חשבוניות בעצמו.
- הוא משקף אותה, מחשב, מתריע ומכין את הדיווח.
- ההגשה עצמה נשארת בידיים שלי, בלחיצה אחת באזור האישי.
תפר אחד לנתונים
- כל המסכים מקבלים נתונים מכתובת אחת בשרת, ומשום מקום אחר.
- כל מסך מציג מה ידוע ומה חסר, ולא נחסם כשחסר משהו.
- בזכות התפר הזה, הדמו הציבורי לא דרש לשנות אף מסך.
שפה אחת מהשרת ועד המסך.
כל מסך עונה על שאלה אחת.
לפני שכתבתי שורת CSS, עשיתי מחקר ממשק על מערכות פיננסיות, בנקים ומערכות ניהול. מה שיצא ממנו: סרגל צד מימין, כל פריט פותח מסך משלו, ושמות שהם שאלות שאדם שואל את עצמו.
תור אחד, לא חמישה
קבלות לאישור, תנועות בלי קבלה, הכנסות שצריך לסווג ומועדים קרובים נכנסים כולם ל"מה מחכה לי". יש מקום אחד לבדוק בבוקר, והמספר האדום בסרגל אומר כמה עוד נשאר.
שמות שהם שאלות
"מה המצב", "מה מחכה לי", "איפה דולף כסף", "כמה זה יוצא השנה". המשתמש לא צריך לדעת מה זה "התאמת בנק" כדי למצוא את המסך שהוא צריך.
"לא ידוע" ולא אפס
חשבון שעוד אין לו שווי מוצג כחשבון בלי שווי, ולא נספר כאפס. כך הסכום הכולל לא מטעה, וברור מה עוד חסר כדי שהתמונה תהיה מלאה.
"נכון ל-…" כשאין רשת
כשהנייד בלי קליטה, האפליקציה מציגה את הנתונים האחרונים וכותבת מאיזה מועד הם. מספר ישן שמוצג כאילו הוא עדכני הוא בדיוק מה שהכלל הראשון אוסר.
הנייד הוא לא מחשב מוקטן
באותו קוד יש שתי צורות: במחשב סרגל צד, ובנייד לשוניות למטה. הלשונית האמצעית היא מצלמה ששולחת קבלה ישר לתור, כי זה הדבר שהטלפון עושה טוב יותר מהמחשב. המעבר בין הצורות נקבע ב-CSS בלבד, כך שאין הבזק בטעינה.
מקור אחד לניווט
מסך חדש נרשם בקובץ אחד, ומופיע לבד בסרגל הצד, בלשוניות, במגירה ובכותרת הטאב. אין מצב שבו מסך קיים במחשב ונשכח בנייד.
עברית בגובה העיניים
הטקסטים במערכת עברו שכתוב, כך שהם מדברים אל מי שקורא ולא אליי. בלי ז'רגון בלי הסבר, מספרים עם פסיקים ותאריכים בפורמט הישראלי.
"למה שאלתי" ליד כל שאלה
כשהמערכת לא בטוחה, היא אומרת למה: "פגישה עם לקוח? בלי זה לא ברור אם זה עסקי", "הקבלה מטושטשת". ההחלטה נשארת אצלי, אבל אני לא צריך לנחש מה היא רוצה.
פלטה: "דיו על נייר" (מתוך קוד האפליקציה)
טיפוגרפיה ומצבים
צבע אחד לפעולה, וצבעי מצב שמופיעים רק כשיש מצב. המצב הכהה הוא תאום מלא שנבנה מאותם טוקנים, ויש גם מצב אוטומטי שעוקב אחרי המכשיר. סכומים מוצגים בספרות ברוחב קבוע, כדי שעמודות יתיישרו.
הכללים כתובים בקוד, לא רק בתיעוד.
מערכת שמנהלת כסף צריכה גבולות שאי אפשר לעקוף בטעות. כל אחד מהכללים האלה נבדק בבדיקה אוטומטית, ובדיקה שנכשלת עוצרת את השמירה.
לא ממציאים נתונים
אין נתוני דוגמה במסד האמיתי, אין סכום שמושלם בניחוש, ואין הערכה שמוצגת כעובדה. כל מספר מגיע ממקור: תנועה בבנק, מסמך או טבלת כללים מאומתת.
כל כלל מס עם מקור
מדרגות, תקרות, אחוזי הכרה ומועדים יושבים בטבלה אחת לכל שנה, ולכל שדה יש מקור וסימון אם אומת. פקודה אחת מראה מה עוד לא אומת, ופקודה אחרת בודקת מול המקורות הרשמיים אם משהו בחוק השתנה.
מתחת לסף, שואלים
כל פריט מקבל ציון ביטחון. מה שמתחת לסף לא נרשם לבד, אלא נכנס לתור עם הסבר. טעות שקטה בספרים היא קנס, ושאלה היא רק עוד לחיצה.
מנתחים, לא ממליצים
המערכת משווה דמי ניהול, מחשבת מס ומסבירה, אבל לא אומרת "תקנה X" או "זה מתאים לך". בדיקה אוטומטית נכשלת אם ניסוח כזה מופיע. שאלה שתלויה בפרשנות מסומנת "שאלה ליועץ".
בדיקה לא נוגעת בנתונים אמיתיים
הבדיקות רצות על מסד שנבנה מהמבנה בלבד, בלי אף שורה אמיתית, ועל תיקיות מבודדות. בדיקה שכותבת לנתונים האמיתיים נחשבת באג, גם אם היא עוברת.
כל משתמש בתיקייה משלו
משתמש נוסף נכנס בהזמנה בלבד, ומקבל תהליך ותיקיית נתונים נפרדים, לא שורה עם מזהה באותה טבלה. בדיקה סורקת את הקוד ונכשלת על כל נתיב נתונים שלא הופנה לתיקייה של המשתמש.
כל שער כזה נולד ממשהו שהשתבש.
01חשבונית שהוצאתי נרשמה כהוצאההכנסה שנספרה כהוצאה
+
בסריקת מייל, חשבוניות שהעסק עצמו שלח ללקוחות נקלטו כהוצאות. טעות כזו הופכת רווח להפסד בספרים.
הקליטה זיהתה "חשבונית" ולא בדקה מי הספק. בחשבונית שהעסק הוציא, העסק הוא הספק.
שער שבודק את שם הספק מול שמות העסק. השמות עצמם יושבים בקובץ הגדרות מקומי ולא בקוד.
02עסקה אחת, שתי הוצאותInvoice וגם Receipt
+
חיובים של ספקי תוכנה מחו"ל נרשמו פעמיים.
חלק מהספקים שולחים על כל חיוב גם חשבונית וגם קבלה. שני קבצים, עסקה אחת.
שער שמזהה את הזוג ורושם עסקה אחת. באותה סריקה נוסף גם שער לבאנר פרסומי שנקלט כהוצאה של 0 ₪ בלי תאריך.
03קבלת בדיקה נכנסה לספריםקובץ סינתטי שנראה אמיתי
+
קבלה מומצאת, שנכתבה בשביל בדיקה, נרשמה כהוצאה עסקית אמיתית, כולל קיזוז מע"מ.
קובץ הבדיקה הגיע לתיקיית הקליטה, ושום דבר לא הבדיל בינו לבין קבלה אמיתית.
שער הקליטה חוסם כל קובץ שהתוכן שלו זהה לקובץ בתיקיית הבדיקות. אסור להשבית את השער הזה.
04תשלום מהטלפון שנספר פעמייםפעם ברגע התשלום, ופעם בפירוט הכרטיס
+
תשלום שנרשם מהטלפון ברגע הקנייה חוזר אחר כך כתנועה בפירוט הכרטיס.
אם שני הרישומים נכנסים לאותה טבלה, אותה הוצאה נספרת פעמיים.
התשלום נשמר בנפרד כ"ממתין", ומותאם רק לתנועה באותו סכום בדיוק, מיום לפני ועד ארבעה ימים אחרי. אחרי 14 יום בלי התאמה הוא מסומן "לא נמצא". סכום נקרא רק כשיש לידו סימן מטבע.
05מסך לבן אחרי כל בנייהמטמון שהחזיק גרסה ישנה
+
אחרי בנייה חדשה, האפליקציה במחשב נפתחה כמסך לבן.
המטמון שאחראי על מצב האופליין החזיק מעטפת ישנה, שהצביעה על קובץ JavaScript שכבר נמחק.
המטמון נרשם רק בחיבור מאובטח, כלומר בנייד, ובמחשב האפליקציה מוחקת מטמון שנשאר מגרסה קודמת. דפדפן שנתקע משתחרר בטעינה אחת.
מחקר קודם, קוד אחר כך.
הפרויקט התחיל ממסמך תכנון ומחקר, ולא ממסך. התאריכים כאן לקוחים ממסמכי הפרויקט ומהיסטוריית הגרסאות.
מה רואה חשבון עושה, ומה מתוכו אפשר להעביר למערכת
כתבתי מסמך תכנון שמפרק את העבודה השוטפת מול מע"מ, מס הכנסה וביטוח לאומי, ומסמן גם מה אי אפשר להחליף: ייצוג מול פקיד שומה נשאר אצל איש מקצוע. באותו יום בדקתי בפועל את הממשק של מערכת החשבוניות מול חשבון בדיקה. אחר כך הגיעו 18 מסמכי מחקר, וכל עובדה בהם מתויגת: מאומתת ממקור רשמי, מקצועית, או לא מאומתת.
המנועים: קליטה, בנק, מסים ותור
קליטת קבלות מהמייל ומהטלפון, סנכרון לילי של הבנק והכרטיסים, מנוע מסים שקורא מטבלת הכללים, תור האישורים, וממשק בעברית שעובד במחשב ובנייד. ב-18.9 הקוד עלה למאגר פרטי, בלי שום נתון אישי: שמות, מספרי חשבון וסכומים נשארים מחוץ לקוד.
אותה מערכת, עם עסק בדוי
בניתי משתמש הדגמה בשם ישראל ישראלי, ובמקביל את הדמו הציבורי: בנייה סטטית שרצה כולה בדפדפן, עם פס קבוע שאומר שכל המספרים מומצאים.
משתמשים בהזמנה, הקשחה ותשלומים מהטלפון
הרשמה בקוד הזמנה בלבד, מדריכי ייצוא קבצים מגופים פיננסיים, והקשחה של השרת: הוא מאזין רק למחשב עצמו, החלפת קוד הכניסה מנתקת את כל המכשירים, ובקשה מאתר אחר נחסמת. ב-22.9 שכתבתי את כל הטקסטים כך שידברו אל מי שקורא, וב-24.9 נוספו התשלומים מהטלפון.
צ'קליסט אבטחה לפני שמישהו נוסף נכנס
כל קלט שמגיע לשרת עובר בדיקת מבנה, ושגיאה מחזירה הודעה בעברית בלי פרטים פנימיים. נוספו יומן אבטחה, גיבוי מוצפן עם בדיקת שחזור ומדיניות פרטיות. ב-29.9 תקבולים מתחילים להיכנס להכנסות לבד, בלי כפילויות.
המערכת עצמה.
כל הצילומים כאן נלקחו מהדמו הציבורי, עם הנתונים הבדויים של "ישראל ישראלי". לחצו על כל תמונה כדי להגדיל.
בהירכהה
"מסים": מה מגיע השנה, למי ומתי, וכמה כדאי להפריש מכל שקל רווח. גררו את הקו כדי לעבור בין המצב הבהיר לכהה.

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

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

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

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

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

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

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

כל סיווג שהמערכת עשתה, ולמה: "מוכר 100% במס, 66% במע"מ, מתוך טבלת הכללים של 2026". אפשר לשנות כל החלטה, והיא נזכרת לפעם הבאה.

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






אותו קוד, נתונים מומצאים, ושום דבר לא יוצא מהדפדפן.
הדמו הוא לא סרטון ולא מוקאפ. זו המערכת עצמה, שנבנתה במצב אחר: בלי שרת, בלי מסד נתונים ובלי שום חיבור החוצה. כל מבקר מקבל עותק משלו בדפדפן, ואלף מבקרים לא עולים יותר ממבקר אחד.
/api/…כל המסכים מקבלים נתונים מהכתובת הזו בלבד. בדמו, קובץ אחד מיירט את הבקשות ומגיש את הנתונים מהזיכרון, בלי אף תנאי בתוך מסך.
new Date()כל התאריכים בדמו נגזרים מיום הטעינה. הוא יציג תמיד "החודש" ו"עוד ארבעה ימים", גם בעוד שנתיים, ולא ארכיון מ-2026.
stateהמצב משתנה באמת: קבלה שאושרה יוצאת מהתור, ממצא שסומן נסגר, שאלה נשמרת בהיסטוריה. הכול בזיכרון הדפדפן, ורענון מחזיר להתחלה.
import()קוד הדמו נטען רק בייבוא דינמי, מאחורי מתג. כך הוא לא נכנס בכלל לבנייה האמיתית, ושני הצדדים נשארים נקיים זה מזה.
demo-isolationבדיקה אוטומטית שרצה עם כל השאר: הדמו לא מייבא מהמערכת האמיתית, השרת לא מייבא מהדמו, השם האמיתי לא מופיע בדמו, ואין בו פנייה לכתובת חיצונית.
#/ניתוב לפי סולמית ונתיבים יחסיים. הדמו הוא תיקייה סטטית שעובדת מכל מקום, גם מתת-תיקייה באתר הזה, בלי שום הגדרה בשרת.
הפס הכתום בראש הדמו, "דמו: כל המספרים מומצאים", קבוע ואי אפשר לסגור אותו. מסך שמציג מספרים פיננסיים בלי לומר שהם מומצאים הוא בדיוק מה שהכלל הראשון של המערכת אוסר, גם כשהקהל הוא מבקרים באתר. דבר אחד לא נכלל בדמו: קליטת קבצים. העלאת קבלה מציגה הסבר במקום לקרוא את הקובץ, כי אין שרת שיקרא אותו.
רוצים מערכת כזו לעסק שלכם?
אני בונה כלים פנימיים שחוסכים עבודה ידנית: מערכות שאוספות את המידע מהמקומות שבהם הוא כבר נמצא, מסדרות אותו, ואומרות לכם מה לעשות ומתי.
בואו נדבר →