- A strong first workflow + Use this quick fit check
-
{fits.map((item) => (
diff --git a/components/ReplayHero.js b/components/ReplayHero.js
index 8d40a32..e52b70a 100644
--- a/components/ReplayHero.js
+++ b/components/ReplayHero.js
@@ -32,8 +32,9 @@ export default function ReplayHero() {
- Open the end-to-end demo
+ Explore the full demo
Compare methods and results
diff --git a/components/StructuredData.js b/components/StructuredData.js
index 729e557..dffab6a 100644
--- a/components/StructuredData.js
+++ b/components/StructuredData.js
@@ -71,7 +71,7 @@ export const organizationNode = {
},
image: `${SITE_URL}/og.png`,
description:
- 'OpenAdapt builds an open-source governed workflow compiler and runtime for repeated GUI work in applications without a usable API. A demonstrated task is compiled into a deterministic local program; healthy runs make no model calls; every consequential run ends verified or halted with a preserved report.',
+ 'OpenAdapt provides verified automation from demonstration. It compiles repeated GUI work into deterministic local programs, makes no model calls on healthy runs, and keeps the evidence behind each typed outcome.',
foundingDate: '2023',
sameAs: SAME_AS,
knowsAbout: [
@@ -84,7 +84,7 @@ export const organizationNode = {
'Healthcare revenue cycle automation',
'Electronic health record workflow automation',
],
- slogan: 'Automate the UI-only work your APIs cannot reach.',
+ slogan: 'Automate the work your systems still make people do.',
}
export const websiteNode = {
@@ -94,7 +94,7 @@ export const websiteNode = {
alternateName: 'OpenAdapt',
url: SITE_URL,
description:
- 'OpenAdapt compiles demonstrated GUI workflows into deterministic, locally executable programs, verifies the intended business effect against the system of record, and halts when the execution contract cannot be proved.',
+ 'OpenAdapt compiles demonstrated GUI work into deterministic automation and verifies the declared result before it reports success.',
publisher: { '@id': ORGANIZATION_ID },
inLanguage: 'en',
}
@@ -122,7 +122,7 @@ export const softwareApplicationNode = {
softwareVersion: status.versions.launcher,
url: SITE_URL,
description:
- 'Open-source governed workflow compiler and runtime. Demonstrate a bounded, repeated GUI task once; OpenAdapt compiles it into a deterministic local program, replays it with zero model calls on healthy runs, and re-resolves, proposes a reviewable repair, or halts when the interface drifts. Runs on browser, Windows, macOS, Linux, RDP, and Citrix/VDI surfaces.',
+ 'Open-source compiler and governed runtime for repeated GUI work. OpenAdapt turns a bounded demonstration into a deterministic local program, replays it with zero model calls on healthy runs, and re-resolves, proposes a governed repair, or halts when the interface drifts. Runs on browser, Windows, macOS, Linux, RDP, and Citrix/VDI surfaces.',
downloadUrl: 'https://pypi.org/project/openadapt/',
installUrl: `${SITE_URL}/download`,
softwareHelp: { '@type': 'CreativeWork', url: 'https://docs.openadapt.ai' },
diff --git a/components/TrustSummary.js b/components/TrustSummary.js
index 3363625..82a1f49 100644
--- a/components/TrustSummary.js
+++ b/components/TrustSummary.js
@@ -13,9 +13,9 @@ export default function TrustSummary() {
return (
Trust by construction
+Data and control
- Keep control of the data, action, and evidence + Keep sensitive work in the boundary you approve
-
{controls.map((control) => (
@@ -34,4 +34,3 @@ export default function TrustSummary() {
)
}
-
diff --git a/cypress/e2e/basic.cy.js b/cypress/e2e/basic.cy.js
index ea82498..c51612a 100644
--- a/cypress/e2e/basic.cy.js
+++ b/cypress/e2e/basic.cy.js
@@ -41,12 +41,12 @@ describe('public product truth', () => {
cy.visit('/')
})
- it('leads with the governed compiler and qualifies the buyer', () => {
+ it('leads with the buyer outcome and routes to a workflow review', () => {
cy.get('h1').should(
'contain.text',
- 'Automate the UI-only work your APIs can’t reach.'
+ 'Automate the work your systems still make people do.'
)
- cy.contains('a', 'Qualify one workflow').should(
+ cy.get('[data-testid="workflow-fit-cta"]').should(
'have.attr',
'href',
'/qualify'
diff --git a/cypress/e2e/public-surface-coherence.cy.js b/cypress/e2e/public-surface-coherence.cy.js
index add4a1c..f16b172 100644
--- a/cypress/e2e/public-surface-coherence.cy.js
+++ b/cypress/e2e/public-surface-coherence.cy.js
@@ -33,14 +33,16 @@ describe('public surface coherence', () => {
'contain.text',
'stars on OpenAdapt'
)
- cy.contains('a', 'Qualify one workflow')
+ cy.get('[data-testid="workflow-fit-cta"]')
.should('be.visible')
.and('have.attr', 'href', '/qualify')
+ cy.get('[data-testid="demo-cta"]')
+ .should('be.visible')
+ .and('have.attr', 'href', '/#demo')
cy.get('[data-testid="local-quickstart-cta"]')
.should('be.visible')
.and('have.attr', 'href', '/start')
cy.get('[data-testid="cloud-demo-cta"]')
- .should('be.visible')
.and(
'have.attr',
'href',
diff --git a/cypress/e2e/reference-demo.cy.js b/cypress/e2e/reference-demo.cy.js
index 31306bf..f87aa88 100644
--- a/cypress/e2e/reference-demo.cy.js
+++ b/cypress/e2e/reference-demo.cy.js
@@ -90,19 +90,55 @@ describe('shared real-application demo', () => {
.should(($video) => {
expect($video[0].videoWidth).to.be.greaterThan(0)
})
- .then(($video) => {
- const video = $video[0]
- return new Cypress.Promise((resolve) => {
- video.currentTime = 0.59
- setTimeout(() => {
- video.playbackRate = 0.25
- video.play().then(resolve)
- }, 100)
+ cy.get('@player').then(($player) => {
+ const player = $player[0]
+ const video = player.querySelector('video')
+ const Observer =
+ player.ownerDocument.defaultView.MutationObserver
+
+ return new Cypress.Promise((resolve, reject) => {
+ let timeoutId
+ let playbackTimer
+ const fail = (error) => {
+ observer.disconnect()
+ video.pause()
+ clearTimeout(timeoutId)
+ clearTimeout(playbackTimer)
+ reject(error)
+ }
+ const finishIfBound = () => {
+ if (
+ player.getAttribute('data-decoded-frame-index') !== '1'
+ ) {
+ return false
+ }
+ video.pause()
+ observer.disconnect()
+ clearTimeout(timeoutId)
+ clearTimeout(playbackTimer)
+ resolve()
+ return true
+ }
+ const observer = new Observer(finishIfBound)
+ video.pause()
+ observer.observe(player, {
+ attributes: true,
+ attributeFilter: ['data-decoded-frame-index'],
})
+ timeoutId = setTimeout(() => {
+ fail(new Error('Decoded frame 1 was not observed'))
+ }, 10000)
+
+ if (finishIfBound()) return
+ playbackTimer = setTimeout(() => {
+ video.currentTime = 0.59
+ video.playbackRate = 0.25
+ video.play().catch(fail)
+ }, 100)
})
+ })
cy.get('@player')
.should('have.attr', 'data-decoded-frame-index', '1')
- .then(($player) => $player.find('video')[0].pause())
.should('contain.text', 'Evidence')
.find('[data-decoded-frame-index="1"]')
.should('be.visible')
diff --git a/data/customerCaseStudies.js b/data/customerCaseStudies.js
index 1956c30..435f158 100644
--- a/data/customerCaseStudies.js
+++ b/data/customerCaseStudies.js
@@ -38,7 +38,7 @@ export const RVU_RECOVERY_CASE = {
'Disclosure: Dr. Abrich is the founder’s brother. This is OpenAdapt’s founding deployment, not independent validation.',
title: 'Recovering missed billables with automated RVU audits',
summary:
- 'OpenAdapt automated the repetitive EMR evidence collection and spreadsheet reconciliation behind Dr. Victor Abrich’s monthly RVU audits, helping recover about $75,000 a year in missed billables while saving several hours of physician time each month.',
+ 'OpenAdapt now handles the repetitive EMR evidence collection and spreadsheet reconciliation behind Dr. Victor Abrich’s monthly RVU audits. The workflow helps recover about $75,000 a year in missed billables and saves several hours of physician time each month.',
challenge:
'Reviewing every relevant chart and reconciling the findings against monthly RVU reports took several hours each month, and manual review still missed billable work.',
workflow: [
diff --git a/pages/index.js b/pages/index.js
index d40adf4..b7459a3 100644
--- a/pages/index.js
+++ b/pages/index.js
@@ -1,16 +1,16 @@
import Head from 'next/head'
+import BusinessDecisionPreview from '@components/BusinessDecisionPreview'
import CommercialOffer from '@components/CommercialOffer'
-import ContributeSection from '@components/ContributeSection'
import CustomerCaseStudy from '@components/CustomerCaseStudy'
import DashboardShowcase from '@components/DashboardShowcase'
import FinalQualificationCta from '@components/FinalQualificationCta'
import Footer from '@components/Footer'
-import HeroProofStrip from '@components/HeroProofStrip'
import HowItWorksCondensed from '@components/HowItWorksCondensed'
import MastHead from '@components/MastHead'
import ProductStatus from '@components/ProductStatus'
import Qualification from '@components/Qualification'
+import ReplayHero from '@components/ReplayHero'
import Reveal from '@components/Reveal'
import TrustSummary from '@components/TrustSummary'
import { OPENADAPT_STATS_SNAPSHOT } from '../data/repositoryStats'
@@ -31,7 +31,7 @@ const organizationSchema = {
height: 512,
},
description:
- 'The verified execution layer for consequential work trapped behind human interfaces. OpenAdapt governs UI-only work across browser, desktop, RDP, and Citrix.',
+ 'Verified automation from demonstration. OpenAdapt compiles repeated work into deterministic programs and verifies the result before it reports success.',
foundingDate: '2023',
sameAs: [
'https://github.com/OpenAdaptAI/OpenAdapt',
@@ -48,7 +48,7 @@ const organizationSchema = {
'Effect Verification',
'Governed Automation',
],
- slogan: 'Automate the UI-only work your APIs cannot reach.',
+ slogan: 'Automate the work your systems still make people do.',
}
const softwareSchema = {
@@ -59,7 +59,7 @@ const softwareSchema = {
applicationCategory: 'DeveloperApplication',
operatingSystem: 'Windows, macOS, Linux',
description:
- 'Governed execution for consequential UI-only work across browser, Windows, macOS, Linux, RDP, and Citrix, with identity gates, effect verification, and fail-closed outcomes.',
+ 'OpenAdapt compiles demonstrated work into deterministic programs for browser, Windows, macOS, Linux, RDP, and Citrix, then verifies the declared result.',
url: 'https://openadapt.ai',
downloadUrl: 'https://pypi.org/project/openadapt/',
author: {
@@ -76,8 +76,7 @@ const softwareSchema = {
priceCurrency: 'USD',
},
featureList: [
- 'Compile a demonstrated, bounded GUI workflow',
- 'Compile demonstrations into editable automation scripts',
+ 'Compile a demonstrated GUI workflow into an inspectable program',
'Local replay with zero per-run model cost',
'Deterministic UI re-resolution with auditable bundle updates',
'Optional AI-assisted repair subject to configured verification and policy',
@@ -95,7 +94,7 @@ const websiteSchema = {
alternateName: 'OpenAdapt',
url: 'https://openadapt.ai',
description:
- 'OpenAdapt automates UI-only work that APIs cannot reach, verifies the intended business effect, and halts when the execution contract cannot be proved.',
+ 'OpenAdapt turns demonstrated GUI work into deterministic automation and verifies the result before it reports success.',
publisher: {
'@type': 'Organization',
name: 'OpenAdapt.AI',
@@ -123,9 +122,9 @@ export async function getStaticProps() {
export default function Home({ githubStats, hostedOffer }) {
const currentGithubStats = githubStats || OPENADAPT_STATS_SNAPSHOT
- const title = 'OpenAdapt — Verified execution for UI-only work'
+ const title = 'OpenAdapt: Verified automation from demonstration'
const description =
- 'Automate consequential UI-only work across browser, desktop, RDP, and Citrix. OpenAdapt verifies the business effect and halts on uncertainty.'
+ 'Automate the work your systems still make people do. OpenAdapt compiles a demonstration into a deterministic program and verifies the result.'
return (
See it run
++ From a demonstrated task to a verified result +
++ Watch the source demonstration, the compiled replay, + and the independent result check in three real + applications. +
+