Client Portal Manual

🍳

AIO Client Portal

White-Label Deployment Manual
Version 1.1 | Plugin v1.7.0+
April 8, 2026
Ai Omelette | aiomelette.com
Install. Configure 10 fields. Your branded client portal is live.

Contents

  1. Quick Start (5 Minutes)
  2. Configuring Your Branding
  3. Adding Your First Client
  4. Sending a Portal Link
  5. What Your Client Sees
  6. Connecting Services
  7. What's Configurable vs Fixed
  8. REST API Reference
  9. Troubleshooting
  10. Developer Reference

1. Quick Start (5 Minutes)

1

Install the Plugin

Log into your WordPress admin. Go to Plugins > Add New > Upload Plugin. Upload aio-client-portal.zip, click Install Now, then Activate.

2

Find the Dashboard

After activation, look for your company name (or “Client Portal” on first install) in the left sidebar of your WordPress admin. It has a distinctive egg icon and sits between Comments and Appearance.

Click it. The plugin takes over the full screen with its own dashboard – sidebar, navigation, settings, and all.

3

Configure Your Branding

Inside the plugin dashboard, go to Settings (gear icon in the sidebar). The Branding tab is the first tab. Fill in your company details:

FieldWhat It ControlsDefault
Company NamePage titles, sidebar, login page, footer, emailsClient Portal
Contact EmailEmail “From” header, Reply-ToYour WP admin email
TaglineLogin page subtitle, email footerYour project hub
Persona NameAI assistant’s name everywhereMr. O
Persona GreetingChat welcome message, questionnaire introHey there!
Persona AvatarAvatar in chat bubbles, questionnaire, status cardsBundled default
Support EmailError messages, portal contact linkYour WP admin email
Admin NameDashboard greeting, project assignment, AI promptsAdmin
CurrencyAll financial displays (invoices, payments)CAD
Invoice PrefixDocument numbering (e.g. “INV-001”)INV-

Click Save Branding. Every customer-facing screen updates immediately.

4

Add a Client

Go to Clients in the sidebar, click New Client, fill in their details, and save.

5

Send Them a Portal Link

Open the client’s record and click Send Magic Link. They’ll receive a branded email with a one-click login link. No passwords needed.

That’s it. Your branded client portal is live.

2. Configuring Your Branding

Where Branding Appears

Your branding flows to every customer-facing surface:

  • Login page – company name, tagline, persona greeting
  • Admin dashboard – sidebar header, “Welcome back, {admin name}” greeting
  • Client portal – header, footer, copyright line
  • AI chat – persona name in header, avatar in bubbles, name in disclaimers
  • Emails – From name, subject line, footer
  • Invoices & documents – prefix, company name
  • Error messages – support email

Persona Avatar

The default avatar is a bundled SVG. To use your own:

  1. Upload your image to WordPress Media Library
  2. Copy the URL
  3. Paste it into the Persona Avatar field in Settings > Branding

Recommended: square image, at least 100x100px. PNG or SVG work best.

Currency

The currency code controls display formatting:

  • CAD displays as $1,234.56 CAD
  • USD displays as $1,234.56 USD
  • EUR displays as 1,234.56 EUR

Fresh Install Defaults

A fresh install with no branding configured shows completely generic text. No reference to any specific company. Just “Client Portal”, “Mr. O”, and your WordPress admin email.

3. Adding Your First Client

Via the Dashboard

  1. Click Clients in the plugin sidebar
  2. Click New Client
  3. Fill in: name, email, business name, industry, status
  4. Click Save

Via REST API

POST /wp-json/aio-cp/v1/clients
Content-Type: application/json

{
    "client_name": "Jane Smith",
    "client_email": "jane@example.com",
    "business_name": "Smith Co"
}

5. What Your Client Sees

When a client clicks their magic link, they land on a branded portal with:

  • Project status – progress bars, task completion, milestones
  • AI assistant – chat with your configured persona (name, avatar, greeting)
  • Documents – download SOWs, invoices, reports
  • Guided questionnaire – onboarding questions with conversational AI flow
  • Contact info – your support email

The portal runs on its own standalone page (bypasses your WordPress theme) at /portal/{token}. Clients never see your WordPress admin.

6. Connecting Services

These are optional and configured in Settings within the plugin dashboard.

AI Assistant (Settings > AI Assistant)

  • Supports Anthropic (Claude), OpenAI (GPT), and Google (Gemini)
  • Enter your API key for any provider
  • The system prompt auto-generates from your branding config
  • You can customize the system prompt to add personality, knowledge, or instructions

Payments (Settings > Payments)

  • Enter your Stripe publishable key and secret key
  • Clients can pay invoices directly from their portal

Document Generation (Settings > Webhooks)

  • SOWs, invoices, reports, and blueprints are generated via n8n webhooks
  • Enter your n8n webhook URLs to enable “Generate Document” buttons
  • Without webhooks configured, document generation buttons won’t appear

7. What’s Configurable vs Fixed

Changes Per Deployment (via Settings)

  • All 10 branding fields
  • AI provider, API key, and system prompt
  • Stripe keys
  • Webhook URLs
  • Rate limits (admin/portal AI usage caps)

Fixed Across All Deployments

These internal identifiers never change and are invisible to your clients:

  • Plugin folder: aio-client-portal/
  • REST namespace: aio-cp/v1
  • Database tables: wp_aio_*
  • PHP class prefixes: AIO_CP_*
  • wp_option prefixes: aio_cp_*

Not Yet Configurable (Coming Soon)

  • Service packages and pricing (currently preset)
  • Color theme / CSS variables
  • Logo and favicon (currently text-based)

8. REST API Reference

