Consolidate audit-fixes branch: webhooks, integrations, and deploy hardening

Batch commit of the pending working tree on security/audit-fixes-2026-07.
Major areas:
- Outbound webhooks / Zapier: schema + signed delivery with retries, public
  v1 API (REST-hook subscribe/unsubscribe), settings UI, cron drain.
- Deploy hardening: email via SMTP2GO (Resend fully removed), verified DB TLS
  (DATABASE_SSL=require + DATABASE_CA), storage fails loud in production when
  Spaces is unconfigured instead of silently using ephemeral disk.
- Integrations & features (concurrent work): accounting (QuickBooks/Xero),
  e-signature (DocuSign/Dropbox Sign), PayPal, geocoding/maps, onboarding,
  expanded legal pages.
- DB migrations 0006–0009.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Leon Serfaty
2026-07-02 13:42:34 -04:00
co-authored by Claude Opus 4.8
parent 969d5d4c8a
commit c9968531e4
282 changed files with 41530 additions and 4013 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

-22
View File
@@ -1,22 +0,0 @@
<!-- Dark logo: for use on LIGHT backgrounds (dark wordmark). -->
<svg width="340" height="40" viewBox="0 0 340 40" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Property Management Network">
<defs>
<linearGradient id="pmn-dark" x1="0" y1="0" x2="40" y2="40" gradientUnits="userSpaceOnUse">
<stop stop-color="#6366F1"/>
<stop offset="1" stop-color="#7C3AED"/>
</linearGradient>
</defs>
<rect width="40" height="40" rx="10" fill="url(#pmn-dark)"/>
<g transform="translate(8 8)" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z"/>
<path d="M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2"/>
<path d="M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2"/>
<path d="M10 6h4"/>
<path d="M10 10h4"/>
<path d="M10 14h4"/>
<path d="M10 18h4"/>
</g>
<text x="52" y="27" font-family="Geist, 'Geist Sans', Inter, 'Segoe UI', system-ui, -apple-system, sans-serif" font-size="20" font-weight="700" letter-spacing="-0.3">
<tspan fill="#0B0B12">Property Management </tspan><tspan fill="#6366F1">Network</tspan>
</text>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

-22
View File
@@ -1,22 +0,0 @@
<!-- Light logo: for use on DARK backgrounds (white wordmark). -->
<svg width="340" height="40" viewBox="0 0 340 40" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Property Management Network">
<defs>
<linearGradient id="pmn-light" x1="0" y1="0" x2="40" y2="40" gradientUnits="userSpaceOnUse">
<stop stop-color="#6366F1"/>
<stop offset="1" stop-color="#7C3AED"/>
</linearGradient>
</defs>
<rect width="40" height="40" rx="10" fill="url(#pmn-light)"/>
<g transform="translate(8 8)" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z"/>
<path d="M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2"/>
<path d="M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2"/>
<path d="M10 6h4"/>
<path d="M10 10h4"/>
<path d="M10 14h4"/>
<path d="M10 18h4"/>
</g>
<text x="52" y="27" font-family="Geist, 'Geist Sans', Inter, 'Segoe UI', system-ui, -apple-system, sans-serif" font-size="20" font-weight="700" letter-spacing="-0.3">
<tspan fill="#FFFFFF">Property Management </tspan><tspan fill="#818CF8">Network</tspan>
</text>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

-18
View File
@@ -1,18 +0,0 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Property Management Network">
<defs>
<linearGradient id="pmn-mark" x1="0" y1="0" x2="40" y2="40" gradientUnits="userSpaceOnUse">
<stop stop-color="#6366F1"/>
<stop offset="1" stop-color="#7C3AED"/>
</linearGradient>
</defs>
<rect width="40" height="40" rx="10" fill="url(#pmn-mark)"/>
<g transform="translate(8 8)" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z"/>
<path d="M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2"/>
<path d="M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2"/>
<path d="M10 6h4"/>
<path d="M10 10h4"/>
<path d="M10 14h4"/>
<path d="M10 18h4"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 839 B