Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
플로리다 웹사이트 요구사항이 2026년 1월 1일부터 시행되었습니다
The Florida website requirement took effect January 1, 2026. PropertyPro turns §718 and §720 recordkeeping into a tracked list with dates, evidence, and an audit trail.
비즈니스TypeScript · JavaScriptGitHub @Ruckus000온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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