Property Management Network — Next.js 16 (App Router), Better Auth, Drizzle ORM over PostgreSQL, Stripe, OpenAI, Resend. Includes: - Security hardening: access-control/IDOR fixes, TLS-by-default DB layer, constant-time cron auth, strict security headers, atomic AI quota gating, HTML/email output encoding, demo-backdoor disabled in production. - Superadmin dashboard at /admin (overview/MRR, server-paginated users with ban/impersonate/plan/delete, billing, platform activity + admin audit log, AI usage, system health) via the Better Auth admin plugin. - Seed/migration utility scripts under scripts/. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
23 lines
1.2 KiB
XML
23 lines
1.2 KiB
XML
<!-- 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>
|