Synaplan
開源 AI 平台,供企業使用:自行託管的 AI 代理、符合 GDPR 的聊天機器人小工具、RAG 知識庫、WhatsApp 與 Outlook AI、MCP、多模型路由。Docker、Kubernetes 或託管於 Germ
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Multi-tenant compliance SaaS for Florida condo and HOA associations. Next.js 15, React 19, TypeScript, Drizzle and Postgres, Stripe. 102 tables and 913 pull requests behind 8 required CI checks.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Compliance and community management platform for Florida condominium associations.
PropertyPro helps condo associations, HOAs, and apartments meet Florida statutory requirements (§718 / §720) for document posting, meeting notices, and owner portal access.
Never run pnpm --filter @propertypro/db db:migrate from a shell carrying
the root .env.local. That file's DATABASE_URL is production.
Migrations reach production one way only — manually, via Supabase MCP
apply_migration, in the order documented in
docs/DEPLOYMENT.md.檢視完整 README ↗A multi-tenant web platform that helps Florida condo associations, HOAs and apartment communities keep the records state law requires them to publish — with deadlines, statute citations and an audit trail.
Live site: https://property-pro-web.vercel.app — the public marketing site, including an interactive compliance panel with demo data. The portal itself needs an account.
Status: pre-launch hardening. E-voting is gated on attorney review. There is
no native mobile app (residents use web routes under /mobile). PropertyPro
does not provide legal, engineering or financial advice.
Stack: Next.js 15 (App Router) · React 19 · TypeScript · Supabase (Postgres
FORCE ROW LEVEL SECURITY, and a write
trigger that rejects unscoped mutations.apps/admin) for support tickets, service health,
billing and onboarding.Guardrails, measured 2026-10-08: 34 repository-specific lint guards
(scripts/run-lint-guards.mjs) and 1,461 test files.
Captured from the local agent sandbox (pnpm agent:live:web) with the seeded
demo communities and *.local demo personas. No production data.
Compliance — the required-records queue for a §718 condo, as its root manager sees it.
Property-manager portfolio — every community the manager runs, with cross-community totals.
flowchart LR
P["Residents · boards · managers"] --> W
O["Platform operators"] --> A
subgraph Vercel
W["apps/web<br/>portal · public sites · /mobile · /api/v1"]
A["apps/admin<br/>operator console"]
C["18 crons<br/>→ /api/v1/internal/*"]
end
C --> W
W --> K["packages/<br/>api-contract · db · shared · ui · email"]
A --> K
K --> DB[("Supabase Postgres<br/>FORCE RLS + write trigger")]
W --> S["Supabase Auth + Storage"]
W --> ST["Stripe"]
K --> R["Resend"]
packages/db owns the Drizzle schema, migrations and the scoped client;
packages/shared owns roles and the RBAC matrix; packages/api-contract
defines typed routes (defineRoute / runRoute, Zod in and out).community_id. Middleware resolves
the tenant; every query goes through createScopedClient(communityId), and
Postgres enforces the same boundary with FORCE ROW LEVEL SECURITY and a
write trigger. Cross-tenant reads must import @propertypro/db/unsafe and
carry a written authorisation comment, which a lint guard checks.deploy.yml ships the code
to Vercel; nothing in the pipeline migrates the database. Migrations are
applied to production by hand, expand-before-code and contract-after (see
Decisions below).What this README was checked against (2026-10-08, Linux, Docker): a fresh
clone, no .env file of any kind, and only local services. The sandbox
starts its own Supabase stack in Docker, migrates and seeds it, and refuses
remote backends.
pnpm install # the repo pins Node 24 (.nvmrc); see the note below
pnpm agent:env:prepare # local Supabase (Auth, Storage, Postgres) + migrate + seed:demo + seed:verify
pnpm agent:live:web # Next dev server on the printed port (e.g. http://localhost:31002)
Then open the printed /dev/agent-login?as=<persona> URL; add
&communityId=1 to land in Sunset Condos. Useful personas: root_sunset
(compliance), pm_admin (PM portfolio), owner (resident /mobile view).
The demo identities are all *.local addresses.
Checked with Node 22:
pnpm installwarnsUnsupported engine(the repo wants 24.x) but completes, and the sandbox and dev server ran. Use Node 24 to match CI and Vercel.
resident, property_manager and root_manager; board seats are a separate
designation that general permissions never read. Accepted costs, in the
ADR's own words: "No per-manager permission overrides post-cleanup
(granularity loss — accepted)", and rootless communities lose billing and
deletion until someone claims root.db:migrate step in the deploy pipeline conflicted with manual applies,
failed on every run and "silently blocked all prod deploys for ~2 weeks". It
was also unsafe for contract migrations, because migrating first would drop
columns the live code still reads. The replacement is discipline rather than
automation: expand before the code ships, contract after, then verify the
ledger with pnpm db:ledger:verify.PropertyPro helps condo associations, HOAs, and apartments meet Florida statutory requirements (§718 / §720) for document posting, meeting notices, and owner portal access.
| App | Port | Domain | Description |
|---|---|---|---|
apps/web | 3000 | [slug].getpropertypro.com | Community portal (resident, board, PM) |
apps/admin | 3001 | admin.getpropertypro.com | Operator console (platform admin only) |
# 1. Copy environment variables
cp .env.example .env.local
# Fill in your Supabase, Stripe, Resend, and Sentry values
# 2. Run setup (creates .env.local symlinks for each app)
./scripts/setup.sh
# 3. Install dependencies
pnpm install
# 4. Start the supported local agent sandbox (Supabase Auth + Storage + DB).
# It never reads .env.local and refuses remote backends.
pnpm agent:env:prepare
Never run
pnpm --filter @propertypro/db db:migratefrom a shell carrying the root.env.local. That file'sDATABASE_URLis production. Migrations reach production one way only — manually, via Supabase MCPapply_migration, in the order documented in docs/DEPLOYMENT.md.One migration on
mainmakes this concrete:0062_secret_ballotis an irreversible contract migration, deliberately unapplied pending attorney sign-off on e-voting.db:migratewould apply it and destroy the ballot linkage permanently.
# Run everything (all apps + packages watch mode)
pnpm dev
# Run a single app
pnpm --filter @propertypro/web dev # web on :3000
pnpm --filter @propertypro/admin dev # admin on :3001
Use the sandbox when testing authenticated behavior or asking an agent to
inspect a change in a browser. It provisions an isolated local Supabase stack
per worktree, migrates it, and seeds the demo personas without reading
.env.local.
pnpm agent:live:web # starts web and prints its unique localhost URL
pnpm agent:live:admin # starts admin only when needed
pnpm agent:env:status # show this worktree's URLs
pnpm agent:env:reset # clean local-only DB, then migrate and reseed
pnpm agent:env:stop # stop the worktree's stack while retaining data
After the web server starts, visit the printed /dev/agent-login?as=owner
URL. For a disposable scenario, create a namespaced fixture and open the
returned login URL:
pnpm agent:fixture:community -- --slug agent-review --name "Review HOA" --type hoa_720 --root-email [email protected] --root-name "Root Agent"
pnpm agent:fixture:user -- --community agent-review --email [email protected] --name "Resident Agent" --role resident --owner
After running migrations, insert your Supabase auth UUID into platform_admin_users:
INSERT INTO platform_admin_users (user_id) VALUES ('YOUR-SUPABASE-AUTH-UUID-HERE');
Then log in at http://localhost:3001.
pnpm typecheck # Type-check all packages
pnpm lint # ESLint + every guard in scripts/run-lint-guards.mjs
pnpm test # Unit tests
pnpm build # Production build
pnpm seed:demo # Seed demo communities
pnpm seed:verify # Verify seed integrity
pnpm perf:check # Performance budget check
pnpm clean # Clean build outputs
Three pre-seeded demo communities (created via pnpm seed:demo):
| Community | Slug | Type | City |
|---|---|---|---|
| Sunset Condos | sunset-condos | Condo §718 | Miami, FL |
| Palm Shores HOA | palm-shores-hoa | HOA §720 | Fort Lauderdale, FL |
| Sunset Ridge Apartments | sunset-ridge-apartments | Apartment | Tampa, FL |
See docs/ for detailed documentation:
TRANSITION-PLAN-v4.1-AGENT-SPEC.md — Implementation plan00-DEMO-PLATFORM-TECH-SPEC.md — Full technical specadr/ — Architecture Decision Recordsdesign-system/ — Design system documentation