PortalWP Documentation
Everything you need to install, configure, and get the most out of PortalWP — even if you've never installed a WordPress plugin before.
Get Your Client Portal Live in 5 Minutes
Follow these 3 steps in order. Each one takes less than 2 minutes. You'll have a working client portal by the end.
Install the Plugin
Download your ZIP file and upload it in WordPress Admin → Plugins → Add New → Upload Plugin.
Read install guide →Run the Setup Wizard
After activation you're automatically redirected to the 5-step wizard. It creates your portal page and configures everything.
See wizard steps →Invite Your First Client
Go to PortalWP → Clients → Add New. Enter the client's name and email. They get a magic login link automatically.
Add a client →System Requirements
Before installing PortalWP, make sure your hosting meets these requirements. Most modern shared hosting providers (Hostinger, SiteGround, Kinsta, WP Engine, Cloudways) already do.
| Requirement | Minimum | Recommended |
|---|---|---|
| WordPress | 6.0 | Latest version |
| PHP | 8.1 | 8.3 |
| MySQL / MariaDB | 5.7 / 10.3 | MySQL 8.0+ |
| PHP Memory Limit | 128 MB | 256 MB (required for PDF generation) |
| HTTPS / SSL | Required | Required — needed for PWA & payments |
| WordPress REST API | Must be enabled | Do not block /wp-json/ in .htaccess |
php_value memory_limit 256M to your .htaccess file, or contact your hosting provider.Installing PortalWP
PortalWP is a standard WordPress plugin ZIP file. There are two ways to install it — choose whichever feels more comfortable.
Method 1 — WP Admin Upload (Recommended for beginners)
Download the ZIP file
After purchase, download PortalWP.zip from the link in your confirmation email, or log in to your account dashboard to download it.
Go to Plugins → Add New Plugin
Log in to your WordPress admin. In the left sidebar click Plugins, then click the Add New Plugin button at the top of the page.
Click "Upload Plugin"
Near the top of the Add Plugins page, click the Upload Plugin button. A file upload area will appear.
Select your ZIP and install
Click Choose File, select the PortalWP.zip you downloaded, then click Install Now. WordPress will upload and extract the plugin automatically.
Click "Activate Plugin"
Once installation completes, click Activate Plugin. You will be automatically redirected to the PortalWP Setup Wizard.
Method 2 — Manual FTP/SFTP Installation
Use this method if the WP Admin upload fails (usually due to a server file size limit), or if you prefer direct server access.
Unzip the file on your computer
Extract PortalWP.zip. You'll get a folder named PortalWP containing all plugin files.
Connect via FTP or SFTP
Use FileZilla (free) or your preferred FTP client. Connect to your server using the credentials found in your hosting control panel (usually under FTP Accounts).
Upload to wp-content/plugins/
Navigate to /public_html/wp-content/plugins/ on your server. Upload the entire PortalWP folder here — the folder itself, not just its contents.
Activate in WP Admin
Go to WP Admin → Plugins. Find PortalWP in the list and click Activate. The setup wizard launches automatically.
After Activation — The Wizard Redirect
When you activate PortalWP for the first time, it automatically creates your portal page, sets up 8 database tables, and redirects you to the Setup Wizard at /wp-admin/?page=portalwp-wizard.
Setup Wizard — 5 Steps
The Setup Wizard runs automatically after activation. It takes about 3 minutes to complete. Here's what each step does:
Portal Name & URL Slug
Set your portal's name (shown in email subjects and the browser tab) and the URL slug. The default slug is portal, making your portal available at yoursite.com/portal. You can change it to anything — client-area, dashboard, etc.
Logo & Branding
Upload your agency logo and choose an accent color. These appear in the client portal header and in all emails sent to clients. You can change these any time in Settings → Branding.
Payment Gateway
Connect Razorpay (for Indian clients) or Stripe (for global clients), or skip this step and set up payments later. Both gateways can be active simultaneously.
Invite Your First Client
Optionally add your first client right from the wizard — just enter their name and email. They'll receive an invitation email with a magic login link. You can skip this and add clients later.
Done!
The wizard summarises what was set up. Click Go to Dashboard to start using PortalWP. Your portal page is live and ready for clients.
Troubleshooting Installation
White screen or 500 error after activation
- Check your PHP version — PortalWP requires PHP 8.1+. Go to Tools → Site Health → Info → Server.
- Increase the PHP memory limit — add
php_value memory_limit 256Mto your.htaccessfile. - Temporarily deactivate other plugins to check for conflicts, then re-activate them one by one.
- Enable WordPress debug mode: add
define('WP_DEBUG', true);towp-config.phpand check the debug log file.
Portal page returns 404
- Go to Settings → Permalinks → Save Changes to flush WordPress rewrite rules.
- Make sure a page exists in Pages that uses the PortalWP template or has the
[portalwp]shortcode assigned.
REST API errors (401 or 403)
- Make sure
/wp-json/is not blocked in your.htaccessor by a security plugin. - Test your REST API is accessible by visiting
yoursite.com/wp-json/in a browser. - If using Wordfence or iThemes Security, whitelist the PortalWP REST namespace:
portalwp/v1.
Adding Your First Client
Once your portal is set up, adding a client takes 30 seconds. The client gets an email with a magic login link — no password needed.
Go to PortalWP → Clients → Add New
In your WordPress admin sidebar, click PortalWP, then Clients, then the Add New button at the top.
Enter the client's name and email
Fill in their full name and email address. The email address must be unique — each client has one portal account.
Click "Save & Send Invitation"
PortalWP creates the client account and sends them an invitation email containing a secure magic login link. They click it and are instantly logged into their portal — no password registration required.
Client Detail Page
Click any client's name in the Clients list to open their detail page. Here you'll find all their data organized in tabs:
- Overview — Activity summary, last login, storage used.
- Files — Upload files, create folders, request files from the client.
- Invoices — Create and manage invoices for this client.
- Contracts — Create and send contracts for e-signature.
- Projects — Create and manage Kanban projects.
- Messages — View and reply to conversations with this client.
Editing & Deleting Clients
From the Clients list, use the action menu (⋯) next to any client to Edit their details or Delete their account. Deleting a client removes all their associated data — files, invoices, contracts, messages. This action cannot be undone.
↑ Back to topAdmin Onboarding Checklist
When you first log in to the PortalWP admin dashboard, you'll see a 7-step onboarding checklist in the top-right area. It guides you through the key setup tasks:
- Set your branding (logo + accent color)
- Configure your portal URL slug
- Connect a payment gateway
- Add your first client
- Upload a file to a client
- Create an invoice
- Send a message to a client
PortalWP auto-detects which steps you've already completed and marks them as done. The checklist shows a progress bar so you always know how close you are to a fully configured portal. You can collapse or dismiss it once complete.
↑ Back to topSettings — General
Go to WP Admin → PortalWP → Settings → General to configure the core portal options.
| Setting | What it does |
|---|---|
| Portal URL Slug | The URL path for your client portal. Default: portal → yoursite.com/portal. After changing this, go to Settings → Permalinks → Save Changes. |
| Portal Title | Shown in browser tabs and email subjects. Default: your site name. |
| Welcome Message | Displayed on the client's dashboard home. Supports HTML. Use {client_name} as a placeholder. Default: "Welcome back, {client_name}." |
| Default Currency | The default invoice currency. Options: INR, USD, EUR, GBP, AUD, CAD, SGD. Individual invoices can use a different currency. |
| Invoice Prefix | Added before the auto-incremented invoice number. Example: INV- → invoices numbered INV-001, INV-002… |
| Max Upload Size (MB) | Maximum size per file upload. Default: 50 MB. Cannot exceed your PHP upload_max_filesize. |
.htaccess:php_value upload_max_filesize 100Mphp_value post_max_size 100MSettings — Branding
Go to PortalWP → Settings → Branding. These settings control how the portal looks to your clients.
| Setting | Details |
|---|---|
| Logo | Upload via WordPress Media Library or paste a URL. Recommended size: 200×50 px PNG or SVG. Appears in the portal header and client emails. |
| Accent Color | The primary color for buttons, links, and highlights throughout the portal. Enter a hex code (e.g., #6c63ff). Default is PortalWP purple. |
| Show Powered-by Badge | Toggle the "Powered by PortalWP" text in the portal footer. Disable this on ✦ Pro to fully white-label the portal for your brand. |
Settings — Email & SMTP
Go to PortalWP → Settings → Email. PortalWP has its own built-in SMTP configuration — you don't need a separate email plugin.
Why configure SMTP?
By default, WordPress sends emails using your server's mail function, which has poor deliverability (emails often end up in spam). Configuring SMTP sends emails through a proper mail provider, ensuring clients actually receive them.
Supported Providers
PortalWP includes preset configurations for the most common providers. Select your provider and the host/port fields are filled automatically:
- Gmail — Uses smtp.gmail.com. Requires a Google App Password (not your regular Gmail password).
- Outlook / Hotmail — Uses smtp.office365.com.
- Yahoo Mail — Uses smtp.mail.yahoo.com. Requires an App Password.
- Zoho Mail — Uses smtp.zoho.com.
- Hostinger — Uses smtp.hostinger.com. Great if your site is hosted on Hostinger.
- Custom SMTP — Enter your own host, port, and security settings for any other provider (SendGrid, Mailgun, Amazon SES, etc.).
SMTP Settings
| Field | Description |
|---|---|
| SMTP Host | Your mail server hostname (auto-filled for preset providers). |
| SMTP Port | Common ports: 465 (SSL), 587 (TLS), 25 (none). Use 587/TLS for most providers. |
| Security | TLS, SSL, or None. Use TLS unless your provider requires otherwise. |
| Email / Username | The email address you send from (e.g., hello@youragency.com). |
| Password / App Password | Your email password. For Gmail and Yahoo, you must generate an App Password — a regular password won't work with SMTP. |
Testing Your Email
After saving your settings, click the Save & Test Email button. PortalWP will send a test email to your WordPress admin address. If you don't receive it within 2 minutes, check the credentials and try again.
Email Notification Types
PortalWP sends emails for these events (each can be individually enabled or disabled):
- New client invitation (magic login link)
- Invoice created and sent to client
- Payment received confirmation
- Contract ready to sign / signed by client
- New file uploaded
- New message received
- Project status changed
- Invoice overdue reminder
Settings — Payments Overview
Go to PortalWP → Settings → Payments. You can enable Razorpay, Stripe, or both simultaneously.
PortalWP automatically uses the right gateway based on invoice currency: INR invoices → Razorpay, USD/EUR/other invoices → Stripe. This means you can serve both Indian and international clients seamlessly.
For detailed setup instructions, see:
- Razorpay Setup Guide — UPI, NetBanking, Indian cards
- Stripe Setup Guide — Global cards, Apple Pay, Google Pay
- Webhook Configuration — Critical for reliable payment status updates
Settings — AI Assistant ✦ Pro
Go to PortalWP → Settings → AI Assistant. The AI assistant helps you draft invoices, contracts, and messages in seconds. It is a Pro plan feature and requires your own API key from your chosen provider.
Supported AI Providers
| Provider | Available Models | Best For |
|---|---|---|
| Google Gemini | Gemini 2.5 Flash, 2.5 Flash Lite, 2.5 Pro | Fast, cost-effective. Recommended for most users. |
| OpenAI (GPT) | GPT-5.4 nano, GPT-5.4, GPT-5.5, o3 | Highest quality responses. |
| Anthropic Claude | Claude 3.5 Haiku, Claude 3.5 Sonnet | Best for long contract drafting. |
Configuration
Choose your AI provider
Select from Google Gemini, OpenAI, or Anthropic Claude in the Provider dropdown.
Select a model
The model list updates based on your provider choice. For beginners, Gemini 2.5 Flash is recommended — it's fast and very affordable.
Enter your API key
Paste your API key from the provider's dashboard. Keys are stored securely in your WordPress database and never sent to PortalWP servers.
Save Settings
Click Save. The AI assist button (✨) will now appear inside invoice, contract, and message editors.
Settings — License Management
Go to PortalWP → Settings → License.
Activating Your License
Copy your license key
Your license key was sent in the purchase confirmation email. It looks like: PWPRO-XXXX-XXXX-XXXX-XXXX.
Paste it and click Activate
Paste the key into the License Key field and click Activate License. The page will show your plan name, expiry date, and activated site URL.
The License tab also shows: your current plan (Starter / Agency / Pro), how many site installations your plan allows, the license expiry date, and a button to deactivate the license (needed if you want to move it to a different site).
Secure File Sharing
Share sensitive deliverables — designs, proposals, reports, source files — with clients securely. Files are never accessible via a direct URL, even if someone guesses the path.
How File Security Works
Files are stored in wp-content/uploads/portalwp/[client-id]/ with UUID filenames (like a1b2c3d4-e5f6-....pdf) — impossible to guess. The directory has an .htaccess that blocks all direct HTTP access. Files are served exclusively through the PortalWP REST API, which verifies the client's JWT token before streaming any file.
Uploading Files (from Admin)
Go to the client's Files tab
In PortalWP → Clients, click the client's name, then click the Files tab.
Upload files
Click Upload File or drag and drop files directly into the upload zone. Multiple files can be uploaded at once.
Add optional details
Optionally add a folder name (to organise files) and a description or note visible to the client.
Click Upload
The file is stored securely and the client receives an email notification.
Client Experience
Clients see their files in a clean grid or list view showing file name, size, upload date, and a download button. They can filter by folder and search by filename. Downloads are authenticated — sharing the download URL with someone else won't work.
File Requests
On Agency and Pro plans, you can request files from clients. Go to a client's Files tab → Request File. Enter what you need and a description. The client sees the pending request on their dashboard and can upload directly from the portal. You receive an email notification when they upload.
↑ Back to topInvoices & PDF Generation
Create professional invoices with line items, tax, and automatic totals. PortalWP generates branded PDFs using the mPDF library — no external service required.
Creating an Invoice
Go to PortalWP → Invoices → Add New
Select the client and set details
Choose the client from the dropdown, set the currency (INR or USD), due date, and invoice prefix.
Add line items
Each line has: description, quantity, unit price, and an optional tax rate. PortalWP auto-calculates subtotal, tax, and total as you type.
Add notes (optional)
Add payment instructions or any notes for the client in the Notes field at the bottom.
Save or Send
Click Save Draft to save without sending, or Send to Client to send immediately. The client receives an email with a link to view and pay the invoice.
PDF Generation
When an invoice is sent or viewed, PortalWP automatically generates a branded PDF using mPDF. The PDF includes your logo, business name, client details, invoice number, all line items, totals, payment status, and due date. The PDF is generated on demand and served securely.
Invoice Statuses
| Status | Meaning |
|---|---|
| Draft | Saved but not yet visible to the client |
| Sent | Client can view it; payment pending |
| Partially Paid | Client made a partial payment |
| Paid | Full payment received and verified |
| Overdue | Past due date and unpaid |
| Void | Cancelled invoice |
Recurring Invoices ✦ Pro
On the Pro plan, mark any invoice as recurring. Choose a frequency (weekly, monthly, quarterly, or yearly) and a start date. PortalWP automatically creates and sends the next invoice at the scheduled time. The client receives an email with the invoice link and payment button. Overdue checks and reminders run daily in the background automatically.
↑ Back to topContracts & E-Signatures
Create, send, and collect legally binding e-signatures on contracts entirely within the client portal. No third-party service (DocuSign, PandaDoc, etc.) required. Available on Agency and Pro plans.
Creating a Contract
Go to PortalWP → Contracts → Add New
Enter the title and select the client
Write or paste the contract body
Use the rich text editor. On Pro, click the ✨ AI Draft button and describe what you need in plain English — the AI writes the full contract for you in seconds.
Add signature fields
Click Insert Signature Field to add one or more signature blocks. You can have multiple signers (e.g., client + co-founder).
Set an optional expiry date
After this date, the contract can no longer be signed.
Click "Send for Signature"
The client receives an email with a link to review and sign the contract.
How Clients Sign
The client opens the portal, reads the contract in full, then chooses one of three signing methods:
- Draw — Use finger on mobile or mouse on desktop to draw their signature.
- Type — Type their full name, rendered in a cursive signature font.
- Upload — Upload an image of their handwritten signature.
After signing, PortalWP records: signature image, full name, timestamp (UTC), IP address, and browser user agent. A signed PDF is automatically generated, emailed to both parties, and available for download.
Legal Validity
E-signatures created in PortalWP are legally valid in India under the Information Technology Act, 2000 (Section 5), and in the EU under eIDAS Article 25 as a Simple Electronic Signature. The audit trail provides sufficient evidence for most commercial contracts.
Project Kanban Board
Give clients full visibility into project progress with a Kanban board. Eliminates "what's the status?" emails entirely.
Creating a Project
Go to PortalWP → Projects → Add New
Enter project name, assign to client, set target date
Add tasks
Each task (Kanban card) has a title, description, assignee (your team member), and starting status.
Click Publish
The project becomes visible to the client. They can see all tasks and the overall progress percentage.
Kanban Columns
Tasks move through 4 columns. Drag and drop tasks between columns in the admin. Clients see the board update in real-time (auto-refreshes every 30 seconds):
- 📋 Not Started — Work hasn't begun yet.
- 🔄 In Progress — Actively being worked on.
- 👀 In Review — Ready for client feedback. Client is notified by email.
- ✅ Completed — Task is done and approved.
Client Approval Workflow
When you move a task to In Review, the client receives an email notification. They can view the task, leave a comment, then click Approve (moves to Completed) or Request Changes (moves back to In Progress with their comment). You receive an email immediately when they respond.
↑ Back to topAsync Messaging & Read Receipts
Replace scattered email chains and WhatsApp threads with structured, per-client conversations inside the portal. Available on Agency and Pro plans.
How Messaging Works
Each client has a Messages inbox in the portal. Conversations are threaded — each thread is tied to a topic or project. Both you and the client can start new threads or reply in existing ones.
- Rich text — Bold, italic, lists, and links in messages.
- File attachments — Attach files directly in messages. Served securely like all portal files.
- Read receipts — You can see when the client has read your message (blue checkmark icon). Clients can also see when you've read theirs.
- Unread badge — An unread count badge appears on the Messages nav item when new messages arrive.
- Email notifications — Both parties receive an email when a new message is received (configurable in Settings → Email).
Admin Inbox
In WP Admin, go to PortalWP → Messages to see all conversations across all clients in one place. Filter by client or unread status. Reply directly from the admin panel — no need to navigate to each client's individual profile.
↑ Back to topPWA — Progressive Web App
PortalWP includes full PWA support out of the box. Clients can install the portal to their phone's home screen and use it like a native app — no App Store required.
What PWA Provides
- 📱 Add to Home Screen — Clients are prompted after 2 visits. On Android an "Add to Home Screen" banner appears automatically. On iOS: Tap Share → Add to Home Screen.
- 🖥️ Full-screen launch — The portal opens without a browser address bar, looking and feeling like a native app.
- ⚡ Offline support — Static assets (CSS, JS, images) are cached by a service worker. Clients can view previously loaded pages even without internet.
- 🔔 Push notifications ✦ Pro — Clients receive push notifications on their phone/desktop for new invoices, messages, and project updates.
- 🎨 Your icon on their phone — The portal uses your logo as the home screen icon.
PWA Setup Requirements
- Your site must have HTTPS (SSL certificate). PWA will not work on
http://. - Upload a 512×512 PNG icon in PortalWP → Settings → Branding → App Icon. This is the icon that appears on the client's home screen.
- The portal page must be publicly accessible (not password-protected at the server level).
Analytics Dashboard ✦ Pro
Go to PortalWP → Analytics to see a full overview of your agency's portal activity. Available on the Pro plan.
What You Can See
| Section | What it shows |
|---|---|
| KPI Cards | Total revenue collected, average payment days, top client by revenue, total file uploads |
| Monthly Revenue Chart | Bar chart of revenue by month — helps spot trends and seasonal patterns |
| Invoice Status Chart | Donut chart showing the split of Draft / Sent / Paid / Overdue / Void invoices |
| Portal Login Activity | Line chart of client logins over the last 30 days |
| File Upload Activity | Line chart of file uploads over the last 30 days |
| Top Clients Table | Ranked list of clients by total revenue paid |
AI Assistant Usage ✦ Pro
Once you've configured your AI provider in Settings → AI Assistant, a ✨ AI Assist button appears in the invoice, contract, and message editors.
What the AI Can Do
- Draft an invoice description — Describe the project scope and the AI writes professional line item descriptions.
- Draft a contract — Describe your engagement in plain English. The AI writes a full contract draft (scope, payment terms, IP rights, etc.) ready for your review.
- Draft a client message — Describe what you want to communicate and the AI writes a professional, concise message.
How to Use It
Open the editor
Open a new invoice, contract, or message form.
Click ✨ AI Assist
A text input appears asking you to describe what you need.
Describe your request
Type in plain English, e.g., "Write a web design contract for a 5-page WordPress website, $2000, 30-day deadline, 50% upfront payment."
Review and edit
The AI-generated content fills the editor. Always review and adjust before sending to a client.
Razorpay Setup (UPI + Indian Cards)
Razorpay lets clients pay via UPI (PhonePe, Google Pay, Paytm), NetBanking, Indian debit/credit cards, and wallets. Available on Agency and Pro plans.
Step 1 — Create a Razorpay Account
Go to razorpay.com → Sign Up. Test mode works immediately. For live payments, you'll need to complete KYC with your business documents (requires a registered Indian business).
Step 2 — Get Your API Keys
Log in to Razorpay Dashboard
Go to Settings → API Keys.
Generate Test Key
Click Generate Test Key. You'll see a Key ID (starts with rzp_test_) and a Key Secret. Copy both — you won't be able to see the secret again.
Step 3 — Enter Keys in PortalWP
Go to PortalWP → Settings → Payments → Razorpay
Paste your Key ID and Key Secret
Toggle Enable Razorpay on, select INR, click Save
Going Live
Once KYC is approved, generate Live Keys in Razorpay (starts with rzp_live_) and replace the test keys in PortalWP settings.
Stripe Setup (Global Payments)
Stripe accepts payments from clients worldwide — Visa, Mastercard, Amex, Apple Pay, Google Pay, and 135+ currencies. Available on Agency and Pro plans.
Step 1 — Create a Stripe Account
Go to stripe.com → Create account. Stripe supports businesses in 46+ countries. Test mode works immediately without any KYC.
Step 2 — Get API Keys
In Stripe Dashboard → Developers → API Keys
Make sure the Test Mode toggle (top right) is ON.
Copy both keys
Copy your Publishable key (starts with pk_test_) and Secret key (starts with sk_test_).
Step 3 — Enter Keys in PortalWP
Go to PortalWP → Settings → Payments → Stripe
Paste your Publishable Key and Secret Key
Toggle Enable Stripe on, select default currency, click Save
Webhook Configuration
Webhooks ensure your invoice payment status updates even when clients close the browser before the redirect completes. This is especially important for UPI payments where the redirect sometimes fails. Webhooks are strongly recommended — do not skip this step.
Your Webhook URLs
https://yoursite.com/wp-json/portalwp/v1/webhooks/stripe
# Replace yoursite.com with your actual domain
Setting Up Razorpay Webhook
Razorpay Dashboard → Settings → Webhooks → Add New Webhook
Paste the Razorpay webhook URL
Enter the PortalWP Razorpay webhook URL from above.
Set a Webhook Secret
Enter any random string as a secret (e.g., generate one at generate-secret.vercel.app). Copy it.
Enable events and create
Enable payment.captured and payment.failed events. Click Create Webhook.
Paste secret in PortalWP
Go to PortalWP → Settings → Payments → Razorpay and paste the Webhook Secret. Save.
Setting Up Stripe Webhook
Stripe Dashboard → Developers → Webhooks → Add endpoint
Paste the Stripe webhook URL and select events
Enter the PortalWP Stripe webhook URL. Under "Events to listen to" add: payment_intent.succeeded and payment_intent.payment_failed.
Copy the Signing Secret
After creating the endpoint, copy the Signing Secret (starts with whsec_).
Paste in PortalWP
Go to PortalWP → Settings → Payments → Stripe and paste the Signing Secret. Save.
Testing Payments in Sandbox
Always test payments in sandbox/test mode before going live. Use the test credentials below — no real money is transferred.
Razorpay Test Cards
| Card Number | Expiry | CVV | Result |
|---|---|---|---|
| 4111 1111 1111 1111 | Any future date | Any 3 digits | ✅ Success |
| 5267 3181 8797 5449 | Any future date | Any 3 digits | ✅ Success (Mastercard) |
| 4000 0000 0000 0002 | Any future date | Any 3 digits | ❌ Failure |
UPI Test IDs: Use success@razorpay to simulate a successful payment, failure@razorpay to simulate a failure.
Stripe Test Cards
| Card Number | Expiry | CVC | Result |
|---|---|---|---|
| 4242 4242 4242 4242 | Any future date | Any 3 digits | ✅ Success |
| 4000 0000 0000 9995 | Any future date | Any 3 digits | ❌ Declined (insufficient funds) |
| 4000 0025 0000 3155 | Any future date | Any 3 digits | 🔐 3D Secure required |
Go-Live Checklist
- ✅ Test payment completes and invoice status updates to "Paid"
- ✅ Client receives payment confirmation email
- ✅ You receive payment notification email
- ✅ Webhook fires and appears in Razorpay/Stripe webhook logs
- ✅ Failed payment shows a proper error message in the portal
- ✅ Switch API keys from test to live in PortalWP settings
Client Login & Magic Links
PortalWP uses passwordless magic link authentication. Clients never set a password — they request a login link and are instantly authenticated. This is simpler and more secure than passwords.
How Clients Log In
Client visits the portal URL
e.g., yoursite.com/portal. They see a login form asking for their email address.
Client enters their email and clicks "Send Magic Link"
PortalWP sends an email containing a secure one-time login link.
Client clicks the link in their email
They are instantly logged into their portal dashboard. The link works once and expires after 60 minutes (configurable in Settings → General → Magic Link Expiry).
Session Duration
Once logged in, the client stays logged in for 7 days by default (configurable in Settings → General → Session Duration). They don't need to log in again unless they clear their browser data or the session expires.
Portal Tour — Client Welcome Walkthrough
The first time a client logs into the portal, they see a 3-step welcome tour that introduces them to the main sections. The tour uses a modal overlay with progress dots, a Skip button, and a Next button.
Tour Steps
- Step 1 — Dashboard: Overview of the portal and what they can find here.
- Step 2 — Files: How to download files shared by your team.
- Step 3 — Invoices: How to view and pay invoices.
The tour is shown only once (tracked in the client's browser localStorage). Clients can skip it at any time. After the tour, they land on their dashboard and can navigate freely.
↑ Back to topUniversal Search (⌘K)
Clients can press ⌘K (Mac) or Ctrl+K (Windows/Linux) anywhere in the portal to open the universal search modal. They can also click the search icon in the portal header.
What Gets Searched
- 📎 Files — Search by filename
- 🧾 Invoices — Search by invoice number or amount
- ✍️ Contracts — Search by contract title
- 📊 Projects — Search by project name
Search results appear instantly as the client types (debounced to avoid excessive requests). Clicking a result navigates directly to that item. The search only shows the logged-in client's own data — no cross-client data is ever exposed.
↑ Back to topDark Mode
The client portal supports both light and dark themes. Clients can toggle dark mode using the 🌙 / ☀️ button in the portal header. Their preference is saved automatically and remembered on their next visit.
Dark mode works with your custom accent color — PortalWP automatically adjusts contrast ratios to ensure readability in both themes.
To enable dark mode support for clients, make sure it is not disabled in PortalWP → Settings → Branding (it is enabled by default).
↑ Back to topClient Profile Page
Clients can access their Profile page from the portal navigation. The Profile page lets clients view and manage their own account details.
- View their name and email address on file.
- See their portal activity (last login, total files downloaded, invoices paid).
- Manage notification preferences (which email notifications they want to receive).
Clients cannot change their own email address from the portal — this must be done by you in the admin under PortalWP → Clients → [Client Name] → Edit.
↑ Back to topNPS Feedback Survey
PortalWP includes a built-in Net Promoter Score (NPS) survey to collect client satisfaction feedback automatically. The survey appears as a subtle slide-up banner at the bottom of the portal after a client has been using it for a while.
How It Works
- The NPS survey asks: "How likely are you to recommend [your agency] to a friend or colleague?" on a 0–10 scale.
- After rating, clients can optionally leave a comment.
- Survey responses are stored in your WordPress database. You can view them in the PortalWP admin.
- The survey appears only once per client — it won't keep reappearing after they respond.
Troubleshooting Common Issues
Clients not receiving emails
- Check spam/junk folders first.
- Configure SMTP in PortalWP → Settings → Email and use the Send Test Email button to verify it works.
- For Gmail: use an App Password, not your regular Gmail password.
- Make sure the "From" email address is from the same domain as your website for best deliverability.
PDF generation fails or times out
- Increase PHP memory limit to at least 256 MB: add
php_value memory_limit 256Mto.htaccess. - Check your PHP max execution time: add
php_value max_execution_time 120to.htaccess.
Payment status not updating after payment
- Verify your webhook is configured correctly — see Webhook Configuration.
- Check the webhook logs in your Razorpay/Stripe dashboard for delivery failures.
- Make sure
/wp-json/is not blocked by your security plugin or firewall.
PWA not prompting "Add to Home Screen"
- Your site must be served over HTTPS.
- Upload a 512×512 app icon in Settings → Branding → App Icon.
- The prompt appears after the client's second visit (browser requirement).
- On iOS, the prompt is manual — clients must tap Share → Add to Home Screen.
Portal URL returning 404
- Go to Settings → Permalinks → Save Changes to flush rewrite rules.
- Check that a portal page exists in Pages with the PortalWP template assigned.
REST API returning 401 or 403
- Make sure
/wp-json/is not blocked in.htaccessor by a security plugin. - If using Wordfence or iThemes Security, whitelist the namespace
portalwp/v1. - Test REST API accessibility by visiting
yoursite.com/wp-json/in a browser.
Support & Contact
Our support team is here to help. We respond to every message.
| Channel | Response Time | Best For |
|---|---|---|
| Email Support | Within 24 hours (4 hours for Pro) | Account, billing, technical issues |
| WordPress.org Forum | 1–3 business days | General questions, free plan users |
| Browse FAQ | Instant | Common questions answered |
When emailing support, please include: your WordPress version, PHP version, PortalWP plan, and a description of the issue (including any error messages). This helps us resolve your issue faster.