v2026.06.24-1126
BACKUP …
CHECKING…

Client Management

Identity · Access · Config — all from one place
👤
Select a client on the left,
or click ➕ Create Client.

Data Browser

Browse, edit, and manage every sheet in this workspace
Contacts
in database
Campaigns
total
Queued Emails
in history
Track Events
opens & clicks
Appointments
scheduled
🗄️

Configure your webhook URL in Settings,
then click Refresh to load data.

Configuration

App-wide settings, integrations, and theming
Business
Business Config
Branding
Today Tab
Campaign Composer
Social Media
AI Chat Agent
Notifications
Blog
Email Sending
Voice & Calls
Automation
Calendar
Calculators
Advanced
Server
Data Protection
Local Backup
Integrations
Theme
Maps & Address
Webhooks & Security
Webhooks & Security
Developer Mode

Webhooks & Security

All webhook endpoints, connection mode, and security settings for every module. Changes sync to each module automatically.

☁️ Config Sheet Mirror

Every webhook URL, API key, and secret typed below is mirrored to your per-client Config sheet (column shown next to each field). Config wins over this browser's localStorage when both have a value — so settings travel with the client, not the device.

🌐
General Configuration

Connection mode and high-level system settings.

Routes Database calls to the test webhook instead of production.
💡 All module webhooks live in this pane — Database, Social Media, Campaign Composer, Property, Voice, etc. Edit any URL below; changes save automatically.
📊
Table View

Choose how data sheets are displayed. Spreadsheet view gives you Excel-like resize, reorder, freeze, copy/paste, and keyboard navigation.

Off = Classic table (current). On = x-spreadsheet grid. Saved to localStorage.
⚠️ Spreadsheet view is read-only for now — edits don't save back to the database yet. Use it to view, resize, and copy data; switch back to Classic to edit.
🗄️
Database Manager

Core data webhook — all sheet reads/writes flow through here.

❤️
Health Check

