Skip to content

What is FluentBoards? ​

FluentBoards Core Basic

FluentBoards is a Project Management Plugin designed to facilitate collaborative work among team members. It offers the ability to showcase your team’s workflow directly on your WordPress site, eliminating the need for additional tools.

With FluentBoards, you can display your boards within the WordPress backend or on the front-end portal of your website. Packed with essential features, FluentBoards ensures seamless project planning and execution.

What You Can Really Do / Extend ​

FluentBoards is a developer powerhouse. Think of these as capability lanes you can mix & match:

🧭

Custom Menus & UI Surfaces

Add global navigation items, per‑board menu drawers and modal panels without touching core.

fluent_boards/menu_itemsfluent_boards/board_menu_itemsfluent_boards/in_menu_actions
🧪

Data Validation & Transformation

Enforce business rules, inject defaults, or reshape payloads before they persist to the database.

fluent_boards/before_task_createfluent_boards/before_create_boardfluent_boards/uploaded_file_name_prefix
⚡️

Reactive Automations

Listen to lifecycle events & trigger notifications, syncing, scoring or downstream processes.

fluent_boards/task_createdfluent_boards/stage_updatedfluent_boards/task_due_date_changed
🌐

Headless / External Apps

Build dashboards, reporting layers or mobile apps over REST & Webhooks. Perfect for multi‑site orchestration.

GET /projectsPOST /projects/{board_id}/taskswebhooks
🎨

Branding & UX Polish

Adjust email header/footer, rename or add priorities, change logos and icons, tailor copy & micro‑interactions.

fluent_boards/email_headerfluent_boards/task_prioritiesfluent_boards/email_footer
🚀

Scale with Confidence

Move from a 5‑line hook to full multi‑module integrations safely—keep everything in a separate add‑on plugin.

Hooks APIHelper FunctionsServices

No core edits. Clean upgrade path. Compose capabilities like building blocks.

Notes

The FluentBoards Developer Docs are the powerhouse for customization and extension of the FluentBoards app: one unified source for UI injections, data shaping, workflow automation, and cross‑platform integrations built on stable hooks, helper APIs, and a modern REST layer.

1. Explore the Data Model

Start with the Database Schema & learn how boards, stages and tasks relate to each other.

2. Try the REST API

Use the REST API to fetch or create tasks from external services and automate workflows.

3. Extend via Hooks

Tap into Action & Filter hooks to modify default behavior cleanly.

4. Use Helper Functions

Speed up development with ready helpers & APIs listed under Global Functions.

Requirements ​

ComponentRecommendedMinimum
PHP8.1+7.4
WordPress6.4+5.0
MySQL5.7+ / MariaDB 10.3+5.6
Web ServerNginx / Apache (mod_rewrite)*

The minimums come from the plugin's readme.txt (Requires at least: 5.0, Requires PHP: 7.4). FluentBoards Pro also requires the core plugin, at least the version set in FLUENT_BOARDS_CORE_MIN_VERSION (2.1.0 for Pro 2.1.0).

Ensure WP_DEBUG is enabled on development sites for better error visibility.

Install (Developer Flow) ​

  1. Install the public plugin (Core or Pro) through the WP dashboard or by placing it into wp-content/plugins/.
  2. Activate it in Plugins → Installed Plugins.
  3. (Optional) For local development run build tools inside a clone of the plugin repository (if contributing core code).
  4. Create a custom integration plugin (recommended) rather than editing core.

Minimal Add‑On Boilerplate ​

php
<?php
/**
 * Plugin Name: FluentBoards Dev Sample
 * Description: Demo extension showing how to hook into task creation.
 */

add_action('plugins_loaded', function() {
	// Safety: only run if FluentBoards is active
	if(!defined('FLUENT_BOARDS')) {
		return; 
	}

	// Example: append a suffix to every new task title
	add_action('fluent_boards/task_created', function($task){
		// $task is an Eloquent-like model instance
		$task->title = $task->title . ' ✅';
		$task->save();
	});
});

Drop that file in its own directory under wp-content/plugins/fluentboards-dev-sample/fluentboards-dev-sample.php and activate.

FluentBoards Versions ​

FluentBoards comes in different versions:

FluentBoards Core is a free WordPress plugin. A Board serves as a centralized hub for organizing workflow-related information. Whether you’re initiating a new project, planning, or managing ongoing tasks, the board provides a comprehensive overview of your team’s progress.

FluentBoards Pro is a paid add-on (it needs the core plugin) that adds:

  • Subtasks and subtask groups, task attachments (files and links, chunked uploads) and custom fields
  • Task dependencies (predecessors/successors) and recurring tasks
  • Board and task templates
  • Board roles (manager, member, viewer), FluentBoards managers/admins, and email invitations
  • Stage defaults: default assignees and watchers per stage
  • Imports and exports: Trello, Asana, FluentBoards JSON and CSV import, plus board export
  • Time tracking (timers and manual entries, stored in fbs_time_tracks)
  • Cloud storage for attachments: Amazon S3, Cloudflare R2, DigitalOcean Spaces, Backblaze
  • Outgoing webhooks delivery
  • Frontend portal and a single-board shortcode
  • Extra MCP abilities, and a FluentCRM automation action that creates a board from a template

