From f072e0feb16e6499f43d02439fcf360159959602 Mon Sep 17 00:00:00 2001 From: abrichr Date: Thu, 20 Aug 2026 12:12:47 -0400 Subject: [PATCH 1/2] feat: sharpen homepage buyer positioning --- README.md | 11 ++-- components/BusinessDecisionPreview.js | 11 ++-- components/CommercialOffer.js | 15 ++--- components/DashboardShowcase.js | 11 ++-- components/FinalQualificationCta.js | 12 ++-- components/Footer.js | 6 +- components/HowItWorksCondensed.js | 18 +++--- components/MastHead.js | 69 ++++++++-------------- components/MastHead.module.css | 6 +- components/ProductStatus.js | 15 +++-- components/Qualification.js | 12 ++-- components/ReplayHero.js | 3 +- components/StructuredData.js | 8 +-- components/TrustSummary.js | 5 +- cypress/e2e/basic.cy.js | 6 +- cypress/e2e/public-surface-coherence.cy.js | 6 +- data/customerCaseStudies.js | 2 +- pages/index.js | 50 +++++++++------- public/llms.txt | 44 +++++++------- tests/contributeProgram.test.js | 6 +- tests/customerCaseStudy.test.js | 2 +- 21 files changed, 151 insertions(+), 167 deletions(-) diff --git a/README.md b/README.md index c7e6e655..7f285ce7 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,11 @@ Source for the [openadapt.ai](https://openadapt.ai) marketing site. -OpenAdapt is a governed demonstration compiler for GUI workflows: record a task -once, compile it, and replay it deterministically with zero model calls on the -healthy path. When replay cannot verify what it is about to do, it halts instead -of guessing. Every execution substrate is first-class under one governed loop: -browser, Windows, macOS, Linux, RDP, and Citrix/VDI. OpenAdapt is local-first -and open-core (MIT); managed cloud is optional. +OpenAdapt provides verified automation from demonstration. It compiles repeated +GUI work into deterministic programs for browser, Windows, macOS, Linux, RDP, +and Citrix/VDI. Healthy runs make no model calls. OpenAdapt checks the declared +result before it reports `VERIFIED` and stops when the required evidence is +missing. The local runtime is MIT licensed; managed Cloud is optional. This repository is the public website only. Installers and the unified CLI live in [OpenAdaptAI/OpenAdapt](https://github.com/OpenAdaptAI/OpenAdapt), the diff --git a/components/BusinessDecisionPreview.js b/components/BusinessDecisionPreview.js index cb1cb924..ec7f8ffb 100644 --- a/components/BusinessDecisionPreview.js +++ b/components/BusinessDecisionPreview.js @@ -17,15 +17,14 @@ export default function BusinessDecisionPreview() {
-

Human judgment capture

+

Human decision

- Keep institutional judgment inside the workflow. + Ask a person when the workflow reaches a real judgment call.

- When a workflow reaches a policy choice, OpenAdapt asks one - authorized person one clear question. The choice selects a - reviewed branch. The runner checks the live state again - before it continues. + OpenAdapt pauses at an approved policy choice and asks one + authorized person one clear question. Before it continues, + the runner checks the live application again.

Commercial offer

- Qualify the workflow before scaling the deployment + Start with one workflow

@@ -50,7 +50,7 @@ export default function CommercialOffer({ hostedOffer }) { From $15,000

- In a ten-business-day target, we assess one named + We target a decision within ten business days. We assess one named workflow, application, environment, identity contract, effect verifier, failure boundary, deployment path, and ROI. You receive a qualified prototype and a signed @@ -76,10 +76,10 @@ export default function CommercialOffer({ hostedOffer }) {

{runCap}

)}

- A separate managed subscription for approved workflows, - run history, evidence, and governed updates. Enterprise - qualification, regulated deployment, and SLAs are scoped - separately. + Run approved browser workflows with managed runners, + run history, evidence, and controlled updates. We scope + enterprise qualification, regulated deployment, and + SLAs separately.

See Cloud and enterprise pricing @@ -87,7 +87,8 @@ export default function CommercialOffer({ hostedOffer }) {

- Building vertical software or operating workflows for clients?{' '} + OpenAdapt Execute gives vertical software and service providers{' '} + a verified last-mile execution API.{' '} Explore OpenAdapt Execute. diff --git a/components/DashboardShowcase.js b/components/DashboardShowcase.js index 82dd01fd..87a4cd0e 100644 --- a/components/DashboardShowcase.js +++ b/components/DashboardShowcase.js @@ -179,14 +179,13 @@ export default function DashboardShowcase() { className={styles.heading} id="cloud-product-heading" > - From approved workflow to reviewable outcome. + See every approved workflow, run, and result in one place

- This is the hosted product running today at - app.openadapt.ai. Workflows, runs, evidence, and - reports stay connected in one reviewable dashboard. - When a run needs a person, the same decision arrives - as one focused mobile handoff. + The hosted product at app.openadapt.ai connects each + workflow version to its runs, evidence, and reports. + When a run needs a person, it sends one focused mobile + request.

diff --git a/components/FinalQualificationCta.js b/components/FinalQualificationCta.js index 0ad665c7..1fc7555c 100644 --- a/components/FinalQualificationCta.js +++ b/components/FinalQualificationCta.js @@ -4,17 +4,17 @@ export default function FinalQualificationCta() { return (
-

Bring the real workflow

+

Workflow fit review

- Qualify one workflow + See if one workflow fits

- Bring the actual application, environment, workflow, and - success condition. We will determine whether it should be - automated and what verified production requires. + Tell us the application, environment, repeated task, and + how you confirm the result. We will assess the fit, main + risks, verifier, and deployment path.

- Start the qualification + Start the fit review
diff --git a/components/Footer.js b/components/Footer.js index 40839d69..e22b2441 100644 --- a/components/Footer.js +++ b/components/Footer.js @@ -151,9 +151,9 @@ export default function Footer({ Adapt

- OpenAdapt compiles demonstrated GUI workflows into - deterministic, locally executable programs, and - halts when it can’t verify the result. + OpenAdapt turns demonstrated GUI work into + deterministic automation and verifies the result + before it reports success.

How it works

- From demonstration to verified operation + One demonstrated task becomes one approved program

- One lifecycle connects qualification, execution, evidence, - and governed change. + The recording starts the work. Qualification defines what + the program may do and what evidence counts as success.

    {steps.map((step) => ( diff --git a/components/MastHead.js b/components/MastHead.js index 0e4d0356..3e7776e9 100644 --- a/components/MastHead.js +++ b/components/MastHead.js @@ -1,8 +1,6 @@ import React from 'react' import Link from 'next/link' -import ReplayHero from '@components/ReplayHero' -import BusinessDecisionPreview from '@components/BusinessDecisionPreview' import { track, EVENTS } from 'utils/analytics' import useLiveRepositoryStats from 'utils/useLiveRepositoryStats' @@ -25,7 +23,7 @@ export default function Home({ githubStats: initialGithubStats }) {
- FREE TO RUN LOCALLY · MIT OPEN SOURCE + VERIFIED AUTOMATION FROM DEMONSTRATION {githubStats && githubStats.stars > 0 && (

- Automate the UI-only work your APIs can’t reach. + Automate the work your systems still make people do.

- OpenAdapt compiles demonstrations into one - governed loop across browser, desktop, RDP, and - Citrix. Browser runs in production today; - desktop, RDP, and Citrix run through - customer-controlled qualification. It verifies - consequential results and halts when it cannot - prove the intended outcome. + Show OpenAdapt a repeated task. It compiles the + demonstration into a deterministic program for + browser, desktop, RDP, or Citrix, then verifies + the result before it reports success.

- Verified business effects · fail-closed execution · - customer-controlled sensitive data + Healthy runs make no model calls. An unverified + production run stops.

-

- - pip install openadapt - - - MIT licensed - No account or Cloud required + MIT licensed · no account required

-
- - -
diff --git a/components/MastHead.module.css b/components/MastHead.module.css index 4feeec65..2392e197 100644 --- a/components/MastHead.module.css +++ b/components/MastHead.module.css @@ -22,9 +22,9 @@ color: var(--ink-3); } -/* Primary enterprise CTA. The adjacent ghost action is the equally direct - local/open-source path, while the install command below carries the - no-account trust contract without adding a third competing button. */ +/* Primary workflow-fit CTA. The adjacent action jumps to the evidence demo. + The compact install line keeps the local, no-account path available without + adding a third competing button. */ .heroCloud { display: inline-flex; align-items: center; diff --git a/components/ProductStatus.js b/components/ProductStatus.js index 3ad5835f..d4ee3060 100644 --- a/components/ProductStatus.js +++ b/components/ProductStatus.js @@ -18,7 +18,7 @@ const boundaries = [ const executionSurfaces = [ { title: 'Browser', - detail: 'Combine DOM, accessibility, visual, and interaction evidence for governed web execution.', + detail: 'Use DOM, accessibility, visual, and interaction evidence to run approved web workflows.', }, { title: 'Native desktop', @@ -26,7 +26,7 @@ const executionSurfaces = [ }, { title: 'Remote applications', - detail: 'Drive RDP, Citrix Workspace, and VDI externally through pixels, keyboard, and mouse while preserving identity, policy, verification, and audit.', + detail: 'Operate RDP, Citrix Workspace, and VDI through pixels, keyboard, and mouse, with the same identity and result checks.', }, ] @@ -37,15 +37,14 @@ export default function ProductStatus() { className="border-b border-hairline bg-panel px-5 py-20 md:py-28" >
-

Cross-surface execution

+

Browser, desktop, and remote

- One governance model across the interfaces you use + Use one verified workflow across the interfaces you use

- Portable workflow intent stays separate from each - environment-specific binding, so DOM selectors, - accessibility elements, and remote visual anchors are never - treated as interchangeable. + OpenAdapt keeps the workflow and its safety checks separate + from the controls used in each application. Each surface + uses the strongest evidence it provides.

Browser runs in production today; desktop, RDP, and Citrix diff --git a/components/Qualification.js b/components/Qualification.js index 2ee1df02..364c91d1 100644 --- a/components/Qualification.js +++ b/components/Qualification.js @@ -1,4 +1,5 @@ const fits = [ + 'A person can demonstrate the task from start to finish.', 'Inputs are mostly structured and the business intent stays stable.', 'The target application has no practical write API for the last mile.', 'A wrong action has operational, financial, or compliance cost.', @@ -13,19 +14,18 @@ export default function Qualification() { className="border-b border-hairline bg-panel px-5 py-20 md:py-28" >

-

The right fit

+

A strong first workflow

- Where OpenAdapt creates the most value + Start where an error has a cost and the result can be checked

- Start with one repeated workflow trapped behind a browser, - desktop, RDP, or Citrix interface. OpenAdapt turns it into - governed execution with evidence of the result. + A good candidate repeats often, follows stable rules, and + ends in a result that another system or session can verify.

- A strong first workflow + Use this quick fit check

    {fits.map((item) => ( diff --git a/components/ReplayHero.js b/components/ReplayHero.js index 8d40a32a..e52b70a9 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 729e5575..dffab6a8 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 33636256..82a1f492 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 ea824982..c51612ac 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 add4a1c3..fd60b232 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/data/customerCaseStudies.js b/data/customerCaseStudies.js index 1956c303..435f158e 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 d40adf41..b7459a3e 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 (
    @@ -158,28 +157,37 @@ export default function Home({ githubStats, hostedOffer }) { /> -
    +
    +
    +
    +

    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. +

    +
    + + +
    +
    - {/* - * Contribute-for-credits sits after the trust summary because it - * is a commons / flywheel message that extends the open-source - * trust story: sanitized contributions strengthen the shared - * hardening corpus. It stays out of the hero, the commercial - * offer, and the closing qualification CTA so it never interrupts - * the buying narrative. Early access, opt-in, links to - * /contribute. - */} -
    diff --git a/public/llms.txt b/public/llms.txt index aa5825e8..fe03fa46 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -1,10 +1,10 @@ # OpenAdapt.AI -> OpenAdapt is an open-source (MIT) governed workflow compiler and runtime for repeated GUI work in applications that have no usable API. You demonstrate a bounded task once; OpenAdapt compiles the recording into a deterministic, locally executable program. A healthy replay makes zero model calls. When the interface drifts, OpenAdapt deterministically re-resolves the target from retained evidence, optionally proposes a reviewable repair, accepts a human correction, or halts. Every consequential run ends `VERIFIED` or `HALTED` with a preserved run report; a run is judged by an out-of-band check of the system of record, not by the acting session declaring itself successful. +> OpenAdapt provides verified automation from demonstration. Show it a repeated GUI task and it compiles the recording into a deterministic, locally executable program. A healthy replay makes zero model calls. When the interface drifts, OpenAdapt re-resolves the target from retained evidence, proposes a governed repair, accepts an authorized correction, or halts. A governed run reports a typed outcome and keeps the evidence used to reach it. `VERIFIED` means the declared result check passed. ## What it is, in one line -OpenAdapt is for the case where the work is repetitive and consequential, the interface is visual or integration-hostile, and a silently wrong write would be worse than no write at all. +OpenAdapt fits repetitive, consequential work where the application has no practical API and another system or session can verify the result. ## Canonical machine-readable status @@ -15,19 +15,19 @@ OpenAdapt is for the case where the work is repetitive and consequential, the in Availability below is the released capability. It is distinct from the deployment boundary and from the bounded acceptance evidence recorded for each substrate. Exact evidence URLs are in `status.json`. -- **Browser — Available.** Local, managed OpenAdapt Cloud, or customer-controlled. The reference loop: record, compile, and replay end to end with no model calls on healthy runs. -- **Windows (UI Automation) — Available.** Local or customer-controlled. Accepted WinForms matrix: 3/3 independently verified effects, 3/3 stale targets refused, 3/3 ambiguous targets refused, zero silent incorrect successes, zero over-halts, zero model calls. -- **macOS (Accessibility) — Available.** Local or customer-controlled. Binds one exact application window and refuses ambiguity before input. Counted TextEdit evidence: 3/3 exact-byte effects plus a two-window ambiguity refusal. -- **Linux (AT-SPI) — Available.** Local or customer-controlled. Required current-main CI: 3/3 exact-file effects, 3/3 ambiguity refusals, 3/3 stale-target refusals. -- **RDP — Available.** Local or customer-controlled. Two accepted bounded results: 3/3 real Aardwolf-over-Windows transport/input effects, and a full record-to-compile-to-governed-replay lifecycle over a real FreeRDP round trip with 3/3 healthy effects and 3/3 drift safe-halts. -- **Citrix / VDI — Available.** Local or customer-controlled. The shipped `--backend citrix` path binds the exact Citrix Workspace window and runs the same identity, effect, policy, and halt contracts. Qualification boundary, stated explicitly: the accepted artifact records `ica_hdx_accepted=false`. It qualifies the Citrix Workspace-window backend contract over a no-DOM canvas stand-in (3/3 healthy effects, 3/3 drift safe-halts), not a counted real ICA/HDX batch. An exact ICA/HDX environment is qualified separately before consequential use. -- **Hosted Cloud — Beta.** Managed browser runner and control plane, with run history, reporting, usage, and governed workflow updates. Windows, macOS, Linux, RDP, and Citrix/VDI execute through local, self-hosted, or customer-controlled runtimes; they are not silently moved into the shared managed browser boundary. +- **Browser: Available.** Local, managed OpenAdapt Cloud, or customer-controlled. The reference loop records, compiles, and replays end to end with no model calls on healthy runs. +- **Windows (UI Automation): Available.** Local or customer-controlled. Accepted WinForms matrix: 3/3 independently verified effects, 3/3 stale targets refused, 3/3 ambiguous targets refused, zero silent incorrect successes, zero over-halts, zero model calls. +- **macOS (Accessibility): Available.** Local or customer-controlled. Binds one exact application window and refuses ambiguity before input. Counted TextEdit evidence: 3/3 exact-byte effects plus a two-window ambiguity refusal. +- **Linux (AT-SPI): Available.** Local or customer-controlled. Required current-main CI: 3/3 exact-file effects, 3/3 ambiguity refusals, 3/3 stale-target refusals. +- **RDP: Available.** Local or customer-controlled. Two accepted bounded results: 3/3 real Aardwolf-over-Windows transport/input effects, and a full record-to-compile-to-governed-replay lifecycle over a real FreeRDP round trip with 3/3 healthy effects and 3/3 drift safe-halts. +- **Citrix / VDI: Available.** Local or customer-controlled. The shipped `--backend citrix` path binds the exact Citrix Workspace window and runs the same identity, effect, policy, and halt contracts. Qualification boundary, stated explicitly: the accepted artifact records `ica_hdx_accepted=false`. It qualifies the Citrix Workspace-window backend contract over a no-DOM canvas stand-in (3/3 healthy effects, 3/3 drift safe-halts), not a counted real ICA/HDX batch. An exact ICA/HDX environment is qualified separately before consequential use. +- **Hosted Cloud: Beta.** The managed browser runner and control plane include run history, reporting, usage, and governed workflow updates. Windows, macOS, Linux, RDP, and Citrix/VDI execute through local, self-hosted, or customer-controlled runtimes. OpenAdapt does not move them into the shared managed browser boundary. ## Start here - [Run it locally, free](https://openadapt.ai/start): The CLI and the Desktop cockpit are equal first-class local lanes. Both produce the same portable recording, workflow bundle, and run evidence. Cloud is an optional handoff after local success. - [Install](https://openadapt.ai/download): Installers and `pip install openadapt`, then `openadapt flow ...`. -- [How it works](https://openadapt.ai/how-it-works): Record and compile, replay deterministically, then resolve, repair, or halt under drift — including what a compiled program actually contains and where repair stops. +- [How it works](https://openadapt.ai/how-it-works): Record and compile, replay deterministically, then resolve, repair, or halt under drift. The page shows what a compiled program contains and where repair stops. - [Documentation](https://docs.openadapt.ai): Installation, quick start, CLI reference, and what works today. ## Decide whether it fits @@ -44,7 +44,7 @@ Availability below is the released capability. It is distinct from the deploymen ## Trust, safety, and data boundaries - [Trust center](https://openadapt.ai/security): Screenshot, model, secret, report, certification, and commercial deployment boundaries; build provenance, code signing, and SBOM. -- [Safety model](https://openadapt.ai/safety): The refusal ladder — what makes a run halt rather than guess, with worked cases. +- [Safety model](https://openadapt.ai/safety): The refusal ladder shows what makes a run halt rather than guess, with worked cases. - [Privacy module](https://github.com/OpenAdaptAI/openadapt-privacy): Open-source PII/PHI scrubbing used before any artifact leaves the local boundary. - [Privacy policy](https://openadapt.ai/privacy-policy) · [Terms of service](https://openadapt.ai/terms-of-service) @@ -53,7 +53,7 @@ Availability below is the released capability. It is distinct from the deploymen - [Research](https://openadapt.ai/research): The technical paper, machine-checked benchmark constants, methodology, limitations, and artifact checklist. - [Technical paper (PDF)](https://openadapt.ai/paper): Reader-facing paper page; source lives in the openadapt-flow repository. - [Workflow reference catalog](https://openadapt.ai/workflows): Every reference workflow with its substrate, oracle, and status label reconciled against `status.json`. -- [Customer Case Study — RVU Audits](https://openadapt.ai/customers/rvu-audit-heart-care): A board-certified cardiac electrophysiologist's monthly Cerner PowerChart evidence collection and RVU spreadsheet reconciliation, helping recover about $75,000 a year in missed billables while saving several hours of physician time each month. Disclosed on the page: the physician is the founder's brother, this is OpenAdapt's founding deployment rather than independent validation, and the figures are preliminary pending customer confirmation. The same page separately reports a reproducible six-month synthetic governed-validation cohort: 2,880 cases (480/month), 2,856 VERIFIED (99.2%), 18 HALTED, 6 FAILED before actuation, zero observed silent incorrect successes, zero model calls, $0.03 modeled reference cost per case. +- [Customer Case Study: RVU Audits](https://openadapt.ai/customers/rvu-audit-heart-care): A board-certified cardiac electrophysiologist's monthly Cerner PowerChart evidence collection and RVU spreadsheet reconciliation, helping recover about $75,000 a year in missed billables while saving several hours of physician time each month. Disclosed on the page: the physician is the founder's brother, this is OpenAdapt's founding deployment rather than independent validation, and the figures are preliminary pending customer confirmation. The same page separately reports a reproducible six-month synthetic governed-validation cohort: 2,880 cases (480/month), 2,856 VERIFIED (99.2%), 18 HALTED, 6 FAILED before actuation, zero observed silent incorrect successes, zero model calls, $0.03 modeled reference cost per case. ## Where it is used @@ -68,18 +68,18 @@ Availability below is the released capability. It is distinct from the deploymen Every template corresponds to something that actually runs. Proven references execute end to end against real open-source applications in the `openadapt-flow` repository with system-of-record verification. Pattern templates are workflow shapes compiled from a recording of the customer's own team, anchored to those references. No template exists for a workflow that has not actually been run. - [Template gallery](https://openadapt.ai/templates): All templates with proof level, demonstrated steps, verification oracles, and CLI quickstart. -- [Patient triage note](https://openadapt.ai/templates/patient-triage-note): Proven — the canonical tutorial on the bundled synthetic clinic app, including the clinical-write policy gate refusing an under-verified bundle. -- [OpenEMR patient note](https://openadapt.ai/templates/openemr-patient-note): Proven — 18-step add-patient-note workflow verified against the record itself, with a published field run of 20/20 compiled trials at zero model calls, measured 2026-07-08 on openadapt-flow 0.1.0 (a pre-v0.2.0 source build). -- [Frappe lending loan application](https://openadapt.ai/templates/frappe-loan-application): Proven — verified by independent REST, SQL, and exact table-delta oracles. -- [openIMIS claim intake](https://openadapt.ai/templates/openimis-claim-intake): Proven — verified by a direct SQL claim-row oracle. -- [Dental insurance eligibility checks](https://openadapt.ai/templates/dental-insurance-eligibility): Pattern — a practice's own payer-portal verification workflow, compiled from its own recording. -- [Insurance eligibility and coverage checks](https://openadapt.ai/templates/insurance-eligibility-check): Pattern — repeated carrier-portal lookups with per-case parameters and halt-on-ambiguity. -- [New patient record entry](https://openadapt.ai/templates/new-patient-record): Pattern — registration re-keying with per-patient parameters, anchored to the OpenEMR reference. -- [Report export with arrival verification](https://openadapt.ai/templates/report-export-verification): Pattern — exports accepted only when exactly one conforming file actually arrived, with optional SHA-256 content identity. +- [Patient triage note](https://openadapt.ai/templates/patient-triage-note): Proven. The canonical tutorial uses the bundled synthetic clinic app. Its clinical-write policy gate refuses an under-verified bundle. +- [OpenEMR patient note](https://openadapt.ai/templates/openemr-patient-note): Proven. The 18-step add-patient-note workflow checks the record itself. A published field run completed 20/20 compiled trials with zero model calls, measured 2026-07-08 on openadapt-flow 0.1.0 (a pre-v0.2.0 source build). +- [Frappe lending loan application](https://openadapt.ai/templates/frappe-loan-application): Proven. Independent REST, SQL, and exact table-delta oracles verify the result. +- [openIMIS claim intake](https://openadapt.ai/templates/openimis-claim-intake): Proven. A direct SQL claim-row oracle verifies the result. +- [Dental insurance eligibility checks](https://openadapt.ai/templates/dental-insurance-eligibility): Pattern. The workflow is compiled from the practice's own payer-portal demonstration. +- [Insurance eligibility and coverage checks](https://openadapt.ai/templates/insurance-eligibility-check): Pattern. The workflow repeats carrier-portal lookups with per-case parameters and halts on ambiguity. +- [New patient record entry](https://openadapt.ai/templates/new-patient-record): Pattern. The workflow handles registration re-keying with per-patient parameters. It is anchored to the OpenEMR reference. +- [Report export with arrival verification](https://openadapt.ai/templates/report-export-verification): Pattern. The workflow accepts an export only when exactly one conforming file arrived. It can also check the SHA-256 content identity. ## Buy, qualify, and partner -- [Pricing](https://openadapt.ai/pricing): Three ways to start. **OpenAdapt Community** — free, MIT-licensed local runtime and qualification tools, no Cloud account required. **Workflow Qualification Sprint** — from $15,000 with a ten-business-day target, qualifying one application, one environment, and one measurable business effect; native, RDP, and Citrix qualifications are typically $25,000–$40,000; the sprint is paid even when the correct outcome is not to automate. **OpenAdapt Cloud** — $500/month managed browser execution for non-regulated data, with no production SLA and no regulated deployment included. Production, pilot, and OEM paths follow a successful qualification. +- [Pricing](https://openadapt.ai/pricing): Three ways to start. **OpenAdapt Community:** free, MIT-licensed local runtime and qualification tools, with no Cloud account required. **Workflow Qualification Sprint:** from $15,000 with a ten-business-day target. It qualifies one application, one environment, and one measurable business effect. Native, RDP, and Citrix qualifications are typically $25,000–$40,000. The sprint is paid even when the correct outcome is not to automate. **OpenAdapt Cloud:** $500/month managed browser execution for non-regulated data, with no production SLA and no regulated deployment included. Production, pilot, and OEM paths follow a successful qualification. - [OpenAdapt Execute](https://openadapt.ai/execute): Private partner API and OEM integration for software and service providers that already know the transaction but cannot complete it in a customer system. It returns a verified receipt or a typed exception through an approved customer-controlled runner. - [Qualify a workflow](https://openadapt.ai/qualify): Submit one exact application, environment, workflow, volume, verification path, and deployment boundary for a paid qualification. - [Partner program](https://openadapt.ai/partners): Application-based tracks for vertical software/OEM, RCM and BPO operators, integration and services firms, and MSP/deployment partners. @@ -89,7 +89,7 @@ Every template corresponds to something that actually runs. Proven references ex ## Source code - [OpenAdapt (launcher / flagship)](https://github.com/OpenAdaptAI/OpenAdapt): MIT-licensed public entry point and the stable install route. -- [openadapt-flow (compiler and governed runtime)](https://github.com/OpenAdaptAI/openadapt-flow): The canonical engine — compilation, resolution ladder, identity and effect verification, policy gates, run reports, and every substrate backend. +- [openadapt-flow (compiler and governed runtime)](https://github.com/OpenAdaptAI/openadapt-flow): The canonical engine. It includes compilation, the resolution ladder, identity and effect verification, policy gates, run reports, and every substrate backend. - [openadapt-capture](https://github.com/OpenAdaptAI/openadapt-capture): Native screen, mouse, keyboard, timing, and window-scoped capture. - [openadapt-privacy](https://github.com/OpenAdaptAI/openadapt-privacy): PII/PHI scrubbing. - [openadapt-evals](https://github.com/OpenAdaptAI/openadapt-evals): Benchmark tooling, including Windows Agent Arena integration. diff --git a/tests/contributeProgram.test.js b/tests/contributeProgram.test.js index b5d67f52..c87cd824 100644 --- a/tests/contributeProgram.test.js +++ b/tests/contributeProgram.test.js @@ -7,7 +7,7 @@ const pricing = fs.readFileSync('components/Pricing.js', 'utf8') const page = fs.readFileSync('pages/contribute.js', 'utf8') const intake = fs.readFileSync('components/ContributorProgramForm.js', 'utf8') const formDefinitions = fs.readFileSync('public/form.html', 'utf8') -const home = fs.readFileSync('pages/index.js', 'utf8') +const footer = fs.readFileSync('components/Footer.js', 'utf8') // JSX wraps prose across indented lines, so phrase assertions run against a // whitespace-normalized view. Banned-phrase checks also strip JS comments, @@ -85,10 +85,10 @@ test('contributor leads use a dedicated Netlify form, segmented from contact', ( assert.doesNotMatch(page, /ContactBookingSection/) }) -test('the homepage renders the contribute section and pricing carries the credits callout', () => { - assert.match(home, //) +test('pricing and the footer link to the contributor program', () => { assert.match(norm(pricing), /Earn credits by contributing/) assert.match(pricing, /href="\/contribute"/) + assert.match(footer, /href: '\/contribute'/) // The page links to the real pricing route, not a stale homepage anchor. assert.match(page, /href="\/pricing"/) assert.doesNotMatch(page, /href="\/#pricing"/) diff --git a/tests/customerCaseStudy.test.js b/tests/customerCaseStudy.test.js index 10d9e007..5ade8248 100644 --- a/tests/customerCaseStudy.test.js +++ b/tests/customerCaseStudy.test.js @@ -82,5 +82,5 @@ test('links the customer result from the public discovery surfaces', () => { assert.match(read('pages/index.js'), //) assert.match(read('components/NavHeader.js'), /Customer results/) assert.match(read('public/sitemap.xml'), /\/customers\/rvu-audit-heart-care/) - assert.match(read('public/llms.txt'), /Customer Case Study — RVU Audits/) + assert.match(read('public/llms.txt'), /Customer Case Study: RVU Audits/) }) From 697729133d6d534ac2101bdff2fafcda23944bcd Mon Sep 17 00:00:00 2001 From: abrichr Date: Thu, 20 Aug 2026 12:23:29 -0400 Subject: [PATCH 2/2] test: stabilize homepage production E2E --- cypress/e2e/public-surface-coherence.cy.js | 2 +- cypress/e2e/reference-demo.cy.js | 54 ++++++++++++++++++---- 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/cypress/e2e/public-surface-coherence.cy.js b/cypress/e2e/public-surface-coherence.cy.js index fd60b232..f16b172a 100644 --- a/cypress/e2e/public-surface-coherence.cy.js +++ b/cypress/e2e/public-surface-coherence.cy.js @@ -38,7 +38,7 @@ describe('public surface coherence', () => { .and('have.attr', 'href', '/qualify') cy.get('[data-testid="demo-cta"]') .should('be.visible') - .and('have.attr', 'href', '#demo') + .and('have.attr', 'href', '/#demo') cy.get('[data-testid="local-quickstart-cta"]') .should('be.visible') .and('have.attr', 'href', '/start') diff --git a/cypress/e2e/reference-demo.cy.js b/cypress/e2e/reference-demo.cy.js index 31306bfd..f87aa882 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')