אתר להזמנת סטים לארבעת המינים (רגילים + מהדורה מוגבלת), עם תהליך הזמנה ותשלום מקדמה (20%) בביט, ומערכת ניהול הזמנות למנהל.
נבנה עם Next.js 16 (App Router), TypeScript, Tailwind CSS 4, Prisma.
npm install
npx prisma migrate dev # יוצר את בסיס הנתונים המקומי (SQLite)
npm run seed # קטלוג לדוגמה + משתמש מנהל
npm run dev
האתר יעלה בכתובת http://localhost:3000. כניסת מנהל: http://localhost:3000/admin/login
עם הפרטים שמוגדרים ב-.env (ADMIN_USERNAME / ADMIN_PASSWORD).
.env)| משתנה | תיאור |
|---|---|
DATABASE_URL |
חיבור לבסיס הנתונים. מקומית: קובץ SQLite. בפרודקשן: Postgres מנוהל. |
SESSION_SECRET |
מפתח לחתימת session מנהל. חובה להחליף לערך אקראי לפני העלאה לאוויר (openssl rand -base64 32). |
ADMIN_USERNAME / ADMIN_PASSWORD |
משמשים רק ל-seed הראשוני של משתמש המנהל. |
NEXT_PUBLIC_GA_MEASUREMENT_ID |
מזהה Google Analytics (G-XXXXXXX). ריק = לא נטען GA כלל. |
NEXT_PUBLIC_WHATSAPP_NUMBER |
מספר הוואטסאפ לכפתור הצף, בפורמט בינלאומי ללא +. |
prisma/seed.ts הם
לדוגמה בלבד. יש לעדכן שם ולהריץ npm run seed מחדש (או לערוך ישירות
דרך עמוד /admin/sets לאחר ההרצה).public/images/placeholder-set.svg). יש להוסיף קבצי מדיה אמיתיים
ולקשר אותם דרך טבלת SetMedia (כרגע נעשה בקוד/seed — ניהול תוכן מלא
לא נבנה ב-MVP הזה).SITE.phoneDisplay
ב-src/lib/site-content.ts) הוא המספר הנכון לביט.src/lib/site-content.ts
(CANCELLATION_POLICY_TEXT) הוא ניסוח לדוגמה בלבד — יש לאשר עם בעל
העסק את האחוזים והתנאים המדויקים לפני העלאה לאוויר.מערכת הניהול יכולה לשמור עותק חי של כל ההזמנות בגיליון Google Sheets — מתעדכן אוטומטית בכל הזמנה חדשה, אישור מקדמה, שינוי סטטוס וכו’. כברירת מחדל זה כבוי (משתני הסביבה ריקים); כשלא מוגדר, שום דבר לא נשבר — פשוט אין סנכרון.
איך להפעיל (חד-פעמי, דורש חשבון Google):
arba-minim-sync).client_email ו-private_key.client_email (משהו כמו
arba-minim-sync@your-project.iam.gserviceaccount.com), עם הרשאת
עריכה (Editor)./d/ ל-/edit)..env (או במשתני הסביבה ב-Vercel):
GOOGLE_SHEETS_SPREADSHEET_ID="המזהה מהשלב 6"
GOOGLE_SERVICE_ACCOUNT_EMAIL="client_email מהקובץ JSON"
GOOGLE_SERVICE_ACCOUNT_PRIVATE_KEY="private_key מהקובץ JSON (עם ה-\n בפנים, במרכאות)"
/admin/orders יופיע פס ירוק “סנכרון
פעיל” במקום הפס הכתום, ויש גם כפתור “סנכרון ידני עכשיו”.הגיליון נכתב מחדש במלואו (לשונית בשם “הזמנות”) בכל שינוי בהזמנה — כך שהוא תמיד משקף בדיוק את מה שיש במערכת, ללא סיכון לשורות כפולות.
prisma/schema.prisma: שנו provider = "sqlite"
ל-provider = "postgresql", ואז:
npx prisma migrate dev --name init_postgres
DATABASE_URL,
SESSION_SECRET חדש וסודי, ADMIN_USERNAME/ADMIN_PASSWORD לצורך
ה-seed הראשוני, NEXT_PUBLIC_GA_MEASUREMENT_ID,
NEXT_PUBLIC_WHATSAPP_NUMBER).npm run seed עם DATABASE_URL
של הפרודקשן), ואז שנו את סיסמת המנהל (או מחקו והחליפו את המשתמש).NEXT_PUBLIC_GA_MEASUREMENT_ID./admin/* מוגנים גם ב-Proxy (בדיקה אופטימית) וגם בכל עמוד/פעולת
שרת בנפרד (הבדיקה האמיתית) — כך שאין נתיב שמדלג על ההרשאה.X-Frame-Options, X-Content-Type-Options
וכו’) מוגדרות ב-next.config.ts.מומלץ לפני עלייה לאוויר: להריץ סקירת אבטחה נוספת (/security-review
בקוד הזה, או סקירה ידנית), ולוודא HTTPS בכל סביבת הפרודקשן.