Real-time event tracking, security monitoring, and regulatory compliance for platform governance
_id: Id<"auditLogs">
timestamp: number // Date.now()
actorId: string // Clerk userId
actorType: "poster" | "contractor" | "admin" | "system"
actorName: string
action: string // e.g. "settings.platformFee.update"
category: "auth" | "data" | "payment" | "admin" | "api"
severity: "info" | "warning" | "critical"
entityType: string // table name
entityId: string
before: v.optional(v.any()) // snapshot before
after: v.optional(v.any()) // snapshot after
ipAddress: v.optional(v.string())
userAgent: v.optional(v.string())
sessionId: v.optional(v.string())
metadata: v.optional(v.any())
_id: Id<"securityEvents">
timestamp: number
eventType: "failed_login" | "password_reset" | "rate_limit" | "ip_anomaly" | "session_anomaly"
severity: "info" | "warning" | "critical"
userId: v.optional(v.string())
ipAddress: string
description: string
resolved: boolean
resolvedBy: v.optional(v.string())
resolvedAt: v.optional(v.number())
metadata: v.optional(v.any())
_id: Id<"complianceChecks">
regulation: "pci_dss" | "soc2" | "gdpr" | "ccpa"
status: "compliant" | "action_needed" | "non_compliant"
title: string
description: string
lastChecked: number
nextAuditDate: v.optional(v.number())
auditor: v.optional(v.string())
score: v.optional(v.number()) // 0-100
findings: v.optional(v.array(v.string()))
// Stored in adminSettings table
auditLogRetention: "30d" | "90d" | "1yr" | "permanent"
securityEventRetention: string
paymentRecordRetention: string // min 7yr for PCI
autoArchive: boolean
compressArchived: boolean
notifyBeforeDeletion: boolean
deletionNoticeDays: number // default 7
// api.admin.auditLogs
list({ category?, severity?, actorType?, search?, limit })
getById({ logId: Id<"auditLogs"> })
dataChanges({ entityType?, operation?, limit })
export({ format, dateRange, filters })
// api.admin.security
list({ eventType?, severity?, resolved? })
investigate({ eventId: Id<"securityEvents"> })
resolve({ eventId, resolution: string })
// api.admin.compliance
overview() // returns score + checklist
updateStatus({ checkId, status })
// api.admin.payments
auditTrail({ type?, dateRange?, reconciled? })
// Hooks
useAuditLogFeed() // real-time subscription
useSecurityAlerts() // critical event push
useComplianceScore() // computed score
useAuditExport() // export mutation
// Components
AuditLogFeed // feed + search + filters
AuditEventDetail // full event w/ diff
AuditFilterSheet // bottom sheet filters
SecurityEventsScreen // auth-focused view
DataChangeLog // CRUD diff log
PaymentAuditScreen // financial events
ComplianceDashboard // score + checklist
ExportRetentionScreen // export + policy
DiffViewer // before/after rendering
SeverityBadge // info/warning/critical
ComplianceGauge // circular score ring