Lalabase
티켓·문서·근무시간·고객대화를 한 곳에 모아 KI로 검색, 소프트웨어 기업 고객 프로젝트용, 오픈소스로 자체 서버·독일 클라우드에 배포
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
מערכת ניהול לידים, חבילות ועסקאות. עברית, RTL, תמה בהירה/כהה. Next.js 16 (App Router) · React 19 · Tailwind v4 · TypeScript. ברירת המחדל היא זיכרון (DATA_SOURCE=memory). נתוני הזרע נמחקים בכל אתחול שרת — בכוונה, כדי שאפשר יהיה להריץ את האפליקציה בלי DB בכלל. שכבת Postgres מלאה ומחוברת — לא שלד — ומחכה רק ל-DATABASE_URL. מה שקיים ועובד: מודל דומיין מלא, שכבת repository (זיכרון ו-Postgres כאחד), שכבת שירותים, Server Actions עם אימות בשרת, ומסכי לידים וחבילות. המימוש כבר כתוב. החיבור דורש DATABASE_URL וכמה פקודות — לא כתיבת קוד.README 전문 보기 ↗
מערכת ניהול לידים, חבילות ועסקאות. עברית, RTL, תמה בהירה/כהה. Next.js 16 (App Router) · React 19 · Tailwind v4 · TypeScript.
npm run dev # http://localhost:3000
npm run build
npm run lint
npx tsc --noEmit
ברירת המחדל היא זיכרון (DATA_SOURCE=memory). נתוני הזרע נמחקים
בכל אתחול שרת — בכוונה, כדי שאפשר יהיה להריץ את האפליקציה בלי DB
בכלל. שכבת Postgres מלאה ומחוברת — לא שלד — ומחכה רק ל-DATABASE_URL.
מה שקיים ועובד: מודל דומיין מלא, שכבת repository (זיכרון ו-Postgres כאחד), שכבת שירותים, Server Actions עם אימות בשרת, ומסכי לידים וחבילות.
המימוש כבר כתוב. החיבור דורש DATABASE_URL וכמה פקודות — לא
כתיבת קוד.
src/server/
repositories/
types.ts ← החוזה. כל גישה לנתונים עוברת דרכו.
memory/ ← המימוש הפעיל כברירת מחדל
prisma/ ← מימוש Postgres מלא (leads/users/packages/deals/settings)
index.ts ← בורר לפי DATA_SOURCE, בטעינה עצלה (ראה למטה)
db/client.ts ← סינגלטון Prisma Client, מבוסס driver adapter
services/ ← לוגיקה עסקית (עמלות, רווח, מכפיל)
prisma/
schema.prisma ← סכמה מלאה
seed.ts ← מזין את אותם נתוני הזרע שמזינים את מימוש הזיכרון
prisma.config.ts ← Prisma ORM 7: כאן יושב ה-DATABASE_URL, לא בסכמה
חיבור מבוסס @prisma/adapter-pg — לא נעול לספק מסוים. עובד מול
כל Postgres שמקבל connection string רגיל: Neon, Supabase,
Vercel Postgres, RDS, או שרת Postgres רגיל.
השלבים בפועל:
cp .env.example .env
# ערוך את .env: הדבק DATABASE_URL אמיתי
npm run db:generate # מייצר את Prisma Client מהסכמה
npm run db:migrate # יוצר את הטבלאות ב-DB (prisma migrate dev)
npm run db:seed # מזין נתוני דמו לבדיקה (npx prisma db seed)
ואז ב-.env:
DATA_SOURCE="prisma"
זה הצעד היחיד שמשנה התנהגות בפועל. אף page.tsx ואף קומפוננטה
לא משתנים.
Promise,
כך שאין קורא שצריך שכתוב.server-only על repositories/index.ts. אם קומפוננטת לקוח
תייבא את שכבת הנתונים בטעות, הבנייה נכשלת במקום שהנתונים יזלגו../prisma דינמי, לא סטטי. כך שהרצה עם
DATA_SOURCE=memory (ברירת המחדל) לעולם לא מנסה לפתוח חיבור
Postgres — גם בלי DATABASE_URL בסביבה בכלל.services/ ולא ב-repository. חישוב עמלה
ורווח חייב להיות זהה בשני המימושים, ולכן הוא לא יושב באף אחד מהם.Decimal/Date מומרים בגבול אחד (repositories/prisma/mappers.ts)
ל-number/ISO string — כדי שהדומיין לא ידע שמאחוריו יש Prisma.src/generated/prisma/ לא ב-.gitignore, ובכוונה. ב-Prisma 7,
prisma generate דורש DATABASE_URL שקיים בסביבה — אפילו כדי לייצר
קוד, לא רק כדי להתחבר בפועל (prisma.config.ts קורא לו מיידית עם
כל פקודת CLI). אם הקוד המיוצר לא יישמר בגיט, שכפול טרי של הפרויקט
לא יעבור אפילו tsc/npm run dev במצב DATA_SOURCE=memory, כי
src/server/repositories/prisma/* מייבאים ממנו — למרות שהמסלול הזה
לא נטען בפועל במצב זיכרון (הייבוא דינמי, ראה למעלה), טעינת הטיפוסים
של TypeScript עדיין דורשת שהקבצים יהיו קיימים על הדיסק.
אם משנים את prisma/schema.prisma, יש להריץ npm run db:generate
מחדש ולשמור (commit) את מה שהשתנה תחת src/generated/prisma/.
נבדק בלי DB חי: prisma validate, prisma generate, tsc --noEmit,
eslint, ובנייה מלאה עם DATA_SOURCE=prisma — שנכשלה ב-ECONNREFUSED
בדיוק בנקודת השאילתה, כלומר כל השרשרת (טיפוסים, ייבוא, בניית
ה-adapter, בניית השאילתה) תקינה ורק חיבור DB אמיתי חסר.
לא נבדק מול Postgres חי בפועל — אין DB זמין בסביבה הזו.
כשיש DATABASE_URL אמיתי, npm run db:migrate && npm run db:seed
אמורים לעבוד; אם משהו ייכשל שם, זו הנקודה הראשונה לבדוק.
CURRENT_USER_ID הוא קבוע. כל Server Action
מסומן במקום שבו צריך להיכנס await auth(). התפקידים (Role)
כבר מוגדרים ומסננים את הניווט./deals, /deals-dashboard, /my-deals, /operator,
/registrations, /admin — מופיעים בניווט כמסומנים "בקרוב".importLeadsAction) קיים ומאומת,
אבל אין עדיין ממשק שמפעיל אותו.טוקני צבע סמנטיים ב-src/app/globals.css, מוגדרים פעמיים —
בהיר וכהה — וממופים דרך @theme inline. אין צבעי hex בקומפוננטות.
החלפת תמה = החלפת data-theme על <html>.
התמה נטענת בסקריפט inline ב-<head> לפני הציור הראשון, כדי שלא
יהיה הבהוב. היא נקראת דרך useSyncExternalStore ולא דרך useState,
כי מקור האמת הוא ה-DOM.
זמנים יחסיים ("לפני 3 שע׳") מגיעים מ-useNow() ב-src/lib/clock.ts,
שמחזיר null עד שהלקוח נרשם — אחרת השרת והלקוח היו מרנדרים
זמנים שונים.