מרחב פרטי, מוגן בהרשמה עם הזמנה, שבו יזמות יכולות לפרסם רעיונות עם חותמת זמן כהוכחת בעלות. הכניסה היא עם חשבון אמיתי - מייל+סיסמה (עם אימות מייל) או Google - כך שכל רעיון משויך למי שבאמת פרסמה אותו.
npm install
cp .env.example .env.local # למלא SESSION_SECRET, INVITE_CODE, ומפתחות Resend/Google
npm run devהאתר יעלה על http://localhost:3000
- Resend (שליחת מיילי אימות) - להירשם ב-resend.com, ליצור API key, ולשים
אותו ב-
RESEND_API_KEY. לבדיקות אפשר להשאיר אתRESEND_FROM_EMAILכברירת המחדל (onboarding@resend.dev) - במצב הזה Resend שולח רק לכתובת שנרשמה לחשבון. כדי לשלוח לכל כתובת צריך לאמת דומיין ב-Resend ולעדכן אתRESEND_FROM_EMAIL. - Google OAuth - ב-Google Cloud Console: APIs & Services → Credentials →
Create Credentials → OAuth client ID (מסוג Web application). ב-
Authorized redirect URIs להוסיף
http://localhost:3000/api/auth/google/callback(ובדפלוי - את כתובת הפרודקשן המקבילה). את ה-Client ID וה-Secret לשים ב-GOOGLE_CLIENT_ID/GOOGLE_CLIENT_SECRET.
- דף הבית (
/) - טופס התחברות/הרשמה (עם טאב מעבר ביניהם) + כפתור "המשיכי עם Google".- הרשמה - שם, מייל, סיסמה, קוד הזמנה (
INVITE_CODE), ואישור תנאים (איסור העתקת רעיונות). נשלח מייל אימות; רק אחרי לחיצה על הקישור אפשר להתחבר. - התחברות - מייל+סיסמה של חשבון מאומת, או Google. חשבון Google חדש (בלי חשבון קיים עם אותו מייל) דורש גם קוד הזמנה - לכן צריך למלא אותו בטופס ההרשמה לפני לחיצה על כפתור Google.
- בהצלחה נוצרת עוגיית
sessionחתומה (HMAC, httpOnly, 30 יום).
- הרשמה - שם, מייל, סיסמה, קוד הזמנה (
/feed- מוגן ע"יmiddleware.js. מציג את כל הרעיונות (חדש למעלה), וטופס להוספת רעיון חדש (רק תוכן - השם נלקח אוטומטית מהחשבון המחובר). כל רעיון נשמר עםcreated_atאוטומטי ומשויך ל-user_id.- הצבעה - כל משתמשת יכולה להצביע (▲) פעם אחת לכל רעיון; לחיצה נוספת מבטלת את ההצבעה.
- דירוג - כל משתמשת יכולה לתת ציון 1-10 ולבחור רמת מורכבות משוערת (קל / בינוני / מורכב / מורכב מאוד) לכל רעיון. ניתן לעדכן את הדירוג בכל עת; הפיד מציג ציון ומורכבות ממוצעים לכל הרעיון.
- שליחת מייל אימות חוזר - אם ההרשמה לא הושלמה או הקישור פג תוקף, יש
כפתור לשליחת מייל אימות חדש (
/api/resend-verification).
- מסד נתונים -
node:sqliteמובנה, בקובץ מקומי (ideas.db), עם דפוס Lazy Proxy כדי לא לפתוח את הקובץ בזמן ה-build. טבלאות:users,verification_tokens,ideas,idea_votes,idea_ratings. - הצפנת סיסמאות -
scryptמובנה ב-Node (node:crypto), בלי ספריות חיצוניות. - הגנת רעיונות - כרגע ברמת "הוכחת בעלות" (שם מהחשבון + חותמת זמן, גלוי לכל מי שנכנסה) ולא ברמת הרשאות עדינות (רעיון גלוי רק לחלק מהמשתמשות).
- דחפי את הפרויקט ל-GitHub.
- ב-Render: New Web Service → חברי את הריפו.
- Build Command:
npm install && npm run build - Start Command:
npm start - משתני סביבה (ראי
.env.example):SESSION_SECRET,INVITE_CODERESEND_API_KEY,RESEND_FROM_EMAILGOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET(ועם redirect URI שמצביע לדומיין של Render)DB_PATH- נתיב לקובץ ה-DB, למשל/data/ideas.dbאם מוסיפים Persistent Disk
- אם רוצים שהרעיונות/החשבונות לא יימחקו בכל דפלוי - להוסיף Persistent Disk
ב-Render ולהגדיר את
DB_PATHלנתיב שבתוך הדיסק. בלי דיסק קבוע, ה-DB יתאפס בכל דפלוי מחדש.
- הגבלת קצב פרסום רעיונות / הרשמות (אנטי-ספאם)
- ייצוא רעיון בודד ל-PDF עם חותמת זמן כהוכחה רשמית
- אפשרות מחיקה/עריכה ע"י בעלת הרעיון (יש כבר
user_idעל כל רעיון - קל להוסיף בדיקת בעלות ב-API)