Read this when changing PHP, Fat-Free Framework integration, plugins, or API controllers.
OpenMind\ to src/OpenMind/ and Modules\ to src/Modules/.<DirectoryName>.php; its derived class must extend PluginStrategy.ApplicationComposition boots System before the remaining plugins. Register plugin initialization work in constructors.PluginStrategy::AddRoute() for F3 route registration and AddMenuItem() for permission-filtered menu entries.OpenMind\Api\Api; controllers extend Controller.sendJson() / sendError() rather than emitting ad hoc response formats. They set JSON, status, and Cache-Control: no-store.decodeJsonRequest() and return 400 for invalid JSON or required-field failures.requireAuthentication() for protected reads; call requireRole() plus validateCsrfToken() before protected mutations.$f3, $frameworkUtils) are the established dependency access pattern; retain it where surrounding code does.User and Notifications are DB\SQL\Mapper classes. Use parameterized mapper predicates for request values.ErrorHandlers identifies /api/v1 requests before setting the status.Modern API/composition files use strict types, typed properties, trailing commas, and tabs. Older system files are mixed-style; make surgical changes and preserve their local style.