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'], }, ]