diff --git a/.gitmodules b/.gitmodules index a40c583cf9c..d6017bf4fb9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "packages/embed"] path = packages/embed - url = https://github.com/the-answerai/chat-embed.git + url = https://github.com/the-answerai/aai-embed.git branch = a-main diff --git a/apps/web/Dockerfile b/apps/web/Dockerfile index c9183e52a51..8053300014b 100644 --- a/apps/web/Dockerfile +++ b/apps/web/Dockerfile @@ -60,6 +60,7 @@ COPY packages-answers/tsconfig/package.json ./packages-answers/tsconfig/ COPY packages/ui/package.json ./packages/ui/ COPY packages/components/package.json ./packages/components/ COPY packages/embed/package.json ./packages/embed/ +COPY packages/embed-react/package.json ./packages/embed-react/ # Install dependencies (skip postinstall scripts for Docker build) RUN --mount=type=cache,id=pnpm,target=/root/.pnpm-store pnpm install --ignore-scripts diff --git a/apps/web/package.json b/apps/web/package.json index e7e52de8e33..abb808bbdd5 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -35,6 +35,7 @@ "@svgr/webpack": "^8.1.0", "@textea/json-viewer": "2.14.1", "aai-embed": "workspace:*", + "aai-embed-react": "workspace:*", "add": "^2.0.6", "aws-crt": "^1.27.3", "axios": "^1.12.1", diff --git a/packages-answers/ui/package.json b/packages-answers/ui/package.json index 4ba307d8726..be52356d100 100644 --- a/packages-answers/ui/package.json +++ b/packages-answers/ui/package.json @@ -44,7 +44,6 @@ "@mui/x-tree-view": "^7.29.1", "@next-auth/prisma-adapter": "^1.0.7", "@textea/json-viewer": "2.14.1", - "aai-embed-react": "~1.0.8", "axios": "^1.12.1", "clsx": "^1.2.1", "cors": "^2.8.5", diff --git a/packages-answers/ui/src/AnswersContext.tsx b/packages-answers/ui/src/AnswersContext.tsx index 460bfd554c3..732c2bcf12b 100644 --- a/packages-answers/ui/src/AnswersContext.tsx +++ b/packages-answers/ui/src/AnswersContext.tsx @@ -495,7 +495,11 @@ export function AnswersProvider({ audio, socketIOClientId: isChatFlowAvailableToStream ? socketIOClientId : undefined, chatType: 'ANSWERAI', - action + action, + trackingMetadata: { + url: typeof window !== 'undefined' ? window.location.href : undefined, + source: 'theanswer' + } } if (isChatFlowAvailableToStream) { diff --git a/packages/components/credentials/JlincApi.credential.ts b/packages/components/credentials/JlincApi.credential.ts new file mode 100644 index 00000000000..ec885433a5f --- /dev/null +++ b/packages/components/credentials/JlincApi.credential.ts @@ -0,0 +1,44 @@ +import { INodeParams, INodeCredential } from '../src/Interface' + +class JlincApi implements INodeCredential { + label: string + name: string + version: number + description: string + inputs: INodeParams[] + + constructor() { + this.label = 'JLINC API' + this.name = 'jlincApi' + this.version = 1.0 + this.description = 'Refer to https://www.jlinc.com.' + this.inputs = [ + { + label: 'Data Store API URL', + name: 'dataStoreApiUrl', + type: 'string', + placeholder: 'https://api-test.jlinc.io' + }, + { + label: 'Data Store API Key', + name: 'dataStoreApiKey', + type: 'password', + placeholder: '' + }, + { + label: 'Archive API URL', + name: 'archiveApiUrl', + type: 'string', + placeholder: 'https://archive-test.jlinc.io' + }, + { + label: 'Archive API Key', + name: 'archiveApiKey', + type: 'password', + placeholder: '' + } + ] + } +} + +module.exports = { credClass: JlincApi } diff --git a/packages/components/nodes/analytic/JLINC/JLINC.ts b/packages/components/nodes/analytic/JLINC/JLINC.ts new file mode 100644 index 00000000000..dbbd3099dd5 --- /dev/null +++ b/packages/components/nodes/analytic/JLINC/JLINC.ts @@ -0,0 +1,33 @@ +import { INode, INodeParams } from '../../../src/Interface' + +class JLINC_Analytic implements INode { + label: string + name: string + version: number + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs?: INodeParams[] + credential: INodeParams + + constructor() { + this.label = 'JLINC' + this.name = 'jlinc' + this.version = 1.0 + this.type = 'JLINC' + this.icon = 'jlinc.png' + this.category = 'Analytic' + this.baseClasses = [this.type] + this.inputs = [] + this.credential = { + label: 'Connect Credential', + name: 'credential', + type: 'credential', + credentialNames: ['jlincApi'] + } + } +} + +module.exports = { nodeClass: JLINC_Analytic } diff --git a/packages/components/nodes/analytic/JLINC/jlinc.png b/packages/components/nodes/analytic/JLINC/jlinc.png new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/components/nodes/tools/MCP/Atlassian/AtlassianMcp.ts b/packages/components/nodes/tools/MCP/Atlassian/AtlassianMcp.ts index 207fa730c29..965d8f464b0 100644 --- a/packages/components/nodes/tools/MCP/Atlassian/AtlassianMcp.ts +++ b/packages/components/nodes/tools/MCP/Atlassian/AtlassianMcp.ts @@ -21,6 +21,7 @@ import { Tool } from '@langchain/core/tools' import { ICommonObject, INode, INodeData, INodeOptionsValue, INodeParams } from '../../../../src/Interface' import { MCPToolkit } from '../core' import { getCredentialData } from '../../../../src/utils' +import { ATLASSIAN_MCP_SERVER_URL } from '../../../../src/constants' class Atlassian_MCP implements INode { label: string @@ -129,13 +130,8 @@ class Atlassian_MCP implements INode { return [] } - if (!process.env.ATLASSIAN_MCP_SERVER_URL) { - console.error('ATLASSIAN_MCP_SERVER_URL environment variable is not set') - return [] - } - const serverParams = { - url: `${process.env.ATLASSIAN_MCP_SERVER_URL}/sse` + url: `${ATLASSIAN_MCP_SERVER_URL}/sse` } const toolkit = new MCPToolkit(serverParams, 'sse', credentialData.access_token) diff --git a/packages/components/package.json b/packages/components/package.json index 3bc46d9cffa..279037ce031 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -113,6 +113,7 @@ "graphql": "^16.11.0", "html-to-text": "^9.0.5", "ioredis": "^5.7.0", + "@jlinc/langchain": "^0.1.3", "js-levenshtein": "^1.1.6", "jsdom": "^22.1.0", "json-logic-js": "^2.0.5", diff --git a/packages/components/src/constants.ts b/packages/components/src/constants.ts index 757becb8612..8dfb5c9eb89 100644 --- a/packages/components/src/constants.ts +++ b/packages/components/src/constants.ts @@ -21,4 +21,6 @@ export const GOOGLE_DRIVE_SUPPORTED_MIME_TYPES = [ 'application/msword', 'application/vnd.ms-powerpoint', 'text/plain' -].join(',') \ No newline at end of file +].join(',') + +export const ATLASSIAN_MCP_SERVER_URL = 'https://atlassian-remote-mcp.last-rev-llc.workers.dev' diff --git a/packages/components/src/handler.ts b/packages/components/src/handler.ts index 1f2c458f921..0fe1526a804 100644 --- a/packages/components/src/handler.ts +++ b/packages/components/src/handler.ts @@ -41,6 +41,7 @@ import { DataSource } from 'typeorm' import { ChatGenerationChunk } from '@langchain/core/outputs' import { AIMessageChunk, BaseMessageLike } from '@langchain/core/messages' import { Serialized } from '@langchain/core/load/serializable' +import { JLINCTracer } from '@jlinc/langchain' interface AgentRun extends Run { actions: AgentAction[] @@ -590,7 +591,12 @@ export const additionalCallbacks = async (nodeData: INodeData, options: ICommonO organizationId: options.user?.organizationId, aiCredentialsOwnership: aiCredentialsOwnership, messageId: options.messageId, - sessionId: options.sessionId + sessionId: options.sessionId, + ...(options.trackingMetadata && + Object.keys(options.trackingMetadata).reduce((acc, key) => { + acc[`tracking_${key}`] = options.trackingMetadata![key] + return acc + }, {} as Record)) } // const trace = langfuse.trace({ // tags: [`Name:${chatflow.name}`], @@ -710,6 +716,26 @@ export const additionalCallbacks = async (nodeData: INodeData, options: ICommonO const tracer: Tracer | undefined = getOpikTracer(opikOptions) callbacks.push(tracer) + } else if (provider === 'jlinc') { + const dataStoreApiUrl = getCredentialParam('dataStoreApiUrl', credentialData, nodeData) + const dataStoreApiKey = getCredentialParam('dataStoreApiKey', credentialData, nodeData) + const archiveApiUrl = getCredentialParam('archiveApiUrl', credentialData, nodeData) + const archiveApiKey = getCredentialParam('archiveApiKey', credentialData, nodeData) + let agreementId = analytic[provider].agreementId as string + if (!agreementId || agreementId === '') { + agreementId = '00000000-0000-0000-0000-000000000000' + } + const systemPrefix = analytic[provider].systemPrefix as string + const tracer = new JLINCTracer({ + dataStoreApiUrl, + dataStoreApiKey, + archiveApiUrl, + archiveApiKey, + agreementId, + systemPrefix, + debug: false + }) + callbacks.push(tracer) } } } diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts index 2944bc320d0..470150d3248 100644 --- a/packages/components/src/index.ts +++ b/packages/components/src/index.ts @@ -12,3 +12,5 @@ export * from './handler' export * from './followUpPrompts' export * from './validator' export * from './agentflowv2Generator' + +export { ATLASSIAN_MCP_SERVER_URL } from './constants' diff --git a/packages/docs/.env.template b/packages/docs/.env.template new file mode 100644 index 00000000000..6ac0505e4b0 --- /dev/null +++ b/packages/docs/.env.template @@ -0,0 +1,22 @@ +# Marketing & Analytics +# Facebook Pixel ID for webinar tracking (defaults to production pixel if not set) +# Default: 25220750360842472 +DOCUSAURUS_FACEBOOK_PIXEL= + +# Google Analytics 4 Measurement ID (defaults to production GA if not set) +# Default: G-VD1X9LNG3N +DOCUSAURUS_GA_ID= + +# LinkedIn Insight Tag Partner ID (optional, no default) +DOCUSAURUS_LINKEDIN_PIXEL= + +# Google Tag Manager ID (optional, no default) +DOCUSAURUS_GTM_ID= + +# MailerLite Configuration +DOCUSAURUS_MAILERLITE_WEBFORM_ID= +DOCUSAURUS_MAILERLITE_ENABLED=true +DOCUSAURUS_MAILERLITE_API_BASE_URL=https://assets.mailerlite.com/api +DOCUSAURUS_MAILERLITE_GROUP_IDS= +DOCUSAURUS_MAILERLITE_DOUBLE_OPT_IN=false +DOCUSAURUS_MAILERLITE_REDIRECT_URL= \ No newline at end of file diff --git a/packages/docs/docusaurus.config.ts b/packages/docs/docusaurus.config.ts index 491acef3e43..29f60e2ed0d 100644 --- a/packages/docs/docusaurus.config.ts +++ b/packages/docs/docusaurus.config.ts @@ -519,6 +519,10 @@ const config: Config = { ], themes: ['docusaurus-theme-openapi-docs'], // export theme components + scripts: [], + + headTags: [], + themeConfig: { // Replace with your project's social card image: 'img/answer-angent-ai-ogimage.png', diff --git a/packages/docs/openapi/prediction.yaml b/packages/docs/openapi/prediction.yaml index 7f79dea5be1..978074e5508 100644 --- a/packages/docs/openapi/prediction.yaml +++ b/packages/docs/openapi/prediction.yaml @@ -163,6 +163,15 @@ components: type: string description: The MIME type of the file or resource example: image/png + trackingMetadata: + type: object + description: Custom tracking metadata for analytics and reporting purposes (optional). This data is stored in the database and sent to Langfuse with field names prefixed with 'tracking_'. + additionalProperties: true + example: + url: https://example.com/page + source: my-application + userId: user-123 + customField: customValue PredictionResponse: type: object properties: diff --git a/packages/docs/sidebars.js b/packages/docs/sidebars.js deleted file mode 100644 index 98641d52d04..00000000000 --- a/packages/docs/sidebars.js +++ /dev/null @@ -1,110 +0,0 @@ -/** - * Creating a sidebar enables you to: - - create an ordered group of docs - - render a sidebar for each doc of that group - - provide next/previous navigation - - The sidebars can be generated from the filesystem, or explicitly defined here. - - Create as many sidebars as you want. - */ - -// @ts-check - -/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ -const sidebars = { - // By default, Docusaurus generates a sidebar from the docs folder structure - docs: [ - { - type: 'doc', - id: 'intro', - label: 'Getting Started' - }, - { - type: 'category', - label: 'Browser Extension', - link: { - type: 'doc', - id: 'browser/README' - }, - items: [ - { - type: 'autogenerated', - dirName: 'browser' - } - ] - }, - { - type: 'category', - label: 'Chatbot', - link: { - type: 'doc', - id: 'chat/README' - }, - items: [ - { - type: 'autogenerated', - dirName: 'chat' - } - ] - }, - { - type: 'category', - label: 'Studio', - link: { - type: 'doc', - id: 'sidekick-studio/README' - }, - items: [ - { - type: 'autogenerated', - dirName: 'sidekick-studio' - } - ] - }, - { - type: 'category', - label: 'Developers', - link: { - type: 'doc', - id: 'developers/README' - }, - items: [ - { - type: 'autogenerated', - dirName: 'developers' - } - ] - }, - { - type: 'category', - label: 'Use Cases', - link: { - type: 'doc', - id: 'use-cases/README' - }, - items: [ - { - type: 'autogenerated', - dirName: 'use-cases' - } - ] - }, - { - type: 'category', - label: 'Support', - link: { - type: 'doc', - id: 'community/README' - }, - items: [ - { - type: 'autogenerated', - dirName: 'community' - } - ] - } - ] -} - -module.exports = sidebars diff --git a/packages/docs/src/components/WebinarCalendarButtons.tsx b/packages/docs/src/components/WebinarCalendarButtons.tsx index 2c20777e442..26be3885899 100644 --- a/packages/docs/src/components/WebinarCalendarButtons.tsx +++ b/packages/docs/src/components/WebinarCalendarButtons.tsx @@ -23,7 +23,7 @@ export default function WebinarCalendarButtons(): JSX.Element | null { return null } - const title = encodeURIComponent('Enterprise AI Webinar: Deploy AI Agents in 4 Weeks') + const title = encodeURIComponent('Enterprise AI Webinar: Deploy AI Agents in weeks') const details = encodeURIComponent( "Live 60-minute working session with Bradley Taylor & Adam Harris. You'll get the 4-week deployment playbook, ROI calculator, and security checklist." ) @@ -32,7 +32,7 @@ export default function WebinarCalendarButtons(): JSX.Element | null { const googleLink = `https://calendar.google.com/calendar/render?action=TEMPLATE&text=${title}&dates=${startISO}/${endISO}&details=${details}&location=${location}` const outlookLink = `https://outlook.live.com/calendar/0/deeplink/compose?subject=${title}&body=${details}&startdt=${startISO}&enddt=${endISO}&location=${location}` - const icsContent = `BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//AnswerAI//Enterprise AI Webinar//EN\nBEGIN:VEVENT\nUID:${startISO}@theanswer.ai\nDTSTAMP:${startISO}\nDTSTART:${startISO}\nDTEND:${endISO}\nSUMMARY:Enterprise AI Webinar: Deploy AI Agents in 4 Weeks\nDESCRIPTION:Live 60-minute working session with Bradley Taylor & Adam Harris.\nLOCATION:Live Online Webinar\nEND:VEVENT\nEND:VCALENDAR` + const icsContent = `BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//AnswerAI//Enterprise AI Webinar//EN\nBEGIN:VEVENT\nUID:${startISO}@theanswer.ai\nDTSTAMP:${startISO}\nDTSTART:${startISO}\nDTEND:${endISO}\nSUMMARY:Enterprise AI Webinar: Deploy AI Agents in weeks\nDESCRIPTION:Live 60-minute working session with Bradley Taylor & Adam Harris.\nLOCATION:Live Online Webinar\nEND:VEVENT\nEND:VCALENDAR` const icsLink = `data:text/calendar;charset=utf8,${encodeURIComponent(icsContent)}` return ( diff --git a/packages/docs/src/components/WebinarCountdown.tsx b/packages/docs/src/components/WebinarCountdown.tsx index 30ed4a02a89..ad24a2f6dd2 100644 --- a/packages/docs/src/components/WebinarCountdown.tsx +++ b/packages/docs/src/components/WebinarCountdown.tsx @@ -96,7 +96,9 @@ export default function WebinarCountdown({ className, showSeconds = true, compac textAlign: 'center' }} > - {!compact &&
⏰ Webinar starts in:
} + {!compact && ( +
⏰ Webinar starts in:
+ )}
{formatNumber(timeLeft.days)}
-
{timeLeft.days === 1 ? 'day' : 'days'}
+
+ {timeLeft.days === 1 ? 'day' : 'days'} +
)} @@ -134,7 +138,9 @@ export default function WebinarCountdown({ className, showSeconds = true, compac > {formatNumber(timeLeft.hours)} -
{timeLeft.hours === 1 ? 'hour' : 'hours'}
+
+ {timeLeft.hours === 1 ? 'hour' : 'hours'} +
@@ -148,7 +154,9 @@ export default function WebinarCountdown({ className, showSeconds = true, compac > {formatNumber(timeLeft.minutes)}
-
{timeLeft.minutes === 1 ? 'min' : 'mins'}
+
+ {timeLeft.minutes === 1 ? 'min' : 'mins'} +
{showSeconds && ( @@ -163,7 +171,7 @@ export default function WebinarCountdown({ className, showSeconds = true, compac > {formatNumber(timeLeft.seconds)} -
+
{timeLeft.seconds === 1 ? 'sec' : 'secs'}
@@ -171,7 +179,7 @@ export default function WebinarCountdown({ className, showSeconds = true, compac {!compact && ( -
+
{webinarConfig.webinarDate} at {webinarConfig.webinarTime}
)} diff --git a/packages/docs/src/components/WebinarRegistrationForm.tsx b/packages/docs/src/components/WebinarRegistrationForm.tsx index 03e05eec41d..dab977b684c 100644 --- a/packages/docs/src/components/WebinarRegistrationForm.tsx +++ b/packages/docs/src/components/WebinarRegistrationForm.tsx @@ -1,7 +1,8 @@ -import React, { useState, FormEvent, useEffect } from 'react' +import React, { useState, FormEvent, useEffect, useRef } from 'react' import clsx from 'clsx' import { marketingConfig, calculateLeadScore } from '@site/src/config/marketingConfig' import { webinarConfig } from '@site/src/config/webinarContent' +import { trackingService } from '@site/src/services/trackingService' import styles from '../pages/index.module.css' interface FormData { @@ -17,6 +18,7 @@ export default function WebinarRegistrationForm(): JSX.Element { const [errors, setErrors] = useState({}) const [isSubmitting, setIsSubmitting] = useState(false) const [isSubmitted, setIsSubmitted] = useState(false) + const formInteractionStarted = useRef(false) // Load saved email from localStorage useEffect(() => { @@ -28,6 +30,20 @@ export default function WebinarRegistrationForm(): JSX.Element { } }, []) + // Track form abandonment when user leaves page + useEffect(() => { + const handleBeforeUnload = () => { + if (formInteractionStarted.current && !isSubmitted && formData.email) { + trackingService.trackFormInteraction('abandon', 'webinar-registration-unload') + } + } + + if (typeof window !== 'undefined') { + window.addEventListener('beforeunload', handleBeforeUnload) + return () => window.removeEventListener('beforeunload', handleBeforeUnload) + } + }, [formData.email, isSubmitted]) + const validateEmail = (email: string): boolean => { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ if (!emailRegex.test(email)) { @@ -42,6 +58,12 @@ export default function WebinarRegistrationForm(): JSX.Element { const { value } = e.target setFormData({ email: value }) + // Track form interaction on first input + if (!formInteractionStarted.current && value.length > 0) { + formInteractionStarted.current = true + trackingService.trackFormInteraction('start', 'webinar-registration') + } + // Save to localStorage if (typeof window !== 'undefined') { localStorage.setItem('webinar_registration_email', value) @@ -92,6 +114,16 @@ export default function WebinarRegistrationForm(): JSX.Element { if (result.success) { setIsSubmitted(true) + // Track successful registration with Meta Pixel and other tracking services + trackingService.trackWebinarRegistration({ + email: formData.email, + leadScore: calculateLeadScore(formData), + value: 100 // Estimated lead value + }) + + // Track form completion + trackingService.trackFormInteraction('complete', 'webinar-registration') + // Clear saved email if (typeof window !== 'undefined') { localStorage.removeItem('webinar_registration_email') @@ -107,6 +139,9 @@ export default function WebinarRegistrationForm(): JSX.Element { }, 2000) } else { setErrors({ submit: result.message || 'Registration failed. Please try again.' }) + + // Track form abandonment on error + trackingService.trackFormInteraction('abandon', 'webinar-registration') } } catch (error) { console.error('Registration error:', error) @@ -234,7 +269,7 @@ export default function WebinarRegistrationForm(): JSX.Element {
-

🔒 Your information is secure and will never be shared

+

🔒 Your information is secure and will never be shared

) diff --git a/packages/docs/src/config/marketingConfig.ts b/packages/docs/src/config/marketingConfig.ts index 940a346ac66..96559d44181 100644 --- a/packages/docs/src/config/marketingConfig.ts +++ b/packages/docs/src/config/marketingConfig.ts @@ -95,9 +95,9 @@ export interface MarketingConfig { export const marketingConfig: MarketingConfig = { // Easy to update tracking codes tracking: { - googleAnalyticsId: process.env.DOCUSAURUS_GA_ID, + googleAnalyticsId: process.env.DOCUSAURUS_GA_ID || 'G-VD1X9LNG3N', linkedInPixel: process.env.DOCUSAURUS_LINKEDIN_PIXEL, - facebookPixel: process.env.DOCUSAURUS_FACEBOOK_PIXEL, + facebookPixel: process.env.DOCUSAURUS_FACEBOOK_PIXEL || '25220750360842472', gtmId: process.env.DOCUSAURUS_GTM_ID }, diff --git a/packages/docs/src/config/webinarContent.ts b/packages/docs/src/config/webinarContent.ts index 681786d0180..57f69a51eac 100644 --- a/packages/docs/src/config/webinarContent.ts +++ b/packages/docs/src/config/webinarContent.ts @@ -116,19 +116,52 @@ export interface WebinarConfig { }> } +// Helper function to get the next Thursday at 11am PT +const getNextThursdayAt11PT = (): Date => { + const now = new Date() + const result = new Date(now) + + // Get day of week (0 = Sunday, 4 = Thursday) + const currentDay = result.getDay() + const daysUntilThursday = (4 - currentDay + 7) % 7 || 7 // If it's Thursday, get next Thursday + + // Set to next Thursday + result.setDate(result.getDate() + daysUntilThursday) + + // Set time to 11:00 AM PT (18:00 UTC or 19:00 UTC depending on DST) + // For simplicity, we'll use 18:00 UTC (11:00 AM PST / PDT varies) + result.setUTCHours(18, 0, 0, 0) + + // If we're past 11am PT on Thursday, move to next week + if (daysUntilThursday === 0 && now > result) { + result.setDate(result.getDate() + 7) + } + + return result +} + +// Dynamic date calculation +const nextWebinar = getNextThursdayAt11PT() +const webinarDateFormatted = nextWebinar.toLocaleDateString('en-US', { + weekday: 'long', + month: 'long', + day: 'numeric', + year: 'numeric' +}) + export const webinarConfig: WebinarConfig = { - // Basic webinar details - EASY TO UPDATE - webinarDate: 'Saturday, January 18, 2025', - webinarTime: '11:00 AM PST', - webinarDateTimeISO: '2025-01-18T19:00:00Z', + // Basic webinar details - DYNAMICALLY CALCULATED + webinarDate: webinarDateFormatted, + webinarTime: '11:00 AM PT', + webinarDateTimeISO: nextWebinar.toISOString(), maxSeats: 200, currentRegistrations: 147, scarcity: { totalSeats: 200, - registrationDeadline: '2025-01-18T18:59:59Z', + registrationDeadline: new Date(nextWebinar.getTime() - 60000).toISOString(), // 1 minute before start urgencyMessages: [ - "Only {remainingSeats} seats left for Saturday's live session", - 'Registration closes Saturday at 11:00 AM PST', + "Only {remainingSeats} seats left for Thursday's live session", + 'Registration closes Thursday at 11:00 AM PT', '⚡ Limited seating — save your spot now' ] }, @@ -141,7 +174,12 @@ export const webinarConfig: WebinarConfig = { 'Early access to the Enterprise AI Playbook PDF before it goes public' ] }, - pressFeatures: [{ name: 'TechCrunch' }, { name: 'Forbes AI 50' }, { name: 'AWS Startups' }, { name: 'Google Cloud Innovators' }], + pressFeatures: [ + { name: 'Enterprise AI Leaders' }, + { name: 'Cloud Native Solutions' }, + { name: 'AI Implementation Partners' }, + { name: 'Innovation Workshop Series' } + ], hostHighlights: [ { speaker: 'Brad Taylor', @@ -155,22 +193,22 @@ export const webinarConfig: WebinarConfig = { ], testimonialQuotes: [ { - quote: '“We replaced six scattered systems with one compliant AI interface in just four weeks.”', + quote: '"We are consolidating multiple knowledge systems into a unified AI interface with promising early results."', author: 'Customer Success Lead', - role: 'Enterprise Enablement', - company: 'Integral Ad Science' + role: 'Enterprise Technology', + company: 'Fortune 500 AdTech Company' }, { - quote: '“120 analyst hours every week back in our pipeline — the Palatine playbook alone paid for the program.”', - author: 'Deal Operations Director', - role: 'Private Equity', - company: 'Palatine Capital Partners' + quote: '"The potential to save 100+ analyst hours weekly is what drove us to implement this AI framework."', + author: 'Operations Director', + role: 'Financial Services', + company: 'Leading Private Equity Firm' }, { - quote: '“Our reps now find answers in seconds and stay on-message across nine regions.”', - author: 'Director of Sales Enablement', - role: 'Commercial Operations', - company: 'Moonstruck Medical' + quote: '"Our pilot teams are finding information dramatically faster, improving response times across regions."', + author: 'Sales Enablement Lead', + role: 'Healthcare Technology', + company: 'Multi-Regional Healthcare Provider' } ], roadmap: [ @@ -220,36 +258,36 @@ export const webinarConfig: WebinarConfig = { // Headlines - easily A/B testable headlines: { - primary: 'From AI Chaos to Enterprise Success: Deploy AI Agents in 4 Weeks, Not 6 Months', + primary: 'From AI Chaos to Enterprise Success: Deploy AI Agents in weeks, Not months', alternate1: 'Stop Paying AI Tax: How Enterprises Cut Costs 30% While Scaling AI', alternate2: 'The Enterprise AI Playbook: Vendor-Free Implementation in 30 Days' }, // Customer success metrics - UPDATE THESE EASILY customerStats: { - palatine: { - saved: '120 analyst-hours/week', - roi: '$312K annual savings', - deployment: '12 weeks', - systems: '50-60 daily broker emails automated' - }, - ias: { - deployment: '4 weeks', - systems: '6 systems consolidated to 1 AI interface', - roi: '40% faster ticket resolution' - }, - moonstruck: { - reps: '9 sales reps unified', - search: 'minutes to seconds search time', - roi: 'Operations team freed for strategic work' - }, - wow: { - conversion: 'POC → $36K annual license', - roi: 'Complete support workflow automation' - }, - contentful: { - systems: '6 scattered systems to 1 unified interface', - roi: '90% of queries handled instantly by AI' + financial: { + saved: 'Target: 100+ hours/week', + roi: 'Projected 6-figure annual savings', + deployment: '8-12 weeks typical', + systems: 'Automating repetitive document processing' + }, + adtech: { + deployment: '4-6 weeks', + systems: 'Consolidating multiple data sources', + roi: 'Targeting 30%+ faster resolution' + }, + healthcare: { + reps: 'Multiple teams in pilot', + search: 'Dramatically improved search times', + roi: 'Freeing teams for strategic initiatives' + }, + telecom: { + conversion: 'Active POC in progress', + roi: 'Workflow automation underway' + }, + saas: { + systems: 'Unifying scattered knowledge bases', + roi: 'AI-powered instant responses in testing' } }, @@ -443,7 +481,7 @@ export const webinarConfig: WebinarConfig = { faqs: [ { question: "This sounds too complex to implement. How do we know it won't be another 18-month project?", - answer: "IAS (Integral Ad Science) deployed our full solution in exactly 4 weeks with all employees onboarded. We've proven this timeline works because we pre-built 100+ integrations (SFDC, Jira, Confluence, etc.) and use a human-in-the-loop approach rather than trying to automate everything at once." + answer: "IAS (Integral Ad Science) deployed our full solution in exactly weeks with all employees onboarded. We've proven this timeline works because we pre-built 100+ integrations (SFDC, Jira, Confluence, etc.) and use a human-in-the-loop approach rather than trying to automate everything at once." }, { question: "What about vendor lock-in? We've been burned before by platforms that held our data hostage.", diff --git a/packages/docs/src/pages/index.module.css b/packages/docs/src/pages/index.module.css index dac0c207151..195b5cb2660 100644 --- a/packages/docs/src/pages/index.module.css +++ b/packages/docs/src/pages/index.module.css @@ -22,12 +22,14 @@ width: 100%; height: 100%; z-index: 1; + background-color: black; } .threeJsCanvas { width: 100%; height: 100%; pointer-events: none; + opacity: 0.2; } .heroFallback { diff --git a/packages/docs/src/pages/jlinc-partnership.tsx b/packages/docs/src/pages/jlinc-partnership.tsx new file mode 100644 index 00000000000..c6f3ca1f253 --- /dev/null +++ b/packages/docs/src/pages/jlinc-partnership.tsx @@ -0,0 +1,1309 @@ +import clsx from 'clsx' +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' +import Layout from '@theme/Layout' +import JsonLd from '@site/src/components/JsonLd' +import ThreeJsScene from '@site/src/components/Annimations/SphereScene' +import UsingAnswerAgentAISubmenu from '@site/src/components/UsingAnswerAgentAISubmenu' + +import styles from './index.module.css' + +function PartnershipHero() { + return ( +
+
+ +
+
+
Strategic Partnership Announcement
+

Cryptographically-Verifiable AI Collaboration

+

+ Answer Agents × JLINC brings immutable data provenance to AI agent workflows—finally enabling trustworthy AI adoption in + public companies and regulated enterprises. +

+
+ SOX + • + FINRA + • + HIPAA + • + SEC Compliance +
+ +
+ Asynchronous stamping + Vendor-neutral + W3C DID-compliant + Patent-protected (US PTO 2023) +
+
+
+ ) +} + +function VisionSection() { + return ( +
+
+
+ Why This Partnership Matters +
+

Solving AI's Trust Gap

+ +
+

+ As AI capabilities accelerate, a critical barrier emerges: How do you trust what AI produces? For + public companies and regulated industries, this isn't philosophical—it's existential. Boards won't approve + AI-assisted 10-Ks without provable lineage. Auditors won't sign off on AI-generated risk reports without + tamper-evident trails. Compliance officers won't deploy AI workflows that can't demonstrate complete chain of + custody. +

+

+ Answer Agents and JLINC are pioneering the solution. +

+

+ By combining Answer Agents' sophisticated AI orchestration with JLINC's cryptographic provenance protocol, we're + creating something unprecedented: AI workflows where every decision is traceable, every contribution is accountable, + and every output is auditable. +

+
+ +
+
+
+

Answer Agents Brings

+
    +
  • AI orchestration & workflow automation
  • +
  • Human-in-the-loop collaboration
  • +
  • Multi-model & multi-tool integration
  • +
  • Enterprise deployment infrastructure
  • +
+
+
+
+
+

JLINC Brings

+
    +
  • Cryptographic signature protocol (public key cryptography)
  • +
  • Information Sharing Agreements (ISA)
  • +
  • Vendor-neutral ledger anchoring
  • +
  • W3C DID method specification
  • +
+
+
+
+ +
+ Together: Verifiable AI Collaboration—where trust is cryptographically guaranteed, not promised. +
+
+
+ ) +} + +function ProblemSection() { + const problems = [ + { + icon: '📄', + title: 'Where did this come from?', + pain: 'AI generates earnings reports mixing data from 15 sources. Auditor asks: "Prove these numbers came from approved systems."', + reality: 'Screenshots, log files, trust', + problem: 'Not sufficient for SOX compliance' + }, + { + icon: '👁️', + title: 'What exactly did the AI see?', + pain: 'Agent analyzes confidential merger docs. Legal asks: "Show us exactly what context the AI had."', + reality: 'Best-effort prompt logs, often incomplete', + problem: 'Not admissible as evidence' + }, + { + icon: '✍️', + title: 'Who made the final decision?', + pain: 'AI drafts SEC filing, three executives review it. Board asks: "Who signed off on what?"', + reality: 'Email threads, comments in Google Docs', + problem: 'Not audit-ready, no cryptographic proof' + } + ] + + return ( +
+
+
+ The Questions Keeping Executives Up at Night +
+

AI Adoption is Blocked by a Trust Gap

+ +
+ {problems.map((item, idx) => ( +
+
+
+ {item.icon} +
+

{item.title}

+

{item.pain}

+
+
+ Current reality: {item.reality} +
+
+ Problem: {item.problem} +
+
+
+
+ ))} +
+ +
+ + Without verifiable provenance, AI adoption in regulated industries remains limited by trust concerns. + + + Boards, auditors, and compliance teams need cryptographic proof—not just logs—to approve AI-assisted workflows. + +
+
+
+ ) +} + +function SolutionSection() { + const steps = [ + { + number: '1', + icon: '📄', + title: 'Source Verification', + subtitle: 'Ingested documents', + detail: 'SHA-256 hash of each document signed via JLINC agreement', + result: 'Provable origin of all inputs' + }, + { + number: '2', + icon: '🤖', + title: 'Agent Reasoning', + subtitle: 'Agent processes data', + detail: 'Prompts, context windows, and intermediate outputs cryptographically stamped', + result: 'Auditable AI decision-making' + }, + { + number: '3', + icon: '👤', + title: 'Human Collaboration', + subtitle: 'Human review & edits', + detail: 'Each human action appended as new JLINC event with identity verification', + result: 'Clear accountability' + }, + { + number: '4', + icon: '📊', + title: 'Final Output', + subtitle: 'Published report', + detail: 'Final document hash linked to complete lineage chain', + result: 'One-click audit trail reproduction' + } + ] + + return ( +
+
+
+ How the Integration Works +
+

Immutable Chain of Custody for AI Workflows

+

+ Every step—from data ingestion to final report—is cryptographically stamped and anchored to an immutable ledger +

+ +
+ {steps.map((step, idx) => ( +
+
+
+ {step.number} +
+
{step.icon}
+

+ {step.title} +

+

+ {step.subtitle} +

+
+ Technical: {step.detail} +
+
+ Result: {step.result} +
+ {idx < steps.length - 1 && ( +
+ → +
+ )} +
+
+ ))} +
+ +
+ Cryptographic Foundation: Every event is signed using standard public-key cryptography and anchored to + your chosen ledger—whether that's a private database, Hyperledger, or public blockchain. +
+
+
+ ) +} + +function ComparisonSection() { + return ( +
+
+
+ What Makes This Unique +
+

Beyond Traditional LLM Operations

+ +
+ + + + + + + + + + {[ + ['Lineage Granularity', 'Best-effort prompt logs', 'Cryptographic event stream at context-window level'], + ['Proof Standard', 'Screenshot / PDF export', 'Ledger-backed, machine-verifiable receipts'], + [ + 'Human ↔ AI Handshake', + 'Informal comments or approval emails', + 'Dual-signed cryptographic agreements (W3C DID-compliant)' + ], + ['Tamper Detection', 'File modification timestamps', 'Immutable chain-of-custody with hash verification'], + ['Audit Trail', 'Manual log review by auditors', 'Instant, reproducible provenance queries via API'], + [ + 'Compliance', + 'Documentation assembled after-the-fact', + 'Built-in SOX/FINRA/HIPAA compliance from day one' + ], + [ + 'Identity Verification', + 'Username/password authentication', + 'Cryptographic public-key identity (non-repudiable)' + ], + ['Ledger Flexibility', 'Proprietary databases', 'Vendor-neutral: private DB, Hyperledger, or public chain'] + ].map((row, idx) => ( + + + + + + ))} + +
+ Capability + + Conventional LLM Ops + + Answer Agents + JLINC +
{row[0]}{row[1]}{row[2]}
+
+ +
+ This isn't just better logging—it's a{' '} + fundamental shift in how AI systems prove their trustworthiness. From "we + logged it" to "it's cryptographically impossible to falsify." +
+
+
+ ) +} + +function BenefitsSection() { + const benefits = [ + { + icon: '', + title: 'Audit-Ready by Default', + subtitle: 'For Auditors', + description: + 'Zero-knowledge proofs of data lineage satisfy SOX, FINRA, HIPAA requirements. Verify the entire chain in seconds, not weeks.', + detail: 'Machine-readable audit trails via API' + }, + { + icon: '', + title: 'Tamper-Evident', + subtitle: 'For Compliance Officers', + description: 'Any change produces a new cryptographically signed event. Unauthorized edits are immediately detectable.', + detail: 'Perfect for 21 CFR Part 11, GDPR Article 25' + }, + { + icon: '', + title: 'Reproducible', + subtitle: 'For Engineers', + description: 'Recreate the exact state of any AI decision. Debug production issues by replaying provenance.', + detail: 'Show precisely what the agent saw and why' + }, + { + icon: '', + title: 'Vendor-Neutral', + subtitle: 'For CTOs', + description: 'JLINC hashes anchor to ANY ledger you choose. Not locked into blockchain vendor or infrastructure.', + detail: 'Works with your existing security posture' + }, + { + icon: '', + title: 'Non-Repudiable', + subtitle: 'For Legal', + description: 'Cryptographic signatures prove who authorized what. Dual-signed human-AI agreements defensible in court.', + detail: 'Clear delineation of responsibility' + }, + { + icon: '', + title: 'Scale with Confidence', + subtitle: 'For Executives', + description: 'Board members can trust AI-assisted strategic documents. Scale agent workflows without sacrificing governance.', + detail: "Competitive advantage: deploy AI where others can't" + } + ] + + return ( +
+
+
+ Key Benefits +
+

Enterprise-Grade AI Governance

+ +
+ {benefits.map((benefit, idx) => ( +
+
+ {benefit.icon && ( +
{benefit.icon}
+ )} +

+ {benefit.title} +

+

+ {benefit.subtitle} +

+

{benefit.description}

+
+ {benefit.detail} +
+
+
+ ))} +
+
+
+ ) +} + +function IndustryUseCases() { + const industries = [ + { + icon: '🏦', + title: 'Financial Services', + useCases: [ + 'Earnings releases & 10-K filings', + 'Credit risk assessment reports', + 'Trading compliance monitoring', + 'SEC regulatory disclosures' + ], + regulations: 'SOX 404, FINRA 2210, SEC Regulation S-P', + value: 'Prove to auditors that AI-assisted financial disclosures have complete, cryptographically-verified data lineage from source systems to published documents.' + }, + { + icon: '🏥', + title: 'Healthcare & Life Sciences', + useCases: ['Clinical trial data analysis', 'Adverse event reporting', 'IRB documentation', 'Medical research publications'], + regulations: 'HIPAA, 21 CFR Part 11 (FDA), GDPR Article 9', + value: 'Demonstrate that AI analysis of protected health information maintains complete chain of custody and consent tracking throughout the research lifecycle.' + }, + { + icon: '⚖️', + title: 'Legal & Professional Services', + useCases: ['E-discovery document analysis', 'Contract review & redlining', 'Due diligence reports', 'Attorney work product'], + regulations: 'Attorney-client privilege, Federal Rules of Evidence', + value: 'Create defensible AI-assisted legal work product with chain of custody provable in court. Maintain privilege while demonstrating competence.' + }, + { + icon: '🏢', + title: 'Public Companies', + useCases: [ + 'ESG reporting & sustainability disclosures', + 'Board meeting materials', + 'Investor communications', + 'Strategic planning documents' + ], + regulations: 'SEC rules, NYSE/NASDAQ governance, SOX', + value: 'Give your board confidence in AI-assisted strategic documents. Prove data sources, AI reasoning, and human review process for fiduciary duty compliance.' + } + ] + + return ( +
+
+
+ Industry Use Cases +
+

Built for Enterprises That Can't Afford to Guess

+ +
+ {industries.map((industry, idx) => ( +
+
+
{industry.icon}
+

{industry.title}

+ +
+ Use Cases: +
    + {industry.useCases.map((useCase, i) => ( +
  • {useCase}
  • + ))} +
+
+ +
+ Regulatory Frameworks: +

{industry.regulations}

+
+ +
+ {industry.value} +
+
+
+ ))} +
+
+
+ ) +} + +function TechnicalArchitecture() { + return ( +
+
+
+ Technical Architecture +
+

Protocol-Based, Not Platform-Locked

+

+ JLINC's open standard integrates seamlessly with Answer Agents' orchestration layer +

+ +
+
+                        {`┌─────────────────────────────────────────────────────────┐
+│         ANSWER AGENTS ORCHESTRATION LAYER               │
+│  ┌───────────────────────────────────────────────────┐ │
+│  │  Agent Workflows (LangChain, Custom, Multi-Agent)│ │
+│  └────────────┬──────────────────────────────────────┘ │
+│               │                                          │
+│  ┌────────────▼──────────────────────────────────────┐ │
+│  │  JLINC Integration Middleware                     │ │
+│  │  • Document Ingestion Hook                        │ │
+│  │  • Agent Reasoning Logger                         │ │
+│  │  • Human Interaction Capture                      │ │
+│  │  • Output Verification Endpoint                   │ │
+│  └────────────┬──────────────────────────────────────┘ │
+└───────────────┼──────────────────────────────────────────┘
+                │
+                │ JLINC Protocol API
+                │ (Curve25519 signatures, ISA framework)
+                │
+      ┌─────────▼─────────┐
+      │  JLINC DATA LAYER │
+      │  (Provenance API) │
+      └─────────┬─────────┘
+                │
+     ┌──────────┼──────────┐
+     │          │          │
+     ▼          ▼          ▼
+[Private     [Hyperledger] [Public
+ Database]                 Blockchain]`}
+                    
+
+ +
+
+
+

Integration Points

+
    +
  • Document ingestion hook
  • +
  • Agent reasoning middleware
  • +
  • Human interaction logger
  • +
  • Output verification endpoint
  • +
+
+
+
+
+

Cryptographic Approach

+
    +
  • Public-key cryptographic signatures
  • +
  • SHA-256 content hashing
  • +
  • W3C DID method specification
  • +
  • Information Sharing Agreements (ISA)
  • +
+
+
+
+ +
+
+
+

Deployment Options

+
+
+ Cloud-hosted +
+ AWS, Azure, GCP +
+
+ On-premises +
+ Air-gapped supported +
+
+ Hybrid +
+ AI cloud, provenance on-prem +
+
+ Custom ledger +
+ Your blockchain, your rules +
+
+
+
+
+ +
+ Performance: JLINC stamping happens asynchronously—minimal latency added per event. Your workflows run + at full speed with cryptographic verification in the background. +
+
+
+ ) +} + +function AboutJLINCSection() { + return ( +
+
+
+ About JLINC +
+

Powered by JLINC's Open Provenance Protocol

+ +
+

+ Founded in 2015 by Jim Fournier and Victor Grey, JLINC set out to solve a fundamental problem:{' '} + How do you prove where information came from and who touched it? Not with proprietary databases or + vendor-locked platforms, but with an open protocol anyone can use. +

+

+ The result: Information Sharing Agreements (ISA)—cryptographically signed contracts between systems + that create an immutable record of every data exchange. +

+
+ +
+
+
+

Protocol, Not Platform

+

+ JLINC isn't a blockchain company or SaaS vendor. It's an open protocol specification that + works with any infrastructure. Think of it like SMTP for provenance—a standard anyone can implement. +

+
+
+
+
+

Patent-Protected Innovation

+

+ US Patent "Internet Data Usage Control Systems" issued January 17, 2023 by the US Patent and Trademark + Office. Legally protected intellectual property with nearly a decade of R&D. +

+
+
+
+ +
+
+
+

Standards-Compliant

+

+ JLINC maintains a W3C-compatible Decentralized Identifier (DID) method, ensuring interoperability with + emerging digital identity standards. +

+
+
+
+
+

Battle-Tested

+

+ In production since 2015, handling data provenance for enterprise workflows. Proven at scale in regulated + environments. +

+
+
+
+ + +
+
+ ) +} + +function ImplementationRoadmap() { + const phases = [ + { + phase: 'Phase 1: Pilot', + duration: 'Weeks 1-2', + icon: '🧪', + tasks: [ + 'Enable JLINC stamping in sandbox environment', + 'Test with sample workflows (dummy data)', + 'Verify integration with chosen ledger anchor', + 'Performance benchmarking (latency, throughput)' + ], + deliverable: 'Proof-of-concept report with provenance query demo' + }, + { + phase: 'Phase 2: Policy Mapping', + duration: 'Weeks 3-5', + icon: '📋', + tasks: [ + 'Map JLINC event types to governance controls', + 'Define signature requirements (who signs what)', + 'Establish ledger anchor strategy', + 'Identity provisioning (DID creation)' + ], + deliverable: 'Governance playbook & technical integration doc' + }, + { + phase: 'Phase 3: Production', + duration: 'Weeks 6-8', + icon: '🚀', + tasks: [ + 'Deploy to production AI workflows', + 'Train teams on provenance verification', + 'Integrate with existing audit processes', + 'Monitor & optimize performance' + ], + deliverable: 'Operational verifiable AI with audit dashboard' + } + ] + + return ( +
+
+
+ Implementation Roadmap +
+

From Pilot to Production in 8 Weeks

+ +
+ {phases.map((phase, idx) => ( +
+
+
+

{phase.phase}

+ {phase.duration} +
+
{phase.icon}
+
    + {phase.tasks.map((task, i) => ( +
  • {task}
  • + ))} +
+
+ Deliverable: {phase.deliverable} +
+
+
+ ))} +
+ +
+
+

Success Metrics

+
+
Minimal latency overhead
+
100% provenance coverage
+
Auditor sign-off achieved
+
Board demo completed
+
+
+
+ +
+ Support Throughout: Dedicated integration engineer, JLINC protocol specialist, weekly syncs, and + real-time Slack/Teams support. +
+
+
+ ) +} + +function PartnershipVisionSection() { + return ( +
+
+
+ Partnership Vision +
+

Beyond Integration: Pioneering Verifiable AI

+ +
+

+ This partnership represents more than a technical integration. Answer Agents and JLINC are{' '} + pioneering a new category: Verifiable AI Collaboration. +

+

+ As AI becomes more capable—from writing code to making medical diagnoses to managing investment portfolios—the need + for provenance becomes existential. Society can't afford opaque AI systems in critical domains. We need verifiable + intelligence. +

+

+ That's what we're building together. +

+
+ +

Joint Innovation Roadmap

+ +
+
+
+

Near-term (2025)

+
    +
  • Real-time provenance APIs
  • +
  • Multi-party workflows
  • +
  • Agent-to-agent provenance
  • +
+
+
+
+
+

Mid-term (2026)

+
    +
  • Automated compliance reporting
  • +
  • AI model lineage tracking
  • +
  • Zero-knowledge provenance
  • +
+
+
+
+
+

Long-term (2027+)

+
    +
  • Verifiable AI marketplace
  • +
  • Regulatory framework contribution
  • +
  • Academic research partnership
  • +
+
+
+
+ +
+ Answer Agents and JLINC are committed to making AI trustworthy by design, + not by promise. This partnership is the first step toward a future where provenance is as fundamental to AI systems as + HTTPS is to web security. +
+
+
+ ) +} + +function FAQSection() { + const faqs = [ + { + q: 'How is this different from blockchain-based AI solutions?', + a: 'JLINC is a protocol, not a blockchain. It can anchor to private databases, Hyperledger, or public blockchains—giving you maximum flexibility. Most "blockchain AI" solutions lock you into specific infrastructure. JLINC adapts to yours.' + }, + { + q: 'Does cryptographic verification slow down AI workflows?', + a: 'No. JLINC stamping happens asynchronously, adding <100ms per event (imperceptible to users). Your agents run at full speed while provenance is captured in the background.' + }, + { + q: "What if we don't want to use a public blockchain?", + a: "You don't have to. JLINC is vendor-neutral. Anchor to your private PostgreSQL database, Hyperledger Fabric, or any system you trust. The cryptographic signatures provide tamper-evidence regardless of ledger choice." + }, + { + q: 'Can we verify provenance years later?', + a: "Yes. JLINC creates immutable records that can be queried indefinitely. As long as the ledger exists (your responsibility to maintain), provenance is verifiable. Think of it like digital signatures on PDFs—they don't expire." + }, + { + q: 'How do you protect data privacy?', + a: "Only cryptographic hashes are written to the ledger—never the actual data. Hashes are one-way functions (can't reverse-engineer content). Your sensitive information stays in your systems with your access controls." + }, + { + q: 'What happens if Answer Agents or JLINC goes out of business?', + a: "JLINC is an open protocol. The signature verification doesn't depend on JLINC-the-company existing. As long as you have the cryptographic keys and ledger data, you can verify provenance. We can also provide code escrow arrangements." + } + ] + + return ( +
+
+
+ Frequently Asked Questions +
+

Common Questions About Verifiable AI

+ +
+ {faqs.map((faq, idx) => ( +
+

{faq.q}

+

{faq.a}

+
+ ))} +
+
+
+ ) +} + +function DemoCTASection() { + return ( +
+
+
+ Ready to Get Started? +
+

Experience Verifiable AI in Action

+

+ See how Answer Agents + JLINC transforms AI workflows from "trust us" to "verify yourself" +

+ +
+
+

Schedule 30-Minute Demo

+

What you'll see:

+
    +
  • Live cryptographic stamping of AI workflow
  • +
  • Real-time provenance query demonstration
  • +
  • Industry-specific use case walkthrough
  • +
  • Implementation timeline & pricing discussion
  • +
+ +

+ No commitment required • NDA available upon request • Custom demos for your use case +

+
+ +
+ +
+
+

For Business Teams

+ +
+
+
+
+
+
+ ) +} + +function CoFooter() { + return ( +
+
+
+
+ Answer Agents + × + JLINC +
+
+ Strategic Technology Partnership +
+

Building the future of trustworthy AI

+
+ + + +
+ © 2025 Last Rev / AnswerAI × JLINC Protocol. All rights reserved. +
+
+
+ ) +} + +export default function JLINCPartnership(): JSX.Element { + const { siteConfig } = useDocusaurusContext() + + return ( +
+ + + + +
+ + + + + + + + + + + + + +
+
+
+ ) +} diff --git a/packages/docs/src/pages/webinar-enterprise-ai.tsx b/packages/docs/src/pages/webinar-enterprise-ai.tsx index 748e64fc50b..760cb8e7562 100644 --- a/packages/docs/src/pages/webinar-enterprise-ai.tsx +++ b/packages/docs/src/pages/webinar-enterprise-ai.tsx @@ -7,7 +7,6 @@ import WebinarCountdown from '@site/src/components/WebinarCountdown' import WebinarCalendarButtons from '@site/src/components/WebinarCalendarButtons' import { webinarConfig, getAvailableSeats, getLocalWebinarDateTime, getRegistrationDeadline } from '@site/src/config/webinarContent' import { trackingService } from '@site/src/services/trackingService' -import WebinarLegalFooter from '@site/src/components/WebinarLegalFooter' import styles from './index.module.css' @@ -16,7 +15,7 @@ const RiskAssurances = () => (
  • ✅ 30-day replay access + slides
  • ✅ Zero sales pitch — just frameworks and dashboards
  • ✅ Privacy-first: your email stays with us (no spam)
  • -
  • ✅ Can’t attend live? Register anyway and we’ll deliver the replay + toolkit automatically
  • +
  • ✅ Can't attend live? Register anyway and we'll deliver the replay + toolkit automatically
  • ) @@ -80,11 +79,11 @@ function WebinarHero() { const heroBullets = [ { icon: '⚙️', - copy: '4-week IAS rollout: six disconnected systems unified into one governed assistant.' + copy: '4-week enterprise rollout: multiple disconnected systems unified into one governed AI assistant.' }, { icon: '💰', - copy: '$312K annual savings: Palatine’s automation play is still running live after 90 days.' + copy: 'Targeting 6-figure annual savings: automation frameworks proven in live deployments.' }, { icon: '🛡️', @@ -100,7 +99,7 @@ function WebinarHero() { }, { icon: '🤝', - copy: 'Hybrid support: live AnswerAgent voice coaches plus human office hours so your team isn’t alone day one.' + copy: 'Hybrid support: live AnswerAgent voice coaches plus human office hours so your team isn't alone day one.' } ] @@ -163,7 +162,7 @@ function WebinarHero() { and framework they built to deploy enterprise AI agents in weeks, not months.

    -
    What you’ll see live
    +
    What you'll see live
    -
    @@ -226,9 +224,9 @@ function HeroProofSection() { const testimonial = webinarConfig.testimonialQuotes?.[0] || ({ - quote: '“We went from scattered information across 6 systems to one unified AI interface in 28 days.”', + quote: '"We are seeing promising early results from unifying our scattered systems into one AI interface."', author: 'Customer Success Lead', - company: 'Integral Ad Science' + company: 'Enterprise Technology' } as const) const hasPress = pressFeatures.length > 0 @@ -331,8 +329,7 @@ function ValueProposition() {
    🎯

    Live 4-Week Framework

    - Watch the exact deployment process used by IAS to go from scattered systems to unified AI in just 4 - weeks. + Watch the exact deployment process used to go from scattered systems to unified AI in just 4-6 weeks.

    @@ -347,8 +344,8 @@ function ValueProposition() {
    💰

    Real ROI Numbers

    - $312K saved (Palatine), 120 hours/week (IAS), minutes-to-seconds search time (Moonstruck). See the - actual proof. + 100+ hours/week saved potential, dramatically faster search times, 6-figure annual savings projected. + See the framework.

    @@ -405,29 +402,29 @@ function CustomerLogosSection() { const stats = webinarConfig.customerStats const customers = [ { - name: 'Integral Ad Science', - highlight: '4-week deployment • 6 systems → 1 AI hub', - metric: stats.ias?.roi || '40% faster ticket resolution' + name: 'Fortune 500 AdTech', + highlight: '4-6 week deployment • Multiple systems unified', + metric: stats.adtech?.roi || 'Targeting 30%+ faster resolution' }, { - name: 'Palatine Capital Partners', - highlight: '120 analyst-hours/week automated', - metric: stats.palatine?.saved || '$312K annual savings' + name: 'Leading Financial Services', + highlight: 'Target: 100+ hours/week automated', + metric: stats.financial?.saved || 'Projected 6-figure annual savings' }, { - name: 'Moonstruck Medical', - highlight: '9 reps unified • search in seconds', - metric: stats.moonstruck?.search || '3× faster enablement' + name: 'Healthcare Technology', + highlight: 'Multiple teams in pilot', + metric: stats.healthcare?.search || 'Dramatically faster search' }, { - name: 'WOW! Internet', - highlight: 'Support workflows automated', - metric: stats.wow?.conversion || 'POC → $36K annual license' + name: 'Major Telecom Provider', + highlight: 'Workflow automation underway', + metric: stats.telecom?.conversion || 'Active POC in progress' }, { - name: 'Contentful', - highlight: '90% of knowledge requests automated', - metric: stats.contentful?.roi || '6 systems consolidated' + name: 'Enterprise SaaS Platform', + highlight: 'Knowledge bases being unified', + metric: stats.saas?.roi || 'AI-powered responses in testing' } ] @@ -443,7 +440,8 @@ function CustomerLogosSection() {

    Trusted by teams shipping enterprise AI in weeks

    - These teams used the playbook you’ll learn on Saturday to launch compliance-ready AI agents and unlock immediate ROI. + These teams used the playbook you'll learn on Thursday to launch compliance-ready AI agents and unlock immediate + ROI.

    {customers.map((customer) => ( @@ -504,7 +502,7 @@ function ValueStackSection() {
    ))}
    -
    Total value: $1,035 — access it all free on Saturday.
    +
    Total value: $1,035 — access it all free on Thursday.
    ) @@ -516,7 +514,7 @@ function MidPageCTA() {
    -

    Need the playbook before Saturday?

    +

    Need the playbook before Thursday?

    Drop your email to hold your seat and get the Enterprise AI readiness checklist + ROI worksheet immediately.

    @@ -551,34 +549,35 @@ function CustomerSuccessSection() {
    💰
    -
    $312K
    -
    Annual savings at Palatine Capital
    +
    6-Figure
    +
    Projected annual savings

    - Automated 120 analyst-hours every week by routing 50-60 broker emails straight into underwriting workflows. + Target: automating 100+ analyst-hours weekly through intelligent document routing and processing workflows.

    ⚡
    -
    4 Weeks
    -
    Full deployment at IAS
    +
    4-6 weeks
    +
    Typical deployment timeline

    - Unified 6 scattered systems into a single AI interface with complete audit trails and compliance approvals. + Unifying scattered systems into a single AI interface with complete audit trails and compliance approvals.

    🚀
    3× Faster
    -
    Sales enablement at Moonstruck
    +
    Sales enablement improvement

    - 9 distributed reps now get answers in seconds, freeing operations to focus on strategic launches and compliance. + Distributed teams getting answers in seconds, freeing operations to focus on strategic initiatives and + compliance.

    - 💡 Saturday’s session walks through these playbooks step-by-step so you can replicate them inside your org. + 💡 Thursday's session walks through these playbooks step-by-step so you can replicate them inside your org.

    @@ -782,7 +781,7 @@ function AgendaSection() {

    60-Minute Game Plan

    - We move fast — you’ll leave with a week-by-week rollout timeline, governance blueprint, and next-step checklist. + We move fast — you'll leave with a week-by-week rollout timeline, governance blueprint, and next-step checklist.

    @@ -821,8 +820,8 @@ function FinalCTA() {

    Ready to Launch an AI Win in the Next 30 Days?

    - Save your seat for Saturday’s live workshop and walk away with the exact templates, governance safeguards, - and deployment timeline that closed enterprise deals for IAS, Palatine, Moonstruck, and more. + Save your seat for Thursday's live workshop and walk away with the exact templates, governance + safeguards, and deployment timeline that's driving success for leading enterprises.

    Is this a sales pitch?

    - Nope. It’s a live teardown of the frameworks and dashboards that drive our enterprise deployments. - You’ll see product, but there’s no sales deck. + Nope. It's a live teardown of the frameworks and dashboards that drive our enterprise deployments. + You'll see product, but there's no sales deck.

    Will it be recorded?

    - Yes — register and you’ll get 30-day replay access plus the slide deck, worksheets, and toolkit + Yes — register and you'll get 30-day replay access plus the slide deck, worksheets, and toolkit downloads.

    -

    What if I can’t attend live?

    +

    What if I can't attend live?

    - Secure your seat anyway and catch the replay. We’ll also send the templates and instructions so you can - execute at your pace. + Secure your seat anyway and catch the replay. We'll also send the templates and instructions so you + can execute at your pace.

    @@ -1006,9 +1005,8 @@ export default function WebinarEnterpriseAI(): JSX.Element { return (
    @@ -1029,7 +1027,6 @@ export default function WebinarEnterpriseAI(): JSX.Element { -
    diff --git a/packages/docs/src/pages/webinar-thank-you.tsx b/packages/docs/src/pages/webinar-thank-you.tsx index 671a7f0adf7..5baa1f5cadd 100644 --- a/packages/docs/src/pages/webinar-thank-you.tsx +++ b/packages/docs/src/pages/webinar-thank-you.tsx @@ -47,7 +47,7 @@ function ThankYouHero() { 🎉

    Registration confirmed

    -

    You’re locked in for Saturday’s Enterprise AI playbook

    +

    You're locked in for Thursday's Enterprise AI playbook

    We go live {localEventTime}. Take a minute now so the workshop zeroes in on the workflow your leaders care about most. @@ -74,7 +74,7 @@ function ThankYouHero() {

    Share with your team @@ -376,7 +376,7 @@ function ProgressiveProfileForm() {
    Optional prep -

    Shape Saturday around your KPIs

    +

    Shape Thursday around your KPIs

    Choose your path: spend two minutes with the AI coach or drop the details below so Bradley can tailor the live walkthrough to your stack. @@ -499,7 +499,7 @@ function WhatToExpect() { return (

    -

    What to Expect on Saturday

    +

    What to Expect on Thursday

    A 60-minute working session that shows you exactly how teams like IAS, Palatine Capital, and Moonstruck Medical shipped governed AI agents in four weeks. @@ -646,7 +646,7 @@ function SocialSharing() { const webinarUrl = typeof window !== 'undefined' ? `${window.location.origin}/webinar-enterprise-ai` : 'https://theanswer.ai/webinar-enterprise-ai' const shareText = - 'Just booked AnswerAI’s “Deploy AI Agents in 4 Weeks” workshop. Live build, governance checklist, and playbooks from IAS & Palatine. Join me:' + 'Just booked AnswerAI’s “Deploy AI Agents in weeks” workshop. Live build, governance checklist, and playbooks from IAS & Palatine. Join me:' const opsMessage = `Hey team — I locked in our seat for AnswerAI's Enterprise AI workshop (${getLocalWebinarDateTime()}). It shows the exact 4-week rollout we want. Grab a spot here: ${webinarUrl}\n\nPS: Add your workflow so they cover it live: ${webinarUrl}#attendee-prep` const execMessage = `Flagging an Enterprise AI session (${getLocalWebinarDateTime()}) that walks through the 4-week deployment model we’ve been evaluating. Includes ROI benchmarks + compliance templates. Register: ${webinarUrl}` @@ -775,7 +775,7 @@ function FinalAssurance() {

    Share as much (or as little) as you like—your data stays with us

    - Everything you submit—whether typed or voiced—is used only to personalize Saturday and the optional pilot + Everything you submit—whether typed or voiced—is used only to personalize Thursday and the optional pilot review. No cold calls, no surprise sequences.