Complete CRM foundation with contact modal in footer Backend: - Contact.model.js: Full CRUD model with statistics tracking - contact.controller.js: Submit, list, assign, respond, update, delete - contact.routes.js: Public submission + admin management endpoints - routes/index.js: Mount contact routes at /api/contact Frontend: - footer.js: Replace mailto link with Contact Us modal button - Contact modal: Form with type, name, email, org, subject, message - CSRF protection: Extracts token from cookie (like newsletter) - Rate limiting: formRateLimiter (5/min) - Validation: Input sanitization + required fields - UX: Success/error messages, auto-close on success Admin UI: - navbar-admin.js: New 'CRM & Communications' section - Links: Contact Management, Case Submissions, Media Inquiries Foundation for multi-project CRM across tractatus, family-history, sydigital Next: Build /admin/contact-management.html page
82 lines
No EOL
2 KiB
JSON
82 lines
No EOL
2 KiB
JSON
{
|
|
"version": "1.0.0",
|
|
"session_id": "2025-10-07-001",
|
|
"started": "2025-10-07T19:04:07.677Z",
|
|
"message_count": 1,
|
|
"token_estimate": 0,
|
|
"last_framework_activity": {
|
|
"ContextPressureMonitor": {
|
|
"message": 1,
|
|
"tokens": 0,
|
|
"timestamp": "2025-10-07T19:04:07.677Z",
|
|
"last_level": "NORMAL",
|
|
"last_score": 0
|
|
},
|
|
"InstructionPersistenceClassifier": {
|
|
"message": 0,
|
|
"tokens": 0,
|
|
"timestamp": null,
|
|
"last_classification": null
|
|
},
|
|
"CrossReferenceValidator": {
|
|
"message": 0,
|
|
"tokens": 0,
|
|
"timestamp": null,
|
|
"last_validation": null
|
|
},
|
|
"BoundaryEnforcer": {
|
|
"message": 0,
|
|
"tokens": 0,
|
|
"timestamp": null,
|
|
"last_check": null
|
|
},
|
|
"MetacognitiveVerifier": {
|
|
"message": 0,
|
|
"tokens": 0,
|
|
"timestamp": null,
|
|
"last_verification": null
|
|
},
|
|
"PluralisticDeliberationOrchestrator": {
|
|
"message": 0,
|
|
"tokens": 0,
|
|
"timestamp": null,
|
|
"last_deliberation": null
|
|
},
|
|
"FileEditHook": {
|
|
"timestamp": "2025-10-24T03:55:50.791Z",
|
|
"file": "/home/theflow/projects/tractatus/public/js/components/footer.js",
|
|
"result": "passed"
|
|
},
|
|
"FileWriteHook": {
|
|
"timestamp": "2025-10-24T03:53:41.535Z",
|
|
"file": "/home/theflow/projects/tractatus/src/routes/contact.routes.js",
|
|
"result": "passed"
|
|
}
|
|
},
|
|
"staleness_thresholds": {
|
|
"messages": 20,
|
|
"tokens": 30000
|
|
},
|
|
"alerts": [],
|
|
"last_updated": "2025-10-24T03:55:50.791Z",
|
|
"initialized": true,
|
|
"framework_components": {
|
|
"CrossReferenceValidator": {
|
|
"message": 0,
|
|
"tokens": 0,
|
|
"timestamp": "2025-10-24T03:56:06.108Z",
|
|
"last_validation": "2025-10-24T03:56:06.108Z",
|
|
"validations_performed": 977
|
|
},
|
|
"BashCommandValidator": {
|
|
"message": 0,
|
|
"tokens": 0,
|
|
"timestamp": null,
|
|
"last_validation": "2025-10-24T03:56:06.109Z",
|
|
"validations_performed": 599,
|
|
"blocks_issued": 69
|
|
}
|
|
},
|
|
"action_count": 599,
|
|
"auto_compact_events": []
|
|
} |