How many chars of the AI reply to read aloud in voice mode. Default: 1500.
How many chars to read aloud during Live Screen sessions. Default: 2000.
Shown in the EOH Live floating popup. HTML allowed (e.g. <strong>bold</strong>). Leave blank for default.
AI Providers
Configure which AI models power your chat, document generation, and text-to-speech
Chat & Document AI Required
This AI powers chat responses, PDF/DOCX/PPTX/XLSX generation, file extraction, and the PM tool.
Text-to-Speech (TTS) Optional
Voice output. Gemini is the primary TTS engine; OpenAI is used automatically as a fallback if Gemini fails or is rate-limited. Configure both below — the Primary selector only decides which is tried first.
Gemini TTS (primary)
OpenAI TTS Fallback
Used automatically when Gemini TTS fails. Leave blank to disable fallback.
Feature Flags
Enable or disable platform features globally
User Management
View and manage platform users
User
Email
Plan
Status
Queries
Voice
Screen
Exports
Joined
Actions
Connect to backend to load users
Usage Analytics
Track platform usage and voice minutes consumption
0
Total Voice Minutes Used
0
Voice Minutes Today
0
S2S Sessions
0
Avg Session (mins)
🎙️ Top Languages by Voice Usage
Language
Minutes Used
Sessions
% of Total
Click refresh to load
🤖 Per-Plan AI Configuration
Each plan uses a different AI provider, model, API key, and EOH version. All changes are live immediately — no deploy needed.
💡 EOH Version is what users see when they ask "what AI version are you?". The underlying provider and model are never revealed to users.
Version 1 = entry level | Version 2 = standard | Version 3 = premium
Loading plan configs...
📊 Billing Logs & Email History
Full audit trail of all payments, renewals, failures and system emails
—
Total Revenue
—
Failed Payments
—
Active Subscriptions
—
Emails Sent
Loading...
👤 User Plan Manager
View and edit all users — plan, quota, status, billing info. Includes free users.
User
Plan
Status
Expires
Queries
Voice
Screen
Joined
Actions
Loading...
Edit User
👤 Profile
💳 Plan & Billing
📊 Usage (edit to reset or adjust)
🔐 Access Control
💰 Payment History
Loading...
📧 Email History
Loading...
Payment History
Track all plan purchases, upgrades, and subscription payments
$0
Total Revenue
0
Total Transactions
0
Paid Users
0
Free Users
0
Declined
$0
Refunded
All Payments
User
Email
Plan
Amount
Status
Description / Decline Reason
Date
Invoice
Actions
Loading payments...
Free Plan Users (Marketing Targets)
Users who have never purchased. Send them an upgrade email.
User
Email
Phone
Queries Used
Joined
Actions
Loading...
Activity Log Report
Full audit trail — all user and admin actions with filters, search and export
—
Online Now
—
Queries Today
—
Voice Mins Today
—
Exports Today
—
New Signups Today
—
Plan Changes Today
—
Logins Today
🟢 Online Now
—active in last 5 minutes
Loading...
Events
—
Time
Role
Action
User
Description
IP
Loading...
Page 1
⏰ Cron Job Manager
Manage and monitor all scheduled background tasks
📡
External Pinger Required
Register these trigger URLs at cron-job.org (free) to run jobs automatically.
Each URL includes your CRON_SECRET for security.
Base trigger URL: https://erp-ai-backend.vercel.app/cron/trigger
—
Total Jobs
—
Enabled
—
Last Run OK
—
Total Errors
Scheduled Jobs
Loading...
Add Cron Job
Format: minute hour day month weekday · crontab.guru
Trigger — show popup when EITHER condition is met first
Services shown in survey
Edit Rating
🔑 API Credentials
OAuth app credentials — stored securely in database
💼 LinkedIn
📺 Google / YouTube
📘 Facebook
ℹ️ Callback URLs to register in each platform:
LinkedIn: https://erp-ai-backend.vercel.app/social-connect/linkedin/callback
YouTube: https://erp-ai-backend.vercel.app/social-connect/youtube/callback
Facebook: https://erp-ai-backend.vercel.app/social-connect/facebook/callback
🔗 Platform Connections
Connect your accounts to enable direct publishing
💼
LinkedIn
Checking...
📺
YouTube
Checking...
Note: YouTube API supports video uploads only — text posts must be published manually.
📘
Facebook Page
Checking...
Posts to your Facebook Page (not personal profile).
📸
Instagram
Coming soon (needs Meta review)
📱 Social Media Content Studio
AI-generated posts for LinkedIn, Twitter/X, Facebook and Instagram
—
Total Posts
—
Drafts
—
Published
—
Ideas
Posts Library
Loading posts...
✨ AI Post Generator
✨ Generating...
Claude is writing your post
Edit Post
🗄️ Database Manager
Browse, edit, export and restore all 49 database tables
🔒 Full Database Backup
⬆ Restore from Backup
—
Tables
—
Page Rows
—
Page
—
Total Rows
Loading tables...
—
→
Select a table from the left
Export Table
Import / Restore Table
Rows are upserted — existing rows updated, new rows inserted
Edit Row
Promo Codes
Create discount codes, trial extensions, and plan upgrades
Active Promo Codes
Code
Type
Value
Plan
Duration
Uses
Max Uses
Expires
Status
Actions
Loading promo codes...
Manual Invoices
Record manual payments, wire transfers, and custom billing
$0
Manual Revenue
0
Manual Invoices
0
Pending
0
Paid
Invoice Records
User
Plan
Amount
Method
Reference
Note
Status
Date
Actions
Loading invoices...
Support Tickets
Manage user support requests, reply to tickets, and configure support settings
Loading tickets...
🎫
Select a ticket to view details
🏢 Company Bundle Bulk Users
Sell team access bundles — one code activates many users. Auto-generated after Stripe payment.
Feature Status
Disable to hide the purchase page and block all new redemptions
Bundle Templates
Loading bundles…
Date
Code
Company
Buyer Email
Bundle
Plan
Seats
Amount
Status
IP
Location
Email
Actions
Loading…
Date
Company
Buyer
Email
Bundle
Plan
Seats
Amount
Status
Valid Until
IP
Location
Code
Actions
Loading…
Redeemed
Code
Company
User
Email
Plan
Expires
IP
Country
City
Status
Actions
Loading…
New Bundle
Manually Issue Code
Appeals
Review and manage user account block appeals
Loading appeals...
Email Center
Configure your email provider, manage templates, compose campaigns, and track delivery
Available variables: {{first_name}} {{full_name}} {{email}} {{plan}}
🚨 Automatic Limit Alert Emails
When a user hits a plan limit (queries, exports, voice, screen), automatically send them an email encouraging them to upgrade. Each user receives at most 1 alert per limit per 24 hours.
Disabled
💬
Query Limit
Sent when chat queries run out
📄
Export Limit
Sent when file exports run out
🎤
Voice Limit
Sent when voice minutes run out
📺
Live Screen Limit
Sent when screen minutes run out
💡 Tip: Use the limit_reached template (pre-seeded) or create a custom one in the Templates tab. Available variables: {{first_name}}{{feature}}{{used}}{{limit}}{{plan}}{{upgrade_url}}
⏰ Plan Expiry Alarm Emails
Disabled
Automatically email users before their plan expires. Configure how many days in advance, which template to use, and the subject line.
days before expiry
Leave blank to use the default renewal reminder template
See which users will receive the next alarm, or send it immediately
User
Email
Plan
Expires
Days Left
💡 How it works: A cron job runs daily at 8:00 AM UTC and emails users whose plan expires in exactly N days. Each user receives at most 1 alarm per 20 hours. Set up the Vercel cron in vercel.json: { "crons": [{ "path": "/api/admin/expiry-alarm/cron", "schedule": "0 8 * * *" }] }
—
Total Sent
—
Delivered
—
Failed
—
Today
📅 From
To
Recipient
Subject
Type
Status
Sent
Loading logs...
📧 Email Preview
Subject:
🎉 Welcome Email
Sent automatically when a user verifies their email. Once per user, never repeated.
On email verify
📣 Marketing / Recurring Email
Periodic campaign email sent to users on a set interval (e.g. every 30 days).
Cron / interval
🔔 New Device / Login Alert
Sent when user logs in from a new device or unusual IP address.
On suspicious login
⬆️ Plan Upgrade Confirmation
Sent when admin upgrades a user plan, or user upgrades mid-cycle.
On plan upgrade
⏰ Plan Expiry Warning
Auto-sent 7 days and 1 day before plan expires. Encourages renewal.
Cron — daily
📊 Monthly Usage Summary
Sent on the 1st of each month showing previous month usage breakdown.
Cron — 1st of month
🚦 80% Quota Warning
Sent when user reaches 80% of any plan limit. Warns before they hit the wall.
On usage check
💳 Payment Successful
Sent immediately after a successful payment via Stripe.
On Stripe payment
❌ Payment Failed
Sent when a Stripe payment fails. Includes update payment method CTA.
On Stripe failure
🔄 Subscription Renewed
Sent when a subscription auto-renews successfully.
On Stripe renewal
👋 Subscription Cancelled
Sent when user cancels their subscription. Access continues until expiry.
On cancellation
⌛ Plan Expired
Sent when a plan expires and the user is moved to the Free plan.
On expiry (cron daily)
🎫 Ticket Submitted
Confirmation sent to user after they submit a support ticket.
On ticket create
💬 Admin Replied to Ticket
Sent to user when admin replies to their support ticket.
On admin reply
📱 Social Post Published
Notification to admin when a social media post is published successfully.
On post publish
Loading learning email templates…
🔍 Web Search & Image Search
Configure search APIs and manage the sites used for ERP knowledge search
Click the Search Stats tab to load
Search API Configuration
Configure search providers. Serper.dev is recommended — get a free key at serper.dev (2,500 free searches/month). Google CSE is the alternative.
Used for web search + image search in AI chat
💡 How image search works
When a user types "show me SAP FI screenshots" or "give me images of Workday dashboards", the AI detects the image intent and uses Serper.dev (or Google CSE) to find relevant images, then displays them inline in the chat. Without an API key, image search falls back to web scraping which may fail.
Search Sites
These domains are used when users search in AI chat. Enable/disable to control which sites are searched.
Loading…
App Settings
Control all frontend text, emails, URLs and billing options from one place
Loading settings...
🖼️ Chat Logos
Upload images directly — stored in your Supabase database. Max 2MB per image. JPEG, PNG, WebP, GIF or SVG.
Click or drag image
Shown next to every AI message.
Click or drag image
Shown while AI is thinking. Use GIF for animation.
Click or drag image
Shown next to user messages (no profile photo).
💳 Stripe Payments Required for subscriptions
Enter your Stripe keys here — no Vercel env vars needed. Stored securely in your database (admin-only).
Where to find your keys: Go to dashboard.stripe.com/apikeys → copy Publishable key & Secret key. Use test keys (pk_test_ / sk_test_) for development, live keys in production.
📢 Site Banner
Show a full-screen overlay on the chat page — for maintenance, coming soon, or any announcement. Takes effect immediately for all users.
When On, all users see this overlay instead of the chat.
Live Preview
↑ Fill in the fields above to see preview
🔬 Technical Settings
AI limits, security, features and search configuration
Loading...
🧠 Conversation Memory
Durable shared memory across chat, voice and live screen (one thread per user + session). Changes apply within ~1 minute.
How long a session stays continuable after the last message. Default 15. Range 1–168.
Delete stored turns older than this. Default 40 days.
Oldest sessions beyond this are evicted. Default 100.
Oldest turns trimmed when a session exceeds this. Default 200 MB.
How many recent turns are fed to the AI each message. Default 8.
🔐 Account Lockout Settings
Auto-lock accounts after repeated failed login attempts. Protects against brute-force attacks from multiple IPs. Changes take effect within 60 seconds.
Wrong passwords before lock. Default: 10. Range: 3–50.
How long to lock. Default: 30 min. Range: 5–1440. Admin can unlock manually anytime.
📧 Failed Login Alert Email
Automatically email the user when suspicious login activity is detected on their account.
Default: 5 attempts. Email is sent once per lockout cycle. Uses your Email Center SMTP settings.
🤖 CAPTCHA & Suspicious Login
Protect logins with CAPTCHA after repeated failures and alert users when they log in from a new location.
🤖 CAPTCHA (Cloudflare Turnstile)
Default: 3. Range: 1–20.
Get free keys at Cloudflare Turnstile. Also set TURNSTILE_SECRET_KEY in Vercel env vars.
🌍 Suspicious Login Notification
Emails user when they login from a new IP they've never used before.
💡 How it works: Every successful login IP is stored in the database. When a user logs in from a new IP they've never used before, they receive an email alert with location details and a "Secure My Account" link. Uses your Email Center SMTP/Zoho settings.
👤 Guest Access Limit
Unauthenticated visitors are limited to N send attempts per day before being shown a "Create Free Account" modal. Tracked in localStorage by date — resets at midnight. No PII stored.
Default: 3. Set to 0 to require login on first attempt.
⚡ Per-IP Rate Limiting
Limits requests per IP address per time window. Values are read at Vercel cold start — changes propagate within ~5 minutes as functions restart.
Default: 30. Range: 5–300.
Default: 60000 (1 min). Range: 10s–5min.
📎 File Upload Limits
Controls max file size and which file types users can upload. Frontend validates before any network request — backend re-validates server-side for security. Both layers must agree.
Default: 10MB. Maximum: 50MB.
Comma-separated extensions with dot. Shown in upload hint.
🌐 ERP System Selection
Controls whether users must select a vendor and product before chatting. When optional, a "Skip" path lets users chat freely and vendor is auto-detected from their messages.
Default: Required. When optional, Start Chat is enabled immediately.
⏱ Session Inactivity Timeout
Automatically signs out idle users after a period of inactivity. A warning modal appears before logout with a "Stay signed in" button. Set timeout to 0 to disable.
Default: 720 min (12 hours). Set to 0 to disable auto-logout.
Default: 2 min. Range: 1–10 min.
💬 Welcome Prompt Chips
Quick-prompt chips shown on the welcome screen. Each chip has a short label and a full question sent when clicked.
Shown when a user starts a new chat. Use {name}, {vendor}, {product} tokens. Leave empty to use the built-in message.
Tokens: {name}{vendor}{product}
💬 Chat Input Textarea
Control the size and appearance of the chat input box shown to users.
Default: 24px (1 line)
Default: 160px (~6 lines)
Default: 14px
Default: 1.65
🧠 AI Output Limits
Control how many tokens (words) the AI generates for each feature. Higher = longer responses but slower and more expensive. Changes take effect within 60 seconds.
How detailed the live screen analysis is. 5000 ≈ 3,750 words. Default: 5000. Range: 500–8000.
More tokens = more detailed documents. 65000 ≈ 50,000 words. Default: 65000. Range: 8192–100000.
Default: 16 turns (~8 exchanges). Lower = faster & cheaper. Raise to 30+ for complex projects. First 2 messages always kept as context anchor.
💡 Token guide:
512 = very short · 2048 = short · 4096 = medium · 8192 = standard · 16384 = long · 32768 = very long · 65000 = maximum
🚀 Upgrade Modal Text
Control the text shown on the upgrade/plans popup that users see.
Shown below the title. Use • as bullet separator.
Reports
Export and analyze platform data — users, plans, subscribers, payments, usage
🔍 Report Filters
Results
Select a report type and click Run Report
User Profiles
View, edit, and manage detailed user profiles. Archive or delete users.
Loading profiles…
🧮 Token Usage Analytics
Track AI token consumption per user, feature, and date range.
—
Total Tokens
—
💬 Chat Tokens
—
📄 Export Tokens
—
🎤 Voice + Screen
📈 Daily Token Usage
Loading...
📊 Feature Breakdown
Loading...
👥 Per-User Token Usage
Loading...
📋 Recent Token Log
Loading...
💬 Chat Limits
Control file uploads, message length, multi-file support, and how much document content the AI reads. Per-plan file size limits are set in Plan Settings.
📎 File Upload Limits
Global limits for file uploads. Per-plan file size is set in Plan Settings → max_file_mb. These are the system-wide ceilings.
System-wide max. Per-plan limits set in Plans. Range: 1–50 MB.
How many files a user can attach per message. Range: 1–10.
Extensions with dots, comma separated. Example: .pdf,.docx,.xlsx,.pptx,.png,.jpg,.jpeg,.csv,.txt,.md,.json,.xml
🤖 AI File Reading Limits
Control how much of an uploaded file the AI actually reads. Larger = more accurate but uses more tokens.
Characters of extracted text sent to AI per file. Default 40,000 (~30 pages). Range: 1,000–100,000.
How many follow-up messages keep file content in context. 0 = only first message. Default 3. Range: 0–20.
✏️ Message Limits
Control the text input box maximum length.
Max chars a user can type in the chat box. Default 8,000 (~2,000 words). Range: 500–50,000.
📋 Per-Plan File Limits (reference)
These are set in Plan Settings per plan. Shown here for reference only.
Loading...
ERP Systems & Products
Add, edit, reorder, or remove ERP vendors and their product lines shown in the frontend
ERP Vendors
💡 Drag rows to reorder | Changes are saved to the database and reflected on the frontend immediately
#
Vendor Name
Products
Status
Actions
Loading...
Add ERP System
Enter one product per line
Active (visible in frontend dropdown)
Delete ERP System
Are you sure you want to delete ? This cannot be undone.
🔒 Security Center
Monitor login attempts, block malicious IPs, and manage access security.
🗝️ Session & Token Security
RATE LIMIT
10 attempts / 15 min
Per IP on admin login route
TOKEN EXPIRY
8 hours
JTI revocation on logout
IP LOGGING
✅ Active
Every login logged with IP
TOKEN REVOCATION
✅ Active
Logout = immediate invalidation
🔒 Currently Locked Accounts
Loading...
—
Total Attempts
—
Failed Logins
—
Rate Limited
—
Blocked IPs
🎯 Top Suspicious IPs
Loading...
🚫 Blocked IPs
Loading...
📋 Login Attempts Log
Loading...
IP & Browser Analytics
User IP addresses, browsers, operating systems and device types
👁️ Page Visitor Counter
→
—
Total Views
—
Unique IPs
—
Logged-in Users
—
Guest Visits
📅 By Date
Loading...
🏙️ By City
Loading...
👤 By User
Loading...
🌐 Browsers
Loading...
💻 Operating Systems
Loading...
📱 Device Types
Loading...
🔍 Top IP Addresses
Loading...
👤 Per-User Sessions
Loading...
Admin Users
Manage admin accounts — create, edit, change passwords and deactivate
All Admin Accounts
Loading admin users...
Connections
Manage database, deployment and source control credentials — stored securely in your database
🗄
Supabase Database
PostgreSQL database — URL, anon key and service key
⏳ Not tested
Loading...
⚠️ Changing these keys requires redeploying your Vercel project to take full effect. Current running instance will use the new values after the next cold start.
▲
Vercel Deployment
API token, team ID and project for deployment management
⏳ Not tested
Loading...
Create at vercel.com → Settings → Tokens
GitHub
Personal access token for repo access and deployments
⏳ Not tested
Loading...
Create at github.com → Settings → Developer Settings → Personal access tokens
PM Mode — User Data
View and manage PM projects per user. Data is preserved even after plan expiry.
📨 EOH PM Email Sending
Master on/off for ALL PM emails sent through EOH servers — task assignments, meeting invites, manual emails. Disable to pause all PM email delivery platform-wide.
📧 User Custom Sender Email
Allow users to send PM emails from their own email address. Disable to force all emails through EOH servers (anti-spam).
Users with PM Projects
Loading...
Projects
PM Mode — Quota Limits
Control how much each PM user can create. Applied globally across all PM plans.
📊 Quota Settings
Total projects a user can create
Tasks per project (excluding cancelled)
All email types combined per user per month
PM Email Settings
Configure dedicated SMTP credentials, sender identity and email signature for all PM mode emails.
🔐 Zoho SMTP Credentials
✅ Configured
💡 Leave blank to fall back to the main email settings. Dedicated PM SMTP lets you send PM emails from a separate Zoho address (e.g. pm@erponlinehub.com).
This will also be used as the From address
Use a Zoho App Password, not your account password
📤 Sender Identity
Shown as "From" name in emails
Defaults to SMTP username if blank
✍️ Email Signature
HTML is supported — keep it simple for email compatibility
Preview
No signature yet — fill in the fields above
Cache Settings
View and clear server-side caches. Useful after changing settings that don't take effect immediately.
🗑️ Clear All Caches
Forces all server caches to reload from the database on next request.
Active Caches
Loading...
PM Mode — Reports & Analytics
Platform-wide PM usage, project statistics, top users and document breakdown.
Loading reports...
📊 Projects by Status
🏢 ERP Systems Used
📄 Document Types Generated
🏆 Top Users by Projects
PM Mode — All Sent Emails
Full log of every PM email sent platform-wide. Filter by status, type, user, project or date to diagnose delivery issues and monitor usage.
Loading...
PM Mode — Activity Logs
Full audit trail of every create, update and delete across all PM entities — projects, tasks, members, meetings, documents and emails.
Loading...
PM Mode Usage Report
Per-user PM data — projects, tasks, members, meetings, documents, emails — with quota usage bars and search.
Results
Name
Email
Phone
Plan
Status
Days Left ▼
Expires At
📁 Projects
✅ Tasks
Done
👤 Members
📅 Meetings
Done
📄 Docs
AI
📧 Emails
Failed
Quota
Last Active
Use filters above and click Run
User Usage Report
Chat queries, voice, live screen and files — per user, with search, filters and sorting.
Results
Type
Name
Email
Phone
Plan
Status
Period Start ▼
Period End
Expires
Source
💬 Chat
Chat %
🎙 Voice
Voice %
🖥 Screen
Screen %
📄 Files
Files %
Last Active
Price
Use filters above and click Run
💳 Stripe Settings
Configure keys, manage subscriptions, issue refunds, and view revenue
🔑 API Keys
Checking…
Get from Stripe → Developers → Webhooks → your endpoint → Signing secret
📌 Webhook Setup
Add this URL in your Stripe Webhooks dashboard: https://erp-ai-backend.vercel.app/stripe/webhook
Required events: checkout.session.completed · customer.subscription.updated · customer.subscription.deleted · invoice.payment_succeeded · invoice.payment_failed
Map each plan to its Stripe Price ID. Get Price IDs from Stripe → Products.
Loading…
Click Refresh to load
—
Total Revenue
—
This Month
—
Last Month
—
Active Subs
—
Past Due
—
Failed Payments
Revenue by Plan
Loading…
Recent Transactions
Loading…
—
MRR
—
ARPU
—
MoM Growth
—
Churn Rate
—
Failed Payment Rate
—
Total Refunded
Revenue Trend — Last 30 Days
Revenue by Plan
Loading…
🔔 Renewals in Next 7 Days
Loading…
🚨 Declined / Failed Payments
Loading…
⚠️ Disputes & Chargebacks
Loading…
Recent Webhook Events
Click Refresh to load
—
—
—
PLAN
—
EMAIL
—
STARTED
—
EXPIRES
—
NEXT PAYMENT
—
PAYMENT METHOD
—
🔄 Recharge —
⬆️ Upgrade Plan
💳 Payment History
—
✅ In Sync
—
⚠️ Issues Found
—
🔍 Checked
—
🔄 Renewing in 7d
🔄 Upcoming Renewals — Next 7 Days
Click Run Health Check
⚠️ Discrepancies
Click Run Health Check
📧 Email Verification
View verification status, resend codes, and configure the verification SMTP sender.
—
Total Users
—
Verified ✅
—
Unverified ⚠️
—
📧 Email
—
🔴 Google
—
🔵 LinkedIn
⚙️ Verification SMTP
6-digit codes sent from verification@erponlinehub.com
Click Refresh to load
Quota Override
⚡ Leave any field blank to use the global default for that limit. Global defaults shown below each field.
Create Project
✏️ Edit Project
Task
Team Member
Meeting
Edit Document
Editing content will increment the version number automatically.
To:
User Details
Loading...
Send Email
Broadcast Email
Create Promo Code
New Manual Invoice
📧 Email Log Detail
📄 EMAIL CONTENT
(rendered preview)
ℹ️ This log was recorded before email content storage was enabled. Future emails will show the full content here.