URL the connection-status pill probes every 45s. Set to your n8n health-check webhook (e.g. https://ttsnzai.tech/webhook/healthcheck). Leave empty to use the legacy fallback.

🪪
Role (API requests)

Sent as role in every webhook call. admin bypasses server-side field filtering; client_user receives data with hide_fields stripped. Will be replaced by per-user JWT once login is wired (see TODO).

📡
Live Updates (Real-time)

Connects to the listener service so the dashboard updates the moment a row changes. Same shared secret for every client (will be replaced by per-user JWT once login is wired).

💡 Saved to localStorage on this browser only — never sent anywhere except as a Bearer token to the Listener URL. Status: disconnected
🔔 Notifications

Choose how you're alerted when new data arrives. Each channel is independent.

🎫
Help & Support

Webhook used by both the client ticket form and the admin response panel. Saved to localStorage.n8n_webhook so the embedded pages pick it up on every load.

Receives ticket POSTs from the client form and ticket-list GETs from the admin panel.
🎫 Default View

Which view loads by default when opening Help & Support. Users can still switch on the page using the inline toggle.

🔐
Security & Access
Auto-resolved from the current client's dashboard_secret — you normally never touch this. Sent as the x-dashboard-secret header to authenticate the dashboard to the database. A value typed here is a per-client override saved to localStorage (keyed tts_dashboard_secret:<CLIENT_ID>) on this browser only — it does NOT leak to other clients. Use 📋 to copy the resolved secret.
Sets the password required to open this Webhooks & Security section.

Google Calendar Sync

How appointments are pushed to Google Calendar.

ℹ️ Cascade delete, conflict warnings, default toggle, and the live status row moved to Business → Calendar — no password needed there. Sync Mode, OAuth Client ID, webhook URL, and dashboard secret remain in this locked pane.
🔐 Connect Google Calendar moved to Webhooks & Security → Calendar.
🔗 Calendar Service webhook + dashboard secret moved to Webhooks & Security → Calendar. Single source of truth.
💡 Edits here write to the matching fields in every module's original settings pane — both locations stay in sync.

Security

Security fields have moved to Webhooks & Security.

Business Config

Your business hours, contact info, and holiday schedule. Changes save automatically.

All changes saved
🏢
Contact & Agency
How you're identified in emails and call-outs
Display format (with spaces) shown on documents
Appears in email "From" and signatures
Main name — used in emails, auto-replies & chat
Optional — full branded name for footers. Leave blank to reuse Agency Name.
No +, no spaces (e.g. 6422700039)
Shown on printed documents and email footers
🖼️
Photos & Branding
Agent photo and agency logo for email signatures and outbound campaigns. Upload an image — we resize it automatically.
No photo
Used in your sent emails. Pick any image — we'll resize it automatically.
No logo
Used in your sent emails. Pick any image — we'll resize it automatically.

Used in your sent emails.

Text shown on top of your Brand Colour in emails.

🕐
Business Hours
Weekday hours, breaks, and appointment rules
e.g. 08:30 → 18:00
No breaks yet — add one below.
Each break has a label and a time range.
minutes
hours
Minimum notice required for new bookings
minutes
Protective gap on each side of an existing booking. 0 = back-to-back allowed.
📆
Weekend Hours
Whether you operate on Saturday and Sunday
🛍️
Saturday
Open on Saturdays?
Sunday
Open on Sundays?
🎉
Public Holidays
Names and dates are editable. Toggle open/closed per holiday; if open, set hours.
🏖️
Custom Holidays / Time-Off
Add specific dates (single or range) when the voice agent should treat the business as closed.
📅
No custom holidays yet — add one above.
💡 The voice agent reads holidays_custom from your Config sheet on each inbound/outbound call and skips contact attempts on matching dates. Time slot mode lets you mark partial-day busy windows (e.g. 14:00–16:30) — add the same date multiple times to record several busy windows in one day.
💬
Communication Preferences
How you prefer to reach and be reached by clients
Set by admin — contact support to change
Appended to outgoing campaign emails
Auto-reply used during closed hours
Script used by Retell voice agent when you're unavailable

💬 AI Chat Agent

Persona, knowledge & behaviour for the customer-facing chat agent.

🎭 Persona & Voice
Short description of who the agent is.
Overall communication style the agent should project.
First message shown to a visitor when the chat opens.
Primary language the agent should converse in.
AI model powering this agent. Leave blank to use the platform default.
When ON, the agent sends the greeting automatically when a visitor opens the chat.
Sample replies that capture the desired voice. The agent uses these as tone reference.
Additional instructions appended to the agent's system prompt.
🏢 Business Knowledge
List of services the business provides.
Pricing information the agent may share with prospects.
Rules around cancelling bookings or engagements.
Rules around rescheduling appointments.
Accepted payment options the agent can mention.
Parking details for in-person visits.
Accessibility features available at the premises.
Languages available for in-person or phone service.
Relevant URLs the agent can share with visitors (one per line).
Frequently asked questions and answers. The agent uses these verbatim where applicable.
🎯 Qualification & Escalation
When ON, the agent scores and qualifies leads during the conversation.
Minimum score (0–100) for a lead to be marked qualified.
Comma-separated list of tool names the agent is allowed to call.
Number of past messages the agent keeps in context for each session.
Phone number offered to the visitor when human handoff is triggered.
Comma-separated words or phrases that immediately trigger human handoff.

🔔 Notifications & Reminders

Control reminders, channels, quiet hours, and the Today tab. Changes save with the Save bar below.

🔔 Reminders
How reminders are delivered to the contact.
How many minutes before an event to send the first reminder.
Comma-separated minutes. 1440 = 24h, 60 = 1h, 15 = 15min. Overrides lead time above when set.
Comma-separated sheet names to pull reminder entries from.
📬 Daily Digest
How task alerts and digest notifications are delivered to you.
🌙 Quiet Hours
to
Notifications are suppressed between these hours in the client's local timezone.
🌏 Timezone
IANA timezone used for quiet hours, send windows, and the Today tab. Contact support to change if locked.
📅 Today Tab
Comma-separated sheets that feed the Today tab briefing.
How many hours ahead to show upcoming items on the Today tab.
📋 Recent Notifications

Click Refresh to load history.

📝 Blog

Automated blog publishing to WordPress.

📝 Blog Publishing
Cron expression for when posts publish. Example: 0 9 * * 1 = every Monday at 9 am.
Used to seed and personalise generated blog content for your brand.
Advanced: comma-separated fields to omit from generated posts.
🔌 WordPress Connection
Your WordPress site domain — no trailing slash, no https://.
The WordPress user account used to publish posts via the REST API.
WordPress application password (generated in Users → Profile). Never your login password.

📤 Email Sending (Amazon SES)

Outbound email engine for this client. Default = Gmail (agent's personal account, ~500/day cap). Switch to Amazon SES for uncapped, isolated, reputation-managed sending. Each switch below explains what it does, why it matters, and the ⚠ danger if set wrong.

Email Provider

Which engine sends this client's mail. Flipping this is a Config change (safe, reversible) — not a workflow edit.

Per-purpose sending — choose Gmail or SES for each

Each email type can use a different provider, per client. The Amazon SES details below only need filling for purposes set to SES.

Email Sending

Bulk campaigns — SES has no daily cap. (The master Provider switch above must be Amazon SES for any SES purpose to work.)
Automated daily sends — SES scales better.
Templated one-way send with a PDF — SES is ideal.
Personal replies that thread in the customer's inbox — Gmail keeps the conversation natural.
Hand-written 1-to-1 emails — Gmail feels personal.
Templated property PDFs — SES handles attachments + volume.

Sending Domains

Verified domains your SES emails can be sent from. Add your TTS shared domains or verify a client's own domain.

Send-from addresses

Manage the email addresses your SES email can be sent from. Add as many as you need.

@

System notification sender — one address, ALL clients

Agent-facing system emails (campaign approval requests, cap warnings, reports, reminders) send FROM this address for every client. Stored per client but kept identical — the Apply button writes it to all clients at once.

Automation

Configure automated email replies and outbound call triggers for new leads.

Automatic Email Replies
Instant branded replies sent when a new email enquiry arrives
When on, new email enquiries get an instant branded auto-reply.
Pause auto-replies overnight (9pm–7am client time).
Sent when the enquiry already has phone + property details. Leave blank to use the default. Placeholders: {first_name}, {agency}, {agent_name}.
Sent when phone or property is missing — invites the person (optionally) to share it. Leave blank for default. Placeholders: {first_name}, {agency}, {agent_name}.
Automatic Call
Outbound AI call settings for new leads
Controls how outbound calls are triggered for new leads.
Agent ID from Retell or VAPI used for inbound call handling.
Earliest time outbound calls may be placed.
Latest time outbound calls may be placed.
Auto-Engage on Enquiry NZ ONLY · v1
When a new lead enquires, ask for consent in-channel, then (later) engage automatically. Default OFF. While Shadow mode is on, the gate logs what it would do but sends nothing — leave it on until you have signed off on live behaviour.
Max number of leads auto-engaged per day for this client. Blank or 0 = the gate treats it as no auto-engagement.
Consent is asked in-channel and recorded in the Consent_Log ledger before any engagement. A global kill-switch (Billing & Plans) overrides every client.
Full voice settings (platform, agent scripts, transfer numbers, concurrency) live under Settings → Voice & Calls.

Brand & UI Customization

Personalize the look, feel, and identity of your command center.

💡 What this controls: Brand Palette colours + logos are saved to Config and used by sent email campaigns + Campaign Composer preview. Theme Tuner (logo size, dashboard accent) changes the dashboard UI only. Not used by call scripts, social posts, or property listings.

ℹ️ Logo is set in Business Config → Photos & Branding (the "Agency Logo" upload). The same logo appears here in the dashboard header AND in your sent emails — one file, one place.
🖼️ Logo Sizing
42px
Adjust logo width/height (30–100px)
📝 Dashboard Name Styling
18px
🎨 Background Color
Customize the main dashboard background
ℹ️ Brand Palette (Brand Colour, Brand Text, Secondary, Accent) is set in Business Config → Photos & Branding. The same palette is used by your sent emails and the Campaign Composer preview.
Adjust the overall size of text, cards, and sidebar.

Theme Tuner

Adjust component sizing globally. Changes preview live and persist across reloads. Use this to find the right values, then we can delete redundant per-page overrides.

🔘
Buttons
🃏
Cards
📝
Inputs
🏷️
Page Heading
📐
Page Padding
🔢
Spacing Scale Multiplier

Scales every --sp-* unit (4/8/12/16/20/24/32/40 px) at once.

💾
Save / Reset

Integrations

Connect your external services to enable calendar sync, email, and social features.

Google Calendar

Checking…

Google Drive

Checking…

Connecting either grants both Drive + Gmail (one Google account).

Gmail

Checking…

Connecting either grants both Drive + Gmail (one Google account).

Facebook

Checking…

Instagram

Checking…

Social Publishing

Checking…

Connect TikTok, Instagram, LinkedIn, YouTube, Facebook, X, Threads, Pinterest & Bluesky for scheduling + publishing.

Calendar, Drive & Sheets

Sheet IDs and Drive folder that workflows read from this client's Config. Changes save automatically when you leave the field.

📅
Google Calendar
Active calendar for this client. Connect Google Calendar in the card above to pick from a dropdown.
Connect Google Calendar above to pick from a dropdown. Until connected, paste a calendar ID here.
🗂️
Drive Folder
Google Drive folder where this client's files are saved.
Connect Google Drive above to pick from a dropdown. Until connected, paste the folder ID from the Drive URL: …/folders/<this-id>

Theme

Pick a colour theme for your dashboard. Changes apply instantly.

🌓 Brightness
DarkLight
★ Referral Palettes (Light v2 style — 5 colours × light/dark)
☀ Light Themes
🌙 Dark Themes
🎨 Vibrant Themes

Advanced Data Tools

Manage raw IDs, layout mappings, and system operations.

Legacy Page Styling

By default every page uses the unified global UI. Turn this ON to fall back to the original per-page styles (used as a safety net while migrating).

Date/Time Picker Columns

Pick which columns open a calendar picker when clicked. Stored locally in this browser.

Menu Customization

Rename and reorder the menus to fit your workflow. Drag the ☰ handle to reorder. Changes are saved automatically and applied immediately.

📂
Sidebar Navigation

Top-level pages in the left sidebar (Dashboard, CRM, Campaign Composer, etc.).

📧
Campaign Composer Tabs

Tabs inside Campaign Composer (Compose, Pending Approval, History, Analytics).

Server Redundancy Control

Monitor both servers, auto-failover when one dies, manually switch between local dev and Hostiger production.

Dual-Server Setup

Server #1 (Hostiger) is production. Server #2 (Local PC) is your fast dev machine. Test locally, push to prod with one click.

🎯
Currently Active for ttsnzai.tech:
Loading…
Server Status

🌐 Hostiger (Production)

187.77.146.173 · ttsnzai.tech
Click “Refresh Both” to load.

💻 Local PC (Dev)

localhost:5680 · tunnel.ttsnzai.tech
Click “Refresh Both” to load.
Drift Report
Click “Check for Differences” to compare both servers.
Switch & Open

🌐 Server #1 (Hostiger Production)

Checking…
Host187.77.146.173
Public URLttsnzai.tech
DatabasePostgres on Hostiger
TypeProduction

💻 Server #2 (Local PC Dev)

Checking…
Hostlocalhost / tunnel
Public URLtunnel.ttsnzai.tech
DatabasePostgres on this PC
TypeDev / Fast
Docker Controls
🌐 Hostiger
💻 Local PC
💡 "Up" = docker-compose up -d · "Down" = stops & removes containers · "Restart" = restarts all
Workflow Diff & Compare
🌐 Hostiger
Workflows:
n8n:
TTS_DATABASE:
client_data:
💻 Local PC
Workflows:
n8n:
TTS_DATABASE:
client_data:
Click “Compare Both” to load the per-workflow diff.
Workflow Local updated Hostiger updated Local · Host nodes Verdict
Push: Local → Hostiger (deploy · destructive)
⚠️ Push will OVERWRITE Hostiger production data. Auto-backup is taken first to /tmp/ on Hostiger.
Pull: Hostiger → Local (backup data)
Local Workflows:
Local Users:
Local Executions:
Helper: checking…
TTS_DATABASE:
client_data:
💡 Requires the local helper running: cd ~/n8n-server-2 && node sync-server.js
Sync ALL clones n8n workflows AND business data (TTS_DATABASE + client_data).
Skips execution history. Brings down local n8n for ~30s during clone.
Auto-Failover
Auto-switch on failure
If active server dies, automatically switch to the other one (checks every 60s).
Cloudflare API
💡 Token needs Zone:DNS:Edit permission for ttsnzai.tech. Get one at Cloudflare API Tokens.
Activity Log 0
[init]Dashboard ready. Click "Refresh Status" to begin.
🛡️

Data Protection & Recovery

If a client loses data, pick a saved point in time below and restore it. Every restore saves the current state first, so it is always reversible.

Client Health

ClientStatusSheetsConfig colsLast check
Loading…

Restore client data?

🛡️

Local Backup & Disaster Recovery

Three independent layers keep your data safe. Each one alone is a backup; together they're disaster-proof. Backups never load automatically — you choose when to restore.

Checking backup status…
Reading IndexedDB and folder state
Last snapshot
never
Timed snapshots
in browser
Total size
on disk
Browser quota
used / available
1
📥 Browser snapshots (automatic, always on)
Silently fetches every sheet in your workspace and saves it to this browser's IndexedDB — on every edit (500 ms debounce) and every 5 min on a timer. Backup covers all pages even if you've only opened a few. Survives crashes and reloads, but not browser data wipes or device loss.
● ACTIVE
2
📥 Daily auto-download (works in any browser)
Once per day, downloads a single timestamped JSON file to your default Downloads folder. No setup needed. Easy to drop into Dropbox/Drive after the fact.
○ OFF
3
📁 Folder backup (Chrome / Edge — pick a Dropbox or Drive folder for cloud sync)
Writes 5 JSON files (manifest + snapshot + settings + bizconfig + sheets) to a folder you pick. If you pick a Dropbox / Google Drive / OneDrive folder, every export auto-syncs to the cloud.
Tip: pick a folder inside your Dropbox / Google Drive / OneDrive to get cloud sync for free.
○ NOT SET
⚙️ Advanced settings
ms
Delay after the last edit before writing the live snapshot.
minutes
A timestamped copy is written this often while the tab is open.
snapshots
Oldest are pruned after this.
When the Restore Backup button appears in the topbar.
s cache
When ON, the dashboard silently fetches every sheet from your workspace before each backup, so the backup covers ALL pages — not just whichever you've opened. The cache window prevents re-fetching too often (re-fetch is skipped if a successful silent load completed within this many seconds). Default 60s.
🔐 What gets saved & what doesn't
✅ Saved: all sheet data (Contacts, Appointments, Campaigns…), pending edits, hidden-column preferences, current sheet, recent clients, every Business Config field (agency, hours, holidays, weekends, communication prefs), branding & theme, webhook URLs, calendar sync settings, social handles, layout settings.
❌ Never saved: dashboard password, API keys, OAuth client IDs, SMTP credentials, Stripe keys, social media tokens, Retell agent/from IDs, webhook secrets — anything matching token / key / password / secret / pw / api_ / oauth / credential.

Today Tab

Choose which menus the Today briefing scans, and how it surfaces overdue / upcoming items.

Sources to scan

Tasks is always on — your rule, never miss anything.

Alerts & previews

Modules & Layout

Show or hide menus, sub-tabs and sheet columns for this client. Saved to Config.ui_layout. Empty = use the industry default.

📁 Apply an industry preset

Click an industry tile, then: Preview into form loads its layout into the tree below (tweak, then Save) — or Apply to this client writes the preset's layout and its default Config values to this client. If the client already has a custom layout, Apply shows it and asks first.

Loading industry list…
Selected: — none —
Industry:

Campaign Composer Settings

Everyday customization for the email campaign module — agent profile, brand colour, email layout, schedule.

ℹ️ Agent name, agency, email, and brand colour are set in Business Config — edits there flow through to every email. They used to also live here, but that created a confusing double-save.

Email Confirmation

If you previously disabled the "Are you sure?" prompt before sending a campaign, you can turn it back on here.

Changes save automatically as you edit.

Sending

Your Details

These fields are required by the email workflow. Missing or invalid values block sending. Changes save automatically as you edit.

Full name of the agent the email is signed by.
Footer disclaimer / licensing line.
Voice the AI uses when writing.
Layout of the email header band. Picked from a fixed set the workflow understands.
Approximate body length the AI aims for.
How many emails go out per cron tick.
Values are loaded per-client when you switch clients.

When Emails Go Out

When the batch sender fires for approved campaigns. Times in your business timezone.

Master switch — turns automatic email sending fully on or off for this client.
When off, no automatic cron-created campaigns. You'll trigger campaigns manually from the Composer.
Send hour is interpreted in this timezone.
Hour to send in client's local timezone.
Click to toggle days on/off.
Minimum days before the same contact can receive another campaign email. 0 = no cooldown. Empty = default (14 days).
🔔 Daily Notifications
Two separate daily streams. Each can be turned on/off and sent over Email or SMS independently. These are operational alerts — they are not marketing campaigns.
📬 Daily Owner Digest
A once-a-day summary sent to you (the agent/owner).
Turn the owner digest stream on or off.
How the digest is delivered.
From agent_notify_email (set under Webhooks → Escalation). Edit it there.
⏰ Daily Contact Reminders
Reminder messages sent to your contacts (clients/leads).
Turn the contact-reminder stream on or off.
How reminders are delivered.
📱 Twilio SMS credentials
Used whenever a stream above is set to SMS. Stored in this client’s Config (bring-your-own-account); the Dispatcher reads them at send time — no shared n8n credential.

Sending Limits

Caps that protect your sender reputation. Warmup gradually ramps your daily volume on a new email account.

Max audience size for a single campaign before it stops.
Max emails to send per day (paired with the monthly cap).
Max emails sent per calendar month. Hitting the cap pauses sending until the 1st of next month.
sent resets
Read-only — counter is maintained by the workflow.
Turn on for the first 30 days of a brand-new Gmail/Amazon SES sending identity. Hard-caps daily sends until ramp completes.
Standard ramp (50 → 100 → 250 → 500 → 1k → 2k over 35 days) — automatic
Curve is set automatically. Custom curves coming later.
Day 1 of the ramp. Today's daily limit is calculated from this date.

Error Alerts

Where error/failure alerts go.

If an emailer node fails, an alert goes here. Fallback: TTS support.

Content & Look

📐 Email template
Pick a pre-built layout — click any card to preview, confirm to apply.
🧱 Listing card layout
How property cards are arranged inside the email body.

How Your Emails Look

These fields control how the logo, agent photo, header, font and signature appear in emails. Pick an email theme above and it fills all of these in for you — they'll show a 🎨 Part of theme tag. Want one different? Click Override on that field. Saved to the Config sheet.

Look & feel
Typography, sizing, and CTA wording.
Most agency logos look best square or rounded.
Headshots usually look best as circles.
Email-safe fonts only — these render reliably across Gmail, Outlook, Apple Mail.
The text shown on the button.
Replies to your emails come back to this address. To change it, edit Business Config → Agency & Agent → Email.
Where the button takes them — your Calendly / Google Calendar booking link, listings page, or any URL. Leave blank and the button becomes a “reply to me” email to your Reply email above.

AI Writing — advanced

Voice, Bio & AI Tuning

How the AI writes your emails — your bio, tone, language, persona and per-campaign-type instructions. Changes save automatically as you edit.

Italic line shown under your name in the signature. Leave empty to hide.
Dark mode flips body background to slate and text to off-white.
Tells the AI how the copy should sound.
AI writes the email in this language. Pick from the list or choose Custom for any BCP-47 tag.
Appended to every AI prompt for this client. Use for client-specific quirks.
⚠️ Advanced — replace entire AI system prompt
If set, this REPLACES the default system prompt entirely (overrides tone, persona, role, etc.). Test carefully.
🗣️ Voice & persona
One short phrase that tells the AI who it's writing as. Examples: "a NZ real estate agent", "a Wellington dental practice", "an AI automation consultant".
How every email signs off above your name.
What to call the property/data section in the email body. Real estate: "Listings". Dental: "Procedures". Legal: "Recent matters". AI/tech: "Case studies".
📝 Campaign type instructions
One paragraph per campaign type — tells the AI what each type is for and how to write it. Leave blank to use the built-in default.
Free-text filter passed to the newsletter build alongside the listings picker. Leave empty for no filter (default).

Advanced

Engine-level settings. Leave these alone unless you know exactly what they do.

Comma-separated domains that tracked links may redirect to (exact host or any subdomain). Empty = allow all HTTPS hosts (current default behaviour).

Social Media Settings

Everyday customization for the social media module — provider choice, page IDs, posting mode.

Social Publishing Profiles

Add the social profiles that can be selected when posting.

Enabled Platforms

Choose which platforms appear as options in the post composer.

Voice & Calls Settings

Everyday customization for the voice module — agent ID, voice, prompt, hours. API keys and webhook URLs stay in Webhooks & Security.

⚙️
Platform & mode
All changes saved
Which provider the Cold Call page dials through.
📤
Outbound (Cold Call)
Wait time before firing the next call when Sequential Mode is on. Set to 0 to fire as fast as possible.
Supports {{name}}, {{phone}}, {{agent}} placeholders.
🎙️
Inbound (AI Receptionist)
💡 Changes save to this browser automatically (debounced). API keys, webhook URLs and auth headers live in Webhooks & Security.

Calendar Preferences

Everyday calendar sync behaviour. Calendar ID, webhook URL, OAuth client ID and secret stay in Webhooks & Security.

📅 Calendar ID: read automatically from each client's Config.calendar_id column. No setup needed here.
Each client shares their Google Calendar with this email (permission: Make changes to events). Stored in Config.tts_email. n8n workflows read this per-client.
When deleting an appointment or task that's on Google Calendar, also remove the calendar event. Soft-fails if Calendar is unreachable.
Show closure / double-booking / business-hours warnings when picking a date in the Add Appointment modal and Task editor.
Calendar sync not started yet — open the Appointments → Calendar tab to begin.

Calculators

The Calculators module has no everyday user-facing settings — only webhook endpoints, which live in 🔒 Webhooks & Security → Calculators.

ℹ️ All Calculators configuration is endpoint-only: Rates Feed Webhook + Calc Email Webhook. Both live in the locked pane. The Rates Feed URL is also editable from the Calculators page → rate bar ⓘ → Settings.

Developer Mode

Diagnostics, payload inspection, and developer-only toggles. None of these affect production users.

🔓
Status
Unlocked this session Auto-locks on browser close
🔌
Connection Tools

Probe the configured webhook and force a full data refresh.

📋
Payload Preview

Show the JSON payload + target URL in a confirmation dialog before any webhook is actually sent. Useful when verifying new flows.

🧪
Force Test Mode

Override every module to use its webhook-test/... endpoint regardless of the per-module test toggle. Affects Dashboard, Social Media, Property, Voice — Campaign Composer has its own toggle in its settings tab.

🔊
Console Verbosity

Modules check this flag and emit extra logs (data load timings, deduplication stats, etc.). Default off.

🗄️
State / Storage Inspector

Quick-access inspectors for runtime state and persisted data.

⏱️
Performance
🔧
Webhook Inspector

Floating panel showing all outbound webhook traffic in real time.

⚠️
Danger Zone

Maps & Address

Configure address autocomplete for lead and property forms.

location_on

Maps & Address

Address Autocomplete
Show address suggestions while typing
Provider

Activity

What's new across your pipeline — checked every ~2 minutes

Today

Your day at a glance — pulled live from every menu, sorted by what matters most.

Loading your day
⚠️ Overdue items — let's clear these first
📅 Coming up

Ideas

Smart suggestions based on what's happening in your account. Accept to act on it, dismiss to hide.

Analysing your data

Appraisal

NZ
Property Details
Client & Agent
A
Market Appraisal
Confidential market estimate
Estimated Market Value
Range
Property Overview
AI Market Commentary
Comparable Sales
AddressSoldPriceLand m²BedsDist.
Disclaimer: This is an indicative, automated market estimate generated from Cotality AVM data and supporting comparable sales. It is not a registered valuation and should not be relied upon for lending or legal purposes.

Calculator

Float
6m
1yr
2yr
3yr
4yr
5yr
🔍
⭐ Top 5 calculators
📊 All 26 calculators
Disclaimer: Estimates only. Not financial advice. Confirm with a qualified mortgage broker or financial adviser.
Rates are indicative only — confirm current rates with your lender or mortgage broker. ·
Sent

Documents Manager

Client documents — upload, search, and manage
🔍
0 selected
Documents
Drop file here to upload

Document

Share Document

Create a share link

Existing links

Version History

Loading…

Add Client Document

🔍

Preview

New Folder

Moved to Trash
👁 Open
✏️ Edit details
📁 Move to folder
⬇ Download
🗑 Move to Trash

Move to Folder

Social Media Marketing

Compose, schedule, and track posts across every channel
Active Profile:
🎬 Media Queue Drag to reorder · Index 0 = Cover 0 Items
📎
Drop files or click to upload
Images & videos → added to queue
🔍 Web Scraper URL → Media
Include Videos Filter Logos
✍️ Caption
50
500 words
500
Current limit: All (500)
0 characters
Tone
Length
Hashtags
📱 Quick Preview
9:41
🌍 Distribution 0 Selected
📌 Post Formats
⏰ Delivery
Schedule Post
Queue Summary
No media queued
System Ready
0
Total Posts
0
This Week
0
Platforms Used
0
Day Streak
📊 Activity Feed
📋 Deployment History
Followers
Total Reach
Impressions
Top Platform
Likes
Comments
Shares
Saves
Total Posts
Day Streak 🔥
Last Post
Fetch Analytics For:
📈 Reach — Last 7 Days
Click "Get Analytics" to load data
🌐 Platform Breakdown
No data yet — click Get Analytics.
📊 Posts by Platform
No data yet.
🎨 Posts by Tone
No data yet.
🚀
Roadmap to 10/10
Current rating: 6.5/10 — here is exactly what raises it to a perfect score against Hootsuite, Buffer, and Sprout Social.
📊 Current Score Breakdown
AI Caption Writing 10/10
Best-in-class multi-platform tailoring (v10)
Compliance & Publishing 9/10
Approval gate + Platform-specific auto-scaling
Analytics 7/10
Live API engagement data integrated (v10)
AI Visual Generation 9/10
DALL-E 3 integration for thumbnails from captions
Platform Breadth 8/10
6 major stations fully automated
🔴 Critical — Must Build (adds ~2 points)
📅 Content Calendar View
Visual month/week grid showing scheduled and published posts. Drag to reschedule. Every competitor has this — its absence is the single biggest UX gap. n8n side: store scheduled posts in static data. Frontend: new Calendar page rendering the grid.
Effort: Medium · Impact: High
📈 Engagement Analytics Pull
Use the Social Publishing API (or platform APIs directly) to pull likes, comments, shares, and reach back into the dashboard 24–48h after publish. Store in n8n static data. Surface in the Analytics page already built here. This is the #1 gap vs competitors.
Effort: High · Impact: Very High
🔔 Social Inbox (Comments + DMs)
Aggregate comments and DMs from connected platforms into a single inbox tab. Allow reply from within the app. The Social Publishing API may expose comment data — check the API. Alternatively use platform webhooks via the server.
Effort: High · Impact: Very High
🟡 Important — Should Build (adds ~1 point)
🔍 Social Listening
Monitor brand mentions and hashtag performance via scheduled polling of platform search endpoints. Surface in a new Listening tab.
Effort: High · Impact: High
📱 Mobile PWA
Add a Web App Manifest and service worker so the HTML installs as a Progressive Web App on mobile. Responsive layout improvements needed for phone screens.
Effort: Low · Impact: Medium
👥 Multi-User / Brand Workspaces
Isolated workspaces per brand or client with separate Social Publishing credentials, history, and analytics. Critical for agency use.
Effort: High · Impact: High (agency market)
🔒 Fix Open Bugs
BUG-006, BUG-007, BUG-009, BUG-010, BUG-013 are still open. Each one is a reliability or security gap that lowers the score.
Effort: Low–Medium · Impact: Reliability +1
🟢 Polish — Nice to Have (adds ~0.5 points)
Image editor — Basic crop, resize, filter before upload. Canva-style but lightweight.
Best-time suggestions — Use platform engagement data to recommend optimal posting times per platform.
AI image generation — Add DALL-E or Stable Diffusion integration for generating post images from a prompt.
Link in bio page — Auto-generate a simple landing page for the Instagram "link in bio" slot, updated per post.
Slack / email notifications — Notify team on publish success, failures, and approval requests.
🎯 Projected Score After Roadmap
After Critical fixes
8.5/10
Calendar + Engagement + Inbox
After Important fixes
9.5/10
+ Listening + PWA + Multi-user
After Polish
10/10
Full competitive feature parity
Timeline estimate
3–6 months
At 1 developer, part-time
🔐

Developer Mode

Live n8n payload inspector, merge debug, and node references. Data syncs with the compose form in real time.

🔬 Live Payload Inspector
The exact JSON sent to your n8n webhook on Deploy. Includes unified_media_order map.
🔗 Merge Caption Node n8n Debug
Shows exactly what your 🔗 Merge Caption node will receive and output.
🔗 n8n Node Reference V8 Fields
Field names your n8n nodes will receive in V8:
🔍 Parse Input Node (V8)
unified_media_order
JSON array (ordered)
platforms
string[] (array)
description
string
tone
string
hashtag_count
string
cta / keywords
string
caption
string (override)
scheduled_at
ISO datetime or ""
uppost_user
string
mediaKeys
string[] binary keys
isVideo
boolean
platform_resolved_media
JSON — per-platform fallback resolution map
🔗 Merge Caption Node (V8)
caption
final caption string
orderedMediaUrls
string[] — final URL order
unified_media_order
original map (passthrough)
coverUrl
string — index 0 URL
platforms
string[]
scheduled_at
ISO datetime or ""
uppost_user
string
isVideo
boolean
mediaCount
number

Blog Generator

Generate SEO-optimised blog posts from your keyword sheet
Sheet: pcb

Blog Generator

Generate SEO-optimised blog posts from your keyword sheet. Pick a row below or trigger the queue.
Pending
0
Published
0
Clusters
0
This Week
0
⏳ Pending Keywords 0
📋
Loading…

Blog Library

All blogs with view, edit, history and analytics actions.
Total Blogs
0
Published
0
Drafts
0
This Week
0
📚 All Blogs 0
📚
Loading…

Live Preview

Last generated blog post HTML before publishing.
No preview loaded

Blog Analytics

Performance metrics across all published blogs.
Published
Total Views
Avg. Words
Top Cluster
📈 Per-Blog Performance
📊
Connect your analytics webhook in Webhook settings to load data, or click Refresh to use cached values.

Webhook & Sheet Settings

Connect to your server workflow and Google Sheet.
🔗 n8n Webhook
POST endpoint for the Blog.json workflow.
Sends: { client_id, action:"generate", row_id, primaryKeyword, keywords, cluster, intent, title }
Returns 200 { status:"ok", row_id, url, wordpress_post_id } on publish, or 403 { status:"rejected", reason } if Config.Blog ≠ YES.
📑 Google Sheet
Expected columns: row_id, Blog Title, Cluster, Intent, Keywords, Summary, Primary Keyword, Completed, URL
🛠️ Local Data
Manage your local scaffolding data — useful while wiring up the real sheet backend.
✏️

Edit Blog

🕓

Revision History

🕓
No history for this blog yet.

Add Keyword Row

Email Marketing

Draft and approve email campaigns by audience

What kind of email do you want to send?

Click to see pending campaigns for each audience. Recipient counts are live from your Leads.

~150 words
POST · application/json

            
Total Campaigns
all time
Sent
completed
Pending Approval
awaiting review
Emails Delivered
across all campaigns
Views
Loading…
Pending
Select a campaign
Choose a campaign from the list to preview and approve or decline.

Campaign Analytics

Performance insights across all campaigns, queue, tracking, and unsubscribes.
Campaigns over time
Status breakdown
Engagement funnel
Audience type breakdown (CRM)
Open / click rate by campaign
Unsubscribes over time

Campaigns

All campaigns created for this client (sheet: Campaigns)

CampaignData

Generated email bodies and subject options per campaign (sheet: CampaignData)

Queue

Emails queued / in-flight / sent per contact (sheet: Queue)

Tracking

Open / click events recorded against send tokens (sheet: Tracking)

Unsubscribes

Contacts who opted out via campaign links (sheet: Unsubscribes)

Qhistory

Archive of historic queued / sent emails (sheet: Qhistory)
Campaign Details

Property Listing Management

Add, update, or delete a property listing — fields marked * are required. Webhook URLs are configured under Settings → Webhooks.
Pick a property to auto-fill address, beds/baths, size and features. Empty fields only — won't overwrite what you've typed.
Works best on realestate.co.nz. TradeMe support is coming. Imported fields are highlighted so you can verify them.
Property Details
Pricing
Features
Property Features — extra detail for the listing (auto-fills from the CRM property when available)
Location (optional GPS)
Listing Status
Description
Features
Open Homes / Viewings
Nearby Schools
Agent Information
📷

Click to upload agent photo

👤
Vendor / Seller — links this listing to a CRM contact
Property Images
🖼️

Click to select images

Cold Call

Outbound cold-call queue and outcomes (sheet: ColdCall)

AI Receptionist

Incoming call log, transcripts, and intents (sheet: Receptionist)

Email Enquiries

Enquiries received via email — qualify and cold call to convert
Total Enquiries
0
✉️
Cold Call Pending
0
📞
Cold Call Answered
0
Select a row to enable row actions
Call Status is synced from the Cold Call module (default Pending). All other fields are manually entered.
First NameLast NamePreferred NameLead TypeEmailPhoneAddress Enquiry TypeCall StatusMessageDate Contacted

Add New Enquiry

Send Email

Website Enquiries

Enquiries submitted via website forms — auto-filled from cold call module
Total enquiries
0
🌐
Cold call pending
0
📞
Cold call answered
0
First nameLast namePreferred nameLead typeEmailPhoneAddress Enquiry typeCall statusMessageDate contacted
No website enquiries yet — data auto-fills from the cold call module

Social Media Enquiries

Enquiries received via social media — qualify and convert
Total Enquiries
0
💬
Cold Call Pending
0
📞
Cold Call Answered
0
Select a row to enable row actions
Call Status is normally synced from the Cold Call module (default Pending). All other fields are manually entered.
First Name Last Name Preferred Name Lead Type Email Phone Address Enquiry Type Call Status Message Date Contacted

Add New Enquiry

Send Email

Referral Enquiries

Enquiries that arrived via referrals — track the referral source and qualify
Total Enquiries
0
🤝
Cold Call Pending
0
📞
Cold Call Answered
0
Select a row to enable row actions
Call Status is synced from the Cold Call module (default Pending). All other fields are manually entered.
First NameLast NamePreferred NameLead TypeEmailPhoneAddress Enquiry TypeCall StatusReferred ByDate Contacted

Add New Enquiry

Send Email

Appointments

Booked appointments and property visits (sheet: Appointment)

Meta Manager

Manage Facebook and Instagram for this client

Tasks

To-do list, follow-ups and reminders

Customer Support

Submit, track & manage support tickets
🛡️

Compliance Review

Website Enquiries

Enquiries received via your website — qualify and convert
Total Enquiries
0
📨
Cold Call Pending
0
📞
Cold Call Answered
0
Select rows to enable actions
Call status defaults to Pending and is normally synced from the Cold Call module — override here only when needed.
First Name Last Name Preferred Name Lead Type Enquiry Type Call Status Message Email Phone Address Date Contacted

Leads Qualified

Qualified buyer & seller leads from the AI receptionist. Pipeline by status · open a lead for the full qualification & load it into the calculators.

Leads Qualified

Qualified buyer & seller leads from the AI receptionist. Pipeline by status · open a lead for the full qualification & load it into the calculators.

QUALIFIED & NURTURED LEADS

Manage buyer and seller leads by qualify status, urgency, and pipeline stage.

Total Qualified
0
Total Nurtured
0
Total in Pipeline
0
Contact IDFirst NameLast NameEmailPhone Decision MakerTypeTimeframeUrgency Qualify StatusEnquiry SourceInitial Appointment Email ConsentAnother AgentProfile Created Agent SubscribedBuying PurposeFinance Approved First HomeLender / BankProperty Type Area of ChoiceBudget RangeBedroomsBathrooms ExtrasNotes for AgentStage in Pipeline
No buyer leads yet.

NURTURED LEADS

Leads in nurture status — growing relationships toward qualification.

Total Nurtured
0
Hot
0
Warm
0
Cold
0
Contact IDFirst NameLast NameEmailPhone Decision MakerTypeTimeframeUrgency Qualify StatusEnquiry SourceInitial Appointment Email ConsentAnother AgentProfile Created Agent SubscribedBuying PurposeFinance Approved First HomeLender / BankProperty Type Area of ChoiceBudget RangeBedroomsBathrooms ExtrasNotes for AgentStage in Pipeline
No nurtured buyer leads.

Leads CRM

Ultimate Dashboard
Total Qualified Leads
0
0 need review
Total Nurtured Leads
0
🌱
Total Leads in Pipeline
0
📊
🔍
No buyer leads yet.

Lead Financials

Fix incomplete finance & qualification data · hot/warm/cold scored live
Select a lead to edit its financials.

Lead Properties

Each property, its decision-makers & deal status
Select a property to view details.

Add Property

Works best on realestate.co.nz. TradeMe support is coming. Imported fields are highlighted so you can verify them.
No photo
We resize it automatically.
Property Specs
Valuation & Legal
Seller Qualification

Leads Analytics

Pipeline, qualification, budget & property insights — Leads · Financials · Properties.

Leads Over Time

New leads captured per period

Qualification Funnel

Captured → qualified → booked

Lead Sources

Where leads originate

Buyer vs Seller

Lead type split

Urgency Mix

How hot the pipeline is

Finance Readiness

From Lead Financials

Budget Distribution

Mid-budget across leads

Property Types

From linked Properties

Property Pipeline

Listing status mix

Revenue Analytics

Cross-client MRR · annual gross · net after fees · profit after tax

Price Changes

Schedule monthly price changes across all clients · 30-day notice

Books

Income from Stripe · Expenses entered manually · GST summary (NZ)

Deal Pipeline

AU & NZ Real Estate · Buyer & Seller kanban · Click any card to explore

Hot — ≤35 days Warm — 35–90 days Cold — 90+ days AUAustralia only NZNew Zealand only

Pipeline Analytics

Stage funnel, urgency breakdown, conversion rates & source analysis.

Stage Funnel

Deals by pipeline stage

Urgency

Lead temperature mix

Conversion

New → settlement

Lead Sources

Where deals originate

Recent Leads

Latest 10 captured

Analytics Center
New Leads
0
Active Pipeline
0
Calls Handled
0
Appointments
0
Active Campaigns
0
Open Tickets
0
Pipeline Funnel
Calls/Day
Live Activity
Lead Sources
Listings Status
Social Engagement
Campaigns
Appointments
Tasks Status
Support Tickets
Settings
KPI Display
Tiles
Density
??

Customer Name

0 properties
1
Choose
2
Reach
3
Review
4
Live
Address
Price
Choose your goal
What are you hoping to achieve with this listing?
Find Buyers
People looking to buy in this area
Find Sellers
Homeowners who might list — offer a free appraisal
Facebook limits property ad targeting by law — we target by area + buyer intent, not age or exact address.
How much do you want to spend?
Set your daily budget and how long to run
Budget Settings
Daily spend
$20
Duration
5
Total maximum spend
$100
You'll spend a maximum of $100 total, then it stops automatically.
Estimated reach: ~600–1,200 people near Auckland
✓ Nothing is charged yet.
Review your ad
This is what buyers will see
Sponsored
Trust Technical Services
Just listed: Modern 3-bed in Auckland, $1,200,000. Enquire now →
Goal Find Buyers
Area Auckland
Price $1,200,000
Duration 5 days
Max spend $100
Your ad is live
Active
$12.40
spent of $100 budget
🔔 3 new buyer leads on Address
Leads arrive in real-time as buyers express interest
Sarah M.
021 555 0182
wants a viewing
James K.
james@email.com
enquired about details
Priya R.
022 777 1234
interested in area
Leads go straight to your pipeline — call them while they're hot.