Replace 15 feature-dump guides with 43 problem-oriented how-tos grouped under 10 categories. Drop Maintenance Flows / AI Assistant / Flow Assist Sparkles — those surfaces no longer exist post-FlowPilot pivot. Rename Step Library → Solutions Library throughout. Correct every "click X in the sidebar" reference to match live labels (Home, History, Tickets, Flows, Scripts, Data, Acct). Schema: add `category: CategoryId` and optional `relatedSlugs` to Guide; new Category type and `categories` const drive hub ordering. GuidesHubPage renders category sections (auto-hides empty); GuideDetailPage renders a related-guides footer when set; GuideCard drops the misleading "N sections" subtitle. Fix step.tip markdown rendering — `**bold**` rendered literally because tip used plain text instead of the same regex replacement used on instruction. 14 net-new how-tos for FlowPilot-era surfaces with no prior coverage: tasklane keyboard flow, view-what-we-know, ask-AI mid-session, pause-and-leave, resolve, record-fix-outcome, escalate (Escalation Mode), post-docs-to-ticket, send-client-update, build-script-from-scratch, open-suggested-flow, pin-a-flow, invite-teammate. Browser-verified against engineer + owner test users (sidebar labels, account sub-pages, pilot-screen header buttons, Tasks panel, integration form). tsc clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
923 lines
39 KiB
TypeScript
923 lines
39 KiB
TypeScript
import type { LucideIcon } from 'lucide-react'
|
|
import {
|
|
BarChart3,
|
|
Bookmark,
|
|
BookmarkPlus,
|
|
Box,
|
|
CheckCircle2,
|
|
CircleCheck,
|
|
ClipboardList,
|
|
Clock,
|
|
Compass,
|
|
Download,
|
|
Eye,
|
|
Flag,
|
|
FolderOpen,
|
|
FormInput,
|
|
GitBranch,
|
|
KeyRound,
|
|
Lightbulb,
|
|
Link2Off,
|
|
ListChecks,
|
|
LogIn,
|
|
MessageSquare,
|
|
Pause,
|
|
Pin,
|
|
Play,
|
|
Plug,
|
|
PlugZap,
|
|
RotateCcw,
|
|
Send,
|
|
Settings,
|
|
Share2,
|
|
Shield,
|
|
Sparkles,
|
|
Tag,
|
|
TerminalSquare,
|
|
Terminal,
|
|
TicketCheck,
|
|
TrendingUp,
|
|
User,
|
|
UserPlus,
|
|
Users,
|
|
Workflow,
|
|
} from 'lucide-react'
|
|
|
|
export type CategoryId =
|
|
| 'getting-started'
|
|
| 'pilot-sessions'
|
|
| 'closing-out'
|
|
| 'documentation'
|
|
| 'authoring'
|
|
| 'reusable-assets'
|
|
| 'ai-assistance'
|
|
| 'psa'
|
|
| 'account-admin'
|
|
| 'analytics'
|
|
|
|
export interface Category {
|
|
id: CategoryId
|
|
label: string
|
|
description: string
|
|
}
|
|
|
|
export const categories: Category[] = [
|
|
{ id: 'getting-started', label: 'Getting started', description: 'First login, navigation, and orientation.' },
|
|
{ id: 'pilot-sessions', label: 'Working a pilot session', description: 'Drive a session from the home screen through a resolution.' },
|
|
{ id: 'closing-out', label: 'Closing out a session', description: 'Resolve, escalate, and record outcomes.' },
|
|
{ id: 'documentation', label: 'Documentation & sharing', description: 'Share, export, and redact session output.' },
|
|
{ id: 'authoring', label: 'Authoring flows', description: 'Build troubleshooting trees and step-by-step procedures.' },
|
|
{ id: 'reusable-assets', label: 'Reusable assets', description: 'Solutions library entries, script templates, and the Script Builder.' },
|
|
{ id: 'ai-assistance', label: 'AI assistance', description: 'Chat with the AI inside and outside of pilot sessions.' },
|
|
{ id: 'psa', label: 'PSA integrations', description: 'Connect ConnectWise and other PSA tools.' },
|
|
{ id: 'account-admin', label: 'Account & team admin', description: 'Profile settings, team configuration, and retention.' },
|
|
{ id: 'analytics', label: 'Analytics', description: 'Team and personal usage metrics.' },
|
|
]
|
|
|
|
export interface GuideStep {
|
|
instruction: string
|
|
detail?: string
|
|
tip?: string
|
|
}
|
|
|
|
export interface GuideSection {
|
|
title: string
|
|
steps: GuideStep[]
|
|
}
|
|
|
|
export interface Guide {
|
|
slug: string
|
|
title: string
|
|
icon: LucideIcon
|
|
summary: string
|
|
category: CategoryId
|
|
sections: GuideSection[]
|
|
relatedSlugs?: string[]
|
|
}
|
|
|
|
export const guides: Guide[] = [
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
// Getting started
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
{
|
|
slug: 'sign-in',
|
|
title: 'Sign in for the first time',
|
|
icon: LogIn,
|
|
summary: 'Get from the login page to your dashboard.',
|
|
category: 'getting-started',
|
|
sections: [
|
|
{
|
|
title: 'Sign in',
|
|
steps: [
|
|
{ instruction: 'Open the **ResolutionFlow** login page.' },
|
|
{ instruction: 'Enter your email and password.' },
|
|
{ instruction: 'Click **Sign in**. You land on **Home**, the dashboard.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['reset-password', 'find-your-way-around'],
|
|
},
|
|
{
|
|
slug: 'reset-password',
|
|
title: 'Reset a forgotten password',
|
|
icon: KeyRound,
|
|
summary: 'Recover access when you can\'t sign in.',
|
|
category: 'getting-started',
|
|
sections: [
|
|
{
|
|
title: 'Reset',
|
|
steps: [
|
|
{ instruction: 'On the login page, click **Forgot password?**.' },
|
|
{ instruction: 'Enter the email on your account and submit.' },
|
|
{ instruction: 'Open the password reset email and click the link.', tip: 'Check your spam folder if it doesn\'t arrive within a few minutes.' },
|
|
{ instruction: 'Choose a new password and confirm it. You\'re signed in immediately.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['sign-in'],
|
|
},
|
|
{
|
|
slug: 'find-your-way-around',
|
|
title: 'Find your way around the app',
|
|
icon: Compass,
|
|
summary: 'Map out the sidebar, top bar, and main destinations.',
|
|
category: 'getting-started',
|
|
sections: [
|
|
{
|
|
title: 'Layout',
|
|
steps: [
|
|
{ instruction: 'The **left sidebar** holds the main destinations: **Home** (start a session), **History** (your past sessions), **Tickets**, **Flows**, **Scripts**, **Data** (analytics), and **Acct**.' },
|
|
{ instruction: 'The **top bar** has a global search (**Ctrl+K** / **Cmd+K**), a link to **User Guides**, a notifications bell, and your avatar.' },
|
|
{ instruction: 'Click **Home** anytime to return to the start screen where new sessions begin.' },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
slug: 'pin-a-flow',
|
|
title: 'Pin a flow for fast access',
|
|
icon: Pin,
|
|
summary: 'Keep your most-used flows one click away.',
|
|
category: 'getting-started',
|
|
sections: [
|
|
{
|
|
title: 'Pin',
|
|
steps: [
|
|
{ instruction: 'Click **Flows** in the sidebar and find the flow you want quick access to.' },
|
|
{ instruction: 'Click the **Pin** icon on the flow card.' },
|
|
{ instruction: 'Open the **Pin** shortcut at the bottom of the sidebar to launch any pinned flow in one click.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['organize-with-categories-tags'],
|
|
},
|
|
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
// Working a pilot session
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
{
|
|
slug: 'start-a-session',
|
|
title: 'Start a session from the dashboard',
|
|
icon: Play,
|
|
summary: 'Describe the issue and get the AI to drive.',
|
|
category: 'pilot-sessions',
|
|
sections: [
|
|
{
|
|
title: 'Start',
|
|
steps: [
|
|
{ instruction: 'Go to **Home**.' },
|
|
{ instruction: 'In the **"Describe the issue, paste an error message, or drop a screenshot…"** box, type the symptom or paste the error.' },
|
|
{ instruction: '(Optional) Click **Attach** to add a screenshot or file, or **Paste Logs** for raw output.' },
|
|
{ instruction: 'Click **Start session**. The pilot screen opens with the AI\'s first response and a Tasks panel on the right.', tip: 'For common issues use the quick-start chips below the box (**VPN not connecting**, **Outlook not syncing**, **User locked out**, etc.).' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['resume-a-session', 'navigate-troubleshooting-flow'],
|
|
},
|
|
{
|
|
slug: 'resume-a-session',
|
|
title: 'Resume a paused session',
|
|
icon: RotateCcw,
|
|
summary: 'Pick back up where you left off.',
|
|
category: 'pilot-sessions',
|
|
sections: [
|
|
{
|
|
title: 'Resume',
|
|
steps: [
|
|
{ instruction: 'Click **History** in the sidebar to see all past and active sessions, newest first.' },
|
|
{ instruction: 'Click the session you want to continue. The pilot screen reopens with full context restored.' },
|
|
{ instruction: 'Or, on the **Home** screen, click any card under **Active Sessions** to jump straight back in.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['start-a-session'],
|
|
},
|
|
{
|
|
slug: 'navigate-troubleshooting-flow',
|
|
title: 'Navigate a troubleshooting flow',
|
|
icon: GitBranch,
|
|
summary: 'Run an authored decision tree and reach a solution.',
|
|
category: 'pilot-sessions',
|
|
sections: [
|
|
{
|
|
title: 'Navigate',
|
|
steps: [
|
|
{ instruction: 'Click **Flows** in the sidebar and find the troubleshooting flow you need.' },
|
|
{ instruction: 'Click the flow card and then **Start Session**. The pilot screen opens.' },
|
|
{ instruction: 'Read each question in the **Tasks** panel on the right. Click **Answer** to record your response.' },
|
|
{ instruction: 'Continue answering until the flow reaches a **Solution**.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['run-procedural-flow', 'start-a-session'],
|
|
},
|
|
{
|
|
slug: 'run-procedural-flow',
|
|
title: 'Run a procedural flow with an intake form',
|
|
icon: ListChecks,
|
|
summary: 'Execute a step-by-step procedure on a target.',
|
|
category: 'pilot-sessions',
|
|
sections: [
|
|
{
|
|
title: 'Run',
|
|
steps: [
|
|
{ instruction: 'Open **Flows**, switch to the **Projects** filter, and click the procedural flow you need.' },
|
|
{ instruction: 'Click **Start Session**. The intake form appears.' },
|
|
{ instruction: 'Fill in the required fields and submit. The first step opens.' },
|
|
{ instruction: 'Work through each step in order, marking it complete as you go. Add notes inline where useful.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['navigate-troubleshooting-flow', 'build-intake-form'],
|
|
},
|
|
{
|
|
slug: 'tasklane-keyboard-flow',
|
|
title: 'Use the tasklane keyboard flow',
|
|
icon: Lightbulb,
|
|
summary: 'Answer pending tasks without lifting your hands off the keyboard.',
|
|
category: 'pilot-sessions',
|
|
sections: [
|
|
{
|
|
title: 'Keys',
|
|
steps: [
|
|
{ instruction: 'Click into the answer field on any pending **Question** in the **Tasks** panel.' },
|
|
{ instruction: 'Type your answer. Press **Enter** to submit and auto-advance to the next pending task.' },
|
|
{ instruction: 'Press **Shift+Enter** to add a newline when an answer needs multiple lines.' },
|
|
{ instruction: 'Press **Esc** to cancel the current input and step away.' },
|
|
{ instruction: 'After your last submission, focus jumps to **Send Responses** so you can fire all answers in one batch.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['navigate-troubleshooting-flow', 'view-what-we-know'],
|
|
},
|
|
{
|
|
slug: 'view-what-we-know',
|
|
title: 'View What we know during a session',
|
|
icon: Eye,
|
|
summary: 'See the running list of established facts the AI is reasoning over.',
|
|
category: 'pilot-sessions',
|
|
sections: [
|
|
{
|
|
title: 'View',
|
|
steps: [
|
|
{ instruction: 'In the **Tasks** panel, find the **What we know · N** header at the top.' },
|
|
{ instruction: 'Click to expand and read the facts established so far. Facts are added automatically as you answer questions and paste check output.' },
|
|
{ instruction: 'The panel auto-collapses once there are 5 or more facts. Click again any time to re-expand. Your preference is remembered for the rest of the session.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['tasklane-keyboard-flow'],
|
|
},
|
|
{
|
|
slug: 'ask-ai-mid-session',
|
|
title: 'Ask the AI a question mid-session',
|
|
icon: MessageSquare,
|
|
summary: 'Get contextual help without leaving the session.',
|
|
category: 'pilot-sessions',
|
|
sections: [
|
|
{
|
|
title: 'Ask',
|
|
steps: [
|
|
{ instruction: 'Find the composer at the bottom of the pilot screen: **"Type a message, paste a screenshot, or drag a file…"**.' },
|
|
{ instruction: 'Type your question. Examples: "What else could cause this?", "How do I run this command on Server 2019?", "Explain this step in more detail."' },
|
|
{ instruction: 'Press **Enter** or click **Send**. The AI knows what flow and step you\'re on and replies in context.', tip: 'Drop a screenshot or paste log output directly into the composer — the AI can read both.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['open-suggested-flow'],
|
|
},
|
|
{
|
|
slug: 'pause-and-leave-session',
|
|
title: 'Pause and leave a session',
|
|
icon: Pause,
|
|
summary: 'Save state and walk away without losing context.',
|
|
category: 'pilot-sessions',
|
|
sections: [
|
|
{
|
|
title: 'Pause',
|
|
steps: [
|
|
{ instruction: 'In the session header, click **Pause**.' },
|
|
{ instruction: 'The session is saved automatically with everything you\'ve done so far.' },
|
|
{ instruction: 'Pick it up later from **History** or the **Active Sessions** card on **Home**.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['resume-a-session'],
|
|
},
|
|
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
// Closing out a session
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
{
|
|
slug: 'resolve-a-session',
|
|
title: 'Resolve a session',
|
|
icon: CircleCheck,
|
|
summary: 'Mark the issue fixed and post the resolution note.',
|
|
category: 'closing-out',
|
|
sections: [
|
|
{
|
|
title: 'Resolve',
|
|
steps: [
|
|
{ instruction: 'In the **Tasks** panel, click **Preview Resolve note** to see the AI-generated resolution summary.' },
|
|
{ instruction: 'Edit the note if you want to adjust the wording before posting.' },
|
|
{ instruction: 'Click **Resolve** in the session header to mark the session resolved and post the note.', tip: 'If suggested fixes are still parked as **Waiting to verify**, ResolutionFlow auto-marks them as success before resolving.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['record-suggested-fix-outcome', 'escalate-a-session', 'post-docs-to-ticket'],
|
|
},
|
|
{
|
|
slug: 'record-suggested-fix-outcome',
|
|
title: 'Record a suggested-fix outcome',
|
|
icon: CheckCircle2,
|
|
summary: 'Tell the session whether a fix worked, didn\'t, or needs time.',
|
|
category: 'closing-out',
|
|
sections: [
|
|
{
|
|
title: 'Record',
|
|
steps: [
|
|
{ instruction: 'After applying a suggested fix, find its banner in the session view.' },
|
|
{ instruction: 'Choose the outcome: **It worked**, **Didn\'t work**, or **Waiting to verify…**.' },
|
|
{ instruction: 'For **Waiting to verify**, enter a reason (e.g., "Waiting on user to confirm tomorrow morning"). The fix stays open with a **Pending** banner until you finalize it.' },
|
|
{ instruction: 'Recording the outcome closes any inline template or follow-on prompts for that fix.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['resolve-a-session'],
|
|
},
|
|
{
|
|
slug: 'escalate-a-session',
|
|
title: 'Escalate a session',
|
|
icon: Send,
|
|
summary: 'Hand off to a senior tech with full context.',
|
|
category: 'closing-out',
|
|
sections: [
|
|
{
|
|
title: 'Escalate',
|
|
steps: [
|
|
{ instruction: 'Click **Escalate** in the session header.' },
|
|
{ instruction: 'Review the AI-generated **Escalation Mode** package — what was tried, what failed, and the suspected root cause.' },
|
|
{ instruction: 'Edit the package as needed and choose a destination: PSA ticket note, email draft, or ticket update.' },
|
|
{ instruction: 'Confirm. The senior tech receives the full context, not a "please help" ping.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['resolve-a-session', 'post-docs-to-ticket'],
|
|
},
|
|
{
|
|
slug: 'post-docs-to-ticket',
|
|
title: 'Post session docs to a ConnectWise ticket',
|
|
icon: TicketCheck,
|
|
summary: 'Write the session\'s output back to your PSA.',
|
|
category: 'closing-out',
|
|
sections: [
|
|
{
|
|
title: 'Post',
|
|
steps: [
|
|
{ instruction: 'Open the session on a ticket you\'re working. Ticket-linked sessions show ticket actions in the header overflow.' },
|
|
{ instruction: 'Click **More session actions** → **Update Ticket**.' },
|
|
{ instruction: 'Choose what to post — internal note, public note, or time entry. Edit the markdown if needed.' },
|
|
{ instruction: 'Click **Post to ticket**. The note is attributed to your mapped ConnectWise member.', tip: 'Need a one-off update without finishing the session? Use **Share Update** in the header for a partial status post.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['connect-connectwise', 'send-client-update'],
|
|
},
|
|
{
|
|
slug: 'send-client-update',
|
|
title: 'Send a client update from a session',
|
|
icon: Sparkles,
|
|
summary: 'Touch base mid-troubleshoot without finishing the session.',
|
|
category: 'closing-out',
|
|
sections: [
|
|
{
|
|
title: 'Send',
|
|
steps: [
|
|
{ instruction: 'In the session header, click **Share Update**.' },
|
|
{ instruction: 'The AI drafts a client-friendly status message based on what\'s been done so far.' },
|
|
{ instruction: 'Edit the wording. Toggle redaction to mask sensitive details before sending.' },
|
|
{ instruction: 'Send (or copy) the update. Use this when the issue isn\'t resolved yet but the client needs a status touch-point.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['post-docs-to-ticket'],
|
|
},
|
|
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
// Documentation & sharing
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
{
|
|
slug: 'share-session-link',
|
|
title: 'Share a completed session via link',
|
|
icon: Share2,
|
|
summary: 'Hand a teammate or client a read-only view.',
|
|
category: 'documentation',
|
|
sections: [
|
|
{
|
|
title: 'Share',
|
|
steps: [
|
|
{ instruction: 'Open the session you want to share.' },
|
|
{ instruction: 'Click the **More session actions** kebab in the header and choose **Share**.' },
|
|
{ instruction: 'In the share modal, click **Copy Link** to put the URL on your clipboard.' },
|
|
{ instruction: 'Send the link. The recipient can view the session path and notes — no login required.', tip: 'Public sharing must be enabled by an account owner. If the option is missing, ask whoever owns the account to turn it on.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['export-session', 'revoke-share-link'],
|
|
},
|
|
{
|
|
slug: 'export-session',
|
|
title: 'Export a session',
|
|
icon: Download,
|
|
summary: 'Download a session at the right level of detail.',
|
|
category: 'documentation',
|
|
sections: [
|
|
{
|
|
title: 'Export',
|
|
steps: [
|
|
{ instruction: 'Open the session and click **More session actions** → **Export**.' },
|
|
{ instruction: 'Choose a detail level: **Summary** (high-level), **Standard** (key decisions), or **Detailed** (full path with all notes).' },
|
|
{ instruction: 'Preview the export and edit the text if needed.' },
|
|
{ instruction: 'Click **Download** to save it locally.', tip: 'Set the default format (Markdown / Plain Text / HTML) on the **Acct** page.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['redact-sensitive-data', 'share-session-link'],
|
|
},
|
|
{
|
|
slug: 'redact-sensitive-data',
|
|
title: 'Redact sensitive data from an exported session',
|
|
icon: Shield,
|
|
summary: 'Mask passwords, IPs, and credentials before sharing.',
|
|
category: 'documentation',
|
|
sections: [
|
|
{
|
|
title: 'Redact',
|
|
steps: [
|
|
{ instruction: 'Open the session and start an export (**More session actions** → **Export**).' },
|
|
{ instruction: 'Toggle **Sensitive Data Redaction** on in the export options.' },
|
|
{ instruction: 'Preview to confirm passwords, IPs, and credentials are masked.' },
|
|
{ instruction: 'Download the redacted export.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['export-session'],
|
|
},
|
|
{
|
|
slug: 'revoke-share-link',
|
|
title: 'Revoke a session share link',
|
|
icon: Link2Off,
|
|
summary: 'Cut off access to a previously shared session.',
|
|
category: 'documentation',
|
|
sections: [
|
|
{
|
|
title: 'Revoke',
|
|
steps: [
|
|
{ instruction: 'Open the session whose share you want to revoke.' },
|
|
{ instruction: 'Click **More session actions** → **Share** to see the active link.' },
|
|
{ instruction: 'Click **Revoke** next to the link. Anyone holding the URL loses access immediately.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['share-session-link'],
|
|
},
|
|
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
// Authoring flows
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
{
|
|
slug: 'create-troubleshooting-flow',
|
|
title: 'Create a troubleshooting flow',
|
|
icon: Box,
|
|
summary: 'Spin up a branching decision tree from scratch.',
|
|
category: 'authoring',
|
|
sections: [
|
|
{
|
|
title: 'Create',
|
|
steps: [
|
|
{ instruction: 'Click **Flows** in the sidebar.' },
|
|
{ instruction: 'Click **Create New** and choose **Troubleshooting Flow**.' },
|
|
{ instruction: 'Enter a name and an optional description.', tip: 'Name it after the problem it solves, e.g. "DNS Resolution Failure" — teammates search by symptom.' },
|
|
{ instruction: 'Click **Create**. The canvas editor opens with an empty root node.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['add-nodes-and-branches', 'write-solution-node'],
|
|
},
|
|
{
|
|
slug: 'add-nodes-and-branches',
|
|
title: 'Add nodes and branches on the canvas',
|
|
icon: Workflow,
|
|
summary: 'Build out the decision tree.',
|
|
category: 'authoring',
|
|
sections: [
|
|
{
|
|
title: 'Build',
|
|
steps: [
|
|
{ instruction: 'In the canvas editor, click the **+** on any node to add a child.' },
|
|
{ instruction: 'Choose the type: **Question** (asks the engineer something), **Action** (instructs them to do something), or **Solution** (the resolution).' },
|
|
{ instruction: 'Type the node content. For **Question** nodes, add the answer **options** that branch to different paths.', tip: 'Keep questions specific. "Is the DNS server responding to nslookup?" beats "Check DNS".' },
|
|
{ instruction: 'Use **Undo** (Ctrl+Z) and **Redo** (Ctrl+Shift+Z) to revert mistakes.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['write-solution-node', 'create-troubleshooting-flow'],
|
|
},
|
|
{
|
|
slug: 'write-solution-node',
|
|
title: 'Write a solution node',
|
|
icon: Flag,
|
|
summary: 'End a path with an actionable resolution.',
|
|
category: 'authoring',
|
|
sections: [
|
|
{
|
|
title: 'Write',
|
|
steps: [
|
|
{ instruction: 'Add a **Solution** node at the end of a path.' },
|
|
{ instruction: 'Write the resolution in plain language, with specific commands or steps the engineer should follow.' },
|
|
{ instruction: 'Save. A flow can have multiple solution nodes for different resolution paths.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['add-nodes-and-branches'],
|
|
},
|
|
{
|
|
slug: 'create-procedural-flow',
|
|
title: 'Create a procedural flow',
|
|
icon: ClipboardList,
|
|
summary: 'Author a step-by-step procedure (project).',
|
|
category: 'authoring',
|
|
sections: [
|
|
{
|
|
title: 'Create',
|
|
steps: [
|
|
{ instruction: 'Click **Flows** → **Create New** → **Procedural Flow**.' },
|
|
{ instruction: 'Enter a name and description.' },
|
|
{ instruction: 'Click **Create**. The procedural editor opens.' },
|
|
{ instruction: 'Click **Add Step** for each task in the procedure. Drag steps to reorder.', tip: 'Group long procedures with **Section Headers** like "Preparation", "Execution", "Verification".' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['build-intake-form', 'run-procedural-flow'],
|
|
},
|
|
{
|
|
slug: 'build-intake-form',
|
|
title: 'Build an intake form for a procedural flow',
|
|
icon: FormInput,
|
|
summary: 'Collect inputs once, reuse across every step.',
|
|
category: 'authoring',
|
|
sections: [
|
|
{
|
|
title: 'Build',
|
|
steps: [
|
|
{ instruction: 'In the procedural editor, click **Add Field** in the intake form section.' },
|
|
{ instruction: 'Choose the field type: **Text**, **Textarea**, **Select**, **Number**, **URL**, or **Checkbox**.' },
|
|
{ instruction: 'Set the **variable name** (e.g. `client_name`, `server_ip`). Steps reference values by this name.' },
|
|
{ instruction: 'Mark fields as **Required** if they must be filled before the procedure starts.', tip: 'Reference variables in step instructions to auto-fill commands and notes.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['create-procedural-flow'],
|
|
},
|
|
{
|
|
slug: 'organize-with-categories-tags',
|
|
title: 'Organize flows with categories and tags',
|
|
icon: Tag,
|
|
summary: 'Make flows findable for the rest of the team.',
|
|
category: 'authoring',
|
|
sections: [
|
|
{
|
|
title: 'Organize',
|
|
steps: [
|
|
{ instruction: 'Open a flow and click into its name or settings area to edit metadata.' },
|
|
{ instruction: 'Assign a **category** (e.g. "Networking", "Active Directory") to group it on the **Flows** page.' },
|
|
{ instruction: 'Add **tags** for searchability — "DNS", "VPN", "Firewall". Tags are shared across your team.', tip: 'Use consistent tag spelling so the search picks up everyone\'s flows.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['manage-team-categories'],
|
|
},
|
|
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
// Reusable assets
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
{
|
|
slug: 'save-to-solutions-library',
|
|
title: 'Save a step to the Solutions Library',
|
|
icon: BookmarkPlus,
|
|
summary: 'Promote a one-off step into a reusable building block.',
|
|
category: 'reusable-assets',
|
|
sections: [
|
|
{
|
|
title: 'Save',
|
|
steps: [
|
|
{ instruction: 'In the procedural flow editor, click **Save to Library** on a step you want to reuse.' },
|
|
{ instruction: 'Give it a name and an optional category.' },
|
|
{ instruction: 'The step is now available to import into any procedural flow.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['import-from-solutions-library'],
|
|
},
|
|
{
|
|
slug: 'import-from-solutions-library',
|
|
title: 'Import a Solutions Library entry into a flow',
|
|
icon: Bookmark,
|
|
summary: 'Drop a saved step into the procedure you\'re building.',
|
|
category: 'reusable-assets',
|
|
sections: [
|
|
{
|
|
title: 'Import',
|
|
steps: [
|
|
{ instruction: 'Open **Flows** and switch to the **Solutions Library** tab to browse what\'s available.' },
|
|
{ instruction: 'From the procedural editor, click **Import from Library** when adding a step.' },
|
|
{ instruction: 'Search or browse, then click **Import**. The imported step is a copy — editing it won\'t affect the library version.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['save-to-solutions-library'],
|
|
},
|
|
{
|
|
slug: 'generate-script-from-template',
|
|
title: 'Generate a script from a template',
|
|
icon: Terminal,
|
|
summary: 'Fill in parameters and get a ready-to-run script.',
|
|
category: 'reusable-assets',
|
|
sections: [
|
|
{
|
|
title: 'Generate',
|
|
steps: [
|
|
{ instruction: 'Click **Scripts** in the sidebar.' },
|
|
{ instruction: 'Browse or search the **Script Library**. Click a template to preview the script.' },
|
|
{ instruction: 'Click **Configure** and fill in the parameter values (server name, IP, credentials, etc.).' },
|
|
{ instruction: 'Click **Generate**. Copy the result to your clipboard or download it.', tip: 'Run generated scripts in a test environment before production.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['manage-script-templates'],
|
|
},
|
|
{
|
|
slug: 'manage-script-templates',
|
|
title: 'Manage script templates',
|
|
icon: Settings,
|
|
summary: 'Create, edit, and delete templates for the team.',
|
|
category: 'reusable-assets',
|
|
sections: [
|
|
{
|
|
title: 'Manage',
|
|
steps: [
|
|
{ instruction: 'On the **Scripts** page, click **Manage** at the top.' },
|
|
{ instruction: 'Click **New Template** and enter a name, category, script body, and configurable parameters.' },
|
|
{ instruction: 'Edit or delete existing templates from the same page. PowerShell, Bash, Python, and other languages are supported.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['generate-script-from-template'],
|
|
},
|
|
{
|
|
slug: 'build-script-from-scratch',
|
|
title: 'Build a script from scratch with Script Builder',
|
|
icon: TerminalSquare,
|
|
summary: 'Describe what you need, iterate via chat, save it for the team.',
|
|
category: 'reusable-assets',
|
|
sections: [
|
|
{
|
|
title: 'Build',
|
|
steps: [
|
|
{ instruction: 'Click **Scripts** in the sidebar.' },
|
|
{ instruction: 'Click **Build New Script** at the top.' },
|
|
{ instruction: 'Describe what the script needs to do in plain language. Script Builder generates an initial draft.' },
|
|
{ instruction: 'Iterate via chat — ask Script Builder to add error handling, change languages, or refactor.' },
|
|
{ instruction: 'Test the result, then click **Save** to add it to your team\'s Script Library.', tip: 'You can hand off to Script Builder from inside a pilot session via "Open in Script Builder" — context carries over.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['generate-script-from-template', 'manage-script-templates'],
|
|
},
|
|
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
// AI assistance
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
{
|
|
slug: 'open-suggested-flow',
|
|
title: 'Open a flow suggested by the AI',
|
|
icon: Sparkles,
|
|
summary: 'Jump into a relevant team flow without breaking your session.',
|
|
category: 'ai-assistance',
|
|
sections: [
|
|
{
|
|
title: 'Open',
|
|
steps: [
|
|
{ instruction: 'While chatting with the AI in a pilot session, watch for **Suggested Flow** cards beneath the AI\'s responses.' },
|
|
{ instruction: 'The cards appear when the AI matches a pattern in your team\'s flow library.' },
|
|
{ instruction: 'Click a card to open that flow. It loads in context so you can run it without losing the current session.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['ask-ai-mid-session', 'navigate-troubleshooting-flow'],
|
|
},
|
|
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
// PSA integrations
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
{
|
|
slug: 'connect-connectwise',
|
|
title: 'Connect ConnectWise to ResolutionFlow',
|
|
icon: Plug,
|
|
summary: 'Wire up your PSA so sessions can post back to tickets.',
|
|
category: 'psa',
|
|
sections: [
|
|
{
|
|
title: 'In ConnectWise',
|
|
steps: [
|
|
{ instruction: 'Sign in to ConnectWise PSA as an admin.' },
|
|
{ instruction: 'Go to **System → Members → API Members** and create a new API member.', tip: 'Create a dedicated API member with minimal permissions for security.' },
|
|
{ instruction: 'Generate an **API key pair** (public + private key) for the member.' },
|
|
{ instruction: 'Note your **Company ID** and **Site URL** (e.g. `na.myconnectwise.net`).' },
|
|
],
|
|
},
|
|
{
|
|
title: 'In ResolutionFlow',
|
|
steps: [
|
|
{ instruction: 'Open **Acct → Integrations**.' },
|
|
{ instruction: 'Enter a display name, the Site URL, Company ID, public key, and private key.' },
|
|
{ instruction: 'Click **Connect**. Run a quick **Test Connection** afterward to confirm.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['map-connectwise-members', 'test-connectwise-connection'],
|
|
},
|
|
{
|
|
slug: 'map-connectwise-members',
|
|
title: 'Map ConnectWise members to ResolutionFlow teammates',
|
|
icon: Users,
|
|
summary: 'Make sure ticket notes are credited to the right person.',
|
|
category: 'psa',
|
|
sections: [
|
|
{
|
|
title: 'Map',
|
|
steps: [
|
|
{ instruction: 'Open **Acct → Integrations** and switch to the **Member Mapping** tab.' },
|
|
{ instruction: 'Click **Auto-Match by Email** to pair users automatically.' },
|
|
{ instruction: 'Manually adjust any unmatched or incorrectly matched members using the dropdowns.' },
|
|
{ instruction: 'Click **Save Mappings**. Mapped members are credited when ResolutionFlow posts notes back to tickets.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['connect-connectwise'],
|
|
},
|
|
{
|
|
slug: 'test-connectwise-connection',
|
|
title: 'Test a ConnectWise connection',
|
|
icon: PlugZap,
|
|
summary: 'Confirm credentials are valid before going live.',
|
|
category: 'psa',
|
|
sections: [
|
|
{
|
|
title: 'Test',
|
|
steps: [
|
|
{ instruction: 'Open **Acct → Integrations** and find the connection you want to test.' },
|
|
{ instruction: 'Click **Test Connection**.' },
|
|
{ instruction: 'A success indicator confirms credentials are valid. If it fails, re-check the keys, Company ID, and Site URL.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['connect-connectwise'],
|
|
},
|
|
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
// Account & team admin
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
{
|
|
slug: 'update-profile',
|
|
title: 'Update your profile',
|
|
icon: User,
|
|
summary: 'Change your display name, email, or password.',
|
|
category: 'account-admin',
|
|
sections: [
|
|
{
|
|
title: 'Edit',
|
|
steps: [
|
|
{ instruction: 'Click **Acct** in the sidebar (or your **avatar** in the top-right).' },
|
|
{ instruction: 'Click **Profile Settings**.' },
|
|
{ instruction: 'Update your display name, email, or password and save. Changes take effect immediately.' },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
slug: 'manage-team-categories',
|
|
title: 'Manage team categories',
|
|
icon: FolderOpen,
|
|
summary: 'Create the category list everyone tags flows with. Account owner only.',
|
|
category: 'account-admin',
|
|
sections: [
|
|
{
|
|
title: 'Manage',
|
|
steps: [
|
|
{ instruction: 'Open **Acct → Team Categories**.' },
|
|
{ instruction: 'Click **Create Category**. Give it a name (e.g. "Networking", "Cloud") and a description.' },
|
|
{ instruction: 'Rename or delete categories as your team\'s needs evolve. Existing flows keep their assignment until reassigned.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['organize-with-categories-tags'],
|
|
},
|
|
{
|
|
slug: 'set-chat-retention',
|
|
title: 'Set chat retention',
|
|
icon: Clock,
|
|
summary: 'Control how long AI conversations stick around. Account owner only.',
|
|
category: 'account-admin',
|
|
sections: [
|
|
{
|
|
title: 'Configure',
|
|
steps: [
|
|
{ instruction: 'Open **Acct → Chat Retention**.' },
|
|
{ instruction: 'Set **Retention Period (days)**. Chats older than this are deleted automatically. Range: 1-365 days.' },
|
|
{ instruction: 'Set **Max Conversations**. When this limit is exceeded, oldest unpinned chats are deleted.' },
|
|
{ instruction: 'Click **Save Settings**.', tip: 'Pinned conversations are never auto-deleted regardless of retention. Pin the ones you want to keep.' },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
slug: 'invite-teammate',
|
|
title: 'Invite a teammate',
|
|
icon: UserPlus,
|
|
summary: 'Send an invite so a coworker can join your team. Account owner only.',
|
|
category: 'account-admin',
|
|
sections: [
|
|
{
|
|
title: 'Invite',
|
|
steps: [
|
|
{ instruction: 'Click **Acct** in the sidebar and scroll to the **Membership** section.' },
|
|
{ instruction: 'In the **Invites** form, enter the teammate\'s email.' },
|
|
{ instruction: 'Choose the role: **Engineer** or **Viewer**.' },
|
|
{ instruction: 'Click **Send Invite**. They get an email with a sign-up link. Pending invites appear under the form until accepted.', tip: 'Teammates can also self-join with the **Display Code** shown at the top of the Acct page if you share it with them.' },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
// Analytics
|
|
// ─────────────────────────────────────────────────────────────────────
|
|
{
|
|
slug: 'view-team-analytics',
|
|
title: 'View team analytics',
|
|
icon: BarChart3,
|
|
summary: 'See team-wide usage and resolution metrics.',
|
|
category: 'analytics',
|
|
sections: [
|
|
{
|
|
title: 'View',
|
|
steps: [
|
|
{ instruction: 'Click **Data** in the sidebar.' },
|
|
{ instruction: 'The default view shows team-wide metrics: total flows, active sessions, completion rates, and trends.' },
|
|
{ instruction: 'Use the date-range filter to focus on a specific period.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['view-personal-stats'],
|
|
},
|
|
{
|
|
slug: 'view-personal-stats',
|
|
title: 'View your personal stats',
|
|
icon: TrendingUp,
|
|
summary: 'Track your own session count and completion times.',
|
|
category: 'analytics',
|
|
sections: [
|
|
{
|
|
title: 'View',
|
|
steps: [
|
|
{ instruction: 'Click **Data** in the sidebar.' },
|
|
{ instruction: 'Switch to the **My Stats** tab.' },
|
|
{ instruction: 'Track your session count, most-used flows, and average completion time.' },
|
|
],
|
|
},
|
|
],
|
|
relatedSlugs: ['view-team-analytics'],
|
|
},
|
|
]
|