Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 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.