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:
co-authored by
Claude Opus 4.8
parent
969d5d4c8a
commit
c9968531e4
+32
-3
@@ -1,6 +1,7 @@
|
||||
import type { Metadata } from "next"
|
||||
import { Geist, Geist_Mono } from "next/font/google"
|
||||
import { Toaster } from "sonner"
|
||||
import { Toaster } from "@/components/ui/toaster"
|
||||
import { UmamiAnalytics } from "@/components/analytics/umami"
|
||||
import "./globals.css"
|
||||
|
||||
const geistSans = Geist({
|
||||
@@ -14,6 +15,8 @@ const geistMono = Geist_Mono({
|
||||
})
|
||||
|
||||
export const metadata: Metadata = {
|
||||
metadataBase: new URL(process.env.NEXT_PUBLIC_APP_URL ?? "https://propertymanagement.network"),
|
||||
applicationName: "Property Management Network",
|
||||
title: {
|
||||
default: "Property Management Network — Built for Independent Landlords",
|
||||
template: "%s | Property Management Network",
|
||||
@@ -25,7 +28,32 @@ export const metadata: Metadata = {
|
||||
title: "Property Management Network — Built for Independent Landlords",
|
||||
description: "One dashboard to manage all your rental properties.",
|
||||
type: "website",
|
||||
url: process.env.NEXT_PUBLIC_APP_URL,
|
||||
url: "/",
|
||||
siteName: "Property Management Network",
|
||||
locale: "en_US",
|
||||
},
|
||||
twitter: {
|
||||
card: "summary_large_image",
|
||||
title: "Property Management Network — Built for Independent Landlords",
|
||||
description: "One dashboard to manage all your rental properties.",
|
||||
creator: "@propertymgmtnet",
|
||||
site: "@propertymgmtnet",
|
||||
},
|
||||
robots: {
|
||||
index: true,
|
||||
follow: true,
|
||||
googleBot: {
|
||||
index: true,
|
||||
follow: true,
|
||||
"max-image-preview": "large",
|
||||
"max-snippet": -1,
|
||||
"max-video-preview": -1,
|
||||
},
|
||||
},
|
||||
verification: {
|
||||
// Set GOOGLE_SITE_VERIFICATION in the environment to emit the
|
||||
// <meta name="google-site-verification"> tag. Left undefined => tag omitted.
|
||||
google: process.env.GOOGLE_SITE_VERIFICATION,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -41,7 +69,8 @@ export default function RootLayout({
|
||||
>
|
||||
<body suppressHydrationWarning className="min-h-full flex flex-col bg-[#09090b] text-white">
|
||||
{children}
|
||||
<Toaster position="bottom-right" theme="dark" richColors />
|
||||
<Toaster />
|
||||
<UmamiAnalytics />
|
||||
</body>
|
||||
</html>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user