Deploy on DigitalOcean App Platform (GitHub-source build) + consolidate audit-fixes
Deploy config: - .do/app.yaml: build the Dockerfile directly from GitHub (deploy_on_push) instead of a pre-built DOCR image; NEXT_PUBLIC_* set RUN_AND_BUILD_TIME with the propertymanagement.network domain so they bake into the client bundle; add custom domains block (apex + www); wire Sentry DSN (server + browser). Included pending work from the audit-fixes branch: - AI provider abstraction (OpenAI/Anthropic, admin-selectable; Anthropic default) - Per-landlord e-signature (DocuSign OAuth + Dropbox Sign) + migration 0010 - Outbound webhooks / Zapier integration - PayPal removal (Stripe-only billing) - Storage hardening (fail-loud when Spaces unconfigured), security fixes Verified: full production Docker build (same build-args as DO) passes clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
917a06ee85
commit
5495b94924
@@ -1,6 +1,8 @@
|
||||
import { getSystemCounts, getEnvHealth } from "@/lib/db/admin-queries"
|
||||
import { getMaintenanceMode } from "@/lib/settings"
|
||||
import { aiProviderStatus } from "@/lib/ai/provider"
|
||||
import { MaintenanceToggle } from "@/components/admin/maintenance-toggle"
|
||||
import { AiProviderToggle } from "@/components/admin/ai-provider-toggle"
|
||||
import { formatDate } from "@/lib/utils"
|
||||
import { Settings, Database, Table2 } from "lucide-react"
|
||||
|
||||
@@ -13,10 +15,11 @@ function humanize(name: string): string {
|
||||
}
|
||||
|
||||
export default async function AdminSystemPage() {
|
||||
const [{ counts, cronLastRun }, env, maintenance] = await Promise.all([
|
||||
const [{ counts, cronLastRun }, env, maintenance, aiProvider] = await Promise.all([
|
||||
getSystemCounts(),
|
||||
Promise.resolve(getEnvHealth()),
|
||||
getMaintenanceMode(),
|
||||
aiProviderStatus(),
|
||||
])
|
||||
|
||||
return (
|
||||
@@ -37,6 +40,18 @@ export default async function AdminSystemPage() {
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* AI provider selection */}
|
||||
<div className="mb-5">
|
||||
<AiProviderToggle
|
||||
selected={aiProvider.selected}
|
||||
effective={aiProvider.effective}
|
||||
openaiConfigured={aiProvider.openaiConfigured}
|
||||
anthropicConfigured={aiProvider.anthropicConfigured}
|
||||
openaiModel={aiProvider.openaiModel}
|
||||
anthropicModel={aiProvider.anthropicModel}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-4 sm:gap-5 mb-5">
|
||||
{/* ── Environment configuration ───────────────────────────────── */}
|
||||
<div className="rounded-2xl border border-white/[0.06] bg-[#16161f] overflow-hidden">
|
||||
|
||||
Reference in New Issue
Block a user