Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 45 additions & 1 deletion openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@
{ "name": "Fonts", "description": "Available Google Fonts for branding" },
{ "name": "Roof Measurements", "description": "Request and track automated roof measurements" },
{ "name": "Actions", "description": "Voice/text command detection for presentation control" },
{ "name": "Appointments", "description": "Appointment scheduling for presentation viewers" }
{ "name": "Appointments", "description": "Appointment scheduling for presentation viewers" },
{ "name": "Activity", "description": "Recent presentation activity feed" }
],
"components": {
"securitySchemes": {
Expand All @@ -56,6 +57,20 @@
}
},
"schemas": {
"ActivityEvent": {
"type": "object",
"properties": {
"id": { "type": "string", "format": "uuid" },
"eventType": { "type": "string", "description": "Event type, e.g. presentation.opened, slide.viewed, contract.signed" },
"payload": { "type": "object", "nullable": true, "description": "Event-specific data" },
"occurredAt": { "type": "string", "format": "date-time" },
"presentationId": { "type": "string", "format": "uuid", "nullable": true },
"presentationName": { "type": "string", "description": "Homeowner full name derived from presentation data" },
"address": { "type": "string", "nullable": true, "description": "Homeowner address (street, city, state)" },
"deckId": { "type": "string", "format": "uuid", "nullable": true, "description": "Template ID for deep-linking to the template editor" }
},
"required": ["id", "eventType", "occurredAt", "presentationName"]
},
"WordTiming": {
"type": "object",
"properties": {
Expand Down Expand Up @@ -430,6 +445,35 @@
}
},
"paths": {
"/api/activity": {
"get": {
"tags": ["Activity"],
"summary": "List recent activity",
"description": "Returns the 10 most recent presentation events for your organization, enriched with the homeowner name, address, and template ID for deep-linking.",
"security": [{ "sessionCookie": [] }],
"responses": {
"200": {
"description": "List of recent activity events",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"events": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ActivityEvent"
}
}
}
}
}
}
},
"401": { "description": "Not authenticated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }
}
}
},
"/api/decks": {
"get": {
"tags": ["Decks"],
Expand Down
2 changes: 1 addition & 1 deletion sales-copilot/guides/branding.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: Branding
description: Make presentations look like they came from you — your colors, logo, and messaging throughout.
---

The **Branding** tab in the deck editor controls everything the homeowner sees when they open their presentation — your logo, color scheme, the chat avatar, and the landing page copy they read before hitting "Get Started."
The **Branding** tab in the template editor controls everything the homeowner sees when they open their presentation — your logo, color scheme, the chat avatar, and the landing page copy they read before hitting "Get Started."

Changes are reflected in the **Live Preview** panel on the right side of the screen as you make them.

Expand Down
6 changes: 3 additions & 3 deletions sales-copilot/guides/contracts.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Signed documents are stored with a full audit trail including timestamp, IP addr

## Import a contract document

In the deck editor, open the **Actions** tab and click **Import Contract**.
In the template editor, open the **Actions** tab and click **Import Contract**.

Upload a PDF or Word document (max 10 MB). Sales CoPilot uses AI to analyze the document and convert it to a markdown template. It detects variables like `{{full_name}}`, `{{address}}`, and `{{date}}` that get replaced with the homeowner's real information when the contract is presented.

Expand Down Expand Up @@ -66,9 +66,9 @@ When a viewer reaches the signing step:
4. If name matching is enabled, the typed signature is validated against the homeowner's name
5. On successful signing, an audit-trailed document is created and a `contract.signed` event is emitted

## Multiple templates per deck
## Multiple contract templates per template

A deck can have multiple action configs (contract templates), but only one should be published at a time. When a viewer signs, the published template is used by default. You can also specify a particular config by ID.
A template can have multiple action configs (contract templates), but only one should be published at a time. When a viewer signs, the published template is used by default. You can also specify a particular config by ID.

## API reference

Expand Down
18 changes: 9 additions & 9 deletions sales-copilot/guides/deck-types.mdx
Original file line number Diff line number Diff line change
@@ -1,34 +1,34 @@
---
title: Setting Up Your First Deck
title: Setting up your first template
description: Upload your slide images and let Sales CoPilot build a narrated presentation from them.
---

A deck is the starting point for everything in Sales CoPilot. It holds your slides, narration, FAQs, and branding. Once a deck is set up, you can generate as many personalized presentations from it as you need — one per homeowner.
A template is the starting point for everything in Sales CoPilot. It holds your slides, narration, FAQs, and branding. Once a template is set up, you can generate as many personalized presentations from it as you need — one per homeowner.

## Create a deck
## Create a template

From the dashboard, click **New Deck** in the top right corner.
From the dashboard, click **New Template** in the top right corner.

A dialog will open with the following fields:

- **Deck Name** — give it a clear name you'll recognize, like "Spring Roofing Pitch" or "Solar Q4 2025"
- **Template Name** — give it a clear name you'll recognize, like "Spring Roofing Pitch" or "Solar Q4 2025"
- **Description** — optional, for your own reference
- **Deck Context** — describe who this deck is for and what it covers. This helps Sales CoPilot write better narration. For example: *"Residential roofing replacement for storm-damage leads. Audience: homeowners aged 40–65 in the Southeast US."* The more specific, the better.
- **Template Context** — describe who this template is for and what it covers. This helps Sales CoPilot write better narration. For example: *"Residential roofing replacement for storm-damage leads. Audience: homeowners aged 40–65 in the Southeast US."* The more specific, the better.
- **Use Premium Voice AI** — toggle this on if you want higher quality voice generation

## Upload your slide images

Below the deck details, you'll see an upload area. Drag your slide images in, or click to browse. PNG, JPG, GIF, and WebP are all accepted.
Below the template details, you'll see an upload area. Drag your slide images in, or click to browse. PNG, JPG, GIF, and WebP are all accepted.

The order you upload them is the order they'll appear in the presentation — so make sure your slides are in the right sequence before uploading. The number of uploaded slides is shown as you add them.

Once you've added at least one image and filled in the deck name, the **Create & Generate** button becomes active. Click it to start.
Once you've added at least one image and filled in the template name, the **Create & Generate** button becomes active. Click it to start.

## While it's generating

Sales CoPilot will analyze each image, write a narration script, and generate spoken audio. This runs in the background — you'll see progress as it works through your slides.

When it's done, your deck opens in the editor with all slides ready to review.
When it's done, your template opens in the editor with all slides ready to review.

## Review your slides

Expand Down
2 changes: 1 addition & 1 deletion sales-copilot/guides/faqs.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: FAQs
description: Pre-build answers to common questions so homeowners always get a consistent, on-brand response.
---

The **FAQs** tab in the deck editor is where you add questions and answers that Sales CoPilot uses during live presentations. When a homeowner asks something that matches one of your FAQs, they hear your exact wording — spoken aloud — rather than an AI-generated response.
The **FAQs** tab in the template editor is where you add questions and answers that Sales CoPilot uses during live presentations. When a homeowner asks something that matches one of your FAQs, they hear your exact wording — spoken aloud — rather than an AI-generated response.

This is the best way to ensure predictable, on-brand answers to questions you know will come up: pricing, warranty, timeline, financing, or anything competitors often get asked about.

Expand Down
6 changes: 3 additions & 3 deletions sales-copilot/guides/narration.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ Every slide in a Sales CoPilot presentation is narrated by a synthesized voice.

## Choosing a voice

You set the voice when creating a deck. In the **New Deck** dialog, you'll see a **Use Premium Voice AI** toggle. This controls the voice quality used across all slides, FAQs, and Q&A responses in the deck.
You set the voice when creating a template. In the **New Template** dialog, you'll see a **Use Premium Voice AI** toggle. This controls the voice quality used across all slides, FAQs, and Q&A responses in the template.

Pick the option that fits your use case — premium voices sound more natural but take slightly longer to generate.

## Regenerating audio after edits

If you update a slide's narration script, the audio needs to be regenerated to match. Open the slide editor and click **Regenerate Audio from Script** after making your changes. The updated audio replaces the old version.

If you'd rather have the AI rewrite the script entirely from the slide image, click **Use AI to Generate Script** — this rewrites the narration based on what's in the image, using your deck context as guidance.
If you'd rather have the AI rewrite the script entirely from the slide image, click **Use AI to Generate Script** — this rewrites the narration based on what's in the image, using your template context as guidance.

## FAQ and Q&A audio

Expand All @@ -25,7 +25,7 @@ For the Q&A transition and resume prompts (in the **FAQs** tab under **Q&A Exper

## Checking audio status

Throughout the deck editor you'll see status indicators on audio content:
Throughout the template editor you'll see status indicators on audio content:

- **Audio Ready** — the spoken audio is generated and ready
- **Generating...** — audio is currently being produced
Expand Down
4 changes: 2 additions & 2 deletions sales-copilot/guides/notifications.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,15 @@ Each event includes the `presentationId` and relevant context. For example, `sli

## Create a subscription

In the deck editor, open the **Settings** tab to manage notification subscriptions. You can also create subscriptions via the API.
In the template editor, open the **Settings** tab to manage notification subscriptions. You can also create subscriptions via the API.

Each subscription needs:

- **Name** — a label for your reference, e.g. "Slack — new presentation opened"
- **Event type** — which event to listen for (e.g. `presentation.opened`)
- **Channel** — how to deliver the notification
- **Channel config** — channel-specific settings (see below)
- **Deck scope** (optional) — limit to events from a specific deck, or leave blank for all decks
- **Template scope** (optional) — limit to events from a specific template, or leave blank for all templates

## Delivery channels

Expand Down
10 changes: 5 additions & 5 deletions sales-copilot/introduction.mdx
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
---
title: Introduction
description: Sales CoPilot is an AI-powered presentation platform with narrated slides, live Q&A, and deck management.
description: Sales CoPilot is an AI-powered presentation platform with narrated slides, live Q&A, and template management.
---

Sales CoPilot by Demand IQ lets you build AI-narrated sales presentations with interactive Q&A. Upload slide images or create structured decks, and Sales CoPilot generates narration scripts, synthesizes audio, and delivers a shareable presentation link your prospects can view on any device.
Sales CoPilot by Demand IQ lets you build AI-narrated sales presentations with interactive Q&A. Upload slide images or create structured templates, and Sales CoPilot generates narration scripts, synthesizes audio, and delivers a shareable presentation link your prospects can view on any device.

## Key capabilities

- **Deck management** — create structured or image-based decks with custom branding, colors, and fonts
- **Template management** — create structured or image-based templates with custom branding, colors, and fonts
- **AI generation** — upload slide images and let GPT-4o extract content, write narration scripts, and generate FAQs automatically
- **Text-to-speech** — narrate every slide with word-level timing for synchronized text highlighting
- **Live Q&A** — viewers ask questions by voice or text; Sales CoPilot matches FAQs or generates answers in real time
Expand Down Expand Up @@ -35,13 +35,13 @@ For portal integrations, Sales CoPilot supports SSO via `GET /api/auth/sso?code=
icon="rocket"
href="/sales-copilot/quickstart"
>
Create your first deck and presentation in minutes
Create your first template and presentation in minutes
</Card>
<Card
title="Guides"
icon="book"
href="/sales-copilot/guides/deck-types"
>
Learn about deck types, branding, FAQs, and narration
Learn about template types, branding, FAQs, and narration
</Card>
</CardGroup>
46 changes: 45 additions & 1 deletion sales-copilot/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@
{ "name": "Fonts", "description": "Available Google Fonts for branding" },
{ "name": "Roof Measurements", "description": "Request and track automated roof measurements" },
{ "name": "Actions", "description": "Voice/text command detection for presentation control" },
{ "name": "Appointments", "description": "Appointment scheduling for presentation viewers" }
{ "name": "Appointments", "description": "Appointment scheduling for presentation viewers" },
{ "name": "Activity", "description": "Recent presentation activity feed" }
],
"components": {
"securitySchemes": {
Expand All @@ -56,6 +57,20 @@
}
},
"schemas": {
"ActivityEvent": {
"type": "object",
"properties": {
"id": { "type": "string", "format": "uuid" },
"eventType": { "type": "string", "description": "Event type, e.g. presentation.opened, slide.viewed, contract.signed" },
"payload": { "type": "object", "nullable": true, "description": "Event-specific data" },
"occurredAt": { "type": "string", "format": "date-time" },
"presentationId": { "type": "string", "format": "uuid", "nullable": true },
"presentationName": { "type": "string", "description": "Homeowner full name derived from presentation data" },
"address": { "type": "string", "nullable": true, "description": "Homeowner address (street, city, state)" },
"deckId": { "type": "string", "format": "uuid", "nullable": true, "description": "Template ID for deep-linking to the template editor" }
},
"required": ["id", "eventType", "occurredAt", "presentationName"]
},
"WordTiming": {
"type": "object",
"properties": {
Expand Down Expand Up @@ -430,6 +445,35 @@
}
},
"paths": {
"/api/activity": {
"get": {
"tags": ["Activity"],
"summary": "List recent activity",
"description": "Returns the 10 most recent presentation events for your organization, enriched with the homeowner name, address, and template ID for deep-linking.",
"security": [{ "sessionCookie": [] }],
"responses": {
"200": {
"description": "List of recent activity events",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"events": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ActivityEvent"
}
}
}
}
}
}
},
"401": { "description": "Not authenticated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }
}
}
},
"/api/decks": {
"get": {
"tags": ["Decks"],
Expand Down
14 changes: 7 additions & 7 deletions sales-copilot/quickstart.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,28 @@ title: Quickstart
description: Go from zero to a live, personalized AI presentation in minutes.
---

This guide walks you through creating your first deck, setting up branding, and sending a homeowner their personalized presentation link.
This guide walks you through creating your first template, setting up branding, and sending a homeowner their personalized presentation link.

## Before you start

Make sure your organization has been provisioned in Sales CoPilot. If you're not sure, contact your Demand IQ account manager.

## Step 1: Create a deck
## Step 1: Create a template

Log in and you'll land on your deck dashboard. Click **New Deck** in the top right.
Log in and you'll land on your template dashboard. Click **New Template** in the top right.

Fill in the details:

1. Give your deck a **name** — something you'll recognize, like "Spring Solar Pitch"
2. Add a **Deck Context** — describe the audience and purpose in a sentence or two. This shapes the AI-generated narration, so the more specific you are, the better.
1. Give your template a **name** — something you'll recognize, like "Spring Solar Pitch"
2. Add a **Template Context** — describe the audience and purpose in a sentence or two. This shapes the AI-generated narration, so the more specific you are, the better.
3. Upload your **slide images** by dragging them into the upload area. The order you add them is the order they'll appear in the presentation.
4. Click **Create & Generate**

Sales CoPilot will analyze each image, write narration scripts, and generate spoken audio. You'll see progress as it works through your slides — this usually takes under a minute.

## Step 2: Review your slides

Once generation is complete, your deck opens in the editor. Click through the **Slides** tab to review what was created.
Once generation is complete, your template opens in the editor. Click through the **Slides** tab to review what was created.

For each slide you can:
- Edit the **narration script** directly
Expand Down Expand Up @@ -61,7 +61,7 @@ You'll get a shareable link. Send it to the homeowner however you like — text,

## What's next

- [Setting Up Your First Deck](/sales-copilot/guides/deck-types) — deeper dive on deck creation and slide editing
- [Setting up your first template](/sales-copilot/guides/deck-types) — deeper dive on template creation and slide editing
- [Branding](/sales-copilot/guides/branding) — full walkthrough of every branding option
- [FAQs](/sales-copilot/guides/faqs) — how to get the most out of the Q&A system
- **API Reference** — explore the full REST API in the sidebar if you're integrating Sales CoPilot into your own platform