All endpoints are under /wp-json/aio-cp/v1/. Admin endpoints require WordPress authentication (cookie + nonce, or application password).

Branding

MethodEndpointAuthDescription
GET/settings/brandingAdminGet all branding values
PUT/settings/brandingAdminUpdate branding (JSON body)

Clients

MethodEndpointAuthDescription
GET/clientsAdminList all clients
POST/clientsAdminCreate client
GET/clients/{id}AdminGet client details
PUT/clients/{id}AdminUpdate client
DELETE/clients/{id}AdminDelete client
POST/clients/{id}/magic-linkAdminGenerate magic link (send_email: true to email)

Portal (Token-Authenticated)

MethodEndpointAuthDescription
GET/portal/{token}/statusTokenClient project status
GET/portal/{token}/questionnaireTokenGet questionnaire
PUT/portal/{token}/questionnaireTokenSubmit answers
POST/portal/{token}/chatTokenAI chat (SSE stream)

Settings

MethodEndpointAuthDescription
GET/PUT/settingsAdminWebhook settings
GET/PUT/ai/settingsAdminAI configuration
GET/PUT/settings/stripeAdminStripe configuration
GET/dashboardAdminStats (clients, revenue, projects)

9. Troubleshooting

I can’t find the plugin dashboard

Look for your company name (or “Client Portal” on fresh install) in the WordPress admin sidebar. It has an egg-shaped icon and sits around position 26 in the menu – typically between Comments and Appearance.

Plugin won’t activate

  • PHP 7.4+ required (tested on 8.2)
  • Check PHP error logs for fatal errors
  • Ensure the zip extracted correctly: wp-content/plugins/aio-client-portal/aio-client-portal.php must exist

Portal page shows 404

Go to Settings > Permalinks in WordPress admin and click Save Changes (without changing anything). This flushes rewrite rules. Also check for slug conflicts with existing pages named “portal” or “client-portal”.

REST endpoints return “No route found”

Same fix: flush permalinks. Then verify the plugin is active.

Branding changes not showing

  • Verify your values saved: check Settings > Branding shows correct values
  • Hard refresh the page (Ctrl+Shift+R)
  • Clear any hosting-level or plugin caches

Magic link email not arriving

  • Confirm the client has an email address set on their record
  • Verify your mail setup – install WP Mail SMTP if you haven’t
  • Check spam/junk folders
  • If using the REST API, make sure you’re passing "send_email": true

AI chat says “no API key”

Go to Settings > AI Assistant inside the plugin dashboard, enter your API key for at least one provider (Anthropic, OpenAI, or Gemini), and save.

WordPress MCP tools can’t PUT to branding endpoint

The WordPress MCP plugin (v0.2.5) doesn’t support HTTP PUT. Workarounds:

  • Use the Settings > Branding tab in the dashboard (recommended)
  • Set values via update_option() in a PHP snippet
  • Use WP-CLI: wp option update aio_cp_brand_company_name "YourBrand"

10. Developer Reference

This section is for developers modifying the plugin source code. Skip it if you’re just deploying.

Architecture

wp_options (aio_cp_brand_*)
        |
        v
AIO_CP_Config (PHP static class)
        |
        +--> PHP classes (emails, AI prompts, invoices, DB defaults)
        |
        +--> window.aioCPConfig (JSON injected into React shell)
                    |
                    v
              React components (Layout, Login, Portal, Chat, Settings)

Key Classes

ClassFilePurpose
AIO_CP_Configclass-aio-cp-config.phpBranding config (NEW v1.7.0)
AIO_CP_Authclass-aio-cp-auth.phpMagic link generation, email
AIO_CP_AIclass-aio-cp-ai.phpAI chat, system prompts
AIO_CP_RESTclass-aio-cp-rest.phpAll REST API endpoints
AIO_CP_Databaseclass-aio-cp-database.phpSchema creation, CRUD
AIO_CP_Paymentsclass-aio-cp-payments.phpStripe checkout sessions
AIO_CP_Docsclass-aio-cp-docs.phpDocument generation

Stack

  • Backend: PHP 7.4+ (WordPress plugin)
  • Frontend: React 19 + Tailwind CSS 4 + Vite
  • AI: Multi-provider (Anthropic, OpenAI, Gemini) with SSE streaming
  • Auth: Magic link tokens (passwordless)
  • Payments: Stripe via wp_remote_post (no SDK)
  • Documents: n8n webhook pipeline

Setting Branding via wp_options

update_option('aio_cp_brand_company_name', 'YourBrand');
update_option('aio_cp_brand_contact_email', 'hello@yourbrand.com');
update_option('aio_cp_brand_tagline', 'Your project hub');
update_option('aio_cp_brand_persona_name', 'Buddy');
update_option('aio_cp_brand_persona_greeting', 'Hey there!');
update_option('aio_cp_brand_persona_avatar', 'https://yourbrand.com/avatar.png');
update_option('aio_cp_brand_support_email', 'support@yourbrand.com');
update_option('aio_cp_brand_admin_name', 'Your Name');
update_option('aio_cp_brand_currency', 'USD');
update_option('aio_cp_brand_invoice_prefix', 'INV-');

Build Notes

  • React source is in src/ (not included in distribution zip)
  • Build requires Node.js 18+, npm, Python 3
  • Never use PowerShell Compress-Archive – creates backslash paths that break on Linux
  • Unparenthesized nested ternaries fatal in PHP 8.0+ – must wrap
AIO Client Portal | White-Label Deployment Manual v1.1 | April 2026
Ai Omelette | aiomelette.com
0) bar.style.width = (window.scrollY / h * 100) + ‘%’; }); } })();” style=”display:none”>
Scroll to Top