Skip to content

Plugins Overview

The FRS ecosystem consists of plugins working together to power the 21st Century Lending platform.

Plugin Categories

User & Profile Management

PluginVersionPurpose
frs-wp-users2.2.0Core user profiles, FluentCRM sync
Intranet Module2.2.0Staff directory, org chart, bookmarks

Hub System

PluginVersionPurpose
Workspaces1.0.0Workspace taxonomy for portal navigation
frs-onboarding1.0.1Hub onboarding wizard
frs-dashboard-widgets1.0.1Bento-style dashboard blocks

Lead Generation

PluginVersionPurpose
frs-lead-pages1.4.0Landing pages with property data
frs-property-valuation1.0.1Rentcast property lookup
frs-mortgage-calculator1.0.1Calculator widget, embeddable

Content & Documents

PluginVersionPurpose
frs-docs1.0.0This documentation site
email-template-builder1.0.1Visual email editor, FUB sync
branding-block-kit1.1.0Theme.json style guide blocks

Integrations

PluginVersionPurpose
frs-addcal-sync1.0.1AddCal → WordPress events
frs-wp-modern-data1.0.0DataViews 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

PluginWordPressPHPNode
frs-wp-users6.0+8.1+-
workspaces6.0+8.1+-
frs-lead-pages6.0+8.1+18+
frs-dashboard-widgets6.4+8.1+18+
frs-addcal-sync6.0+8.1+-
frs-onboarding6.0+8.1+-
frs-property-valuation6.4+8.1+18+
frs-mortgage-calculator6.0+8.1+18+
frs-wp-modern-data6.5+8.1+18+
branding-block-kit6.0+8.0+18+
email-template-builder6.5+8.1+18+

External Service Dependencies

ServicePlugins Using
FluentCRMfrs-wp-users
FluentBookingfrs-dashboard-widgets
Rentcast APIfrs-property-valuation, frs-lead-pages
Resendfrs-mortgage-calculator, email-template-builder
AddCalfrs-addcal-sync
API Ninjasfrs-dashboard-widgets (mortgage rates)

REST API Namespaces

PluginNamespace
frs-wp-usersfrs-users/v1
workspacesworkspaces/v1
frs-lead-pagesfrs-lead-pages/v1
frs-addcal-syncfrs-addcal/v1
frs-property-valuationfrs-property-valuation/v1
frs-mortgage-calculatorfrs-mortgage-calculator/v1
frs-wp-modern-datafrs-modern-data/v1
email-template-builderetb/v1

Multisite Behavior

PluginNetwork ActivatePer-Site Data
frs-wp-usersYesShared profiles, per-site meta
workspacesYesPer-site content
frs-lead-pagesYesPer-site pages
frs-wp-modern-dataYesNetwork settings + per-site overrides
email-template-builderYesPer-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 build

Output goes to build/ directory with auto-generated .asset.php dependency files.

Architecture Split

ContextTechnologyUse Case
FrontendPHP + Interactivity APIHub pages, blocks, public-facing UI
AdminReact + wp-scriptsSettings pages, DataViews, admin menus

Both built with @wordpress/scripts.

Hub21 Platform Documentation