מערכת ניהול זמן וחיוב לפרילנסרים - ניהול לקוחות, פרויקטים, משימות ומעקב שעות עבודה.
- 👤 הרשמה והתחברות - מערכת משתמשים מאובטחת
- 👥 ניהול לקוחות - שם, כתובת, טלפון, פרטי בנק, ח.פ
- 📁 ניהול פרויקטים - מחיר קבוע או לפי שעה
- ✅ ניהול משימות - בתוך כל פרויקט עם סטטוסים
- ⏱️ טיימר עבודה - מעקב זמנים עם אינטרוולים
- 💰 תמחור מדורג - מחשבון → לקוח → פרויקט → משימה
- 🔗 שיתוף ללקוח - לינק לצפייה בסטטוס הפרויקטים
- 📊 סטטיסטיקות - בכל מסך מוצגים נתונים רלוונטיים
- Node.js + Express
- SQLite (better-sqlite3)
- JWT Authentication
- bcryptjs
- React 18 + Vite
- React Router v6
- Zustand (State Management)
- CSS מותאם אישית (RTL)
# התקנת כל התלויות (root + client + server)
npm run install:all
# הפעלת פיתוח (שרת + קליינט)
npm run devבריצה הראשונה השרת יוצר אוטומטית את server/clockwize.db עם כל הסכמה ומשתמש אדמין ברירת-מחדל.
- Frontend: http://localhost:5173
- Backend API: http://localhost:3001
- JWT_SECRET — הגדרו משתנה סביבה משלכם. אחרת השרת ישתמש בערך ברירת-מחדל הכתוב בקוד.
- משתמש אדמין — בריצה ראשונה נוצר משתמש
adminעם סיסמהadmin. שנו אותה מיד או מחקו את משתמש האדמין דרך הקוד והרשמו משתמש משלכם. - uploads/ — תיקייה זו לא נכללת ב-git. ודאו backup חיצוני בפרודקשן.
POST /api/auth/register- הרשמהPOST /api/auth/login- התחברותGET /api/auth/me- קבלת פרטי משתמשPUT /api/auth/profile- עדכון פרופילDELETE /api/auth/account- מחיקת חשבון
GET /api/clients- רשימת לקוחותGET /api/clients/:id- פרטי לקוחPOST /api/clients- יצירת לקוחPUT /api/clients/:id- עדכון לקוחDELETE /api/clients/:id- מחיקת לקוחPOST /api/clients/:id/share- יצירת לינק שיתוףDELETE /api/clients/:id/share- הסרת לינק שיתוףGET /api/clients/shared/:token- צפייה בלקוח משותף (ציבורי)
GET /api/projects- רשימת פרויקטיםGET /api/projects/:id- פרטי פרויקטPOST /api/projects- יצירת פרויקטPUT /api/projects/:id- עדכון פרויקטDELETE /api/projects/:id- מחיקת פרויקט
GET /api/tasks- רשימת משימותGET /api/tasks/:id- פרטי משימהPOST /api/tasks- יצירת משימהPUT /api/tasks/:id- עדכון משימהDELETE /api/tasks/:id- מחיקת משימה
GET /api/timer/active- טיימר פעילPOST /api/timer/start- התחלת טיימרPOST /api/timer/pause- השהיית טיימרPOST /api/timer/resume- המשך טיימרPOST /api/timer/stop- עצירה ושמירהDELETE /api/timer/discard- ביטול טיימרGET /api/timer/entries- רשומות זמן
GET /api/stats/dashboard- סטטיסטיקות דשבורדGET /api/stats/client/:id- סטטיסטיקות לקוחGET /api/stats/project/:id- סטטיסטיקות פרויקט
עקרון מרכזי במערכת: כל שינוי בנתונים חייב להשתקף מיידית בממשק המשתמש ללא צורך ברענון ידני של הדפדפן.
- אחרי כל פעולת CRUD (יצירה, עריכה, מחיקה) - קריאה מיידית לפונקציית
load*()לרענון הנתונים - סדר ביצוע:
- ביצוע הפעולה (API call)
- רענון הנתונים (
await loadData()) - הצגת הודעה למשתמש (אם קיימת)
// ✅ נכון - רענון מיידי לפני הודעה
const handleDelete = async (id) => {
await api.delete(id);
await loadData(); // Refresh immediately
alert('נמחק בהצלחה');
};
// ❌ שגוי - הודעה לפני רענון
const handleDelete = async (id) => {
await api.delete(id);
alert('נמחק בהצלחה'); // Blocks UI refresh
loadData();
};- ✅ Clients - יצירה, עריכה, מחיקה, שינוי מועדף
- ✅ Projects - יצירה, עריכה, מחיקה
- ✅ Tasks - יצירה, עריכה, מחיקה, שינוי סטטוס
- ✅ Time Entries - יצירה, עריכה, מחיקה
- ✅ Payments - יצירה, עריכה, מחיקה
- ✅ Admin Panel - כל פעולות ניהול משתמשים
clockwize/
├── client/ # React Frontend
│ ├── src/
│ │ ├── components/ # קומפוננטות משותפות
│ │ ├── pages/ # דפים ראשיים
│ │ ├── services/ # API calls
│ │ ├── store/ # Zustand store
│ │ ├── styles/ # Global CSS
│ │ └── utils/ # פונקציות עזר
│ └── public/
├── server/ # Node.js Backend
│ ├── routes/ # API routes
│ ├── middleware/ # Auth middleware
│ ├── database.js # SQLite setup
│ └── index.js # Express server
└── package.json # Root package.json
MIT