Lalabase
티켓·문서·근무시간·고객대화를 한 곳에 모아 KI로 검색, 소프트웨어 기업 고객 프로젝트용, 오픈소스로 자체 서버·독일 클라우드에 배포
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A multi-store SaaS ERP for any B2B trader dealing in precious metals, stones, or other goods — gold, silver, diamond, and beyond. Covers customers/vendors, inventory, purchases, quotations, Pakka/Kacha billing, karigar (goldsmith) job tracking with carat-based conversion, a ledger, and reporting — with per-store data isolation and per-user permissions. Every store configures its own metals, categories, and item types in Settings rather than being locked to a fixed jewellery-specific vocabulary (see CLAUDE.md's "Configurable taxonomy" section).README 전문 보기 ↗A multi-store SaaS ERP for any B2B trader dealing in precious metals, stones, or other goods — gold, silver, diamond, and beyond. Covers customers/vendors, inventory, purchases, quotations, Pakka/Kacha billing, karigar (goldsmith) job tracking with carat-based conversion, a ledger, and reporting — with per-store data isolation and per-user permissions. Every store configures its own metals, categories, and item types in Settings rather than being locked to a fixed jewellery-specific vocabulary (see CLAUDE.md's "Configurable taxonomy" section).
The end-user manual is docs/USER-GUIDE.md.
This project uses pnpm — always use pnpm, not npm, or the lockfile drifts out of sync with package.json and breaks the Vercel build (pnpm install --frozen-lockfile).
pnpm install
pnpm dev
.env)| Variable | Purpose |
|---|---|
DATABASE_URL | Postgres connection string (Neon) |
NEXTAUTH_SECRET / NEXTAUTH_URL | NextAuth session signing + base URL |
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET | Google OAuth login |
SUPER_ADMIN_EMAILS | Comma-separated Google account emails auto-promoted to Super Admin on first sign-in |
SUPER_ADMIN_PHONES | Comma-separated registered mobile numbers auto-promoted to Super Admin on OTP sign-in |
SMTP_HOST / SMTP_PORT / SMTP_USER / SMTP_PASS / MAIL_FROM | Outbound email (invites, invoice/ledger sharing) |
GOLD_API_KEY | Daily market gold/silver rate fetch (/api/cron/metal-rates) — a reference rate only; selling rates are set by each Store Owner |
CRON_SECRET | Authorizes the metal-rates cron endpoint |
BLOB_READ_WRITE_TOKEN | Vercel Blob storage — payment receipt attachments. Get it from your Vercel project's Storage tab after creating a Blob store. |
BETTER_STACK_SOURCE_TOKEN / BETTER_STACK_INGESTING_HOST | Ships server-side logs (lib/logger.ts) to a Better Stack log source for searching/dashboards, via its plain HTTP ingestion API. Both come from that source's setup page in Better Stack — the host is unique per source/region, there's no single fixed value. Optional — omitted, every log call just falls back to console.*. |
BETTERSTACK_RUM_TOKEN | A separate, public client-side token for Better Stack's browser (RUM) monitoring tag (app/layout.tsx) — safe to appear in page HTML. Optional — omitted, the tag just isn't rendered. |
npx prisma migrate deploy # apply migrations
npx prisma generate # regenerate the Prisma client
pnpm seed # states/cities + a default admin
pnpm db:seed:demo # optional: demo customers/invoices/ledger data
pnpm db:seed:inventory # optional: demo products
pnpm db:seed:kacha # optional: demo kacha slips
pnpm db:seed:full-demo # optional: the complete "Aurum Demo Jewellers" store the e2e suite uses
The database is shared between local development and the deployed app (a single Neon instance) — there is no separate dev/staging database, so migrations take effect everywhere immediately.
See docs/DATABASE-SCHEMA.md for an entity-relationship reference of the full schema, grouped by domain.
pnpm test:e2e runs the Playwright regression suite in e2e/ against a local production build. CI (.github/workflows/regression.yml) runs it on every push to main and every PR. Run it only against a throwaway local Postgres — e2e/global-setup.ts refuses any non-localhost DATABASE_URL, because the default .env points at the shared production database. See e2e/README.md for the setup commands and what each spec covers.
| Role | Scope |
|---|---|
| Super Admin | Every store. Creates new stores and their initial Admin from /stores. Signs in via a Google account listed in SUPER_ADMIN_EMAILS or a mobile number listed in SUPER_ADMIN_PHONES. |
| Admin ("Store Owner") | Full control of their own store — settings, users, all data. |
| Staff | Day-to-day sales/inventory/billing. An Admin can restrict a Staff user to specific sections (Customers, Vendors, Inventory, Billing, Quotations, Purchases, Karigar Management, Reports, Ledger) from the Users page — unrestricted by default. |
| Karigar | Logs in and sees only their own assigned jobs (/my-jobs) — nothing else in the app. |
Migrations and code deploys are independent — applying a migration against the database does not deploy new code, and pushing code doesn't imply the database is already migrated. After any schema change, both steps are needed before the live app is consistent.