Core Entities (Glossary) ​

EntityDescriptionKey Attributes
BoardTop level container for workflow (fbs_boards, type to-do or roadmap)id, title, description, type, background, settings, created_by, archived_at
StageA column / pipeline step within a board (fbs_board_terms, type stage)id, board_id, title, position, bg_color, settings (default task status)
TaskWork item that moves across stages (fbs_tasks). Subtasks are tasks with parent_id.id, board_id, stage_id, parent_id, title, status (open/closed), priority, due_at, assignees (relation)
LabelColor coded tag for grouping tasks (fbs_board_terms, type label)id, board_id, title, color, bg_color
CommentDiscussion entry on a task (fbs_comments)id, task_id, board_id, parent_id, description, created_by
WebhookIncoming webhook configuration, stored as a meta row (fbs_metas, object_type webhook)id, key, value (settings)
RelationJunction rows linking users, assignees, labels, watchers to boards/tasks (fbs_relations)object_id, object_type, foreign_id, settings

Understanding these first reduces debugging time later.

Directory Structure ​

Layout of the released core plugin (fluent-boards/):

text
├── app
│   ├── Api            # PHP API classes behind FluentBoardsApi()
│   ├── Functions      # Global functions (helpers.php)
│   ├── Hooks          # Action/filter registration, handlers, CLI commands
│   ├── Http           # REST routes, controllers, policies, requests
│   ├── Models         # Database models
│   ├── Modules        # Optional modules (MCP)
│   ├── Services       # Business logic (TaskService, BoardService, Helper, …)
│   ├── Views          # PHP view templates (admin shell, emails, frontend)
│   ├── App.php
│   └── Vite.php       # Asset loader (dev server or built manifest)
│
├── assets             # Compiled CSS, JS, images
├── boot               # [internal] Plugin bootstrap files
├── config             # [internal] Framework config (slug, REST namespace, hook prefix)
├── database           # [internal] Migrations (DBMigrator, Migrations/)
├── language           # [internal] Translation files
├── vendor             # [internal] WPFluent framework, Action Scheduler
│
├── fluent-boards.php  # Plugin entry file
└── readme.txt

The development repository also contains resources/ (Vue 3 source), dev/, app/ComposerScript.php, and build tooling. These are not shipped in the release zip.

Development Environment (Short List) ​

NeedRecommended
Code EditorVS Code / PhpStorm
Local Sitewp-env, Lando, DDEV, Laravel Herd, Valet, or any AMP stack
DebugWP_DEBUG + (optional) Xdebug
API Testscurl / Postman / Bruno
VersioningGit (keep add‑ons separate)

TIP

Keep custom code in a separate plugin so updates never overwrite your work.

Community & Support ​

When to Use What ​

  • User-facing configuration question → User Docs
  • Building / extending via code → Developer Docs & Hooks sections
  • Suspected bug → Reproduce on clean install, then open issue / ticket
  • Integration idea / enhancement → Feature request channel

Contributing Improvements ​

Small wording fixes, examples, and missing hook docs are welcome. Use the "Edit this page" link to submit a PR. Keep examples minimal & runnable.

REST API Authentication ​

All endpoints are namespaced under /wp-json/fluent-boards/v2/. Boards are called "projects" in the routes.

Use one of:

  1. Cookie + Nonce (browser / WP admin context) – send X-WP-Nonce header.
  2. Application Passwords (Basic Auth) – for server-to-server integrations.
  3. OAuth / JWT (custom) – implement your own auth layer via hooks if needed.

Example (Application Password) request:

bash
curl -u user:app_password \
	https://example.com/wp-json/fluent-boards/v2/projects

Create a Task (Examples) ​

Via REST ​

bash
curl -u user:app_password \
	-H 'Content-Type: application/json' \
	-d '{
				"task": {
					"board_id": 12,
					"stage_id": 45,
					"title": "Research API Endpoints",
					"description": "Collect requirements and draft spec"
				}
			}' \
	https://example.com/wp-json/fluent-boards/v2/projects/12/tasks

The task fields are wrapped in a task object. See the REST API reference for all fields.

Via PHP (Inside Your Add‑On) ​

Use the PHP API. It checks the current user's permission on the board, validates the stage, and handles assignees and labels:

php
$task = FluentBoardsApi('tasks')->create([
	'board_id'    => 12,
	'stage_id'    => 45,
	'title'       => 'Research API Endpoints',
	'description' => 'Collect requirements and draft spec',
	'assignees'   => [],
	'labels'      => [],
]);

FluentBoards\App\Models\Task::create([...]) also works, but it skips the permission check and the assignee/label handling. See the Tasks API.

Debug Tips ​

  • Log queries with the standard WordPress SAVEQUERIES constant, or use a plugin such as Query Monitor.
  • Use the browser network panel to inspect REST payloads your own UI triggers.
  • Log hook payloads: error_log(print_r($task->toArray(), true));

Need something not covered here? Open an issue or PR via the Edit link at the top of the page.