למה Supabase?
הייתי צריך דאטאבייס לפרויקט של לקוח. בעבר הייתי מקים שרת Express, מגדיר PostgreSQL, כותב API routes, מטפל באותנטיקציה — ימים של עבודה. עם Supabase סיימתי את כל זה בשעה.
Supabase זה בעצם Firebase אבל עם PostgreSQL אמיתי. אתם מקבלים:
• דאטאבייס PostgreSQL — הדבר האמיתי, לא NoSQL מוגבל
• אותנטיקציה — הרשמה, התחברות, Google login, magic links
• Storage — אחסון קבצים (תמונות, מסמכים)
• Realtime — עדכונים בזמן אמת
• Edge Functions — לוגיקת שרת בלי שרת
• REST API אוטומטי — כל טבלה מקבלת API בחינם
ה-tier החינמי מספיק לרוב הפרויקטים. שני פרויקטים בחינם, 500MB דאטאבייס, 1GB storage.
הקמת פרויקט Supabase
שלב 1 — יצירת חשבון:
היכנסו ל-supabase.com, הירשמו עם GitHub (הכי מהיר).
שלב 2 — פרויקט חדש:
לחצו "New Project", בחרו שם, סיסמה לדאטאבייס, ואזור (בחרו הכי קרוב — eu-central-1 לאירופה).
שלב 3 — שמרו את המפתחות:
בהגדרות הפרויקט (Settings > API) תמצאו:
• Project URL — כתובת הAPI שלכם
• anon key — מפתח ציבורי לצד הלקוח
• service_role key — מפתח סודי! רק לצד שרת!
שלב 4 — קובץ env:
צרו קובץ .env.local בפרויקט:
NEXT_PUBLIC_SUPABASE_URL=your-project-url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
חשוב: ה-service_role key לעולם לא צריך להיות ב-NEXT_PUBLIC. הוא סודי.
הפרומפט שאני נותן ל-Claude Code
הנה הפרומפט שמקים הכל בבת אחת:
"אני רוצה לחבר את הפרויקט ל-Supabase. הנה הפרטים:
• Supabase URL: [הURL שלכם]
• Framework: Next.js 15 App Router
• צריך: @supabase/supabase-js ו-@supabase/ssr
תעשה את הדברים הבאים:
1. התקן את הpackages
2. צור lib/supabase/client.ts — client-side Supabase client
3. צור lib/supabase/server.ts — server-side Supabase client עם cookies
4. צור middleware.ts שמרענן את הsession
5. תוודא שה-.env.local כבר מוגדר ב-.gitignore"
Claude Code יתקין הכל, יגדיר client ו-server clients, ויכין middleware. תוך דקות יש לכם חיבור עובד.
בניית טבלאות — פרומפטים מוכנים
טבלת משתמשים (profiles):
"צור ב-Supabase טבלת profiles עם: id (uuid, מקושר ל-auth.users), full_name (text), email (text), avatar_url (text), created_at (timestamp). תוסיף RLS policy שמאפשרת למשתמש לקרוא ולערוך רק את הפרופיל שלו. צור trigger שיוצר פרופיל אוטומטית כשמשתמש נרשם."
טבלת מוצרים:
"צור טבלת products עם: id (uuid), name (text), description (text), price (numeric), image_url (text), category (text), is_active (boolean), created_at. תוסיף RLS — כולם יכולים לקרוא מוצרים פעילים, רק אדמין יכול לערוך."
טבלת הזמנות:
"צור טבלת orders עם: id, user_id (מקושר ל-profiles), items (jsonb), total (numeric), status (enum: pending/paid/shipped/delivered), created_at. צור גם טבלת order_items עם: id, order_id, product_id, quantity, price. RLS — משתמש רואה רק את ההזמנות שלו."
את ה-SQL אני מריץ ב-SQL Editor של Supabase, או שClaude Code יוצר migration files.
אותנטיקציה — הרשמה והתחברות
הפרומפט שאני משתמש:
"תבנה מערכת אותנטיקציה מלאה עם Supabase Auth:
1. דף הרשמה — אימייל וסיסמה, שם מלא
2. דף התחברות — אימייל וסיסמה
3. כפתור התחברות עם Google (OAuth)
4. דף שכחתי סיסמה
5. middleware שמגן על דפים מסוימים (dashboard, profile)
6. כפתור התנתקות ב-header
7. שמירת session עם cookies (SSR-safe)
כל הטקסט בעברית. טיפול בשגיאות — אימייל כבר קיים, סיסמה חלשה, אימייל לא תקין."
זה נותן לכם מערכת הרשמה מלאה. Claude Code ייצור את הדפים, הלוגיקה, ואת ה-middleware שמגן על routes.
טיפ: להתחברות עם Google, צריך להגדיר OAuth ב-Google Cloud Console ולהוסיף את ה-credentials בהגדרות Supabase (Authentication > Providers).
Storage — העלאת קבצים
Supabase Storage מאפשר להעלות ולאחסן קבצים. אני משתמש בזה לתמונות פרופיל, תמונות מוצרים, ומסמכים.
"תבנה רכיב העלאת תמונות עם Supabase Storage:
1. צור bucket בשם 'avatars' (public)
2. רכיב React שמאפשר לבחור תמונה, לראות תצוגה מקדימה, ולהעלות
3. הגבלה — רק תמונות, עד 2MB
4. לאחר העלאה — עדכן את avatar_url בטבלת profiles
5. הצג את התמונה הנוכחית עם fallback לאווטר ברירת מחדל"
RLS ל-Storage:
• avatars bucket — כל אחד יכול לקרוא (public), רק בעל החשבון יכול להעלות/למחוק
• documents bucket — רק בעל החשבון יכול לקרוא/לכתוב (private)
חשוב: צרו את ה-buckets דרך ממשק Supabase (Storage > New Bucket) לפני שכותבים קוד.
טעויות שעשיתי עם Supabase
1. שכחתי RLS
יצרתי טבלה, הכנסתי נתונים, הכל עבד. ואז הבנתי שכל אחד יכול לראות הכל. Supabase מפעילה RLS כברירת מחדל, אבל בלי policies — אף אחד לא יכול לגשת. ברגע שהוספתי policy רחב מדי — חשפתי מידע.
פתרון: תמיד הגדירו policies ספציפיות. "משתמש רואה רק את הנתונים שלו."
2. חשפתי את service_role key
שמתי את ה-service key ב-NEXT_PUBLIC. זו טעות ביטחונית חמורה — הוא עוקף RLS.
פתרון: service_role רק בצד שרת (Server Components, API routes). anon key בצד לקוח.
3. לא הגדרתי types
עבדתי בלי TypeScript types ל-Supabase. כל שאילתה הייתה any. באגים בכל מקום.
פתרון: "תריץ npx supabase gen types typescript ותעדכן את database.types.ts"
4. שכחתי indexes
הדאטאבייס היה איטי. 10,000 שורות וכל שאילתה לקחה שניות.
פתרון: "תוסיף index על כל עמודה שמשמשת ב-WHERE או ב-ORDER BY."
5. לא עשיתי backup
שיניתי schema ומחקתי עמודה עם נתונים. אין דרך חזרה.
פתרון: לפני כל שינוי ב-schema — export של הנתונים.





