Plugins Overview
The FRS ecosystem consists of plugins working together to power the 21st Century Lending platform.
Plugin Categories
User & Profile Management
| Plugin | Version | Purpose |
|---|---|---|
| frs-wp-users | 2.2.0 | Core user profiles, FluentCRM sync |
| Intranet Module | 2.2.0 | Staff directory, org chart, bookmarks |
Hub System
| Plugin | Version | Purpose |
|---|---|---|
| Workspaces | 1.0.0 | Workspace taxonomy for portal navigation |
| frs-onboarding | 1.0.1 | Hub onboarding wizard |
| frs-dashboard-widgets | 1.0.1 | Bento-style dashboard blocks |
Lead Generation
| Plugin | Version | Purpose |
|---|---|---|
| frs-lead-pages | 1.4.0 | Landing pages with property data |
| frs-property-valuation | 1.0.1 | Rentcast property lookup |
| frs-mortgage-calculator | 1.0.1 | Calculator widget, embeddable |
Content & Documents
| Plugin | Version | Purpose |
|---|---|---|
| frs-docs | 1.0.0 | This documentation site |
| email-template-builder | 1.0.1 | Visual email editor, FUB sync |
| branding-block-kit | 1.1.0 | Theme.json style guide blocks |
Integrations
| Plugin | Version | Purpose |
|---|---|---|
| frs-addcal-sync | 1.0.1 | AddCal → WordPress events |
| frs-wp-modern-data | 1.0.0 | DataViews admin, MCP adapter |
Dependency Graph
┌─────────────────┐
│ frs-wp-users │
│ (Core Profiles)│
└────────┬────────┘
│
┌────────────────────┼────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────────┐
│ Workspaces │ │frs-lead-pages │ │frs-property-val │
│ (Hubs) │ │ (Leads) │ │frs-mortgage-calc │
└───────┬───────┘ └───────────────┘ └───────────────────┘
│
▼
┌───────────────┐
│frs-dashboard │
│ -widgets │
└───────────────┘Requirements Matrix
| Plugin | WordPress | PHP | Node |
|---|---|---|---|
| frs-wp-users | 6.0+ | 8.1+ | - |
| workspaces | 6.0+ | 8.1+ | - |
| frs-lead-pages | 6.0+ | 8.1+ | 18+ |
| frs-dashboard-widgets | 6.4+ | 8.1+ | 18+ |
| frs-addcal-sync | 6.0+ | 8.1+ | - |
| frs-onboarding | 6.0+ | 8.1+ | - |
| frs-property-valuation | 6.4+ | 8.1+ | 18+ |
| frs-mortgage-calculator | 6.0+ | 8.1+ | 18+ |
| frs-wp-modern-data | 6.5+ | 8.1+ | 18+ |
| branding-block-kit | 6.0+ | 8.0+ | 18+ |
| email-template-builder | 6.5+ | 8.1+ | 18+ |
External Service Dependencies
| Service | Plugins Using |
|---|---|
| FluentCRM | frs-wp-users |
| FluentBooking | frs-dashboard-widgets |
| Rentcast API | frs-property-valuation, frs-lead-pages |
| Resend | frs-mortgage-calculator, email-template-builder |
| AddCal | frs-addcal-sync |
| API Ninjas | frs-dashboard-widgets (mortgage rates) |
REST API Namespaces
| Plugin | Namespace |
|---|---|
| frs-wp-users | frs-users/v1 |
| workspaces | workspaces/v1 |
| frs-lead-pages | frs-lead-pages/v1 |
| frs-addcal-sync | frs-addcal/v1 |
| frs-property-valuation | frs-property-valuation/v1 |
| frs-mortgage-calculator | frs-mortgage-calculator/v1 |
| frs-wp-modern-data | frs-modern-data/v1 |
| email-template-builder | etb/v1 |
Multisite Behavior
| Plugin | Network Activate | Per-Site Data |
|---|---|---|
| frs-wp-users | Yes | Shared profiles, per-site meta |
| workspaces | Yes | Per-site content |
| frs-lead-pages | Yes | Per-site pages |
| frs-wp-modern-data | Yes | Network settings + per-site overrides |
| email-template-builder | Yes | Per-user templates |
Common Patterns
Singleton Instance
Most plugins use singleton pattern:
php
class My_Plugin {
private static $instance = null;
public static function get_instance() {
if (null === self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
}PSR-4 Autoloading
php
spl_autoload_register(function($class) {
$prefix = 'MyPlugin\\';
$base_dir = __DIR__ . '/includes/';
// ... load class file
});Interactivity API Pattern
php
// render.php - Dynamic block template
<div
<?php echo get_block_wrapper_attributes(); ?>
data-wp-interactive="my-namespace"
data-wp-context='<?php echo wp_json_encode($attributes); ?>'
>
<button data-wp-on--click="actions.toggle">
Toggle
</button>
<div data-wp-bind--hidden="!context.isOpen">
Content here
</div>
</div>javascript
// view.js - Built with wp-scripts
import { store, getContext } from '@wordpress/interactivity';
store('my-namespace', {
actions: {
toggle() {
const ctx = getContext();
ctx.isOpen = !ctx.isOpen;
}
}
});wp-scripts Build
bash
# Development
npm run start
# Production
npm run buildOutput goes to build/ directory with auto-generated .asset.php dependency files.
Architecture Split
| Context | Technology | Use Case |
|---|---|---|
| Frontend | PHP + Interactivity API | Hub pages, blocks, public-facing UI |
| Admin | React + wp-scripts | Settings pages, DataViews, admin menus |
Both built with @wordpress/scripts.