- אתר רספונסיבי שעובד מושלם על דסקטופ, טאבלט ומובייל
- PWA (Progressive Web App) עם manifest.json ו-Service Worker — שניתן להתקין על מסך הבית
- תמיכה ב-Offline — המשתמשים שלך יראו תוכן גם בלי אינטרנט
- אפליקציית React Native פשוטה שרצה על הטלפון שלך דרך Expo Go
- ציון Lighthouse מעל 90 בכל 4 הקטגוריות (ביצועים, נגישות, SEO, שיטות עבודה)
- מבנה Monorepo שמשתף קוד בין ווב למובייל
- רשימת בדיקות Cross-Platform שתבטיח חוויה אחידה בכל מכשיר
- תוכל/י להפוך אתר קיים לרספונסיבי עם גישת Mobile-First — כולל Media Queries, Flexbox ו-CSS Grid
- תוכל/י לבנות PWA מלא עם manifest.json, Service Worker ותמיכה אופליין
- תוכל/י להריץ Lighthouse Audit ולשפר את הציונים מעל 90 בכל הקטגוריות
- תוכל/י להעריך מתי PWA מספיק ומתי צריך React Native עם Expo
- תוכל/י לבנות מבנה Monorepo שמשתף קוד בין אפליקציית ווב לאפליקציית מובייל
- פרקים קודמים: פרק 3 (בניית אתר ראשון), פרק 4 (Web Apps), פרק 6 (APIs ונתונים)
- כלים נדרשים: Claude Code מותקן ופעיל, דפדפן Chrome עם DevTools, טלפון חכם (לבדיקות)
- רצוי: Expo Go מותקן על הטלפון (חינם), Playwright MCP מותקן (לבדיקות אוטומטיות)
- זמן מוערך: כ-4-5 שעות (כולל תרגולים)
בפרק 6 בנית אפליקציה מבוססת נתונים — עם חיבורי API, דשבורדים, Google Sheets, ואפילו Webhooks. בפרק הזה תהפוך את הפרויקט שלך לרספונסיבי וחוצה-פלטפורמות — כך שיעבוד מושלם על טלפון, טאבלט ודסקטופ, ותוסיף יכולות PWA כדי שניתן יהיה להתקין אותו. בפרק 8 תיקח את הפרויקט הרספונסיבי הזה ותעלה אותו לאוויר — עם דומיין, SSL, וניטור.
| מונח באנגלית | הסבר בעברית |
|---|---|
| Responsive Design (עיצוב רספונסיבי) | עיצוב שמתאים את עצמו אוטומטית לכל גודל מסך — מטלפון ועד מסך ענק |
| PWA (Progressive Web App) | אתר שמתנהג כמו אפליקציה — אפשר להתקין, לעבוד אופליין, ולקבל התראות |
| Service Worker | סקריפט שרץ ברקע בדפדפן — מנהל Cache, תמיכה אופליין, והתראות Push |
| manifest.json | קובץ שמגדיר את ה-PWA שלך: שם, אייקון, צבעים, ומצב תצוגה |
| Media Query | כלל CSS שמפעיל עיצוב שונה לפי גודל המסך — "אם המסך קטן מ-768 פיקסלים, עשה כך" |
| Viewport | השטח הנראה של המסך — שונה בכל מכשיר |
| Flexbox | מערכת פריסה ב-CSS שמסדרת אלמנטים בשורה או בעמודה — גמישה ורספונסיבית |
| CSS Grid | מערכת פריסה דו-מימדית ב-CSS — שולטת גם בשורות וגם בעמודות |
| React Native | פריימוורק לבניית אפליקציות מובייל נייטיב בעזרת React — קוד אחד ל-iOS ו-Android |
| Expo | ערכת כלים שמפשטת פיתוח React Native — בלי Xcode או Android Studio |
| Core Web Vitals | מדדי הביצועים של Google: מהירות טעינה (LCP), אינטראקטיביות (FID/INP), יציבות ויזואלית (CLS) |
| Lighthouse | כלי של Google שבודק ביצועים, נגישות, SEO ושיטות עבודה מומלצות — נותן ציון מ-0 עד 100 |
| Cache (מטמון) | אחסון זמני של נתונים כדי שלא צריך להוריד אותם שוב — מאיץ את הטעינה |
| Monorepo | מאגר קוד אחד שמכיל כמה פרויקטים — למשל אפליקציית ווב ואפליקציית מובייל ביחד |
1. המציאות של מובייל — The Mobile Reality
יותר מ-60% מהתעבורה באינטרנט מגיעה מטלפונים ניידים. זה לא סטטיסטיקה יבשה — זו מציאות שמשנה את הכול. אם בנית אתר מהמם על המסך הגדול שלך אבל המשתמשים שלך פותחים אותו בטלפון ורואים טקסט חתוך, כפתורים זעירים שאי אפשר ללחוץ עליהם, וגלילה אופקית מעצבנת — הפסדת אותם. לא משנה כמה יפה האתר שלך על דסקטופ.
מהתעבורה באינטרנט מגיעה ממכשירים ניידים — ובישראל, עם מעל 95% חדירת סמארטפונים, המספר אפילו גבוה יותר. לפי נתוני Statcounter 2025, בישראל נתח המובייל מגיע ל-67% מסך הגלישה
מה זה אומר בפועל? נניח שבנית אתר מושלם למסעדה ישראלית. הבעלים מרוצים, זה נראה מדהים על ה-iMac שלהם במשרד. אבל 70% מהלקוחות פותחים את האתר בזמן שהם בדרך, עומדים ברחוב, אור שמש חזק על המסך, מחזיקים את הטלפון ביד אחת בזמן שהשנייה מחזיקה שקית. אם הכפתור "הזמן שולחן" קטן מדי, אם הטלפון של המסעדה חתוך, אם התפריט לא נטען — הפסדת לקוח. בגלל UX גרוע במובייל, לא בגלל האוכל.
כ-Vibe Coder, המציאות הזו דווקא לטובתך. Claude Code מצוין בבניית ממשקים רספונסיביים — הוא מכיר את כל ה-CSS, את כל ה-Media Queries, ואת כל הטריקים של מובייל. הוא גם יכול להריץ בדיקות אוטומטיות על הקוד שלך דרך כלי Bash מובנה, או להשתמש ב-Playwright MCP כדי לפתוח את האתר שלך בגדלי מסך שונים ולצלם מסך. אבל אתה צריך לדעת מה לבקש ואיך לבדוק את התוצאה. בואו נתחיל עם שלוש הגישות העיקריות לבניית חוויית מובייל:
שלוש הגישות לבניית חוויית מובייל
| גישה | מה זה | יתרונות | חסרונות | מתי להשתמש |
|---|---|---|---|---|
| Responsive Website (אתר רספונסיבי) | אתר אחד שמתאים את עצמו לכל גודל מסך | פשוט לבנות, URL אחד, SEO מעולה | אין גישה מלאה לחומרת הטלפון | רוב הפרויקטים (90%!) |
| PWA (Progressive Web App) | אתר שמתנהג כמו אפליקציה — התקנה, אופליין, התראות | התקנה בלי App Store, עובד אופליין | מגבלות מסוימות ב-iOS | אפליקציות שמשתמשים חוזרים אליהן באופן קבוע |
| React Native (אפליקציה נייטיב) | אפליקציה אמיתית ב-App Store — קוד אחד ל-iOS ו-Android | גישה מלאה לחומרה, App Store, ביצועים גבוהים | מורכב יותר, דורש ידע נוסף | רק אם חייבים להיות ב-App Store או צריכים גישה לחומרה |
תענה על השאלות האלה בסדר, ותדע בדיוק מה לבנות:
- האם זה אתר מידע (תוכן, פורטפוליו, בלוג)? → אתר רספונסיבי. סגור. זה הכול.
- האם יש אפליקציית ווב שמשתמשים חוזרים אליה באופן קבוע? → PWA. התקנה על מסך הבית + עבודה אופליין = חוויה מעולה.
- האם צריך מצלמה, GPS, Push Notifications או Bluetooth? → PWA (רוב היכולות האלה נתמכות). רק אם צריך Bluetooth או NFC מתקדם → React Native.
- האם חובה להיות ב-App Store? → React Native עם Expo. זה המקרה היחיד שבו באמת חייבים.
שורת בסיס: 90% מפרויקטי Vibe Coding עובדים מצוין כאתר רספונסיבי או PWA. אל תקפוץ ל-React Native אלא אם יש סיבה ספציפית.
הטעות: לעצב אתר מושלם למסך גדול ואז לנסות "לדחוס" את הכול למובייל ברגע האחרון. למה זה מפתה: אתה עובד על מסך גדול, זה נוח, והכול נראה מעולה. מה לעשות במקום: תמיד תתחיל מ-Mobile-First — עיצוב ל-375px קודם, ואז תוסיף מורכבות לטאבלט ולדסקטופ. ב-Claude Code: "Design this page mobile-first: start with 375px layout." זה חוסך שעות של תיקונים.
הפילוסופיה של Mobile-First
Mobile-First זו לא סתם טכניקה — זו דרך חשיבה שמשנה את כל תהליך העבודה שלך. הגישה המסורתית היא "Desktop First": מעצבים למסך גדול ואז "מדחסים" הכול למובייל. התוצאה? אתר שנראה כמו דסקטופ מכווץ — לא נעים, לא נוח, לא מזמין. Mobile-First הפוך לגמרי: אתה מתחיל מהמסך הקטן ביותר — 375 פיקסלים (אייפון SE) — ומוסיף מורכבות ככל שהמסך גדל.
למה זה עובד טוב יותר? כי זה מכריח אותך לקבל החלטות כואבות מההתחלה. אם יש לך רק 375 פיקסלים רוחב, אתה חייב לבחור: מה הדבר הכי חשוב שהמשתמש צריך לראות? מה אפשר להסתיר מאחורי תפריט? מה אפשר להוריד לגמרי? ההחלטות האלה מייצרות עיצוב טוב יותר גם בדסקטופ, כי הן מאלצות מיקוד.
חנות אונליין ישראלית: בדסקטופ יש סרגל צד עם קטגוריות, פילטרים, והמלצות. במובייל? כפתור פילטר אחד בראש העמוד, המוצרים בעמודה אחת, וכפתור "הוסף לסל" גדול וברור. אותו תוכן, חוויה שונה ומותאמת.
דשבורד לניהול עסק: בדסקטופ יש 4 גרפים בשורה אחת. במובייל? הגרף הכי חשוב למעלה במסך מלא, השאר בגלילה למטה. המשתמש רואה את המספר הכי חשוב מיד, בלי זום.
איך אומרים את זה ל-Claude? במקום "Design my page", אמור: "Design this page mobile-first: start with a single-column layout for 375px screens, then add a 2-column layout for tablets (768px), and a 3-column layout for desktop (1024px+)." הפירוט הזה מבטיח ש-Claude יתחיל ממובייל.
ב-Claude Code יש כמה כלים שעוזרים לך לבדוק את התוצאה: כלי ה-Bash מאפשר להריץ פקודות כמו npx lighthouse ישירות מהטרמינל וקבל דו"ח ביצועים. אם יש לך Playwright MCP מותקן, Claude יכול ממש לפתוח את האתר שלך בדפדפן בגדלי מסך שונים (375px, 768px, 1024px) ולצלם מסך — כך שאתה רואה בדיוק איך זה נראה בלי לפתוח טלפון. בקש: "Open this page in Playwright at 375px width and take a screenshot" — ותקבל תמונה מיידית. אם יש בעיות, Claude יתקן ויצלם שוב.
מה המשתמשים מצפים לראות במובייל? ארבעה דברים קריטיים:
- טעינה מהירה — מתחת ל-3 שניות. אם האתר שלך איטי, המשתמש כבר הלך. Google מדווחת ש-53% מהמשתמשים נוטשים אתר שנטען יותר מ-3 שניות.
- כפתורים שאפשר ללחוץ עליהם — Touch Targets של לפחות 44x44 פיקסלים. האצבע הרבה יותר גדולה מסמן העכבר. אם הכפתור קטן מדי, המשתמש מתוסכל.
- תנועות מגע טבעיות — Swipe לניווט, Pull-to-Refresh לרענון, Pinch-to-Zoom לתמונות. המשתמש מצפה לאינטראקציות שמרגישות טבעיות לטלפון.
- בלי גלילה אופקית — אף פעם. זה הסימן הראשון שמשהו שבור בעיצוב שלך.
פתח את האתר שבנית בפרקים הקודמים בטלפון שלך (לא ב-DevTools — בטלפון אמיתי!). גלול דרך כל העמודים. חפש את 5 הבעיות האלה: (1) טקסט קטן מדי שצריך לעשות לו זום, (2) כפתורים שקשה ללחוץ עליהם, (3) גלילה אופקית, (4) תמונות שנחתכות או גדולות מדי, (5) תפריט שלא עובד. רשום מה מצאת — בסעיף הבא נתקן את הכול.
כדי לראות את האתר המקומי שלך בטלפון, הם צריכים להיות על אותה רשת WiFi. הריצו את שרת הפיתוח עם --host (למשל npm run dev -- --host) וגשו מהטלפון לכתובת ה-IP המקומית. אפשר גם להשתמש בכלי כמו ngrok לגישה מבחוץ.
2. עיצוב רספונסיבי — Responsive Design Mastery
אנשים חושבים שעיצוב רספונסיבי זה "להוסיף Media Queries". זו רק חלק קטן מהתמונה. Media Query (שאילתת מדיה) הוא כלל CSS שאומר "אם המסך קטן מ-768 פיקסלים, עשה כך". זה חשוב, אבל זה רק אחד מהכלים. עיצוב רספונסיבי אמיתי (Responsive Design) מבוסס על שלושה עמודי תווך: פריסות גמישות (Fluid Layouts), תמונות מתאימות (Flexible Images), ותעדוף תוכן (Content Priority). Claude Code מצוין בכל השלושה — אם אתה יודע מה לבקש.
תהליך העבודה הרספונסיבי עם Claude Code
לפני שנצלול לטכניקות, בואו נבין את תהליך העבודה הנכון ב-Claude Code לפיתוח רספונסיבי. הנה הלולאה שתשתמש בה שוב ושוב:
- תאר את ה-Layout ב-Prompt — "Build a responsive product grid: 1 column on mobile, 2 on tablet, 3 on desktop"
- Claude כותב את הקוד — CSS Grid + Media Queries + HTML
- בדוק בדפדפן — פתח DevTools, לחץ Ctrl+Shift+M להדלקת Device Toolbar, ובדוק ב-375px, 768px, 1024px
- צלם מסך ושלח ל-Claude — "Here's how it looks on mobile [screenshot]. The cards are too close together and the text is cut off. Fix the spacing and font size."
- חזור על 3-4 — עד שזה מושלם בכל גודל מסך
הטריק: תמיד תבדוק בשלושה גדלים — 375px (אייפון SE, המסך הצר ביותר שרלוונטי), 768px (טאבלט / iPad), ו-1024px+ (דסקטופ). אם זה עובד בשלושת הגדלים האלה, זה יעבוד בכל מכשיר.
כשאתה עובד על רספונסיביות של עמוד שלם (לא רק רכיב אחד), השתמש ב-Plan Mode (Shift+Tab פעמיים, או /plan). אמור ל-Claude: "Plan a complete responsive redesign of this page" — הוא יציע תוכנית מפורטת עם כל השינויים לפני שהוא מתחיל לעבוד. אשר את התוכנית, ו-Claude יבצע את כל השינויים בבת אחת. זה חוסך הלוך-חזור ושומר על עקביות בעיצוב.
CSS Grid ו-Flexbox — שתי מערכות הפריסה
אם אתה זוכר רק שני דברים מהסעיף הזה, שיהיו אלה:
- Flexbox — מסדר אלמנטים בכיוון אחד: שורה או עמודה. מושלם לסרגלי ניווט, רשימות כפתורים, וכרטיסים בשורה. תחשוב עליו כמו חוט שמחרז עליו חרוזים.
- CSS Grid — מסדר אלמנטים בשני כיוונים: שורות ועמודות. מושלם ל-Layouts מורכבים, דשבורדים, וגלריות. תחשוב עליו כמו גליון Excel שאתה ממלא.
מתי להשתמש בכל אחד? Flexbox מושלם כשיש לך אלמנטים בכיוון אחד — תפריט ניווט אופקי, רשימת כפתורים, כרטיסים בשורה. CSS Grid מושלם כשצריך שליטה דו-מימדית — דשבורד עם כרטיסים בגדלים שונים, גלריית תמונות, או Layout של עמוד שלם עם Header, Sidebar ו-Content.
אגב, ברוב המקרים אתה תשתמש בשניהם באותו פרויקט. CSS Grid ל-Layout הכללי של העמוד, Flexbox בתוך כל רכיב. ב-Vibe Coding, אתה לא צריך לכתוב CSS Grid או Flexbox בעצמך. אתה מתאר את מה שאתה רוצה, ו-Claude עושה את השאר:
הפרומפט: "Redesign this page to be truly responsive: 3-column grid on desktop, 2 columns on tablet, stacked on mobile. Cards should have equal height. Navigation collapses to hamburger menu on mobile."
מה Claude עושה: משנה את ה-Layout ל-CSS Grid עם grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)), מוסיף Media Queries לטאבלט ומובייל, יוצר תפריט המבורגר עם אנימציה, ומוודא ש-Cards באותו גובה עם align-items: stretch.
טיפוגרפיה רספונסיבית — טקסט שמתאים את עצמו
טקסט שנראה מושלם על מסך 27 אינץ' נראה ענקי על טלפון, ולהיפך. כותרת font-size: 48px תיראה נהדר בדסקטופ אבל תתפוס שתי שורות על טלפון ותרגיש מגושמת. הפתרון: פונקציית clamp() ב-CSS.
h1 { font-size: clamp(1.5rem, 4vw, 3rem); }
מה זה אומר? גודל מינימלי 1.5rem (24px), גודל אידיאלי 4% מרוחב המסך (4vw), גודל מקסימלי 3rem (48px). הדפדפן בוחר את הגודל הנכון אוטומטית — במובייל זה יהיה קרוב ל-24px, בדסקטופ קרוב ל-48px, ובאמצע זה גולש בחלקלקות.
בקש מ-Claude: "Make all headings responsive using clamp() so they scale smoothly between mobile and desktop. Use rem units." — והוא יטפל בזה. גם ב-paragraph text כדאי להשתמש ב-clamp — למשל font-size: clamp(0.95rem, 1.5vw, 1.1rem) כדי שטקסט הגוף יהיה קריא בכל מסך.
הפרומפט: "Create a responsive typography scale for my Hebrew website: h1 should be clamp(1.8rem, 5vw, 3.5rem), h2 should be clamp(1.4rem, 3.5vw, 2.5rem), h3 should be clamp(1.2rem, 2.5vw, 1.8rem), body text clamp(1rem, 1.5vw, 1.15rem). All text should be in Heebo font, RTL direction, with proper line-height for readability on mobile (1.7 for body, 1.3 for headings)."
למה זה עובד: הפרומפט הזה נותן ל-Claude מספרים מדויקים. Claude לא צריך לנחש — הוא מייצר בדיוק את הסקייל שביקשת. הערכים של clamp() מבטיחים שהטקסט קריא על מסך של 375px אבל גם נראה מרשים על מסך של 1440px.
תמונות רספונסיביות — שלוש טכניקות
- srcset — מגדיר גרסאות שונות של אותה תמונה בגדלים שונים. הדפדפן בוחר את הגודל המתאים למסך.
- <picture> — מאפשר חיתוכים שונים לפי גודל מסך. למשל: תמונה רחבה בדסקטופ, חיתוך מרובע במובייל.
- Lazy Loading — תמונות נטענות רק כשגוללים אליהן. חוסך זמן טעינה ורוחב פס. פשוט מוסיפים
loading="lazy"ל-img.
Touch Targets — כפתורים שאפשר באמת ללחוץ עליהם
הכלל הוא פשוט: 44x44 פיקסלים מינימום לכל אלמנט שאפשר ללחוץ עליו. זה הסטנדרט של Apple ו-Google. כפתורים קטנים יותר גורמים לטעויות לחיצה ולתסכול. תחשוב על האצבע שלך מול סמן העכבר — האצבע מכסה שטח של לפחות 40 פיקסלים, ולרוב יותר. כשלוחצים על כפתור קטן, קל "לפספס" וללחוץ על הלינק שלידו.
מה נחשב Touch Target? כל דבר שלוחצים עליו: כפתורים, לינקים, תיבות בחירה (checkboxes), כפתורי רדיו, אייקונים של סגירה (X), חיצים של ניווט, ושורות בטבלה שניתן ללחוץ עליהן. אלמנטים נפוצים שבדרך כלל קטנים מדי: כפתור ה-X בפינה (לסגירת מודאל), לינקים בתוך טקסט, אייקוני מדיה חברתית בפוטר.
בקש מ-Claude: "Audit all clickable elements and ensure they meet the 44x44 pixel minimum touch target size. Add padding where needed without changing the visual design." — והוא יעבור על כל הכפתורים, הלינקים, והאייקונים ויתקן. הטריק: לפעמים אפשר להגדיל את אזור הלחיצה (עם padding) בלי להגדיל את הכפתור עצמו ויזואלית.
קח את האתר שבנית בפרק 3 ובקש מ-Claude: "Audit this website for mobile issues and fix them: ensure responsive grid layout, add hamburger menu for mobile, make all touch targets 44x44px minimum, add responsive images with lazy loading, and use clamp() for responsive typography." — אחרי שהוא מתקן, פתח את האתר בטלפון ובדוק שהכול עובד. נסה ללחוץ על כל כפתור, לגלול, ולנווט.
בכל פעם שאתה בודק אתר ברספונסיביות, עבור על הרשימה הזו בסדר הזה:
- Viewport Meta Tag — האם יש
<meta name="viewport" content="width=device-width, initial-scale=1.0">? בלי זה, שום דבר לא יעבוד. - פריסה גמישה — האם ה-Layout מתאים את עצמו? Grid ו-Flexbox במקום רוחב קבוע.
- תמונות רספונסיביות — האם התמונות מתכווצות עם המסך?
max-width: 100%על כל תמונה. - Touch Targets — האם כל כפתור ולינק הם לפחות 44x44 פיקסלים?
- גודל פונט — האם הטקסט קריא בלי זום? מינימום 16px ל-body text.
- בלי גלילה אופקית — האם יש אלמנט שגולש מהמסך?
- בלי רוחב קבוע — האם אין
width: 800pxאו ערכים קבועים שישברו את העיצוב במובייל?
בדוק על טלפון אמיתי, לא רק ב-DevTools. החוויה שונה לחלוטין — גלילה, נגיעות, וטעינה מרגישים אחרת על חומרה אמיתית. כפתור שנראה בסדר ב-DevTools יכול להיות בלתי אפשרי ללחוץ עליו באצבע.
3. Progressive Web Apps — אתר שמתנהג כמו אפליקציה
PWA = אפליקציית ווב שמתנהגת כמו אפליקציה רגילה. אפשר להתקין אותה על מסך הבית, היא עובדת גם בלי אינטרנט, היא יכולה לשלוח התראות Push, והיא נפתחת במסך מלא בלי סרגל כלים של הדפדפן. וכל זה — מאתר רגיל, בלי App Store, בלי תשלום ל-Apple, בלי המתנה לאישור.
למה PWA היא המהלך הגדול עבור Vibe Coders? כי אתה מקבל 80% מהיתרונות של אפליקציה נייטיב בעשירית מהמאמץ. תחשוב על זה: אפליקציה נייטיב דורשת חשבון מפתח (כ-100 דולר בשנה ל-Apple), תהליך בנייה מורכב, בדיקות Apple/Google, והמתנה לאישור. PWA? אתה מוסיף שני קבצים לאתר הקיים שלך ו-BANG — אפליקציה שניתן להתקין. בואו נבין מה הופך אתר רגיל ל-PWA:
שלושת המרכיבים של PWA
| מרכיב | מה זה | מה הוא עושה |
|---|---|---|
| manifest.json | קובץ JSON שמגדיר את האפליקציה | שם, אייקון, צבעי ערכת נושא, מצב תצוגה (standalone/fullscreen) |
| Service Worker | סקריפט JavaScript שרץ ברקע | מנהל Cache, תמיכה אופליין, Push Notifications, סנכרון ברקע |
| HTTPS | חיבור מאובטח | חובה ל-PWA — בלי HTTPS, Service Workers לא עובדים |
בקש מ-Claude: "Convert my website into a PWA" — והוא יוסיף manifest.json, ירשום Service Worker, ויגדיר Cache בסיסי. בפקודה אחת, האתר שלך הפך לאפליקציה שניתן להתקין.
מהיתרונות של אפליקציה נייטיב — בעשירית מהמאמץ. PWA נותנת לך התקנה, עבודה אופליין, התראות Push, ומסך מלא. חברות כמו Twitter (X), Starbucks, ו-Pinterest דיווחו על עלייה של 50-70% באינטראקציה אחרי מעבר ל-PWA
בואו נראה איך כל מרכיב נראה בפועל:
manifest.json — כרטיס הביקור של ה-PWA
{
"name": "מנהל המשימות שלי",
"short_name": "משימות",
"start_url": "/",
"display": "standalone",
"background_color": "#0a0a0f",
"theme_color": "#fe2c55",
"icons": [
{ "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" },
{ "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" }
]
}
זה הקובץ שאומר לדפדפן: "האתר הזה הוא אפליקציה. כשמתקינים אותו, תקרא לו 'משימות', תשתמש באייקון הזה, ותפתח במצב standalone (בלי סרגל כלים של הדפדפן)."
Service Worker — המוח מאחורי הקלעים
ה-Service Worker הוא סקריפט JavaScript שרץ ברקע, נפרד מהדף הראשי. הוא כמו עוזר אישי שיושב בין האתר שלך לבין האינטרנט ומחליט מה לעשות עם כל בקשה. הוא יכול:
- לשמור קבצים ב-Cache — כדי שהאתר יטען מהר (ויעבוד אופליין)
- ליירט בקשות רשת — ולהחליט אם לפנות לרשת או להגיש מה-Cache
- לקבל Push Notifications — גם כשהמשתמש לא גולש באתר
- לסנכרן נתונים ברקע — כשהחיבור חוזר אחרי שהיה אופליין
בקש מ-Claude: "Create a Service Worker that caches all static assets on install, and serves them from cache when offline, falling back to a custom offline page for uncached routes." — והוא ייצור את כל הלוגיקה.
הטעות: לפתח את ה-PWA ב-HTTP ולהתפלא שה-Service Worker לא נרשם ושה-Install Prompt לא מופיע. למה זה מפתה: בפיתוח מקומי, http://localhost עובד — אז נדמה לך שהכול בסדר. אבל ברגע שתפרוס לסביבה אמיתית בלי HTTPS, הכול נשבר. מה לעשות במקום: ודא ש-localhost עובד (זה מותר), אבל תבדוק גם בדומיין אמיתי עם HTTPS. כל פלטפורמות ה-Deployment נותנות HTTPS חינם.
Push Notifications — התראות למשתמשים
אחת היכולות החזקות ביותר של PWA היא Push Notifications — התראות שמופיעות על הטלפון של המשתמש גם כשהאתר סגור. "שלח התראה למשתמש כשהמשימה שלו מגיעה לדדליין" — Claude מחבר את Web Push API ומגדיר הכול.
חשוב להבין את הנושא של הרשאות: המשתמש חייב לאשר קבלת התראות. אל תבקש הרשאה ברגע שהמשתמש נכנס לאתר — זה מרגיז ורוב האנשים דוחים. במקום, חכה שהמשתמש יבצע פעולה רלוונטית (כמו "הזכר לי על המשימה הזו"), ואז בקש הרשאה בהקשר — שיעורי האישור קופצים פי 3. ב-Android ההתראות עובדות מעולה — בדיוק כמו אפליקציה נייטיב. ב-iOS זה נתמך מ-iOS 16.4 (2023) ומעלה, עם כמה מגבלות: ההתראה מגיעה רק כשהאפליקציה "מותקנת" (Added to Home Screen), ואין תמיכה ב-Silent Push.
שימושים פרקטיים נפוצים ל-Push Notifications:
- תזכורות למשימות — "המשימה 'להגיש הצעת מחיר' מגיעה לדדליין בעוד שעה"
- עדכוני סטטוס — "ההזמנה שלך נשלחה!" או "הבקשה שלך אושרה"
- התראות מחיר — "המוצר שעקבת אחריו ירד ב-30%!"
- עדכוני תוכן — "מאמר חדש פורסם בנושא שמעניין אותך"
Claude Code ו-PWA — תהליך העבודה המלא
הנה תהליך העבודה המומלץ להפיכת אתר קיים ל-PWA עם Claude Code:
- שלב 1 — יצירת קבצי ה-PWA: "Convert my website into a PWA: add manifest.json, service worker with cache-first for static assets, and register it in index.html"
- שלב 2 — יצירת אייקונים: "Create a simple SVG icon for my app and generate PNG versions at 192x192 and 512x512 pixels" — או השתמש בכלי כמו favicon.io ליצירת אייקונים מלוגו קיים
- שלב 3 — בדיקה ב-DevTools: פתח Application → Manifest → בדוק שאין שגיאות. פתח Application → Service Workers → בדוק שרשום ופעיל.
- שלב 4 — בדיקת אופליין: ב-DevTools, לשונית Network → סמן "Offline" → רענן את הדף. האם התוכן נטען? אם לא — שלח ל-Claude: "The page doesn't load offline. Check the service worker cache and fix."
- שלב 5 — Lighthouse PWA audit: הרץ Lighthouse → בדוק ש-PWA מסומן בירוק. Claude יכול לתקן כל בעיה שנמצאת.
הפוך אחד מהאתרים שלך ל-PWA. בקש מ-Claude: "Add a manifest.json with app name 'My App', icon placeholders, and theme color. Add a service worker that caches the main page, CSS, and JS for offline use. Register the service worker in the main HTML file." — אחרי שהוא מוסיף את הקבצים, פתח את האתר ב-Chrome וחפש את ההודעה "Install app" (שלוש נקודות → Install). באנדרואיד, תראה הודעה אוטומטית אחרי כמה ביקורים.
PWA עובדות ב-Android כמעט כמו אפליקציות נייטיב. ב-iOS יש מגבלות: אין Push Notifications בגרסאות ישנות יותר של iOS (לפני 16.4), עיבוד ברקע מוגבל, ו-Storage מוגבל ל-50MB. אם קהל היעד שלך הוא בעיקר אייפון — תבדוק שהתכונות שחשובות לך עובדות.
4. בניית אפליקציות שניתן להתקין
ההתקנה היא הרגע הקסום של PWA. המשתמש לוחץ "התקן", ופתאום האפליקציה שלך יושבת על מסך הבית שלו — בדיוק כמו WhatsApp או Instagram. אייקון, שם, ופתיחה במסך מלא. בלי App Store, בלי עמלה של 30%, ובלי המתנה של שבועיים לאישור.
manifest.json — כרטיס הביקור של האפליקציה
הקובץ manifest.json הוא מה שהדפדפן קורא כדי להבין שהאתר שלך הוא אפליקציה. הנה מה שצריך להגדיר:
- name ו-short_name — השם המלא והשם המקוצר (מופיע מתחת לאייקון)
- icons — אייקונים במספר גדלים. מינימום: 192x192 ו-512x512 פיקסלים. Claude יכול ליצור placeholder או לעזור לך להכין אותם.
- start_url — העמוד שנפתח כשמשתמשים פותחים את האפליקציה
- display — מצב התצוגה:
standalone(בלי סרגל דפדפן — מרגיש כמו אפליקציה),fullscreen(מסך מלא),minimal-ui(סרגל מינימלי) - background_color — צבע הרקע של מסך הפתיחה (Splash Screen)
- theme_color — צבע סרגל הסטטוס בטלפון
Splash Screen — מסך פתיחה
כשהמשתמש פותח את ה-PWA שלך, הוא רואה Splash Screen — מסך טעינה עם האייקון, השם, וצבע הרקע. זה מייצר תחושת אפליקציה נייטיב. הדפדפן יוצר את זה אוטומטית מהנתונים ב-manifest.json. אתה רק צריך לוודא שהאייקון ברזולוציה טובה (512x512 פיקסלים, PNG שקוף) והצבעים תואמים את העיצוב שלך. טיפ: השתמש ב-background_color שתואם לרקע של האתר שלך, כך שהמעבר מ-Splash Screen לתוכן יהיה חלק.
Custom Install Prompt — הודעת התקנה מותאמת
הדפדפן מציע התקנה בצורה סטנדרטית, אבל רוב המשתמשים מתעלמים מהודעות הדפדפן. אתה יכול ליצור הודעת התקנה מותאמת אישית שמסבירה למשתמש למה כדאי לו להתקין. הטריק: אל תציג את ההודעה מיד. חכה שהמשתמש יראה ערך — אחרי 3 דפים, או אחרי שביצע פעולה חשובה.
בקש מ-Claude: "Create a beautiful install prompt that appears after the user has visited 3 pages. Show benefits: offline access, faster loading, and home screen icon. Include a 'Not now' button that delays the prompt for 7 days." — כך מקבלים הודעת התקנה שמרגישה טבעית ולא מעצבנת.
סטודיו כושר בתל אביב: PWA שמציג את לוח החוגים, מאפשר להירשם לשיעור, ושולח התראה שעה לפני השיעור. המשתמשים מתקינים כי זה נוח יותר מלפתוח דפדפן כל פעם. עלות נוספת: אפס (מעל האתר שכבר קיים).
מסעדה בירושלים: PWA עם התפריט, הזמנות לאיסוף עצמי, ו-Push Notification כשההזמנה מוכנה. עובד אופליין (התפריט נשמר ב-Cache). חוסך עד 30% שהיו הולכים לעמלת חברות משלוח.
סוכנות נדל"ן בחיפה: PWA שמציג נכסים עם תמונות, מיקום על מפה, ואפשרות לשמור מועדפים. עובד אופליין — מושלם ללקוח שמסתובב בין דירות בלי אינטרנט יציב בבניין ישן.
בדוק שה-PWA שלך ניתן להתקנה: פתח את האתר ב-Chrome, לחץ על שלוש הנקודות בפינה, וחפש "Install app" או "התקן אפליקציה". אם האפשרות לא מופיעה, פתח את DevTools → Application → Manifest ובדוק אם יש שגיאות. שגיאה נפוצה: אייקון חסר או Service Worker לא רשום. בקש מ-Claude לתקן.
עבור על כל הפריטים ווודא שהכול מסומן:
- manifest.json — קיים, מקושר ב-HTML עם
<link rel="manifest"> - Service Worker — רשום ופעיל (DevTools → Application → Service Workers)
- HTTPS — האתר מוגש בחיבור מאובטח (או localhost לפיתוח)
- אייקונים — לפחות 192x192 ו-512x512 פיקסלים
- Splash Screen — צבע רקע ואייקון תואמים
- Install Prompt — נבדק ב-Chrome (או Edge)
- נבדק באנדרואיד — אם האתר מיועד לקהל אנדרואיד
- נבדק ב-iOS Safari — "Share → Add to Home Screen"
משתמשים מתקינים PWA יותר כשאתה מסביר להם מה הם מרוויחים. במקום הודעה גנרית של הדפדפן, הוסף באנר מותאם אישית: "התקן את האפליקציה לגישה מהירה, עבודה אופליין, ועדכונים ישירים למסך הבית."
5. עיצוב Offline-First — לעבוד גם בלי אינטרנט
Offline-First אומר שהאפליקציה שלך עובדת בלי אינטרנט כברירת מחדל, ומסתנכרנת כשהחיבור חוזר. למה זה חשוב? כי אינטרנט הוא לא מובן מאליו. במעליות בתל אביב, ברכבת התחתית (כשתהיה), במנהרות הכרמל בחיפה, בטיסות, באזורים עם כיסוי גרוע בנגב ובגליל — המשתמש שלך לא צריך לראות דף שגיאה ריק ומפחיד. הוא צריך לראות את התוכן שכבר טען, עם הודעה ברורה שהוא אופליין.
אפילו חיבור שנראה "תקין" יכול להיות בעייתי. מה שנקרא "Lie-Fi" — חיבור WiFi שמראה חיבור מלא אבל בפועל כמעט לא מעביר נתונים. קורה במלונות, בתי קפה, ומשרדים עם WiFi עמוס. Offline-First מגן גם ממצבים כאלה, כי הנתונים כבר ב-Cache.
אסטרטגיות Cache — שלוש גישות
| אסטרטגיה | איך עובד | יתרון | חיסרון | מתי להשתמש |
|---|---|---|---|---|
| Cache First | קודם בודק Cache, רק אם אין — פונה לרשת | מהיר מאוד | עלול להציג מידע ישן | נכסים סטטיים: CSS, JS, תמונות, פונטים |
| Network First | קודם פונה לרשת, אם נכשל — מציג מה-Cache | תמיד עדכני | איטי יותר כשיש רשת | תוכן דינמי: דפי מאמרים, נתוני API |
| Stale While Revalidate | מציג מה-Cache מיד, ובמקביל מעדכן מהרשת | מהיר + עדכני | מורכב יותר | הגישה הטובה ביותר לרוב המקרים |
בקש מ-Claude: "Implement a Service Worker with Cache First for static assets and Stale While Revalidate for API responses" — והוא ייצור Service Worker מקצועי עם אסטרטגיות Cache נכונות.
אתר מסעדה: התפריט (Cache First — לא משתנה כל יום), הזמנה אונליין (Network First — צריך נתונים עדכניים), שעות פתיחה (Stale While Revalidate — מציג ישן, מעדכן ברקע).
אפליקציית משימות: ה-CSS וה-JS (Cache First), רשימת המשימות (Network First), פרופיל המשתמש (Stale While Revalidate).
בלוג עם מאמרים: כל המאמרים שנקראו כבר (Cache First — נשמרים אוטומטית), מאמרים חדשים (Network First), עמוד הבית (Stale While Revalidate — מציג מהר, מעדכן כשיש חדש).
IndexedDB — בסיס נתונים בדפדפן
כשצריך לאחסן נתונים מורכבים אופליין — לא רק קבצים סטטיים אלא רשימות משימות, הגדרות משתמש, או טפסים שלא נשלחו — משתמשים ב-IndexedDB. זה בסיס נתונים מלא שחי בתוך הדפדפן. בניגוד ל-localStorage שמאחסן רק מחרוזות פשוטות (ומוגבל ל-5MB), IndexedDB תומך באובייקטים מורכבים, חיפוש לפי אינדקס, ויכול לאחסן עד מאות מגהבייטים. Claude יודע לבנות מערכת CRUD מלאה שעובדת אופליין עם IndexedDB.
למשל: "Create an offline task manager: when the user adds a task, save it to IndexedDB. When the user marks a task as complete, update it in IndexedDB. When the internet connection returns, sync all changes to Supabase." — Claude יבנה את כל הלוגיקה: שמירה מקומית, תור סנכרון (sync queue), ושליחה לשרת כשהחיבור חוזר.
Conflict Resolution — מה קורה כשיש סתירות
תרחיש קלאסי: המשתמש ערך משימה אופליין. במקביל, מישהו אחר ערך את אותה משימה בשרת. עכשיו החיבור חוזר — מי צודק? אין תשובה אחת נכונה. הגישות הנפוצות:
- Last Write Wins — מי שכתב אחרון, שלו זה. פשוט, אבל אפשר לאבד שינויים.
- Client Wins — תמיד מעדיפים את מה שהמשתמש עשה. טוב ל-UX אבל מסוכן לנתונים.
- Merge — מנסים למזג את שני השינויים. מורכב אבל שומר הכול.
ברוב פרויקטי Vibe Coding, Last Write Wins מספיק. בקש מ-Claude: "Implement offline-first CRUD for the task list: save to IndexedDB when offline, sync to Supabase when back online, use last-write-wins for conflicts."
דף אופליין מותאם אישית
מה קורה כשמשתמש מנסה לגשת לדף שלא נשמר ב-Cache? במקום "No Internet" גנרי ומפחיד, הראה לו דף אופליין מותאם אישית עם הלוגו שלך, הסבר ידידותי, וכפתור "נסה שוב". זה מעלה את התחושה המקצועית ומבטיח שהמשתמש לא חושב שהאתר שלך "מת".
בקש מ-Claude: "Create a beautiful custom offline fallback page with my app's branding. Show a friendly message in Hebrew that says the user is offline and their data is safe. Add a retry button." — זה לוקח דקה ומשדרג את החוויה בצורה משמעותית.
הפרומפט: "Implement complete offline support for my task management app:
1. Cache-first for all static assets (HTML, CSS, JS, images, fonts)
2. Stale-while-revalidate for the main pages
3. Network-first for API calls to Supabase
4. Save new tasks to IndexedDB when offline
5. Create a sync queue that sends pending changes when back online
6. Show a small RTL banner at the top when offline: 'אתה במצב אופליין — השינויים יישמרו אוטומטית כשהחיבור יחזור'
7. Add a custom offline fallback page with Hebrew text and a retry button"
מה Claude עושה: יוצר Service Worker מלא עם שלוש אסטרטגיות Cache שונות, מגדיר IndexedDB store למשימות, בונה sync queue עם Background Sync API, ומוסיף UI components לאינדיקציית מצב אופליין. כל זה — מפרומפט אחד. יש לך PWA שעובד כמו אפליקציה נייטיב.
Workbox — הספרייה שמפשטת Service Workers
כתיבת Service Worker מאפס היא מורכבת ומלאת מלכודות. Workbox היא ספרייה של Google שמפשטת את הכול — במקום לכתוב 200 שורות של Cache logic, אתה כותב 20 שורות עם Workbox. Claude מכיר את Workbox מצוין. בקש: "Rewrite my service worker using Workbox with precaching for static assets and runtime caching for API calls" — והוא ימיר את הקוד לגרסה נקייה ומקצועית יותר. Workbox גם מתאים לפרויקטים שבנויים עם bundlers כמו Webpack או Vite — Claude יגדיר את ה-plugin המתאים אוטומטית.
הוסף תמיכה אופליין לאחד הפרויקטים שלך. בקש מ-Claude: "Add offline support: cache all static assets (HTML, CSS, JS, images) with Cache First strategy. For the main pages, use Stale While Revalidate. Show a small banner when the user is offline that says 'You are offline — showing cached content'." — בדוק: כבה את ה-WiFi בטלפון, פתח את האתר, ובדוק שהתוכן נטען מה-Cache.
גם אם אתה לא בונה אפליקציה מלאה ב-Offline, Cache של נכסים סטטיים (CSS, JS, תמונות) משפר דרמטית את מהירות הטעינה. זה שווה את זה תמיד — גם לאתרים פשוטים.
6. React Native דרך Claude Code
React Native מאפשר לך לבנות אפליקציות מובייל אמיתיות — אלה שמופיעות ב-App Store וב-Google Play — בעזרת React, אותו פריימוורק שלמדת (או שתלמד) לפיתוח ווב. הרעיון: כותבים קוד אחד, מריצים על שתי הפלטפורמות. אבל — ויש כאן "אבל" גדול — React Native מורכב יותר מפיתוח ווב. תגיע לכאן רק אם באמת צריך.
אם אתה זוכר Components ו-State מפרק 4 (Web Apps), יש לך בסיס טוב. React Native משתמש באותם עקרונות, אבל עם רכיבי UI שונים:
| React (Web) | React Native (מובייל) | מה זה עושה |
|---|---|---|
<div> |
<View> |
מכולה בסיסית |
<p>, <h1> |
<Text> |
טקסט (כל טקסט חייב להיות בתוך Text) |
<img> |
<Image> |
תמונה |
<button> |
<TouchableOpacity> / <Pressable> |
כפתור/אלמנט לחיץ |
<input> |
<TextInput> |
שדה קלט |
| CSS classes | StyleSheet.create() |
עיצוב (JavaScript objects, לא CSS) |
ההבדל העיקרי: ב-React Native אין HTML ואין CSS. במקום זה, אתה משתמש ברכיבים נייטיביים שנראים ומרגישים כמו אפליקציה אמיתית. אבל ב-Vibe Coding אתה לא צריך לזכור את כל זה — Claude יודע את ההבדלים ויכתוב את הקוד הנכון.
כשאתה עובד על React Native עם Claude Code, שים לב לכמה דברים חשובים: (1) Claude מכיר את ההבדלים בין ווב ל-Native — הוא ישתמש ב-View במקום div, Text במקום p, אבל לפעמים הוא מתבלבל ומשתמש בתגי HTML. אם זה קורה, אמור: "This is a React Native project, not a web project. Use native components only." (2) השתמש ב-CLAUDE.md — הוסף לקובץ CLAUDE.md של הפרויקט: "This is a React Native project using Expo. Use native components only (View, Text, Pressable, etc.). No HTML tags." — ככה Claude לא יתבלבל. (3) שגיאות React Native — אם מופיעה שגיאה באדום על המסך של Expo Go, צלם מסך ושלח ל-Claude. הוא מצוין בפענוח שגיאות React Native.
ההבטחה של React Native — ומה באמת קורה
ההבטחה: "כתוב קוד אחד, הרץ על iOS ו-Android." המציאות: ברוב המקרים זה עובד, אבל יש פערים. אנימציות שנראות חלקות ב-iOS מרגישות קצת אחרת ב-Android. רכיבי UI מסוימים מתנהגים שונה. ולפעמים צריך "native code" שדורש Xcode או Android Studio.
עבור Vibe Coders, הדבר הכי חשוב לדעת: React Native מצוין לאפליקציות פשוטות עד בינוניות — רשימות, טפסים, ניווט בין מסכים, חיבור ל-API. אם אתה בונה משחק 3D או אפליקציית עריכת וידאו, React Native כנראה לא הכלי הנכון. אבל לרוב הפרויקטים העסקיים — הוא מושלם.
הרצה על טלפון אמיתי
הנה הקסם של Expo: אתה מריץ npx expo start, מקבל קוד QR בטרמינל, סורק אותו עם Expo Go בטלפון, והאפליקציה שלך רצה. בזמן אמת. שומר שינוי בקוד — האפליקציה מתעדכנת על הטלפון תוך שנייה (Hot Reload). זה מרגיש כמו קסם, ובואו נודה — זה קצת קסם.
התקן את Expo Go על הטלפון שלך (חינם ב-App Store וב-Google Play). אחר כך בקש מ-Claude: "Create a simple React Native app with Expo that shows 'Hello from my first mobile app!' with a beautiful gradient background and a button that changes the text." — Claude ייצור את הפרויקט. הרץ npx expo start וסרוק את קוד ה-QR עם Expo Go. תראה את האפליקציה שלך רצה על הטלפון!
React Native קשה יותר מפיתוח ווב. שגיאות מסתוריות, Build Issues, ותלות בגרסאות הם חלק מהחוויה. אל תגיע לכאן אלא אם אתה ספציפית צריך אפליקציה שחייבת להיות ב-App Store. לכל השאר, PWA מספיק ויותר.
7. Expo — הדרך הקלה לאפליקציות מובייל
Expo היא ערכת כלים שהופכת את React Native מפחיד לנגיש. בלי Expo, היית צריך להתקין Xcode (Mac בלבד, 12GB), Android Studio (עוד 8GB), ולהתמודד עם תצורות מסובכות. עם Expo, אתה מתחיל עם npx create-expo-app ורואה את האפליקציה על הטלפון תוך דקה.
הלולאה של פיתוח ב-Expo
הנה איך תהליך הפיתוח עובד עם Expo:
- יצירה —
npx create-expo-app my-app→ פרויקט מוכן - הרצה על הטלפון —
npx expo start→ סרוק QR עם Expo Go → האפליקציה חיה - פיתוח — אתה משנה קוד, האפליקציה מתעדכנת בזמן אמת על הטלפון (Hot Reload)
- בדיקה — בדוק על טלפון אמיתי, לא על סימולטור
- חזרה — שפר → בדוק → שפר → בדוק
- בנייה לחנויות —
eas build→ קובצי APK/IPA מוכנים להעלאה
Expo Router — ניווט מבוסס קבצים
זוכר את Next.js ואיך הניווט עובד לפי שם קבצים? Expo Router עושה את אותו דבר לאפליקציות מובייל. קובץ app/index.tsx = מסך הבית. קובץ app/settings.tsx = מסך הגדרות. תיקיית app/(tabs)/ = ניווט Tabs — סרגל תחתון עם אייקונים, כמו שיש באינסטגרם או בוואטסאפ. פשוט וחזק.
מה שיפה בזה: אם למדת Next.js, אתה כבר מכיר את הקונספט. מבנה הקבצים קובע את הניווט. אין צורך להגדיר routes ידנית — יוצרים קובץ, ומסך חדש מוכן. בקש מ-Claude: "Set up Expo Router with tab navigation: Home, Search, Profile. Each tab should have its own icon." — והוא ייצר את כל המבנה.
Expo SDK — גישה לחומרת הטלפון
Expo נותנת גישה קלה ליכולות הטלפון: מצלמה, GPS, התראות, אנשי קשר, מערכת קבצים, הפטיקס (רטט), ועוד. כל אחת זמינה כספרייה שמתקינים בפקודה אחת:
"Add camera access to my app so users can take a photo of a receipt"
→ Claude מתקין expo-camera ובונה מסך צילום עם תצוגה מקדימה.
"Add location tracking that shows the user's position on a map"
→ Claude מתקין expo-location + react-native-maps ומציג מפה עם מיקום.
"Send push notification when a task is due"
→ Claude מתקין expo-notifications ומגדיר התראות מקומיות עם תזמון.
הטעות: להחליט מההתחלה "אני רוצה אפליקציה ב-App Store" כשבעצם אתר רספונסיבי או PWA היו מספיקים בדיוק. למה זה מפתה: אפליקציה ב-App Store נשמע יוקרתי ומקצועי. מה לעשות במקום: תעבור על עץ ההחלטות למעלה. 90% מהפרויקטים לא צריכים App Store. React Native מוסיף מורכבות משמעותית — Build Issues, תלות בגרסאות, עלות חשבון מפתחים (360 ש"ח/שנה ל-Apple). התחל עם PWA. אם אחרי חודשיים אתה מגלה שאתה חייב App Store — אז תעבור.
EAS Build — בנייה לחנויות האפליקציות
כשהאפליקציה מוכנה, EAS Build (Expo Application Services) בונה את קובצי ה-APK (Android) ו-IPA (iOS) בענן — בלי שתצטרך Mac עם Xcode. הפקודה: eas build --platform all. תוך 15-30 דקות מקבלים קבצים מוכנים להעלאה לחנויות. ה-Build הראשון חינם, אחר כך עולה כ-$5 לבנייה (כ-18 שקלים).
התהליך המלא מפיתוח עד חנות:
- פיתוח — כותבים ובודקים עם Expo Go
- בנייה —
eas build --platform android→ מקבלים קובץ APK - בדיקה — מתקינים את ה-APK על טלפון אמיתי ובודקים הכול
- הגשה —
eas submit --platform android→ מעלה ל-Google Play Console - אישור — Google בודקת (1-3 ימים) → האפליקציה ב-Play Store!
עבור iOS, התהליך דומה אבל צריך חשבון Apple Developer ($99 לשנה, כ-360 שקלים) ואישור Apple (לוקח בדרך כלל 1-7 ימים, ולפעמים דוחים בפעם הראשונה בגלל דרישות מטה-נתונים). אם אתה רק מתחיל, תתחיל עם Android — זה פשוט יותר, זול יותר (חשבון Google Play עולה $25 חד-פעמי, כ-90 שקלים), ורוב השוק הישראלי ב-Android.
הנה תחשיב עלויות מהיר לאפליקציית מובייל דרך Expo:
- פיתוח — Claude Code (כבר יש לך) + Expo (חינם) = 0 שקלים
- Google Play — חד-פעמי: 90 שקלים ($25)
- Apple Developer — שנתי: כ-360 שקלים ($99) — רק אם רוצים להיות ב-App Store
- EAS Build — Build ראשון חינם, אחר כך כ-18 שקלים ($5) לבנייה
- סה"כ למינימום (Android בלבד) — כ-90 שקלים. זהו.
בנה אפליקציית משימות בסיסית ב-Expo. בקש מ-Claude: "Build a task manager app with Expo: tab navigation with 3 tabs (Tasks, Add Task, Settings). Tasks tab shows a list of tasks with checkboxes. Add Task tab has a form with title and due date. Settings tab has a toggle for dark mode." — הרץ עם npx expo start ובדוק על הטלפון. נסה להוסיף משימה, לסמן כהושלמה, ולהחליף Dark Mode.
Expo Go מצוין לפיתוח, אבל חלק מהתכונות (כמו Push Notifications מרחוק ו-Background Location) דורשות "Development Build" — גרסה מותאמת אישית של Expo Go. אם Claude אומר שצריך Development Build, תעקוב אחרי ההוראות — זה פעם אחת, ואחר כך הכול עובד.
8. שיתוף קוד בין ווב למובייל
נניח שבנית אפליקציית ווב ב-Next.js ואפליקציית מובייל ב-Expo. שתיהן משתמשות באותו בסיס נתונים ב-Supabase. שתיהן צריכות לאמת משתמשים. שתיהן מעבדות אותם נתונים. למה לכתוב את אותו קוד פעמיים?
שיתוף קוד בין ווב למובייל = לבנות פעם אחת, להריץ בכל מקום. Claude Code מנהל את המבנה בשבילך. הרעיון מאוד הגיוני: הלוגיקה העסקית (Business Logic) — כמו חישובים, ולידציות של טפסים, ניהול State, פורמוט תאריכים, ותקשורת עם השרת — היא זהה לגמרי בין ווב למובייל. למה לכתוב את אותה פונקציה שמחשבת מחיר עם מע"מ פעמיים? ה-UI, מצד שני, שונה — ווב משתמש ב-HTML ו-CSS, מובייל משתמש ב-View ו-StyleSheet. אז משתפים את הלוגיקה ומפרידים את הממשק.
מה משתפים ומה לא
| משותף (Shared) | נפרד (Platform-specific) |
|---|---|
| Data fetching — קריאות API ו-Supabase | רכיבי UI — div vs View, button vs Pressable |
| State management — ניהול מצב האפליקציה | ניווט — React Router vs Expo Router |
| Validation — בדיקת תקינות טפסים | אנימציות — CSS vs React Native Animated |
| Utilities — פונקציות עזר, עיצוב תאריכים, חישובים | Storage — localStorage vs AsyncStorage |
| Types — הגדרות TypeScript | גישה לחומרה — מצלמה, GPS (מובייל בלבד) |
גישת Monorepo
Monorepo הוא מאגר קוד אחד שמכיל כמה פרויקטים. במקום שני repos נפרדים (אחד לווב, אחד למובייל), יש repo אחד עם שלוש תיקיות:
my-project/
packages/
shared/ # לוגיקה משותפת, Types, Supabase client
web/ # Next.js — ממשק ווב
mobile/ # Expo — אפליקציית מובייל
package.json # Workspace configuration
שני הפרויקטים (web ו-mobile) מייבאים מ-shared. שינוי בלוגיקה = שינוי במקום אחד = מתעדכן בשתי הפלטפורמות.
בקש מ-Claude: "Refactor the task manager so the Supabase client, types, and validation functions are in a shared package used by both the Next.js web app and the Expo mobile app" — והוא יבנה את מבנה ה-Monorepo.
Supabase — עובד בשני העולמות
אם אתה משתמש ב-Supabase (וסביר שכן, אם עברת את הפרקים הקודמים), יש חדשות טובות: ה-Supabase Client עובד בדיוק אותו דבר ב-Web וב-React Native. אותם קריאות, אותו API, אותו קוד. הדבר היחיד שמשתנה הוא אחסון הטוקנים — ב-Web משתמשים ב-localStorage, ב-React Native ב-AsyncStorage. Claude יודע לטפל בזה אוטומטית.
// packages/shared/supabase.ts
// קוד זהה שעובד גם ב-Web וגם ב-Mobile
export async function getTasks(userId: string) {
const { data, error } = await supabase
.from('tasks')
.select('*')
.eq('user_id', userId)
.order('created_at', { ascending: false });
return { data, error };
}
הפונקציה הזו כתובה פעם אחת ב-packages/shared. גם אפליקציית ה-Web וגם אפליקציית המובייל מייבאות אותה. שינוי בלוגיקה = שינוי במקום אחד.
גם אם אין לך עדיין אפליקציית מובייל, תכנן את שיתוף הקוד: קח את הפרויקט הקיים שלך ובקש מ-Claude: "Identify all the code in this project that could be shared between web and mobile. List the files and functions that are platform-independent (data fetching, validation, types) vs platform-specific (UI components, navigation)." — התוצאה תראה לך כמה קוד אפשר לשתף אם תוסיף גרסת מובייל בעתיד.
שיתוף קוד מוסיף מורכבות. אם אתה מתחזק רק אתר ווב, אל תבנה Monorepo מראש. תבנה אותו רק כשתצטרך באמת לשתף קוד בין שתי פלטפורמות. אופטימיזציה מוקדמת מדי = מורכבות מיותרת.
9. אופטימיזציית ביצועים למובייל
מכשירי מובייל איטיים יותר ממחשבים: פחות RAM, מעבד חלש יותר, מסך קטן יותר, ורשת לא יציבה. מה שנטען תוך חצי שנייה על ה-MacBook שלך יכול לקחת 5 שניות על טלפון ישן עם חיבור 3G. וזכור — לא כל המשתמשים שלך מחזיקים אייפון 16 Pro Max. הרבה אנשים גולשים עם טלפונים ישנים יותר, עם פחות זיכרון ועם חיבור אינטרנט לא מושלם. אופטימיזציית ביצועים למובייל היא לא בונוס — היא חובה.
Core Web Vitals — המדדים של Google
Google מודדת את הביצועים של אתרים בשלושה מדדים עיקריים שנקראים Core Web Vitals. ציון גבוה = דירוג טוב יותר בגוגל + חוויית משתמש טובה יותר:
| מדד | מה מודד | יעד | מה משפיע |
|---|---|---|---|
| LCP (Largest Contentful Paint) | כמה זמן לוקח לאלמנט הכי גדול להיטען | מתחת ל-2.5 שניות | תמונות גדולות, פונטים כבדים, שרת איטי |
| INP (Interaction to Next Paint) | כמה זמן לוקח לאתר להגיב ללחיצה | מתחת ל-200ms | JavaScript כבד, Third-party scripts |
| CLS (Cumulative Layout Shift) | כמה "קפיצות" יש בעמוד בזמן הטעינה | מתחת ל-0.1 | תמונות בלי מידות, פרסומות, פונטים שנטענים מאוחר |
Lighthouse — הכלי שבודק הכול
Lighthouse הוא כלי של Google שנותן ציון מ-0 עד 100 ב-4 קטגוריות: Performance (ביצועים), Accessibility (נגישות), Best Practices (שיטות עבודה), ו-SEO. הוא בנוי ב-Chrome DevTools — פתח DevTools → לשונית Lighthouse → לחץ "Analyze" → קבל דו"ח מפורט עם המלצות לתיקון.
הציון שצריך לשאוף אליו ב-Lighthouse בכל 4 הקטגוריות. כל דבר מתחת ל-70 דורש תיקון מיידי.
למה זה חשוב? כי Google שופטת אותך
Core Web Vitals הם לא רק מספרים טכניים — הם משפיעים ישירות על הדירוג שלך בגוגל. מאז 2021, Google משתמשת ב-Core Web Vitals כסיגנל דירוג. אתר עם ציונים ירודים ידורג נמוך יותר ויקבל פחות תנועה אורגנית. אתר עם ציונים מצוינים מקבל העדפה בתוצאות החיפוש. זה לא רק UX — זה גם SEO וכסף.
Lighthouse דרך Claude Code — בדיקה אוטומטית
אתה לא חייב לפתוח DevTools ולהריץ Lighthouse ידנית. Claude Code יכול להריץ Lighthouse מהטרמינל באמצעות כלי ה-Bash המובנה. הנה איך:
הפרומפט: "Run Lighthouse on my local dev server at http://localhost:3000 and show me the scores for Performance, Accessibility, Best Practices, and SEO. Focus on mobile."
מה Claude עושה: מריץ npx lighthouse http://localhost:3000 --output=json --chrome-flags="--headless" --emulated-form-factor=mobile, מנתח את התוצאות, ומציג לך את הציונים עם המלצות ספציפיות לתיקון. אם הציון נמוך, הוא מציע תיקונים ויכול ליישם אותם מיד.
טיפ מתקדם: הוסף לקובץ CLAUDE.md שלך: "After any CSS or image changes, run Lighthouse and ensure all scores remain above 90" — ככה Claude ייזכר לבדוק ביצועים אחרי כל שינוי.
טכניקות אופטימיזציה שClaude מיישם
בקש מ-Claude: "Optimize my site for mobile performance" — והוא יעשה את כל אלה:
- אופטימיזציית תמונות — המרה ל-WebP (קטן ב-30%), גדלים רספונסיביים עם srcset, Lazy Loading לתמונות מחוץ למסך.
- Code Splitting — טעינה רק של ה-JavaScript שצריך לעמוד הנוכחי, לא של כל האפליקציה. Claude מגדיר Dynamic Imports ב-Next.js אוטומטית.
- אופטימיזציית פונטים — שימוש בפונטים של המערכת (System Fonts) או טעינת Web Fonts עם
font-display: swapכדי למנוע טקסט בלתי נראה. - הקטנת Bundle — הסרת קוד מת (Tree Shaking), Minification, ו-Compression. Claude מגדיר את הכול ב-build configuration.
- Defer Third-party Scripts — סקריפטים של אנליטיקס, צ'אט, ופרסומות נטענים אחרי התוכן העיקרי.
עבור על הרשימה הזו לפני כל שחרור לפרודקשן:
- Lighthouse Score > 90 — בכל 4 הקטגוריות ✓
- תמונות אופטימיזציות — WebP, srcset, lazy loading ✓
- פונטים טעונים נכון — font-display: swap או system fonts ✓
- JS Bundle מתחת ל-200KB — עבור JavaScript ראשוני (לפני gzip) ✓
- אין Layout Shift — תמונות ווידאו עם מידות מוגדרות מראש ✓
- API responses מהירות — מתחת ל-500ms לכל קריאה ✓
אופטימיזציית תמונות — הבעיה הנפוצה ביותר
ברוב האתרים, תמונות הן 60-80% מהמשקל של הדף. תמונת JPEG של 3MB שצולמה בטלפון ועלתה ישר לאתר? היא נטענת 5 שניות ברשת 4G. אותה תמונה בפורמט WebP, בגודל מתאים למסך, ועם lazy loading? 200KB, חצי שנייה. ההבדל ענק.
בקש מ-Claude: "Optimize all images on this page: convert to WebP format, add responsive srcset with sizes for mobile (400w), tablet (800w), and desktop (1200w), add lazy loading for all images below the fold." — זה השיפור הכי משמעותי שתעשה בציון Lighthouse.
הרץ Lighthouse על האתר שלך: פתח Chrome → DevTools (F12) → לשונית Lighthouse → בחר "Mobile" → לחץ "Analyze page load". חשוב: הרץ במצב Incognito כדי שהרחבות לא ישפיעו על התוצאות. רשום את הציונים ב-4 הקטגוריות. כל מה שמתחת ל-90 — בקש מ-Claude: "Here are my Lighthouse scores: [הציונים שלך]. Fix the issues to get all scores above 90."
המטרה: לקחת אתר עם ציוני Lighthouse נמוכים ולהעלות את כולם מעל 90.
- הרץ Lighthouse על האתר שלך ורשום את הציונים ההתחלתיים
- צלם מסך של הדו"ח (לפני)
- שלח את הדו"ח ל-Claude: "Here's my Lighthouse report. Fix all issues to get scores above 90."
- Claude יזהה את הבעיות ויתקן: תמונות, פונטים, JS, CSS, נגישות
- הרץ Lighthouse שוב (אחרי). השווה את הציונים.
- חזור על שלבים 3-5 עד שכל הציונים מעל 90
מה למדת: איך לזהות בעיות ביצועים ולתקן אותן עם Claude. זה תהליך שתעשה בכל פרויקט.
הרץ Lighthouse במצב Incognito כדי לקבל תוצאות מדויקות. הרחבות של הדפדפן (Ad Blockers, DevTools extensions) יכולות להשפיע על הציונים ולתת תמונה לא מדויקת.
10. עקרונות עיצוב Cross-Platform
עיצוב Cross-Platform אומר: עצב פעם אחת, יעבוד בכל מקום. לא "אותו דבר בדיוק" — אלא אותה חוויה, מותאמת לכל מכשיר. מה שעובד עם עכבר לא בהכרח עובד עם אצבע. מה שנראה טוב על מסך 27 אינץ' לא בהכרח נראה טוב על מסך של 6 אינץ'. וזה בסדר גמור — זו לא בעיה, זו הזדמנות. עיצוב טוב מותאם להקשר שבו המשתמש נמצא. מישהו שגולש בטלפון בדרך לעבודה צריך מידע מהיר וכפתורים ברורים. מישהו שיושב מול מחשב במשרד מוכן לראות יותר פרטים ולהשתמש בממשק מורכב יותר.
Touch vs Mouse — שני עולמות שונים
- Touch Targets גדולים יותר — אצבע ≠ סמן עכבר. כפתורים של 44x44 פיקסלים מינימום.
- אין Hover — אם המידע החשוב מופיע רק ב-hover, משתמשי מובייל לעולם לא יראו אותו. בדוק שכל מה שחשוב נגיש בלי hover.
- Swipe במקום Right-Click — במובייל, תנועות כמו Swipe מחליפות את הלחצן הימני. "Swipe left to delete" במקום "Right-click → Delete".
- Pull-to-Refresh — תנועה טבעית במובייל שאין לה מקבילה בדסקטופ.
תעדוף תוכן — Content Priority
על מסך של 375 פיקסלים רוחב, אי אפשר להציג הכול. צריך לבחור: מה הדבר הכי חשוב שהמשתמש צריך לראות? זה מה שמוצג ראשון. כל השאר מוסתר מאחורי תפריטים, טאבים, או "קרא עוד". זה לא הגבלה — זה מאלץ עיצוב טוב יותר. אם אתה חייב לבחור מה חשוב, אתה מגלה מה באמת חשוב.
דוגמה מעשית: דשבורד ניהול עסק שיש בו 8 גרפים, טבלת נתונים, ותפריט צד. בדסקטופ הכול מוצג. במובייל? בחר את ה-KPI הכי חשוב (למשל מכירות היום) והציג אותו גדול בראש המסך. הגרפים — בגלילה אנכית, אחד מתחת לשני. התפריט — Hamburger Menu. הטבלה — מציגה רק 3 עמודות (במקום 8), עם אפשרות לגלול הצידה. בקש מ-Claude: "Redesign this dashboard for mobile: show the most important KPI first, stack charts vertically, simplify the data table to show only 3 columns." — והוא ייצר את זה.
טיפוגרפיה ונגישות
- גודל פונט מינימלי 16px — מתחת ל-16px, iOS מגדיל אוטומטית את הזום בטפסים. זה שובר את ה-UX.
- יחידות יחסיות (rem/em) — במקום px קבועים, השתמש ב-rem שמתאים את עצמו להגדרות המשתמש.
- ניגודיות WCAG AA — יחס ניגודיות של לפחות 4.5:1 בין טקסט לרקע. קריטי לקריאות על מסכים קטנים באור שמש.
RTL — עיצוב לעברית וערבית
כ-Vibe Coders שעובדים בעברית, יש לנו אתגר נוסף: RTL (Right-to-Left). רוב ה-Templates והספריות בנויים ל-LTR (שמאל לימין). כשמוסיפים תוכן בעברית, דברים יכולים להישבר: אייקוני חצים הפוכים, Padding בצד הלא נכון, תפריטים שנפתחים בכיוון הלא נכון.
הפתרון: בקש מ-Claude לבנות עם RTL מההתחלה. "Build this page with full RTL support for Hebrew content" מבטיח שהכיוון נכון. אם יש באגים: "Fix RTL issues — check arrow directions, padding, margin, and text alignment for Hebrew layout" — Claude יסרוק ויתקן.
טיפ נוסף: ב-CSS, השתמש ב-margin-inline-start ו-padding-inline-end במקום margin-left ו-padding-right. הגרסאות ה-"logical" מתאימות את עצמן אוטומטית לכיוון הטקסט. Claude יודע את זה, אבל כדאי לבקש במפורש.
הוסף את השורות הבאות לקובץ CLAUDE.md של הפרויקט שלך:
## Mobile & RTL Rules
- All layouts must be mobile-first (375px base)
- Use CSS logical properties (margin-inline-start, not margin-left)
- All text is RTL Hebrew — use dir="rtl" on html tag
- Touch targets minimum 44x44 pixels
- Run Lighthouse after any visual change — target 90+ all categories
- Test responsive at 375px, 768px, 1024px breakpoints
- Font: Heebo, minimum 16px for body text
- All images must have loading="lazy" and explicit width/height
למה זה חשוב: הוראות אלו ב-CLAUDE.md מבטיחות ש-Claude יזכור את כללי המובייל בכל פעם שהוא כותב קוד — לא רק כשאתה מבקש ספציפית. זה כמו "מדיניות עיצוב" אוטומטית שנאכפת בכל שינוי.
מהשוק הישראלי משתמש ב-iOS / Safari. זה מספיק כדי שתבדוק על Safari — כי Safari מתנהג שונה מ-Chrome בנושאי CSS, PWA, ו-JavaScript APIs. אל תדלג על הבדיקה הזו
בדיקה על כל הפלטפורמות
האתר שלך צריך לעבוד על:
- Chrome דסקטופ — הדפדפן הנפוץ ביותר (65%+ נתח שוק)
- Chrome מובייל (Android) — הדפדפן הנפוץ ביותר במובייל
- Safari iOS — כל משתמשי אייפון (30%+ מהשוק הישראלי). חשוב! Safari מתנהג שונה מ-Chrome בהרבה דברים: CSS, JavaScript APIs, ו-PWA support.
- Samsung Internet — דפדפן ברירת המחדל על טלפוני Samsung (נפוץ מאוד בישראל). בדרך כלל תואם ל-Chrome, אבל כדאי לבדוק.
איך בודקים בלי להחזיק 10 טלפונים שונים? Chrome DevTools כולל סימולטור מכשירים — Device Toolbar (Ctrl+Shift+M). אתה יכול לדמות iPhone, Pixel, iPad, ועוד. אבל זכור: זה סימולציה, לא המכשיר האמיתי. בדיקה סופית תמיד על טלפון אמיתי. אם אין לך אייפון, בקש מחבר עם אייפון לפתוח את הלינק ולשלוח צילום מסך.
באגים נפוצים של Safari שצריך לדעת
Safari (הדפדפן של Apple) הוא מקור לבאגים ייחודיים שלא קיימים ב-Chrome. הנה הנפוצים ביותר ואיך Claude מתקן אותם:
- 100vh Bug — ב-Safari מובייל,
height: 100vhכולל את סרגל הכלים, כך שהתוכן "יוצא" מהמסך. הפתרון:height: 100dvh(dynamic viewport height). - Safe Area Insets — אייפונים מודרניים עם "notch" (חריץ) צריכים
env(safe-area-inset-top)כדי שתוכן לא יוסתר מאחורי ה-notch. - Smooth Scrolling — Safari דורש
-webkit-overflow-scrolling: touchב-divs עם scroll. - Input Zoom — אם font-size של input קטן מ-16px, Safari מגדיל אוטומטית. הפתרון:
font-size: 16pxמינימום לכל שדה קלט.
בקש מ-Claude: "Check and fix all Safari-specific CSS issues, including 100vh bug, safe area insets, and input zoom." — הוא מכיר את כל הבעיות האלה.
Claude Code כלים מתקדמים לבדיקת מובייל
Claude Code מציע כמה כלים מתקדמים שעוזרים לבדוק מובייל בלי לצאת מהטרמינל:
- Playwright MCP — אם מותקן, Claude יכול לפתוח את האתר שלך בדפדפן headless, לשנות גודל חלון ל-375px רוחב, לנווט בין עמודים, ללחוץ על כפתורים, ולצלם מסך. זה כמו בודק QA אוטומטי שרץ ישירות מ-Claude Code. בקש: "Open my site in Playwright at iPhone SE resolution, navigate through all pages, and report any layout issues."
- כלי Bash לבדיקות — Claude יכול להריץ Lighthouse, pa11y (לנגישות), ו-htmlhint ישירות מהטרמינל ולנתח את התוצאות. "Run an accessibility audit with pa11y on all pages and fix any issues" — ו-Claude ימצא ויתקן בעיות נגישות.
- /simplify — אחרי שסיימת לעבוד על רספונסיביות, הרץ
/simplify. הפקודה הזו שולחת 3 סוכנים מקבילים שבודקים את הקוד שלך לשימוש חוזר, איכות, ויעילות — ומתקנים בעיות אוטומטית. מושלם אחרי Responsive Redesign גדול. - WebFetch — Claude יכול לגשת לכלים אונליין כמו Google PageSpeed Insights דרך WebFetch ולקבל דו"ח ביצועים של האתר שלך בפרודקשן (לא רק localhost). "Check my live site at mysite.com with PageSpeed Insights and fix any mobile issues" — ו-Claude יבדוק ויתקן.
WebFetch ו-WebSearch זמינים רק ב-Anthropic first-party API (לא ב-Bedrock או Vertex). אם אתה משתמש ב-Claude Code דרך ספק ענן, הכלים האלה לא יהיו זמינים ותצטרך להריץ Lighthouse ידנית או דרך כלי Bash.
בדוק את האתר שלך על כמה שיותר מכשירים ודפדפנים. בדוק לפחות: (1) Chrome דסקטופ, (2) Chrome מובייל, (3) Safari iOS (אם יש לך אייפון). לכל אחד, בדוק: האם ה-Layout תקין? האם הכפתורים עובדים? האם הפונטים קריאים? האם יש גלילה אופקית? רשום כל בעיה ובקש מ-Claude לתקן.
לפני שאתה "מסיים" פרויקט ושולח אותו לעולם, עבור על המבחן הזה:
- Desktop Chrome — האם הכול נראה טוב ועובד? ✓
- Mobile Chrome (Android) — האם ה-Layout רספונסיבי? ✓
- iOS Safari — האם יש באגים ספציפיים ל-Safari? ✓
- האם ניתן להתקין כ-PWA? — DevTools → Application → Manifest ✓
- האם עובד אופליין? — כבה WiFi ובדוק ✓
- האם מהיר? — נטען מתחת ל-3 שניות על רשת 4G ✓
אם כל 6 מסומנים — הפרויקט שלך מוכן.
אל תרדוף אחרי שלמות בכל פלטפורמה. קבע פלטפורמה ראשית (בדרך כלל מובייל ווב) ותדאג שהיא עובדת מושלם. אחר כך תקן בעיות בפלטפורמות אחרות. 95% נכון על כל הפלטפורמות עדיף על 100% נכון באחת ושבור בשאר.
הוסף הוראות מובייל ל-CLAUDE.md של הפרויקט שלך. פתח את הקובץ (או צור אותו אם אין) ובקש מ-Claude: "Add mobile-first development rules to my CLAUDE.md: responsive breakpoints at 375px/768px/1024px, minimum 44px touch targets, RTL Hebrew support with logical CSS properties, lazy loading for all images, and Lighthouse target of 90+ on all categories." — מעכשיו, כל פעם שClaude עובד על הפרויקט שלך, הוא ייצור קוד מותאם מובייל אוטומטית.
תרגילים מעשיים
קח אתר שבנית בפרקים הקודמים ותעשה לו "מקלחת רספונסיבית" מלאה.
- פתח את האתר בטלפון ורשום כל בעיה שמצאת (מינימום 5)
- שלח את הרשימה ל-Claude: "Fix these mobile issues: [הרשימה]"
- הוסף תפריט Hamburger למובייל
- וודא שכל הטקסט קריא ושכל הכפתורים לחיצים
- הרץ Lighthouse ווודא ציון ביצועים מעל 90
- בדוק על לפחות 2 מכשירים שונים (או בגדלי מסך שונים ב-DevTools)
תוצאה צפויה: אתר שעובד מושלם על כל גודל מסך, עם ציון Lighthouse של 90+.
הפוך את האתר שלך ל-PWA מלא עם כל היכולות.
- הוסף manifest.json עם שם, אייקונים, וצבעים
- הוסף Service Worker עם Cache לנכסים סטטיים
- הוסף תמיכה אופליין — דפים ראשיים נטענים גם בלי רשת
- הוסף הודעת התקנה מותאמת אישית (Custom Install Prompt)
- בדוק התקנה על Android ו-iOS
- בדוק שהאפליקציה עובדת אופליין
תוצאה צפויה: PWA שניתן להתקין, עובד אופליין, ומרגיש כמו אפליקציה נייטיב.
בנה אפליקציית מובייל שלמה עם Expo.
- צור פרויקט Expo חדש:
npx create-expo-app my-mobile-app - בנה מסך רשימת משימות עם אפשרות הוספה ומחיקה
- הוסף ניווט Tabs עם 3 מסכים לפחות
- חבר ל-Supabase לשמירת נתונים (אם יש לך חשבון מפרקים קודמים)
- בדוק על הטלפון שלך דרך Expo Go
- בונוס: הוסף Dark Mode toggle
תוצאה צפויה: אפליקציה שרצה על הטלפון שלך עם ממשק נקי וניווט תקין.
קח פרויקט קיים ועשה לו "ביקורת ביצועים" מלאה.
- הרץ Lighthouse ב-Incognito Mode ורשום את 4 הציונים ההתחלתיים
- צלם מסך של הדו"ח המלא (לפני)
- בקש מ-Claude לתקן את כל ההמלצות של Lighthouse — תמונות, פונטים, JS, CSS, נגישות
- הוסף Service Worker עם Cache לנכסים סטטיים
- ודא שכל התמונות ב-WebP עם lazy loading
- הרץ Lighthouse שוב (אחרי). השווה ציונים.
- יעד: כל 4 הציונים מעל 90
תוצאה צפויה: שיפור של 20-40 נקודות בציון Performance. האתר נטען מהר יותר, הנגישות טובה יותר, וה-SEO חזק יותר.
בנוסף לשגרת העבודה מפרקים קודמים (Git commits, בדיקות API, גיבויי Supabase), הוסיפו את המשימות הבאות:
| מתי | מה לעשות | זמן |
|---|---|---|
| בכל Deploy | הרץ Lighthouse על הגרסה החדשה. בדוק במובייל אמיתי. ודא שלא נשבר שום דבר. | 10 דקות |
| פעם בשבוע | פתח את האתר על הטלפון שלך ועבור את כל התרחישים. בדוק מהירות טעינה. בדוק אופליין. | 15 דקות |
| פעם בחודש | הרץ Lighthouse מלא ב-Incognito. בדוק Core Web Vitals ב-Google Search Console. תקן כל ירידה בציון. | 30 דקות |
| כל רבעון | בדוק על מכשירים חדשים, גרסאות דפדפן חדשות. עדכן Service Worker ו-Cache. בדוק שה-PWA עדיין עובד מושלם. | 60 דקות |
פתח את האתר שלך בטלפון ותקן אותו. זה הכול. פתח Chrome על הטלפון, נווט לאתר, ובדוק שהכול עובד. אם משהו שבור — והסיכוי גבוה שמשהו שבור — בקש מ-Claude לתקן. הרץ Lighthouse, ראה את הציון, ובקש מ-Claude להעלות אותו. 15 דקות. אחרי זה, האתר שלך עובד טוב יותר לרוב המשתמשים שלך — אלה שגולשים מהטלפון. וזה הדבר הכי חשוב שתעשה היום.
ענה על 5 השאלות האלה. אם אתה יכול לענות על 4 מתוך 5 — אתה מוכן לפרק הבא.
- מה שלושת המרכיבים שהופכים אתר ל-PWA? (רמז: manifest.json, Service Worker, HTTPS)
- מה ההבדל בין Cache First ל-Stale While Revalidate? (רמז: Cache First מגיש מהמטמון בלבד; SWR מגיש מהמטמון ומעדכן ברקע)
- מה גודל Touch Target המינימלי המומלץ? (רמז: 44x44 פיקסלים)
- מה שלושת ה-Core Web Vitals? (רמז: LCP — טעינה, INP — אינטראקטיביות, CLS — יציבות)
- מתי כדאי לעבור מ-PWA ל-React Native? (רמז: רק אם חובה להיות ב-App Store או צריך גישה מתקדמת לחומרה)
צ'קליסט — סיכום פרק 7
- מבין/ה את ההבדל בין אתר רספונסיבי, PWA, ו-React Native ומתי להשתמש בכל אחד
- האתר שלך מותאם למובייל: Layout רספונסיבי, Touch Targets של 44px+, בלי גלילה אופקית
- יש Viewport Meta Tag:
<meta name="viewport" content="width=device-width, initial-scale=1.0"> - תמונות רספונסיביות עם srcset ו-Lazy Loading
- טיפוגרפיה רספונסיבית עם clamp() או Media Queries
- הוספת manifest.json והפכת את האתר ל-PWA
- רשמת Service Worker עם אסטרטגיית Cache
- האתר עובד אופליין (לפחות התוכן הסטטי)
- בדקת על טלפון אמיתי (לא רק DevTools)
- ציון Lighthouse מעל 90 בכל 4 הקטגוריות
- מכיר/ה את Expo ואת תהליך בניית אפליקציית מובייל (גם אם לא בנית)
- מבין/ה מתי שיתוף קוד (Monorepo) שווה ומתי הוא מורכב מדי
- יש רשימת בדיקות Cross-Platform שאתה מריץ לפני כל Deploy
- מכיר/ה את Core Web Vitals (LCP, INP, CLS) ואיך לשפר אותם
- הוספת הוראות מובייל ל-CLAUDE.md של הפרויקט
- יודע/ת להשתמש ב-Plan Mode לתכנון Responsive Redesign
הפרק הזה לימד אותך שמובייל זה לא "תוספת" — זו המציאות של רוב המשתמשים שלך. גילית שגישת Mobile-First לא רק מייצרת חוויית מובייל טובה יותר, אלא מכריחה עיצוב ממוקד ונקי גם בדסקטופ. למדת ש-PWA הוא ה-sweet spot עבור 90% מהפרויקטים — התקנה, אופליין, והתראות בלי עמלות App Store — ושמעבר ל-React Native מוצדק רק כשיש צורך אמיתי ב-App Store. התובנה המרכזית: ב-Vibe Coding, Claude Code עושה את העבודה הכבדה — Responsive CSS, Service Workers, Lighthouse — אבל אתה צריך לדעת מה לבקש ומה לבדוק. בפרק הבא נעבור ל-Deployment — להעלות את הפרויקט הרספונסיבי שלך לאוויר.