Web Development April 2026 1194 views

טיולי מצרים

טיולי מצרים — פלטפורמת חוויות גלובלית אספקת חוויות טיול ותיירות עם יחס המרה גבוה, תוך התמקדות ב-SEO והנדסה ברמה ארגונית למהירות, אמינות ולוקליזציה.

טיולי מצרים

טיולי מצרים — פלטפורמת חוויות גלובלית

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

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

  • קטלוג מוצרים מהיר וניתן לסינון, המותאם לשאילתות בעלות השהיה נמוכה וחיפושים מורכבים.
  • מנוע תמחור והזמנות גמיש התומך בתמחור לפי טווחי תאריכים, וריאציות של חדרים/קבינות, ומדיניות תמחור לילדים.
  • לוקליזציה מלאה (תרגום שפות ו-Slugs) והמרת מטבע עבור קהלים גלובליים.

הצעת ערך מרכזית ודגשי שיווק

  • ביצועים ומדרגיות: הפלטפורמה בנויה על Laravel 12 ומותאמת לקנה מידה עם דנורמליזציה אסטרטגית (טבלת product_filters), מטמון ידידותי ל-Redis בשירותים כמו CurrencyService, ואריזת Frontend מבוססת Vite. אגרגציות כבדות מחושבות מראש בזמן הכתיבה, מה שמאפשר נתיבי קריאה מהירים במיוחד עבור סינון ורשימות.

  • מצוינות ב-UX / UI: Tailwind CSS v4 + Vite מספקים ממשק משתמש רספונסיבי ומבוסס רכיבים. שיפורים הדרגתיים ונקודות קצה של JSON (למשל, /api/tours-list) כלולים כדי לתמוך בחוויות צד-לקוח מהירות ווידג'טים של השלמה אוטומטית.

  • אבטחה ואמינות: ברירות המחדל עוקבות אחר שיטות העבודה הטובות ביותר של Laravel—הגדרות קפדניות מבוססות סביבה, טפסים מוגנים מ-CSRF, אימות קפדני באמצעות Form Requests, וממשק ניהול (Filament) עבור CRUD מאובטח. הפרויקט כולל בדיקות Pest ועיצוב קוד באמצעות Pint לשמירה על היגיינת קוד.

ארכיטקטורה טכנית וטכנולוגיות

  • Backend / API

    • תשתית: Laravel 12 (PHP ^8.2).
    • תבנית: MVC + שכבת שירותים. שירותי מפתח כוללים FilterService, PricingService, ו-CurrencyService (ראו app/Services).
    • ניהול: Filament v5 עבור ניהול תוכן וחוויית ניהול בטוחה.
    • מסד נתונים: יחסי (מומלץ Postgres). הסכימה כוללת טבלאות product_filters דנורמליות להאצת שאילתות מורכבות.
  • Frontend

    • כלים: Vite, Tailwind CSS v4.
    • רכיבים: רכיבי Blade ניתנים לשימוש חוזר ונקודות קצה של JSON עבור ממשק משתמש אסינכרוני (חיפוש/השלמה אוטומטית).
    • צד שלישי: Swiper עבור קרוסלות.
  • DevOps ותשתית

    • סקריפטים למפתחים מקומיים מסופקים ב-composer.json (setup, dev, test).
    • CI: הפרויקט משתמש ב-Pest לבדיקות וב-Pint לעיצוב; ניתן לשלב בצינורות CI לאכיפת בקרת איכות.
    • מטמון: משתמש ב-Laravel Cache (מומלץ Redis) עבור רשימות מטבעות ומסננים מחושבים.
    • קונטיינריזציה: עובד בתוך Docker באמצעות Laravel Sail או סביבת ה-PHP המועדפת עליך.

תרשים ארכיטקטורה

graph LR
	A[דפדפן משתמש] -->|HTTP/HTTPS| B[Laravel Frontend (Blade + Vite)]
	B --> C[ניתובים/בקרים]
	C --> D[שכבת שירות]
	D -->|כתיבה| E[טבלת product_filters]
	D -->|קריאה/כתיבה| F[מוצרים / תמחור / יציאות]
	F --> G[Postgres]
	D --> H[CurrencyService Cache (Redis)]
	I[Filament Admin] --> F

תכונות מרכזיות וניתוחים טכניים עמוקים

  1. מסנני מוצרים (חיפוש מהיר ומורכב)
  • תכונה: מסנני מוצרים מחושבים מראש המאוחסנים ב-product_filters כדי לאפשר סינון יעיל לפי מדינות, יעדים, טקסונומיות, טווחי מחירים ומשך זמן.
  • האתגר: הרצת Joins או אגרגציות כבדות על פני קטלוגים גדולים של מוצרים ותרגומים גורמת לזמני טעינה איטיים ושאילתות מורכבות.
  • פתרון הנדסי: FilterService::rebuildProductFilters() (ראו app/Services/FilterService.php) מרכיב שורות מנורמלות בעת שמירה/עדכון של מוצר ומכניס אותן ל-product_filters. נתיב הקריאה משתמש בלוגיקת חיתוך (getProductIdsByFilters) כדי לשלב קריטריוני סינון ביעילות—דבר זה הופך חיפושים של רבים-לרבים לשאילתות פשוטות עם אינדקסים ומפחית את העומס על בסיס הנתונים בזמן ריצה.
  1. תמחור והזמנות (טווח תאריכים, קבינות, מדיניות ילדים)
  • תכונה: חישוב הצעת מחיר מדויק על פני וריאציות תמחור (לפי אדם, לפי קבינה), יציאות ועקיפות של טווחי תאריכים.
  • האתגר: כללי התמחור משתנים לפי תאריך נסיעה, סוג קבינה או חדר ומדיניות הנחות לילדים, והמערכת חייבת להחזיר הצעות מחיר עקביות וניתנות לביקורת.
  • פתרון הנדסי: PricingService::calculateQuote() (ראו app/Services/PricingService.php) פותר את יחידת הבסיס הנכונה על ידי בדיקת מחירים ספציפיים ליציאה, מחירי קבינה, שורות תמחור מתוארכות, ולבסוף חלופות בטוחות. תמחור ילדים משתמש ב-childPolicyRules כדי לחשב הנחות לפי גיל; המרת מטבע מואצלת ל-CurrencyService כמקור אמת יחיד. המימוש משתמש בסידור הגיוני (טווח->חלופה->נוצר_ב) כדי לבחור באופן דטרמיניסטי את שורת המחיר הנכונה.
  1. ניתוב רב-לשוני ו-SEO
  • תכונה: נתיבים מקומיים עם Slugs מתורגמים, כתובות URL קנוניות ומסננים מודעי-שפה.
  • האתגר: הגשת תוכן מקומי ידידותי ל-SEO תוך הימנעות מהתנגשויות ניתוב עם Slugs שמורים ושמירה על תאימות לאחור.
  • פתרון הנדסי: נתיבים מקובצים ומוגנים עם Middleware מסוג SetLocale וקבוצות קידומות מקומיות ב-routes/web.php. נתיבי מוצרים מקוננים ומוכווני-מדינה משתמשים בהחרגות Regex כדי למנוע התנגשויות Slugs שמורים. תרגומים מאוחסנים בטבלאות תרגום לכל ישות, ושורות סינון מודעות-תרגום כוללות language_id כך שמסנני ממשק המשתמש מציגים רק Slugs רלוונטיים עבור הלוקאל שנבחר.

פרויקטים קשורים