- פרויקט Next.js עובד עם Tailwind CSS ו-shadcn/ui
- בסיס נתונים Supabase מחובר עם טבלאות ו-Row Level Security
- מערכת הרשמה ולוגין מלאה (Email + Google)
- אפליקציית CRUD עובדת — ניהול משימות עם יצירה, קריאה, עדכון ומחיקה
- Dashboard layout עם סרגל צד, ניווט, ו-Dark Mode
- אפליקציה מלוטשת עם אנימציות, toast notifications, ו-error handling
- אפליקציה מאומתת ונבדקת — מוכנה לפריסה ב-Vercel
- תוכל/י לבנות אפליקציית ווב דינמית מלאה (Frontend + Backend + Database + Auth) באמצעות Claude Code בלבד
- תוכל/י להחליט מתי לבחור Supabase מול Firebase בהתאם לדרישות הפרויקט
- תוכל/י להגדיר מערכת אימות משתמשים עם Row Level Security כדי שכל משתמש יראה רק את הנתונים שלו
- תוכל/י לתכנן data model לכל אפליקציית CRUD ולהתאים אותו לצרכים עסקיים (מ-Todo למלאי, CRM, או הזמנות)
- תוכל/י לבצע בדיקות ידניות שיטתיות — Happy Path, Edge Cases, Error States, ומובייל
- פרקים קודמים: פרק 1 (מבוא + התקנה), פרק 2 (Git Essentials), פרק 3 (בניית אתר — שליטה ב-Iteration Loop, פריסה, Tailwind בסיסי)
- כלים נדרשים: Claude Code מותקן, חשבון GitHub, Node.js מותקן (v18+), חשבון Supabase (חינמי), דפדפן Chrome
- זמן משוער לפרק: 6-8 שעות (מפוזרות על 4-5 ימים, כמומלץ בפרק)
בפרק 3 בנית אתר סטטי מלא — דפי HTML עם עיצוב, תמונות, אינטראקטיביות, ופרסת אותו לאינטרנט. בפרק הזה אתה קופץ לרמה הבאה: אפליקציה דינמית עם Next.js, Supabase, הרשמה ולוגין, ו-CRUD מלא. בפרק 5 תיקח את הכלים האלה ותבנה אוטומציות וסקריפטים שעובדים ברקע — ברגע שאתה יודע לבנות אפליקציה, אתה יכול לאוטמט הכל.
| מונח באנגלית | הסבר בעברית |
|---|---|
| Dynamic App | אפליקציה שמשתנה לפי המשתמש — שומרת נתונים, מגיבה לקלט, מציגה תוכן מותאם |
| Backend | הצד של השרת — הלוגיקה שרצה "מאחורי הקלעים", כמו שמירת נתונים ובדיקת סיסמאות |
| Database | בסיס נתונים — מקום שבו נשמר כל המידע של האפליקציה (משתמשים, משימות, הזמנות) |
| React | ספריית JavaScript של Meta ליצירת ממשקי משתמש. הפופולרית ביותר בעולם |
| Next.js | Framework (מסגרת עבודה) שבנוי על React — מוסיף routing, שרת, וכלי פריסה |
| Component | חלק UI עצמאי — כפתור, כרטיס, תפריט. כמו חלק לגו שאפשר לשלב עם אחרים |
| Props | נתונים שמעבירים לתוך component — כמו פרמטרים של פונקציה |
| State | נתונים שמשתנים בתוך component — טופס פתוח/סגור, מונה, סטטוס לוגין |
| CRUD | ארבע פעולות הבסיס: Create (יצירה), Read (קריאה), Update (עדכון), Delete (מחיקה) |
| Supabase | שירות ענן שנותן בסיס נתונים + אימות משתמשים + אחסון קבצים — חינם לפרויקטים קטנים |
| Authentication | תהליך זיהוי המשתמש — הרשמה, לוגין, ניהול הרשאות |
| RLS (Row Level Security) | מנגנון ב-Supabase ששולט מי רואה איזה נתונים — כל משתמש רואה רק את שלו |
| API | ממשק שמאפשר לאפליקציות לדבר אחת עם השנייה — לבקש ולשלוח נתונים |
| Firebase | פלטפורמה של Google שדומה ל-Supabase — אלטרנטיבה עם מערכת NoSQL |
מאתר סטטי לאפליקציה דינמית
בפרק הקודם בנית אתר סטטי. המילה "סטטי" (Static) אומרת שהאתר מציג את אותו דבר לכל מי שנכנס אליו — אין שם הרשמה, אין שמירת נתונים, אין תגובה למשתמש. כמו תפריט של מסעדה שתלוי על הקיר: כולם רואים את אותו תפריט.
אפליקציה דינמית (Dynamic App) זה סיפור אחר לגמרי. תחשוב על מערכת הזמנות של אותה מסעדה: לקוח נכנס, מתחבר, בוחר מנות, משלם, והמסעדה רואה את ההזמנה בזמן אמת. זה לא אתר — זו אפליקציה. וזה בדיוק הכיוון שאליו שוק הפיתוח הולך: לפי סקר Stack Overflow 2024, למעלה מ-65% מהמפתחים עובדים על אפליקציות ווב דינמיות — לא אתרים סטטיים. בעולם ה-Vibe Coding, כל אחד יכול להצטרף למגמה הזו.
מה הופך אפליקציה לדינמית? ארבעה דברים:
- קלט משתמש (User Input): טפסים, כפתורים, חיפוש — המשתמש מכניס מידע והאפליקציה מגיבה
- שמירת נתונים (Data Persistence): המידע נשמר בין ביקורים — אם הוספת משימה היום, היא תהיה שם גם מחר
- חשבונות משתמשים (Authentication): הרשמה, לוגין, ותוכן מותאם אישית לכל משתמש
- עדכונים בזמן אמת (Real-Time Updates): שינויים מופיעים מיידית — בלי ריענון דף
לפי דוח State of JS 2024, כ-71% מפרויקטי הווב החדשים כוללים לפחות שלושה רכיבים: Frontend (מה שהמשתמש רואה), Backend (הלוגיקה בשרת), Database (אחסון הנתונים), ו-Authentication (מי יכול לגשת למה). הנוסחה: Frontend + Backend + Database + Auth = אפליקציה מלאה. עם Claude Code, אתה מתאר את כולם בשפה טבעית — ולא צריך לבנות אף אחד מהם ידנית.
והנה החדשות הטובות: אתה לא צריך להבין backend development. אתה צריך להבין שיש frontend ויש backend, ו-Claude Code בונה את שניהם. אתה מתאר את ההתנהגות שאתה רוצה — Claude מחליט על הארכיטקטורה.
תחשוב על זה ככה: בפרק הקודם היית ארכיטקט שמעצב את המראה של הבניין (frontend). עכשיו אתה גם המנהל שמחליט מה קורה בתוך הבניין — מי נכנס, מי יוצא, מה נשמר ואיפה (backend + database). אבל אתה עדיין לא צריך להיות הטכנאי שמחבר את הצנרת. Claude Code הוא הטכנאי.
ההבדל המרכזי בגישת ה-Vibe Coder: במקום להגיד "build a REST API with Express.js and PostgreSQL" — אתה אומר "I want users to sign up, create tasks, and see only their own tasks." Claude בוחר את הכלים הנכונים, מתקין אותם, מגדיר הכל, וכותב את הקוד. אתה מתאר מה צריך לקרות, לא איך לעשות את זה.
דוגמאות לאפליקציות דינמיות שתוכל לבנות עם Claude Code:
| אפליקציה | מה היא עושה | סיבוכיות |
|---|---|---|
| רשימת משימות (Todo) | הוספה, עריכה, מחיקה, סינון — עם שמירה בענן | מתחיל |
| דשבורד ללקוחות | לוגין, צפייה בנתונים אישיים, הורדת דוחות | בינוני |
| בלוג עם ניהול | פאנל ניהול לכתיבת פוסטים, עמוד ציבורי לקריאה | בינוני |
| חנות דיגיטלית | קטלוג מוצרים, עגלת קניות, תשלום | מתקדם |
| מערכת הזמנות | לקוחות מזמינים, בעל העסק מנהל — בזמן אמת | מתקדם |
רגע של חשיבה לפני שמתחילים לבנות. חשוב על אפליקציה שאתה רוצה לבנות — משהו שיעזור לך או לעסק שלך. רשום על דף: (1) מה האפליקציה עושה? (2) מי המשתמשים? (3) אילו נתונים היא שומרת? (4) האם צריך לוגין? שמור את הדף — הוא ילווה אותך לאורך כל הפרק.
אתה לא צריך לדעת איך בונים backend. אתה צריך לדעת מה לבקש מ-Claude Code. במקום "build a REST API with Express.js and PostgreSQL" — תגיד: "Build an app where users can sign up, create tasks, and see only their own tasks." Claude יבחר את הכלים הנכונים.
הפרק הזה מכסה הרבה ground — React, Next.js, Supabase, Auth, CRUD, APIs. אל תנסה לעשות הכל ביום אחד. הגישה המומלצת: בנה כל יום פיצ'ר אחד. יום 1: פרויקט Next.js בסיסי. יום 2: חיבור Supabase. יום 3: Auth. יום 4: CRUD. יום 5: ליטוש (אנימציות, error handling, dark mode). בסוף השבוע — יש לך אפליקציה מלאה.
React ו-Next.js דרך Claude Code
React היא ספריית ה-JavaScript הפופולרית ביותר בעולם לבניית ממשקי משתמש. לפי סקר Stack Overflow 2024, React משמשת כ-39% מכלל המפתחים בעולם — יותר מכל ספריית frontend אחרת. היא נבנתה על ידי Meta (פייסבוק), ו-Claude Code מכיר אותה ברמה מצוינת. חשוב להבין: React היא לא שפת תכנות חדשה — היא דרך לארגן קוד JavaScript לחלקים קטנים (Components) שמרכיבים ביחד אפליקציה.
Next.js הוא framework (מסגרת עבודה) שבנוי מעל React. הוא מוסיף לה כל מה שצריך כדי לבנות אפליקציה מלאה: routing (ניווט בין דפים), שרת, כלי אופטימיזציה, וחיבור מושלם ל-Vercel לפריסה. עם למעלה מ-6 מיליון הורדות שבועיות ב-npm, זה ה-framework הכי פופולרי ל-Vibe Coding — וגם הכלי שסטארטאפים ישראלים רבים בוחרים לפרויקטי MVP.
למה דווקא Next.js?
- Claude מייצר קוד Next.js מצוין — הוא אומן על מיליוני פרויקטים כאלה
- Vercel פורס אותו בלחיצה — מושלם לפריסה מהירה
- קהילה ענקית — כל שאלה שתהיה לך, מישהו כבר שאל ומישהו כבר ענה
- App Router — מערכת הניווט החדשה (ספריית app/) היא מודרנית ואינטואיטיבית
פתח את Claude Code והקלד את הפרומפט הזה:
"Create a new Next.js project called my-first-app with TypeScript, Tailwind CSS, and shadcn/ui. Add a homepage with a nav bar, hero section, and a card grid with 3 cards."
צפה ב-Claude בונה את הפרויקט: יצירת תיקייה, התקנת חבילות, בניית components, הכל אוטומטית. כשזה מוכן, פתח את הדפדפן ב-localhost:3000 ותראה את האפליקציה שלך.
מבנה הפרויקט ש-Claude יוצר:
| תיקייה/קובץ | מה נמצא שם |
|---|---|
app/ | כל הדפים של האפליקציה — כל תיקייה = route (נתיב) |
app/page.tsx | דף הבית |
app/layout.tsx | ה-Layout המשותף — header, footer, fonts |
components/ | חלקי UI שחוזרים על עצמם — כפתורים, כרטיסים, תפריט |
public/ | קבצים סטטיים — תמונות, favicon, fonts |
lib/ | קוד עזר — חיבור ל-database, פונקציות שירות |
.env.local | משתני סביבה — מפתחות API, סיסמאות (לעולם לא ב-Git!) |
ל-Next.js יש שתי מערכות routing: Pages Router (הישנה, תיקיית pages/) ו-App Router (החדשה, תיקיית app/). תמיד ודא ש-Claude משתמש ב-App Router — זו הגישה המודרנית. אם אתה רואה תיקיית pages/ במקום app/, תגיד ל-Claude: "Use the App Router with the app/ directory, not Pages Router."
מושג חשוב: React = אבני לגו. כל חלק באתר הוא component נפרד. יש לך כפתור? זה component. כרטיס מוצר? component. תפריט ניווט? component. אתה מרכיב את כולם ביחד ליצירת האפליקציה. כשאתה אומר ל-Claude "create a component for a user profile card" — הוא בונה חלק עצמאי שאפשר לשלב בכל דף.
הגישה הזו נקראת Component-Based Architecture, והיא לא רק שיטת עבודה — היא הדרך שבה כמעט כל אפליקציה מודרנית נבנית. Netflix, Airbnb, ו-Wix — כולם משתמשים ב-React Components. היתרון ל-Vibe Coder: כש-Claude יוצר component אחד, אתה יכול לבקש ממנו לשכפל, לשנות, או לשלב אותו בדפים שונים — בלי לגעת בקוד.
TypeScript — אל תפחד מהשם
כשתיצור פרויקט Next.js, Claude ישתמש ב-TypeScript — גרסה משופרת של JavaScript שמוסיפה "בטיחות סוגים". מה זה אומר בפועל? TypeScript עוזר ל-Claude לכתוב קוד עם פחות באגים, כי המערכת יודעת מראש איזה סוג נתון כל משתנה צריך להכיל. אתה לא צריך לדעת TypeScript — רק לדעת שזה דבר טוב ולא לבקש מ-Claude להוריד אותו. קבצי TypeScript מסתיימים ב-.tsx במקום .jsx — זה כל ההבדל מבחינתך.
shadcn/ui — ספריית רכיבים מוכנה
shadcn/ui היא ספריית רכיבים (Component Library) שבנויה על Tailwind CSS, ומ-2024 היא הספרייה הפופולרית ביותר בקרב מפתחי Next.js. מה זה אומר? במקום ש-Claude יבנה כפתור, טבלה, או חלון קופץ מאפס — הוא משתמש ברכיבים מוכנים שנראים מקצועיים, עקביים, ונגישים. התוצאה: האפליקציה שלך נראית כאילו צוות עיצוב עבד עליה. ב-shadcn/ui יש למעלה מ-50 רכיבים מוכנים — מכפתורים ועד data tables מלאים.
רכיבי shadcn/ui שתשתמש בהם הכי הרבה:
- Button — כפתורים בגדלים וסגנונות שונים
- Card — כרטיסים להצגת מידע
- Dialog — חלונות קופצים (modals)
- Table — טבלאות נתונים מעוצבות
- Form — טפסים עם validation מובנה
- Sidebar — סרגל ניווט צידי
- Toast — הודעות זמניות ("נשמר!", "שגיאה!")
Components, State ו-Props — מה שצריך לדעת
אתה לא צריך לכתוב קוד React. אבל הבנה של שלושה מושגים תהפוך אותך ל-Vibe Coder פי 10 יותר טוב — כי תדע איך לתאר מה שאתה רוצה בצורה ש-Claude מבין מיד.
1. Components — חלקי בנייה
Component הוא חלק UI עצמאי. כמו חלק לגו: לבד הוא עושה דבר אחד, אבל כשמחברים הרבה חלקים ביחד — מקבלים אפליקציה שלמה.
- UserCard — מציג שם, תמונה ומייל של משתמש
- LoginForm — טופס הרשמה/התחברות
- TaskList — רשימת משימות עם אפשרות סימון
- Sidebar — סרגל ניווט צידי
איך זה עוזר לך? כשאתה אומר ל-Claude "create a component for displaying a customer review with star rating, name, and text" — הוא מבין בדיוק מה ליצור. Component = יחידה בודדת של UI.
2. Props — נתונים שנכנסים
Props (קיצור של Properties) הם הנתונים שאתה מעביר לתוך component. תחשוב על זה כמו פרמטרים: ה-UserCard מקבל שם, מייל, ותמונה — אלה ה-props שלו.
למה זה חשוב? כי כשאתה אומר ל-Claude: "The product card receives the product name, price in ILS, image URL, and a boolean for whether it's on sale" — Claude יוצר component שמקבל בדיוק את הנתונים האלה. ככל שתהיה יותר ספציפי לגבי ה-props, ה-component יהיה יותר מדויק.
3. State — נתונים שמשתנים
State הוא כל נתון שיכול להשתנות באפליקציה. כשמשתמש לוחץ על כפתור, ממלא טופס, או בוחר אפשרות — משהו משתנה. זה state.
- מונה: מתחיל ב-0, עולה כשלוחצים — ה-state הוא המספר הנוכחי
- טופס: שדות ריקים שהמשתמש ממלא — ה-state הוא תוכן כל שדה
- תפריט: פתוח או סגור — ה-state הוא true/false
- עגלת קניות: מוצרים שנוספו — ה-state הוא רשימת המוצרים
- סטטוס לוגין: מחובר או לא — ה-state הוא פרטי המשתמש (או null)
יש הבדל בין Local State ל-Global State. Local State שייך ל-component אחד — למשל, האם תפריט ספציפי פתוח או סגור. Global State משותף לכל האפליקציה — למשל, מי המשתמש המחובר. Claude מבין את ההבדל ומיישם את הפתרון הנכון.
תחשוב על אפליקציית חנות:
- Component:
ProductCard— כרטיס מוצר בודד - Props: שם המוצר ("חולצה כחולה"), מחיר (149 ש"ח), תמונה, האם במבצע
- State: כמות בעגלה (מתחיל ב-0, עולה כשלוחצים "הוסף לעגלה")
כשאתה אומר ל-Claude: "Create a ProductCard component that receives product name, price in ILS, image URL, and whether it's on sale. Add an 'Add to Cart' button that shows a counter of items added." — Claude מבין בדיוק מה ה-Props (הנתונים הקבועים) ומה ה-State (הנתון המשתנה) ובונה הכל בדיוק כמו שתיארת.
Components הם אבני הבניין, Props הם ההגדרות שלהם, ו-State הוא מה שמשתנה. זו כל ה-React שאתה צריך כ-Vibe Coder. כשמשהו לא עובד — בדרך כלל זו בעיית State. כשהעיצוב לא מתאים — בדרך כלל זו בעיית Props. וכשרוצים לארגן מחדש — זו בעיית Components. שלושת המושגים האלה הם "שפה משותפת" בינך לבין Claude Code.
כשמשהו לא מתנהג כמו שציפית באפליקציית React, תגיד ל-Claude: "I think the state isn't updating correctly when I click the button." זה עוזר לו לאבחן את הבעיה הרבה יותר מהר מ-"it doesn't work".
חזור לפרויקט ה-Next.js שיצרת. בקש מ-Claude:
"Add a counter component to the homepage with + and - buttons. The counter starts at 0. Add a reset button that sets it back to 0."
צפה ב-Claude יוצר component עם state (המספר) ו-props (ערך ההתחלה). שחק עם המונה בדפדפן — זה state בפעולה.
Supabase — בסיס נתונים ל-Vibe Coders
כל אפליקציה ששומרת נתונים צריכה בסיס נתונים (Database). בלי database, כל מה שהמשתמש עושה נעלם ברגע שהוא סוגר את הדפדפן. Supabase נותן לך database חזק, חינמי, ועם ממשק גרפי יפהפה — בלי שתצטרך לדעת SQL או לנהל שרתים.
מה זה Supabase בעברית? בסיס נתונים בענן עם ממשק גרפי. במקום לכתוב פקודות מסובכות, אתה מנהל נתונים דרך טבלה שנראית כמו Excel. ויש לו עוד הרבה: אימות משתמשים, אחסון קבצים, ופונקציות שרת — הכל מקום אחד. Supabase גדל מ-700 אלף מפתחים ב-2023 ליותר ממיליון ב-2024, ויש סיבה טובה: הוא מבוסס על PostgreSQL (בסיס הנתונים הפופולרי ביותר בקרב מפתחים, לפי DB-Engines), ומנגיש אותו גם לאנשים שלא כותבים SQL.
יצירת פרויקט Supabase
הירשם ל-Supabase וצור את הפרויקט הראשון שלך:
- כנס ל-supabase.com → Sign Up (עם GitHub או מייל)
- לחץ New Project
- שם הפרויקט:
my-first-app - סיסמה לדאטאבייס: בחר סיסמה חזקה ושמור אותה!
- Region: Europe (Frankfurt) — הכי קרוב לישראל
- לחץ Create new project — תמתין דקה-שתיים
- ברגע שהפרויקט מוכן, לך ל-Settings → API וקח את ה-
URLואת ה-anon key
טבלאות (Tables) ב-Supabase עובדות כמו גיליונות אלקטרוניים. כל טבלה מייצגת סוג של מידע:
| טבלה | עמודות | מה היא שומרת |
|---|---|---|
users |
name, email, avatar_url, created_at | פרטי משתמשים |
tasks |
title, description, completed, user_id, created_at | משימות של כל משתמש |
products |
name, price, image_url, category, in_stock | קטלוג מוצרים |
ארבע הפעולות שכל אפליקציה עושה נקראות CRUD:
- Create — יצירה: משתמש מוסיף משימה חדשה
- Read — קריאה: האפליקציה מציגה את רשימת המשימות
- Update — עדכון: משתמש מסמן משימה כהושלמה
- Delete — מחיקה: משתמש מוחק משימה ישנה
כשתגיד ל-Claude "Connect this Next.js app to Supabase and create a tasks table" — הוא יודע בדיוק מה לעשות: ליצור את הטבלה, להגדיר את העמודות, לחבר את ה-API, ולבנות את ה-CRUD.
חבר את הפרויקט ל-Supabase. הקלד ב-Claude Code:
"Connect this Next.js app to Supabase and create a tasks table with title (text), description (text), completed (boolean), and created_at (timestamp) columns. Store the Supabase URL and anon key in .env.local."
Claude יתקין את חבילת @supabase/supabase-js, ייצור את קובץ החיבור, ויגדיר הכל.
Row Level Security — מי רואה מה
Row Level Security (RLS) הוא מנגנון ב-Supabase ששולט מי יכול לראות ולערוך אילו שורות בטבלה. בלי RLS, כל מי שיש לו את ה-API key יכול לראות את כל הנתונים. עם RLS, כל משתמש רואה רק את הנתונים שלו.
אתה לא צריך לכתוב RLS policies בעצמך. תגיד ל-Claude: "Enable Row Level Security on the tasks table so each user can only see and edit their own tasks." Claude ייצור את ה-policies הנכונות.
איך RLS עובד מאחורי הקלעים? כל שורה בטבלה כוללת עמודה user_id שמזהה למי היא שייכת. כש-RLS מופעל, Supabase בודק אוטומטית: "האם ה-user_id של השורה הזו שווה ל-user_id של המשתמש שמבקש אותה?" אם כן — הוא רואה אותה. אם לא — היא לא קיימת מבחינתו. זה קורה ברמת ה-database, אז אפילו אם מישהו מנסה לעקוף את הקוד — הנתונים מוגנים.
אורי מנהל שירות הובלות בבאר שבע. הוא בנה עם Claude Code אפליקציה פשוטה לניהול הובלות: טבלת jobs עם תאריך, כתובת מוצא, כתובת יעד, שם לקוח, טלפון, ומחיר. טבלת expenses עם דלק, תיקונים, ומשכורות עובדים. הוא הוסיף דשבורד שמציג: כמה הובלות החודש, סך הכנסות, סך הוצאות, ורווח. כל זה על ה-Free Tier של Supabase — 500MB זה מספיק לאלפי רשומות של הובלות.
Supabase נותן חינם: 2 פרויקטים, 500MB בסיס נתונים, 1GB אחסון קבצים, ו-50,000 משתמשים פעילים בחודש. יותר ממספיק ללמידה ולפרויקטים קטנים. בפרספקטיבה: 500MB זה מספיק לאחסון של כ-2 מיליון שורות של נתוני טקסט. רוב בעלי העסקים הקטנים בישראל לא יגיעו לגבול הזה אפילו אחרי שנים של שימוש.
Authentication — חשבונות משתמשים ולוגין
רוב האפליקציות צריכות שמשתמשים יתחברו. מחקרים מראים ש-86% מהמשתמשים מעדיפים אפליקציות שמתאימות את עצמן אישית — ובשביל זה צריך לדעת מי המשתמש. אתה רוצה שכל אחד יראה את הנתונים שלו, ושאנשים לא יוכלו לגשת לדברים שלא שייכים להם. Supabase Auth נותן לך מערכת אימות מלאה — הרשמה, לוגין, שחזור סיסמה, וגם לוגין עם Google. מערכת Auth שעובדת היתה דורשת שבועות של עבודה מפתח backend מנוסה. עם Claude Code, זה פרומפט אחד.
אפשרויות האימות דרך Supabase:
- Email + Password: הקלאסי — טופס הרשמה עם מייל וסיסמה
- Google Login: כפתור "התחבר עם Google" — הכי קל למשתמשים
- GitHub Login: מתאים לאפליקציות טכנולוגיות
- Magic Link: לוגין בלי סיסמה — שולחים לינק למייל
תהליך ה-Auth
הזרימה של אימות משתמש נראית ככה:
הרשמה → אימות מייל → התחברות → קבלת Session Token → גישה לדפים מוגנים → התנתקות
Session Token הוא כמו צמיד כניסה לפסטיבל — ברגע שקיבלת אותו (אחרי לוגין), אתה יכול להיכנס לכל מקום מוגן. כשאתה מתנתק, הצמיד נזרק. ה-Token נשמר בדפדפן (ב-cookies או localStorage) ונשלח אוטומטית עם כל בקשה ל-Supabase — ככה Supabase יודע מי אתה.
User Context — מי המשתמש
אחרי לוגין, האפליקציה יודעת מי המשתמש. זה פותח עולם שלם של אפשרויות: הצגת שם אישי ("שלום, דנה!"), נתונים מותאמים אישית (המשימות של דנה, לא של כולם), והגדרות אישיות (מצב כהה, שפה, העדפות). Claude יודע לבנות את כל זה — רק תתאר מה המשתמש צריך לראות אחרי לוגין.
- אתה בונה אפליקציה ללמידה / פרויקט אישי? → Email + Password — מלמד הכי הרבה על תהליך ה-Auth
- אתה בונה אפליקציה שמשתמשים אמיתיים ישתמשו בה? → Google Login + Email כ-fallback — הכי קל למשתמשים
- אתה בונה כלי פנימי לעסק? → Magic Link — בלי סיסמאות, בלי כאבי ראש
- אתה בונה אפליקציה למפתחים? → GitHub Login — קהל היעד כבר שם
Protected Routes — דפים מוגנים
דפים מוגנים (Protected Routes) הם דפים שאפשר לגשת אליהם רק אחרי לוגין. למשל: דף הדשבורד, דף ההגדרות, דף המשימות — כולם דורשים שהמשתמש מחובר. אם מישהו מנסה לגשת בלי לוגין, הוא מועבר אוטומטית לדף ההתחברות.
איך זה עובד? Claude יוצר Middleware — קוד שרץ לפני כל בקשת דף. ה-Middleware בודק: "יש Session Token? כן → תן גישה. לא → העבר לדף התחברות." אתה לא צריך לכתוב את ה-Middleware — Claude עושה את זה כשאתה מבקש דפים מוגנים.
הדפוס הנפוץ: דפי marketing (דף הבית, תמחור, אודות) — פתוחים לכולם. דפי אפליקציה (דשבורד, הגדרות, נתונים) — רק למחוברים. Claude יודע ליצור את ההפרדה הזו כשאתה מתאר את המבנה.
הוסף מערכת אימות לאפליקציה שלך. הקלד ב-Claude Code:
"Add user signup and login with email/password using Supabase Auth. After login, redirect to a dashboard page that shows the user's name and email. If a user tries to access the dashboard without being logged in, redirect them to the login page. Add a logout button in the dashboard."
בדוק: נרשם, התחבר, ראה את שמך בדשבורד, התנתק, נסה להיכנס לדשבורד בלי לוגין — אתה אמור להגיע לדף ההתחברות.
מיכל, יועצת תזונה מהרצליה, בנתה עם Claude Code מערכת ניהול לקוחות. כל לקוח מתחבר עם Google Login (כי לרוב הישראלים יש חשבון Google) ורואה את תוכנית התזונה האישית, מעקב משקל, ורשימת קניות מותאמת. מיכל כמנהלת רואה את כל הלקוחות. כל זה עם Supabase Auth + RLS — כל לקוח רואה רק את עצמו, מיכל רואה את כולם. זמן בנייה: ערב אחד.
כל מערכת אימות שלמה כוללת: טופס הרשמה → טופס התחברות → אימות מייל → דפים מוגנים → פרופיל משתמש → כפתור התנתקות → שחזור סיסמה. בקש מ-Claude את כל הרשימה בפרומפט אחד — הוא יבנה את כל 7 השלבים.
Google Login קל יותר למשתמשים, אבל Email + Password מלמד יותר על תהליכי Auth. התחל עם Email כדי להבין את הזרימה, ואז הוסף Google Login: "Add a 'Sign in with Google' button to the login page." Claude יגדיר הכל ב-Supabase ובקוד.
בניית אפליקציית CRUD מלאה
עכשיו מגיע הרגע האמיתי: לבנות אפליקציית CRUD מלאה. "CRUD" זה ראשי תיבות של ארבע פעולות הבסיס שכל אפליקציה עושה: Create (יצירה), Read (קריאה), Update (עדכון), Delete (מחיקה). כל אפליקציה בעולם — מ-Gmail ועד אמזון — עושה את ארבע הפעולות האלה. אם תבין CRUD, הבנת את 80% מהלוגיקה של כל אפליקציית ווב.
האפליקציה הקלאסית הראשונה: מנהל משימות (Task Manager).
מה האפליקציה תעשה
- Create: טופס להוספת משימה חדשה — כותרת ותיאור
- Read: רשימה שמציגה את כל המשימות, עם סינון (הכל / פעילות / הושלמו)
- Update: לחיצה על משימה פותחת מצב עריכה; אפשר גם לסמן כ"הושלם"
- Delete: כפתור מחיקה עם חלון אישור ("בטוח?")
הנתונים שייכים למשתמש: כל משתמש רואה רק את המשימות שלו. RLS ב-Supabase מטפל בזה.
בנה את אפליקציית מנהל המשימות המלאה. הקלד ב-Claude Code:
"Build a task management app where users can create, view, edit, complete, and delete tasks. Each user should only see their own tasks. Add a filter for all/active/completed tasks. Use a clean, modern design with shadcn/ui components. Connect to Supabase for data storage. Include: a form to add tasks with title and description, a task list with checkboxes for completion, edit mode on click, delete with confirmation dialog, and real-time updates."
זה פרומפט גדול — וזה בסדר. פרומפטים ארוכים ומפורטים נותנים תוצאות טובות יותר.
עדכונים בזמן אמת
רוצה תכונה מרשימה? בקש מ-Claude להוסיף Real-Time Updates. זה אומר: אם פתוח לך שני חלונות דפדפן (או שניים חברים מחוברים לאותו חשבון), שינוי באחד מתעדכן מיידית בשני — בלי ריענון דף.
הפרומפט: "Add real-time subscriptions so that changes to tasks are immediately visible in all open browser tabs." — Claude משתמש ב-Supabase Realtime Subscriptions כדי לעשות את זה.
הפרומפט המושלם לאפליקציית CRUD
כלל אצבע ל-Vibe Coders: ככל שהפרומפט יותר מפורט, התוצאה יותר טובה. הנה מבנה מומלץ לפרומפט שמייצר אפליקציית CRUD:
- מהות האפליקציה: "Build a task management app" — מה היא עושה
- פעולות: "Users can create, view, edit, complete, and delete tasks" — CRUD מפורט
- בעלות: "Each user sees only their own tasks" — RLS ו-auth
- סינון: "Add filters for all/active/completed" — תכונות נוספות
- עיצוב: "Clean, modern design with shadcn/ui" — כיוון עיצובי
- חיבור: "Connect to Supabase for data storage" — stack טכני
- פרטים: "Include: form with title and description, checkboxes, edit mode, delete confirmation" — UI ספציפי
שים לב: אתה לא אומר ל-Claude איך לבנות. אתה אומר מה צריך להיות. זה הלב של Vibe Coding.
מ-CRUD למוצר אמיתי
אפליקציית CRUD של משימות היא נקודת ההתחלה. אבל מה שמעניין הוא מה שקורה אחרי: אתה לוקח את אותו שלד ומשנה את ה-data model כדי לבנות כל אפליקציה שתרצה.
| אפליקציית משימות | הופכת ל... | על ידי שינוי ה-data model ל... |
|---|---|---|
| Tasks (title, completed) | CRM לקוחות | Clients (name, email, phone, status, notes) |
| Tasks (title, completed) | ניהול מלאי | Products (name, quantity, price, supplier) |
| Tasks (title, completed) | מעקב הוצאות | Expenses (amount, category, date, receipt_url) |
| Tasks (title, completed) | בלוג | Posts (title, content, published, category) |
הלוגיקה זהה: טופס ליצירה, רשימה לצפייה, עריכה, מחיקה, סינון. רק הנתונים משתנים. ברגע שבנית אפליקציית CRUD אחת — יש לך תבנית לכל שאר האפליקציות. זה כוח אדיר: במקום ללמוד לבנות כל אפליקציה מאפס, אתה לומד pattern אחד ומשנה רק את הנתונים.
יעל, מעצבת גרפית עצמאית מרעננה, לקחה את אפליקציית המשימות שבנתה וגרמה לה לעבוד בשבילה. היא שינתה את ה-data model: במקום "משימות" — "פרויקטים של לקוחות". כל פרויקט כולל שם הלקוח, מועד הגשה, סטטוס (ממתין / בעבודה / הושלם), וסכום לתשלום. היא שינתה את הסינון: במקום all/active/completed — ממתינים / בעבודה / הושלמו / חשבוניות. התוצאה: דשבורד אישי שמנהל את כל העבודה שלה — בנוי על בסיס אפליקציית CRUD פשוטה.
ברגע שבנית אפליקציית CRUD אחת — אתה יכול לבנות כל אפליקציית CRUD. רק משנים את ה-data model: משימות → לקוחות → מוצרים → הזמנות → פוסטים. הלוגיקה זהה: טופס ליצירה, רשימה לצפייה, עריכה ומחיקה. תרגל טוב עם משימות — והשאר יבוא טבעי.
טפסים וקלט משתמש
כל אפליקציית ווב צריכה טפסים: טופס יצירת קשר, טופס הרשמה, חיפוש, הגדרות, הזמנות. טפסים הם הדרך שבה המשתמש "מדבר" עם האפליקציה — וטפסים הם גם המקום שבו הכי הרבה אנשים נוטשים. מחקר של Formstack מראה שכ-67% מטפסים ארוכים מדי לא ממולאים עד הסוף. טפסים טובים עושים את ההבדל בין אפליקציה שמרגישה מקצועית לכזו שמרגישה חובבנית.
Validation — בדיקת קלט
Validation (בדיקת קלט) אומר: לוודא שהמשתמש הכניס מידע תקין לפני שהנתונים נשלחים. למה זה חשוב? כי בלי validation, משתמשים ישלחו נתונים שבורים — שדה מייל ריק, סיסמה עם תו אחד, או תו מיוחד שהורס את ה-database.
יש שני סוגים:
- Client-side Validation: בדיקה בדפדפן, מיידית. המשתמש רואה הודעת שגיאה ברגע שכותב מייל לא תקין
- Server-side Validation: בדיקה בשרת, כגיבוי. גם אם מישהו עוקף את הבדיקה בדפדפן, השרת תופס
Claude מוסיף את שניהם כשאתה מבקש. שים לב שב-validation חשוב לציין פורמטים ישראליים — מספרי טלפון בישראל מתחילים ב-05, ת.ז. הוא 9 ספרות, מיקוד הוא 7 ספרות. דוגמה לפרומפט:
"Add a contact form with name (required), email (required, must be valid email format), phone (optional, Israeli format starting with 05), and message (required, minimum 10 characters). Show inline error messages in Hebrew."
העלאת קבצים
הרבה אפליקציות צריכות שהמשתמש יעלה קבצים — תמונת פרופיל, מסמך, או תמונות מוצר. Supabase Storage נותן אחסון קבצים בענן, ו-Claude מחבר אותו בקלות:
"Add a profile picture upload to the user settings page. Store the image in Supabase Storage and display it in the nav bar."
UX של טפסים — ההבדל בין חובבני למקצועי
טפסים טובים מכילים הרבה פרטים קטנים שגורמים למשתמש להרגיש שהאפליקציה מקצועית:
- Loading State: כשלוחצים "שלח", הכפתור מציג spinner ומשתנה ל-"שולח..." — ככה המשתמש יודע שמשהו קורה
- Disabled Button: כפתור השליחה אפור עד שכל השדות הנדרשים מלאים — מונע שליחת טופס ריק
- Inline Errors: הודעת שגיאה מופיעה ליד השדה הבעייתי, לא בראש הדף — המשתמש רואה מיד מה לתקן
- Success Message: אחרי שליחה מוצלחת, הודעה ירוקה ("נשמר בהצלחה!") או toast notification
- Auto-save: לטפסים ארוכים, שמירה אוטומטית כל 30 שניות — למקרה שהדפדפן נסגר
כל הפרטים האלה? תבקש מ-Claude. הוא יודע לבנות את כולם. הטריק הוא לזכור לבקש — כי Claude לא תמיד מוסיף אותם אוטומטית.
כל טופס מקצועי כולל: Labels (תוויות לכל שדה) → Validation Rules (חוקי בדיקה) → Error Messages (הודעות שגיאה ברורות) → Loading State (מצב טעינה בשליחה) → Success Feedback (הודעת הצלחה) → Accessibility (נגישות — labels מקושרים ל-inputs).
הוסף טופס מתקדם לאפליקציה שלך. בקש מ-Claude:
"Add a Settings page with a form for updating user profile: display name (required), bio (optional, max 200 characters with character counter), and profile picture upload. Show loading state while saving, and a success toast when saved. Add validation error messages in Hebrew."
בדוק: מלא פרטים, שלח, ראה את הודעת ההצלחה. נסה לשלוח עם שדה ריק — ראה את הודעת השגיאה.
אל תשכח לבקש מ-Claude validation לכל טופס. בלי validation, משתמשים ישלחו נתונים שבורים ואתה תצטרך לתקן — או גרוע יותר, הנתונים השבורים ישברו דברים אחרים באפליקציה. כלל אצבע: אם יש שדה, יש validation.
Layouts, ניווט ודפוסי UI
כל אפליקציה רצינית צריכה layout — המבנה הכללי של הדפים. ה-layout הנפוץ ביותר באפליקציות ווב הוא Dashboard Layout: סרגל צד (Sidebar) לניווט, header עליון עם שם המשתמש, ואזור תוכן ראשי.
הפרומפט ל-Claude: "Add a dashboard layout with a collapsible sidebar, top header with user info, and a main content area." — זה מספיק. Claude ייצור Layout component שעוטף את כל הדפים, sidebar עם לינקים, header עם שם המשתמש, ואזור תוכן שמשתנה לפי הדף.
RTL — בניית ממשק לעברית
רגע חשוב לשוק הישראלי: כשבונים אפליקציה בעברית, צריך RTL (Right-to-Left). זה משפיע על הכל — הטקסט זורם מימין לשמאל, ה-Sidebar נמצא בצד ימין (לא שמאל), וכפתורי "קודם/הבא" מתהפכים. הפרומפט הנכון: "This app is in Hebrew. Set dir='rtl' on the HTML element. Place the sidebar on the right. Make sure all text, icons, and navigation are RTL-friendly."
Claude מכיר RTL היטב, אבל חשוב להדגיש את זה מוקדם — לפני שהוא בונה את ה-Layout. לתקן RTL בדיעבד זה כאב ראש. לבנות RTL מההתחלה זה שורה אחת בפרומפט.
דפוסי ניווט
| דפוס | מתי להשתמש | דוגמאות |
|---|---|---|
| Sidebar Navigation | אפליקציות / דשבורדים | Gmail, Notion, Slack |
| Top Navigation | אתרים / דפי נחיתה | אתרי חברות, בלוגים |
| Bottom Navigation | אפליקציות מובייל | Instagram, TikTok |
| Breadcrumbs | דפים עמוקים במבנה | חנויות, אתרי תוכן |
UI Patterns ש-Claude בונה מצוין
- Data Tables: טבלאות נתונים עם מיון, סינון, וחיפוש
- Modal Dialogs: חלונות קופצים — לאישורים, טפסים קצרים, הודעות
- Dropdown Menus: תפריטים נפתחים — לפעולות, בחירה, ניווט
- Tabs: לשוניות — להצגת תוכן שונה באותו דף
- Toast Notifications: הודעות קצרות שמופיעות ונעלמות — "נשמר בהצלחה!"
- Skeleton Loading: מסכות אפורות שממלאות כשהנתונים נטענים — הרבה יותר יפה מ-spinner
הוסף Dashboard Layout לאפליקציית מנהל המשימות. הקלד ב-Claude Code:
"Add a dashboard layout with a collapsible sidebar on the right (RTL). The sidebar should have navigation links: Tasks, Settings, and Profile. Add a top header with the user's name, avatar placeholder, and a logout button. The main content area should show the current page. Use shadcn/ui components. Add a dark/light mode toggle that persists across sessions."
בדוק: לחץ על הלינקים בסרגל הצד, בדוק שה-Dark Mode נשמר אחרי ריענון דף.
Dark Mode — לא רק מגניב, גם חשוב
Dark Mode הפך מטרנד לציפייה — לפי סקרים, למעלה מ-80% מהמשתמשים מפעילים Dark Mode לפחות חלק מהזמן. וב-shadcn/ui, הוספת Dark Mode היא כמעט חינמית — הספרייה תומכת בזה מובנה.
הפרומפט: "Add a dark/light mode toggle using shadcn/ui theming. Store the preference in localStorage so it persists across sessions. Default to the user's system preference." — Claude ייצור toggle button ויחבר את כל ה-CSS themes.
shadcn/ui נותן לך כל הדפוסים האלה מוכנים: sidebar, table, dialog, dropdown, tabs, toast, ו-dark mode. במקום ש-Claude יבנה הכל מאפס, תגיד לו: "Use shadcn/ui components for the sidebar, data table, and modal." התוצאה תהיה יותר אחידה, יותר נגישה, ויותר יפה.
חיבור ל-API חיצוניים
האפליקציה שלך לא חייבת לחיות בבידוד. היא יכולה למשוך נתונים מכל מקום באינטרנט דרך APIs (Application Programming Interfaces). API הוא כמו מלצר במסעדה: אתה אומר לו מה אתה רוצה (בקשה), הוא הולך למטבח (השרת), ומביא את מה שביקשת (תשובה). יש עשרות אלפי APIs ציבוריים שאפשר לחבר לאפליקציה שלך — מזג אוויר, תשלומים, מפות, AI, שליחת מיילים, ועוד.
חיבור API הוא אחד הדברים שבהם Vibe Coding באמת זורח: במקום לקרוא תיעוד טכני של כל API, לכתוב קוד חיבור, לטפל ב-error handling — אתה אומר ל-Claude מה אתה רוצה, והוא עושה הכל. נתעמק ב-APIs בפרק 6, אבל כבר עכשיו אתה יכול לחבר שירותים חיצוניים לאפליקציה:
| API | מה הוא נותן | שימוש |
|---|---|---|
| Google Maps | מפות, מיקום, כתובות | הצגת מיקום העסק, Directions |
| Stripe | תשלומים | קבלת תשלומי כרטיס אשראי |
| SendGrid | שליחת מיילים | אישורי הזמנה, התראות |
| OpenAI | יכולות AI | צ'אטבוט, סיכום טקסט, תרגום |
| OpenWeatherMap | מזג אוויר | הצגת מזג אוויר לפי מיקום |
| Unsplash | תמונות | תמונות באיכות גבוהה לאפליקציה |
API Keys — מפתחות גישה
רוב ה-APIs דורשים API Key — מפתח שמזהה אותך ומאפשר לשירות לעקוב אחרי השימוש שלך (ולחייב אותך, אם צריך). כלל ברזל: לעולם אל תשים API Key בקוד Frontend. למה? כי כל אחד יכול לראות את הקוד שרץ בדפדפן — וליגנוב את המפתח שלך. פרצת אבטחה כזו עלולה לעלות בכסף אמיתי — יש מקרים של מפתחות API שנחשפו ב-GitHub ועלו למפתחים אלפי דולרים בנזק.
הפתרון: API Keys נשמרים בקובץ .env.local ומשמשים רק בצד השרת (Server-side API routes). Claude יודע לעשות את זה אוטומטית — וזו אחת הסיבות שלמרות שאתה לא מפתח, האפליקציה שלך מאובטחת.
איך זה עובד בפועל? Claude יוצר קובץ app/api/weather/route.ts (Server-side API Route) שמשתמש ב-API Key כדי לקרוא ל-OpenWeatherMap. הקוד בדפדפן (Frontend) קורא ל-/api/weather — שזה route בשרת שלך, לא ישירות ל-OpenWeatherMap. ככה המפתח נשאר בשרת ולעולם לא נחשף. זה נקרא Proxy Pattern — הדפדפן מדבר עם השרת שלך, והשרת שלך מדבר עם ה-API החיצוני.
נגיד שאתה בונה אפליקציה למסעדה. אתה יכול לחבר מספר APIs:
- Google Maps API: הצגת מפה עם מיקום המסעדה ו-Directions
- Stripe API: קבלת תשלומים על הזמנות אונליין
- SendGrid API: שליחת מייל אישור הזמנה אוטומטית
- OpenAI API: צ'אטבוט שעוזר ללקוחות לבחור מנה לפי העדפות
כל אחד מהחיבורים האלה דורש פרומפט אחד ל-Claude. "Add a Stripe checkout button for online orders" — ו-Claude מגדיר הכל: צד שרת, צד לקוח, ו-webhook לאישור תשלום.
הזרימה: קבל API Key → שמור ב-.env.local → צור route בצד השרת → בצע את הקריאה → הצג את הנתונים ב-component. Claude בונה את כל השלבים כשאתה מתאר מה אתה רוצה.
הוסף חיבור API לאפליקציה שלך. בקש מ-Claude:
"Add a weather widget to the dashboard that shows the current weather for Tel Aviv using the OpenWeatherMap API. Store the API key in .env.local. Show temperature, description, and an icon."
(API Key חינמי: הירשם ל-openweathermap.org ותקבל מפתח בחינם.)
לעולם אל תחשוף API Keys בקוד frontend. Claude יוצר API routes בצד השרת (בתיקיית app/api/) ששומרים על המפתחות שלך בטוחים. אם אתה רואה שהמפתח מופיע בקוד שרץ בדפדפן — תגיד ל-Claude: "Move the API key to a server-side route."
Firebase כאלטרנטיבה
אנחנו ממליצים על Supabase, אבל חשוב שתכיר את Firebase — הפלטפורמה של Google שעושה דברים דומים. Firebase פופולרית מאוד (היא משמשת למעלה מ-3 מיליון אפליקציות פעילות לפי Google) ויש הרבה פרויקטים שמשתמשים בה. ההבדל בין השתיים הוא לא "טוב" מול "רע" — הוא "מתאים למה?".
| קריטריון | Supabase | Firebase |
|---|---|---|
| סוג Database | SQL (טבלאות כמו Excel) | NoSQL (מסמכים כמו JSON) |
| ממשק | טבלאות ברורות, SQL editor | עץ מסמכים, ממשק ויזואלי |
| Real-time | טוב | מצוין — נבנה לזה |
| Authentication | מובנה, פשוט | מובנה, אקוסיסטם Google |
| Free Tier | 2 פרויקטים, 500MB DB | נדיב: Spark plan, 1GB Firestore |
| קושי למתחילים | קל — טבלאות מוכרות | בינוני — NoSQL דורש הבנה |
| מתאים ל... | אפליקציות CRUD, דשבורדים | צ'אט, שיתוף פעולה, מובייל |
- אתה בונה אפליקציית CRUD רגילה (משימות, מוצרים, לקוחות)? → Supabase — SQL פשוט יותר
- אתה בונה אפליקציה עם הרבה Real-Time (צ'אט, שיתוף פעולה חי)? → Firebase — נבנה בדיוק לזה
- אתה מתכנן לבנות גם אפליקציית מובייל? → Firebase — SDKs מעולים ל-iOS/Android
- אתה מעדיף לראות נתונים בטבלאות? → Supabase — ממשק Excel-like
- לא בטוח? → Supabase — פשוט יותר למתחילים, ותמיד אפשר לעבור אחר כך
Supabase = טבלאות כמו Excel (SQL). Firebase = מסמכים כמו JSON (NoSQL). שניהם עובדים מצוין. Supabase פשוט יותר להבנה, ולכן הוא הבחירה המומלצת שלנו. בחר אחד ותשלוט בו לפני שאתה מנסה את השני.
אם אתה רוצה לנסות Firebase, הפרומפט פשוט: "Set up this app with Firebase instead of Supabase. Use Firestore for the database, Firebase Auth for authentication, and Cloud Functions for server-side logic." Claude ידע בדיוק מה לעשות.
מתי Firebase באמת עדיף
יש מקרים שבהם Firebase היא באמת הבחירה הנכונה. אפליקציית צ'אט — Firebase Realtime Database נבנה בדיוק לזה, עם latency נמוכה במיוחד. אפליקציית מובייל — אם אתה מתכנן גם אפליקציית iOS/Android, ה-SDKs של Firebase הם מהטובים בשוק. שיתוף פעולה בזמן אמת (כמו Google Docs) — Firebase excels במצבים שבהם הרבה משתמשים עורכים את אותו מסמך בו-זמנית.
לכל דבר אחר — ובמיוחד לאפליקציות CRUD קלאסיות כמו ניהול משימות, ניהול לקוחות, או בלוג — Supabase הוא הבחירה הנכונה למתחילים.
פתח את supabase.com ואת firebase.google.com בשני טאבים. הסתכל על הממשק של כל אחד. שים לב: ב-Supabase את הטבלאות אפשר לראות כמו גיליון אלקטרוני. ב-Firebase הנתונים מוצגים כעץ מסמכים. איזה ממשק מרגיש לך יותר אינטואיטיבי? זו הפלטפורמה שכדאי לך להתחיל איתה.
Firebase Cloud Functions הן קוד שרץ בענן בלי שרת. הן מקבילות ל-Server Actions של Next.js. Claude כותב אותן בדיוק כמו קוד רגיל. אם יום אחד תרצה Firebase — תדע ש-Claude שולט בזה.
אנימציות ו-Micro-Interactions
ההבדל בין אפליקציה טובה לאפליקציה מעולה הוא בפרטים הקטנים: מעברים חלקים, אנימציות עדינות, ותגובות מיידיות ללחיצות. מיקרו-אינטראקציות (Micro-Interactions) הן התנועות הקטנות שגורמות לאפליקציה להרגיש חיה ומקצועית. תחשוב על האפליקציות שאתה אוהב להשתמש בהן — הן כנראה מלאות באנימציות עדינות שאתה אפילו לא שם לב אליהן. זה בדיוק הנקודה: אנימציות טובות הן כאלה שמרגישות טבעיות.
סוגי אנימציות ש-Claude בונה
- Fade-in: "Add a fade-in animation when the page loads" — אלמנטים מופיעים בהדרגה
- Hover Effects: "Add a hover effect on the cards: slight lift with shadow" — הכרטיס עולה קלות כשעוברים עליו עם העכבר
- Page Transitions: "Add smooth crossfade transitions between pages" — מעבר חלק בין דפים
- Loading Animations: Skeleton screens (מסכות אפורות שממלאות), progress bars, spinners
- Toast Notifications: "Show a green success toast when a task is completed, red error toast when something fails"
- Button Feedback: כפתור שמשתנה כשלוחצים — שינוי צבע, scale קטן, loading spinner
Claude משתמש ב-CSS transitions לאנימציות פשוטות, וב-Framer Motion (ספריית אנימציות ל-React) לאנימציות מתקדמות. אתה לא צריך לבחור — תתאר את מה שאתה רוצה, Claude יבחר את הכלי הנכון.
Skeleton Loading — מסכות טעינה
במקום spinner מסתובב כשנתונים נטענים, אפליקציות מודרניות משתמשות ב-Skeleton Loading: מסכות אפורות שמראות את הצורה של התוכן שעתיד להופיע. כשהנתונים מגיעים, המסכות מתמלאות בתוכן אמיתי. זה מרגיש הרבה יותר מהיר ומקצועי.
הפרומפט: "Replace all loading spinners with skeleton loading screens that match the layout of the actual content." — ו-Claude יבנה skeleton components שנראים כמו כרטיסים ריקים, שורות טבלה ריקות, או פרופיל ריק שממלאים כשהנתונים מגיעים.
אנימציות שנראות מקצועיות
| אנימציה | פרומפט ל-Claude | משך |
|---|---|---|
| Fade in on load | "Fade in the main content when the page loads" | 300ms |
| Card hover lift | "Lift cards slightly with shadow on hover" | 200ms |
| Page transition | "Smooth crossfade between pages" | 250ms |
| Button press | "Scale button down slightly when pressed" | 100ms |
| List item enter | "Slide new items in from the right when added" | 300ms |
| Delete item | "Fade and slide out items when deleted" | 250ms |
הוסף לפחות 3 מיקרו-אינטראקציות לאפליקציה שלך. הקלד ב-Claude Code:
"Add these micro-interactions to the app: (1) Fade-in animation on page load for the main content, (2) Hover effect on task cards with a slight lift and shadow, (3) Toast notifications - green for success actions, red for errors, (4) Smooth page transitions between dashboard pages using Framer Motion. Keep all animations subtle (200-300ms)."
אנימציות צריכות להיות עדינות: 200-300 מילישניות. כל אנימציה שלוקחת יותר מחצי שנייה מרגישה כבדה ואיטית. וכל אנימציה מהבהבת מרגישה לא מקצועית. הכלל: אם המשתמש שם לב לאנימציה — היא חזקה מדי. אנימציות טובות מורגשות, לא נראות.
בדיקת האפליקציה שלך
כ-Vibe Coder אתה לא כותב קוד בדיקות (test code). אבל אתה כן בודק את האפליקציה ביסודיות. מחקרים מתחום פיתוח תוכנה מראים שכ-40% מהבאגים מתגלים רק בשימוש בפועל, לא בכתיבת הקוד. זה אומר שגם אם Claude כתב קוד מושלם טכנית — עדיין צריך בן אדם שילחץ על כפתורים, יכניס מידע מוזר, ויבדוק ממכשירים שונים. אתה האדם הזה.
Manual Testing Checklist
עבור על הרשימה הזו עם כל גרסה חדשה:
- הרשם — צור חשבון חדש
- התחבר — עם הפרטים שיצרת
- צור פריט — הוסף משימה / מוצר / מה שהאפליקציה עושה
- ערוך פריט — שנה את מה שיצרת
- מחק פריט — ודא שיש אישור ושהפריט באמת נמחק
- התנתק — ודא שהלוגאוט עובד
- נסה להיכנס לדף מוגן — בלי לוגין, אתה אמור להגיע לדף התחברות
- בדוק Error States — מה קורה כשמכניסים מייל לא תקין? סיסמה קצרה?
Edge Cases — מקרי קצה
מקרי קצה הם מצבים "לא רגילים" שעלולים לשבור את האפליקציה. הם המקום שבו רוב הבאגים מתחבאים — כי הם מצבים שאף אחד לא חושב עליהם בזמן הבנייה. Vibe Coder טוב בודק אותם לפני שמשתמשים אמיתיים נתקלים בהם:
- Empty States: מה מוצג כשאין נתונים? (אין משימות, אין לקוחות) — צריך הודעה יפה, לא דף ריק
- טקסט ארוך: מה קורה כשמכניסים כותרת של 500 תווים? האם הטקסט גולש?
- תווים מיוחדים: מה קורה עם
<script>בשדה שם? (בדיקת XSS בסיסית) - לחיצות מהירות: מה קורה כשלוחצים 10 פעמים על "שלח" — האם נוצרות 10 משימות?
- Back/Forward: האם כפתורי הדפדפן עובדים כמו שצריך?
בדיקת דפדפנים ומכשירים
בדוק את האפליקציה ב:
- Chrome — הדפדפן הנפוץ ביותר
- Firefox — מנוע rendering שונה, חושף באגים אחרים
- Safari — אם יש לך Mac/iPhone; Safari שונה מאוד מ-Chrome
- דפדפן מובייל — פתח את האפליקציה בטלפון, לא רק ב-DevTools
שימוש ב-Claude Code לבדיקות
Claude Code יכול לעזור גם בבדיקות — לא רק בבנייה. הנה גישה שעובדת מצוין: אחרי שבנית פיצ'ר, תאר ל-Claude את הבעיה שמצאת — לא את הפתרון הטכני. למשל: "When I click the delete button twice quickly, two delete requests are sent and I get an error." Claude יזהה את הבעיה (חסר debounce או disabled state) ויתקן.
טריק חכם: צלם מסך של באג (Screenshot) ותאר ל-Claude מה אתה רואה. הוא יכול לנתח את הצילום ולזהות בעיות ויזואליות — כמו טקסט שגולש, כפתור שלא נראה, או layout שנשבר במובייל.
Error Handling — טיפול בשגיאות
מה קורה כשהאינטרנט נופל? כשה-Database לא מגיב? כשה-API מחזיר שגיאה? המשתמש לא צריך לראות הודעות טכניות. הוא צריך לראות הודעה ידידותית. לפי מחקר של Google, 53% מהמשתמשים נוטשים אתר אם הטעינה לוקחת יותר מ-3 שניות — וזה כולל גם מצבי שגיאה שנראים "שבורים".
הפרומפט: "Add error handling throughout the app. Show friendly error messages in Hebrew, not technical errors. Add error boundaries for React components, and fallback UI when the database is unreachable."
דוגמאות להודעות שגיאה ידידותיות:
| במקום זה (טכני) | הצג את זה (ידידותי) |
|---|---|
Error 500: Internal Server Error |
"משהו השתבש. נסה שוב בעוד כמה שניות." |
TypeError: Cannot read property 'name' of null |
"לא הצלחנו לטעון את הנתונים. רענן את הדף." |
PGRST301: JWT expired |
"החיבור שלך פג. אנא התחבר מחדש." |
Network Error |
"אין חיבור לאינטרנט. בדוק את החיבור ונסה שוב." |
Performance — מהירות
אפליקציה איטית היא אפליקציה שאף אחד לא ישתמש בה. Amazon גילו שכל 100 מילישניות של עיכוב עולות להם 1% מהמכירות. אתה לא Amazon, אבל העיקרון זהה: מהירות = חוויית משתמש. הנה טיפים שתבקש מ-Claude:
- "Add loading states for all data fetching operations" — שהמשתמש ידע שמשהו קורה
- "Optimize images: compress and use next/image component" — תמונות קטנות יותר = טעינה מהירה יותר
- "Add pagination to the task list - show 20 tasks per page" — לא טוענים 1,000 משימות בבת אחת
- "Add debounce to the search input" — שהחיפוש לא שולח בקשה על כל תו שמקלידים
חמש שכבות בדיקה: Happy Path (הכל עובד כמו שצריך) → Edge Cases (קלט לא רגיל) → Error States (דברים נשברים) → Mobile (מסכים שונים) → Speed (האם מרגיש מהיר?). עבור על כל שכבה לפני שאתה פורס.
בצע בדיקה מלאה לאפליקציה שלך:
- עבור על כל 8 השלבים ב-Manual Testing Checklist
- בדוק 3 מקרי קצה: empty state, טקסט ארוך, לחיצות מהירות
- פתח את DevTools (F12) → לחץ על אייקון הטלפון → בדוק ב-iPhone SE ו-iPad
- כל באג שמצאת — רשום אותו ובקש מ-Claude לתקן
בקש מ-Claude להוסיף error handling מקיף:
"Add comprehensive error handling: show a friendly error page when the database is unreachable, add toast notifications for failed operations in Hebrew, and show an empty state illustration when there are no tasks yet."
אחרי שClaude מוסיף, בדוק: מה קורה כשאין משימות? נסה ליצור משימה עם שם ריק — מה מופיע?
הזרימה של Vibe Tester
הנה התהליך המומלץ לבדיקת אפליקציה שנבנתה עם Claude Code:
- בנה פיצ'ר — בקש מ-Claude לבנות תכונה חדשה
- בדוק Happy Path — ודא שהתכונה עובדת כמצופה
- שבור אותה — נסה קלט מוזר, לחיצות מהירות, מסכים קטנים
- דווח ל-Claude — תאר את הבעיה, לא את הפתרון
- בדוק את התיקון — ודא שהתיקון לא שבר משהו אחר
- Commit — שמור גרסה עובדת לפני שממשיכים
שים לב: ה-Commit בסוף כל מחזור הוא קריטי. אם Claude עושה שינוי שהורס משהו — אתה יכול תמיד לחזור לגרסה העובדת האחרונה. זו רשת הביטחון שלך. פקודה מהירה: "Commit all changes with message 'Add task filtering feature'" — ו-Claude עושה commit דרך Git.
Claude Code שומר checkpoints אוטומטיים בכל פעם שאתה שולח פרומפט. אם Claude שבר משהו — הקלד /rewind כדי לחזור לנקודה הקודמת. זה כמו Ctrl+Z, אבל לכל הפרויקט. לא צריך לדאוג מניסויים — תמיד אפשר לחזור.
תרגילים
בנה אפליקציית CRM פשוטה שמנהלת לקוחות:
- צור פרויקט Next.js חדש עם Supabase, Auth, ו-shadcn/ui
- צור טבלת
clientsעם: שם, מייל, טלפון, סטטוס (Lead / Active / Past), הערות - בנה דף ראשי שמציג את כל הלקוחות בטבלה עם מיון וסינון לפי סטטוס
- הוסף טופס להוספת לקוח חדש (עם validation)
- הוסף עריכה ומחיקה לכל לקוח
- הוסף Dashboard Layout עם sidebar
- הוסף dark mode ולפחות 2 אנימציות
- פרוס ב-Vercel
בנה בלוג שיש לו צד ציבורי וצד ניהול:
- צד ציבורי: דף בית עם רשימת פוסטים, דף פוסט בודד עם markdown rendering
- צד ניהול (דורש לוגין): טופס יצירת פוסט חדש, עריכה, מחיקה, טיוטה/פרסום
- טבלת
posts: title, slug, content (markdown), published (boolean), created_at, author_id - הוסף תמונת כותרת לכל פוסט (upload ל-Supabase Storage)
- הוסף חיפוש פוסטים
- הוסף SEO meta tags דינמיים לכל פוסט
בנה דשבורד שמציג מזג אוויר עם API חיצוני:
- הירשם ל-OpenWeatherMap ותקבל API Key חינמי
- בנה דף שמציג מזג אוויר ל-3 ערים ישראליות: תל אביב, ירושלים, חיפה
- הוסף אפשרות לחפש עיר כלשהי בעולם
- הצג: טמפרטורה, תיאור, אייקון, לחות, רוח
- הוסף גרף טמפרטורות ל-5 ימים (Claude ישתמש בספריית גרפים כמו Recharts)
- שמור עיר מועדפת ב-localStorage
- עיצוב: משנה צבעי רקע לפי הטמפרטורה (כחול=קר, כתום=חם)
בנה מערכת הזמנות פשוטה לעסק שירות (מספרה, קליניקה, חדר בריחה):
- צד לקוח: דף עם שירותים זמינים, בחירת תאריך ושעה, טופס פרטים, אישור הזמנה
- צד בעל העסק (דורש לוגין): דשבורד עם כל ההזמנות של היום/שבוע, אפשרות לאשר/לבטל
- טבלת
services: שם, תיאור, מחיר (ש"ח), משך (דקות) - טבלת
bookings: שירות, תאריך, שעה, שם לקוח, טלפון, סטטוס - הוסף validation: אי אפשר להזמין תור בשעה שכבר תפוסה
- הוסף toast notification ללקוח ("ההזמנה התקבלה!") ולבעל העסק (Real-Time)
שגרת עבודה — בניית אפליקציות
| מתי | מה לעשות | זמן |
|---|---|---|
| בכל Session עבודה | Commit לפני שמתחילים שינוי חדש. בדיקה מהירה שהאפליקציה עובדת. | 2 דקות |
| אחרי כל פיצ'ר חדש | בדיקת Happy Path + Edge Case אחד. Commit עם הודעה ברורה. | 5 דקות |
| פעם בשבוע | בדיקת Manual Testing Checklist מלאה. בדיקת מובייל. בדיקת דפדפנים שונים. | 20 דקות |
| לפני כל פריסה | The Vibe Tester's Checklist מלא (5 שכבות). בדיקת error handling. בדיקת Empty States. | 30 דקות |
עכשיו שאתה יודע לבנות אפליקציית CRUD, הנה איך לבחור את הפרויקט הבא:
- יש לך עסק? → בנה כלי שהעסק שלך באמת צריך: מערכת הזמנות, דשבורד לקוחות, מעקב מלאי
- אתה רוצה להרשים בתיק עבודות? → בנה clone מפושט של אפליקציה מוכרת: Trello, Notion, Twitter
- אתה רוצה ללמוד טכנולוגיה חדשה? → בנה אותו מנהל משימות עם Firebase במקום Supabase, או עם אנימציות מתקדמות
- אתה רוצה לעזור למישהו? → שאל חבר/בן משפחה מה מפריע לו ובנה לו כלי. הפרויקטים הכי טובים נולדים מצורך אמיתי
בנה את אפליקציית מנהל המשימות. זה ה-Hello World של אפליקציות ווב. פרויקט Next.js + Supabase + Auth + CRUD — מי שבנה את זה פעם אחת יכול לבנות כל אפליקציה דומה פשוט על ידי שינוי ה-data model. הפרומפט נמצא בסעיף 4.6. לך, העתק, הדבק, ותן ל-Claude לעבוד.
ענה על 5 השאלות האלה. אם אתה יכול לענות על 4 מתוך 5 — אתה מוכן לפרק הבא.
- למה אפליקציה דינמית צריכה database ו-auth, ואיך זה משנה את חוויית המשתמש לעומת אתר סטטי? (רמז: שמירת נתונים בין ביקורים, תוכן מותאם אישית)
- איך Components, Props ו-State עובדים יחד ליצירת UI דינמי? תן דוגמה מאפליקציית עגלת קניות. (רמז: Component=כרטיס מוצר, Props=פרטי המוצר, State=כמות בעגלה)
- למה Row Level Security (RLS) חשוב, ומה קורה אם לא מפעילים אותו? (רמז: כל אחד יכול לראות את כל הנתונים)
- למה API Keys חייבים להיות בצד השרת בלבד, ומה הסכנה בחשיפתם? מה הפתרון הטכני? (רמז: Proxy Pattern, app/api/ routes)
- מתי Firebase עדיף על Supabase? תן 2 תרחישים ספציפיים. (רמז: Real-time כמו צ'אט, אפליקציות מובייל)
צ'קליסט — סיכום פרק 4
- מבין/ה את ההבדל בין אתר סטטי לאפליקציה דינמית
- יצרת פרויקט Next.js עם Tailwind CSS ו-shadcn/ui
- מכיר/ה את מושגי ה-React: Components, Props, State
- יצרת פרויקט Supabase ויודע/ת היכן ה-URL וה-API Key
- חיברת Next.js ל-Supabase עם טבלת נתונים
- הגדרת Row Level Security כדי שכל משתמש רואה רק את שלו
- הוספת מערכת הרשמה ולוגין (Auth) עם דפים מוגנים
- בנית אפליקציית CRUD מלאה (יצירה, קריאה, עדכון, מחיקה)
- יצרת טפסים עם validation והודעות שגיאה
- בנית Dashboard Layout עם sidebar וניווט
- חיברת API חיצוני (מזג אוויר או אחר)
- הוספת אנימציות ו-micro-interactions
- ביצעת בדיקה מלאה: Happy Path, Edge Cases, Mobile, Error States
- מכיר/ה את Firebase כאלטרנטיבה ויודע/ת מתי לבחור כל אחד
התובנה המרכזית של הפרק הזה: ברגע שמבינים את ה-pattern של CRUD, אפשר לבנות כל אפליקציה. אפליקציית משימות, CRM, ניהול מלאי, בלוג, מערכת הזמנות — כולן אותו שלד (Create, Read, Update, Delete) עם data model שונה. ההבנה שאפליקציה דינמית = Frontend + Backend + Database + Auth פותחת עולם שלם: מוצרי SaaS, כלים פנימיים לעסק, או פלטפורמות שנותנות ערך אמיתי למשתמשים. ו-Claude Code הופך את הבנייה מפרויקט של שבועות לפרויקט של ימים. React + Next.js + Supabase + shadcn/ui הם ה-stack שיעבוד איתך לטווח ארוך — ועכשיו יש לך שליטה בכולם. בפרק הבא נעבור מאפליקציות אינטראקטיביות לאוטומציות וסקריפטים שעובדים ברקע בשבילך.