Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。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.