Synaplan
開源 AI 平台,供企業使用:自行託管的 AI 代理、符合 GDPR 的聊天機器人小工具、RAG 知識庫、WhatsApp 與 Outlook AI、MCP、多模型路由。Docker、Kubernetes 或託管於 Germ
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
A contractor operating system. The estimate, the contract, the budget, and
change orders are the same underlying data — see ARCHITECTURE.md
for why that's the whole point of this codebase.
This is Phase 00 (Foundation): a Turborepo monorepo with a Prisma schema,
Clerk auth, and a minimal CRUD flow proving the data model end to end.
See ARCHITECTURE.md for what's deliberately not built yet.檢視完整 README ↗A contractor operating system. The estimate, the contract, the budget, and change orders are the same underlying data — see ARCHITECTURE.md for why that's the whole point of this codebase.
This is Phase 00 (Foundation): a Turborepo monorepo with a Prisma schema, Clerk auth, and a minimal CRUD flow proving the data model end to end. See ARCHITECTURE.md for what's deliberately not built yet.
apps/web — Next.js (App Router), Tailwind CSS, deployed on Vercelpackages/db — Prisma schema + migrations, Postgres (Neon in production)packages/ui — shared componentspackages/integrations — empty placeholder, no integrations built yetcorepack enable will pick up the version pinned in package.json)pnpm install
Copy the example env files:
cp packages/db/.env.example packages/db/.env
cp apps/web/.env.example apps/web/.env
Fill in:
| Variable | Where | Description |
|---|---|---|
DATABASE_URL | both .env files | Postgres connection string — the Neon pooled one (host ends -pooler) |
DIRECT_URL | packages/db/.env | The Neon direct (unpooled) connection string. Only prisma migrate uses it; a connection pooler can't hold the session-level advisory locks migrations take |
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY | apps/web/.env | From your Clerk app's API Keys page |
CLERK_SECRET_KEY | apps/web/.env | From your Clerk app's API Keys page |
QUICKBOOKS_CLIENT_ID | apps/web/.env | From your Intuit Developer app's Keys page — only needed to use the /settings QuickBooks connection |
QUICKBOOKS_CLIENT_SECRET | apps/web/.env | From your Intuit Developer app's Keys page — never commit this |
QUICKBOOKS_REDIRECT_URI | apps/web/.env | <your origin>/api/quickbooks/callback, must exactly match a redirect URI registered on that Intuit app |
ANTHROPIC_API_KEY | apps/web/.env | From your Anthropic Console — required for every AI feature: compliance document extraction, draft-estimate-from-text, WIP summaries, and the dashboard's Ask box (both its answers and its commands). Without it, those features fail at request time rather than at startup; Ask says so in its own words. Set it on Vercel Preview as well as Production, or nothing about Ask can be clicked on a preview. |
BLOB_READ_WRITE_TOKEN | apps/web/.env | From your Vercel project's Blob store (Storage tab → create a store with "Add a read-write token" checked). Required for any file upload — compliance documents and subcontract agreement PDFs. Without it, uploads fail. |
CRON_SECRET | apps/web/.env + Vercel | Any long random string. Vercel sends it as Authorization: Bearer … on the nightly alert-digest cron; the route rejects every request without it, including when the variable is unset. Nothing unattended sends until this exists. |
The remaining NEXT_PUBLIC_CLERK_*_URL vars in apps/web/.env.example
are already set to sensible defaults (/sign-in, /sign-up,
/dashboard) — only change them if you rename those routes.
QUICKBOOKS_ENVIRONMENT defaults to sandbox in .env.example; set it
to production only once you're using a production Intuit app.
packages/db/.env and apps/web/.env can point at the same
DATABASE_URL; they're separate files because Prisma CLI commands run
from packages/db and Next.js reads its own .env from apps/web.
DIRECT_URL is only read by the Prisma CLI, so it belongs in
packages/db/.env alone.
pnpm db:migrate
This runs prisma migrate dev against DATABASE_URL, creating the
Company, User, Contact, Job, JobLineItem, ChangeOrder, and
ChangeOrderLineItemEdit tables.
To inspect the database visually:
pnpm db:studio
pnpm dev
Visit http://localhost:3000. Sign up (Clerk) — a Company is created
automatically on first sign-in. From /dashboard, create a job, add line
items, and open /jobs/[id] to see them rendered as a contract summary
and to add a change order.
pnpm lint # lint all packages
pnpm typecheck # typecheck all packages
pnpm build # build all packages (what CI runs)
pnpm db:generate # regenerate the Prisma client after a schema change
.github/workflows/ci.yml runs lint, typecheck, and build on every PR
and on pushes to main. It uses placeholder DATABASE_URL and Clerk
keys — none of those steps connect to a real database or Clerk instance,
so no secrets are required in the repo for CI to pass.
apps/web. Set the same env vars from apps/web/.env.example as Vercel
project environment variables (with real values), plus DATABASE_URL and
DIRECT_URL from Neon.DATABASE_URL and DIRECT_URL, not just
Production. Prisma resolves directUrl = env("DIRECT_URL") while loading
the schema, so a Preview build that can't see it fails with a P1012 schema
validation error before it connects to anything — and any branch that isn't
the project's Production Branch builds as a Preview.apps/web/vercel.json
sets the build command to pnpm --filter @prova/db run migrate:deploy && pnpm turbo run build --filter=@prova/web; keep it there rather than in the
Vercel dashboard, so a schema change that needs a new env var is visible in
code review.NOTIFY_BASE_URL | apps/web/.env + Vercel | The origin links in a scheduled email point at — https://app.cstream.ai in production. Deliberately configuration rather than a request header: the cron mails other people, so the host cannot come from whoever triggered it. No default; unset means the run refuses to send. |