Tenant demo: McDuff Gillis + internal compliance lights - #7
Merged
fsu9913-gif merged 1 commit intoAug 15, 2026
Merged
Conversation
Name the Unit 105 tenant McDuff Gillis, open the lounge on tenant.rent-ruby.com, and add internal green/orange/red file lights for paperwork, pending signatures, and 60-day / sublet risk. Co-authored-by: CARBComplianceApp <CARBComplianceApp@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
This PR sets up a dedicated tenant-demo experience (tenant.rent-ruby.com) with a new demo identity (McDuff Gillis, Unit 105) and introduces “internal compliance lights” (green/orange/red) for staff-facing rent roll and owner snapshot views.
Changes:
- Added Cloudflare Workers deployment for the static tenant showcase build (Wrangler config + minimal Worker).
- Implemented compliance status derivation + UI components (legend + traffic-light chip) and wired them into rent roll + owner snapshot.
- Updated demo data/identity across the tenant lounge/portal, seed data, and docs.
Reviewed changes
Copilot reviewed 13 out of 15 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
wrangler.jsonc |
Adds Wrangler config to serve SPA assets from a Worker. |
workers/tenant-demo.ts |
Minimal Worker that proxies to ASSETS.fetch() for static hosting. |
src/lib/tenantCompliance.ts |
Introduces compliance status types + derivation helpers. |
src/components/ComplianceLight.tsx |
Adds reusable compliance light UI + legend. |
src/components/RentRollDashboard.tsx |
Displays staff compliance lights for each unit + legend in the rent roll UI. |
src/components/OwnerShowcaseSnapshot.tsx |
Adds staff compliance lights column and legend for the owner showcase snapshot. |
src/lib/demoTenant.ts |
Centralizes demo tenant identity + tenant-demo host detection. |
src/components/TenantPortal.tsx |
Updates demo tenant usage in the tenant portal (unit/name/rent/payment date). |
src/App.tsx |
Auto-routes tenant.* hosts to tenant view and adds demo-only staff compliance strip. |
server.ts |
Seeds/patches demo tenant data and extends rent-roll API shape with compliance-related counts. |
README.md |
Documents Cloudflare tenant demo workflow and expectations. |
public/owner-demo.html |
Updates owner-demo copy to reflect McDuff identity. |
package.json / package-lock.json |
Adds Wrangler and a deploy script for the tenant demo. |
.gitignore |
Ignores Wrangler local state and dev vars. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+12
to
+19
| const TENANT_DEMO_HOSTS = new Set([ | ||
| 'tenant.rent-ruby.com', | ||
| 'tenant.localhost', | ||
| 'tenant.127.0.0.1.nip.io', | ||
| ]); | ||
|
|
||
| export const isTenantDemoHost = (hostname = window.location.hostname) => | ||
| hostname.startsWith('tenant.') || TENANT_DEMO_HOSTS.has(hostname); |
Comment on lines
+521
to
+524
| <h1 className="text-4xl font-black text-app-text uppercase tracking-tighter">Tenant <span className="text-app-accent italic">Lounge</span>.</h1> | ||
| <p className="text-app-text/40 text-[10px] font-bold uppercase tracking-[0.2em]"> | ||
| Welcome back, {DEMO_TENANT.firstName}. Unit {DEMO_TENANT.unit} · 3875 Ruby Street. | ||
| </p> |
Comment on lines
198
to
202
| const [rentStatus, setRentStatus] = useState<{ amount: number, last_payment: string, status: string } | null>(null); | ||
| const [mailboxCustomizations, setMailboxCustomizations] = useState<Record<string, { color: string }>>({}); | ||
| const [selectedMailbox, setSelectedMailbox] = useState<string | null>(demoMode ? '105' : null); | ||
| const [currentUserUnit, setCurrentUserUnit] = useState<string>('105'); // Mocked for demo | ||
| const [selectedMailbox, setSelectedMailbox] = useState<string | null>(demoMode ? DEMO_TENANT.unit : null); | ||
| const [currentUserUnit, setCurrentUserUnit] = useState<string>(DEMO_TENANT.unit); | ||
|
|
Comment on lines
+588
to
+601
| try { | ||
| db.prepare(` | ||
| UPDATE tenants | ||
| SET name = 'McDuff Gillis', | ||
| email = 'mcduff.gillis@rent-ruby.com' | ||
| WHERE unit_id IN (SELECT id FROM units WHERE unit_number = '105') | ||
| AND (name LIKE 'Tenant 105%' OR name LIKE 'Jordan%' OR name != 'McDuff Gillis') | ||
| `).run(); | ||
| db.prepare(` | ||
| UPDATE bank_transactions | ||
| SET description = 'CHASE DIRECT DEP - MCDUFF GILLIS' | ||
| WHERE description LIKE '%JORDAN SMITH%' | ||
| `).run(); | ||
| } catch (e) {} |
Comment on lines
+696
to
+700
| COALESCE(( | ||
| SELECT COUNT(*) FROM lease_updates lu | ||
| WHERE lu.tenant_id = t.id AND lu.status IN ('Pending', 'In Progress', 'Ready for Review') | ||
| ), 0) as pending_lease_docs, | ||
| COALESCE(( |
Comment on lines
40
to
44
| "tailwindcss": "^4.1.14", | ||
| "typescript": "~5.8.2", | ||
| "vite": "^6.2.0" | ||
| "vite": "^6.2.0", | ||
| "wrangler": "^4.34.0" | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


This is the tenant.rent-ruby.com owner walkthrough, not the live marketing site.
The current working branch was the live-site track (
cursor/make-rent-ruby-live-1bd0). These edits live on a separate demo branch so the lounge can be shown to the owner before that subdomain is public.What the owner will see
tenant.rent-ruby.com(or anytenant.*host) lands on the tenant view automatically.Cloudflare
wrangler.jsonc) that serves the showcase SPA from the existingrent-rubyWorker.npm run deploy:tenant-demotenant.rent-ruby.comin the Cloudflare dashboard when DNS is ready. This does not go live by merging.How to review
npm run dev→ switch to Tenant. Header should say McDuff Gillis, Unit 105, with the internal orange light and legend.npm run build:showcasealready passes locally.npx tsc --noEmitpasses.