Specs

How Outbounder uses a browser workspace and a small server boundary to build one multilingual sales kit.

English is the source language for the Premise AI | Outbounder website. Pages are localized into other languages with OpenAI models. Check important information.

How a kit moves through Outbounder

One request moves from the browser through protected server routes to OpenAI. Cloudflare D1 keeps job state and recovery available while the kit remains in progress.

Browser

Account inputs, My Work, edits, and exports remain on the device.

ChatGPT Sites

OpenAI's ChatGPT Sites runs the Next.js interface and protected server routes.

OpenAI Responses API

GPT-5.6 Terra researches public sources and returns one structured package.

Cloudflare D1

Cloudflare D1 stores jobs, provider references, recovery state, shared snapshots, and aggregate counts.

  • Job status
  • Recovery
  • Shared snapshots
  • Aggregate usage

Protected boundary. Provider credentials remain in server routes. Browser-local work is shared only through an explicit snapshot.

Runtime architecture

Current implementation: React, Next.js, ChatGPT Sites, and Cloudflare D1 each have one clear job. Together, they divide the interface, server, hosting, and stored state.

React and Next.js

React is the component library that renders the interface and updates it as work changes. Next.js supplies the page and server-route structure. This keeps the browser experience and protected generation code in one reviewed codebase.

ChatGPT Sites

OpenAI's ChatGPT Sites is the build and hosting service for the application. It packages the Next.js project for Cloudflare and applies server-only settings. Each deployment has a named checkpoint that the team can verify or roll back.

Cloudflare D1

Cloudflare D1 is the serverless SQL database used by the app. It stores generation state, provider references, correction claims, recovery results, shared snapshots, and counts. This keeps durable coordination and database credentials out of the browser.

One coherent generation

One authorized request makes one source-backed package. Its research, buyer context, sales method, terms, and deliverables are decided together.

A single evidence base

The normal path uses one provider start. It does not split research, writing, deliverables, or translation into separate calls. This keeps every kit section tied to the same account evidence and buyer decision.

Language-aware policy

Every enabled production language currently uses GPT-5.6 Terra with high reasoning. Each run has a 64,000-token limit and up to eight focused web searches. The same package rules carry the locale, Unicode, formal tone, terms, and protected names.

Structured package

The provider returns typed fields instead of a loose document with guessed headings. The versioned package covers the seller, account, leaders, financials, news, and KPIs. It also covers case-study candidates, deliverables, sources, and evidence limits.

State, idempotency, and recovery

Accepted work remains addressable throughout provider latency, browser refreshes, transient database errors, validation, and terminal handoff.

Persisted workflow state

The state machine distinguishes waiting, starting, queued, in progress, validating, repairing, revalidating, cancelling, completed, failed, cancelled, and incomplete work. The progress modal renders those persisted states instead of inferring progress from elapsed time.

Idempotent release

Request IDs, provider job IDs, repair idempotency keys, terminal contract versions, and immutable completed payloads prevent duplicate releases. A completed result can be replayed to the authorized browser without starting or billing another provider job.

Read-only polling

Client polls are jittered per job and honor Retry-After so concurrent browsers do not read authorization state in lockstep. Transient authorization-read failures return a retryable 503, preserving accepted work while the client follows the same recovery path.

Independent deadline enforcement

A scheduled Worker checks active D1 job records every minute and requests provider cancellation after the ten-minute execution deadline. Deadline enforcement continues when a browser closes or stops polling. The modal also lets a person cancel active research and resume a recoverable job without starting another provider request.

Browser and server boundary

Private day-to-day work stays on the device. Provider access, shared snapshots, and recovery data use narrow server routes.

No account or sales-system connection

A seller can use Outbounder without an application account, CRM connection, mailbox connection, or API key. Setup is short, and the app cannot send on its own. The tradeoff is that browser-local work does not sync across devices, browsers, or browser profiles.

Protected generation API

The browser sends bounded input to a server route. That application programming interface, or API, checks the request and calls the OpenAI Responses API. It then checks the result and manages recovery. Provider keys and server storage code never enter the client bundle.

Local work and explicit sharing

My Work, drafts, display choices, kit defaults, and private route notes stay in browser storage. Sharing makes a separate read-only snapshot. The creating browser can revoke it, and it expires after 30 days. Sharing does not create silent cloud sync.

Evidence and quality controls

A shared contract separates blocking evidence, structure, and language defects. Writing preferences that still need seller review remain advisory.

Source-scoped research

Fast Facts, leaders, financials, news, KPIs, and case-study candidates keep their source URLs and scope. Unknown account conditions remain hypotheses, discovery questions, or evidence limits. The kit does not present them as facts.

Field-level language checks

The same contract checks required fields, useful evidence, target-language text, Unicode, protected names, and channel structure. Style preferences remain advisory unless they make the work incomplete, unsafe for customer use, or unusable in the requested language.

One bounded correction

A proven evidence gap or blocking defect can allow one bounded correction for the failed fields. Missing leadership or public-company financial fields may use focused searches. Stable field IDs keep unaffected content, valid sources, and complete deliverables. The merged package must pass the same contract before release.

Security and privacy boundaries

Customer work is separated from public operational proof, and every server write has a narrow purpose and retention boundary.

Protected input

Generation accepts same-origin JSON with bounded fields and explicit allowlists. Cloudflare Turnstile protects public starts; URL-like input rejects credentials, unsupported schemes, private or reserved literal addresses, and nonstandard ports.

Local work, explicit sharing

Saved kits and private route notes remain in browser storage. Sharing creates an explicit, revocable, expiring read-only snapshot that excludes route notes. Export and import provide versioned local backup and recovery without introducing silent device sync.

Privacy-safe usage

Usage is built from daily aggregate counters. Language, sales method, and allowlisted normalized buyer-title categories are counted only after completion; raw titles are not dimension names, and buckets below the public threshold are suppressed.

Failure, cost, and access controls

Admission, execution, and recovery are separate. The interface also targets WCAG 2.2 AA across languages, themes, reading directions, and screen sizes.

Bounded admission and execution

Production allows at most four active provider jobs. D1 marks extra work as waiting until a compare-and-set update claims it. Starts, polls, searches, output size, correction count, the correction cutoff, and the ten-minute deadline are bounded.

Distinct failure signals

Access, model, quota, rate-limit, input, provider, human-check, timeout, cancellation, and database failures stay separate. Deadline and cancellation failures emit privacy-safe events for Outbounder Operations. Customer-safe messages do not expose or erase the underlying cause.

Accessible and localized interface

Tests cover keyboard access, visible focus, named controls, reflow, contrast, themes, and screen sizes. All nine languages share the same product rules. Arabic also uses right-to-left layout and local numerals where the product calls for them.

CI/CD and release integrity

Release controls, not runtime features: source, continuous integration, deployment, production checks, and rollback must name the same exact revision.

Measured lifecycle

Allowed events record admission, provider work, checks, correction, release, and failure. They include content-free IDs, model, reasoning, token, search, time, status, and issue fields. Reports must keep unlike prompts, schemas, prices, and review methods separate.

Continuous integration

GitHub continuous integration, or CI, installs locked dependencies. It runs TypeScript, ESLint, the production build, the full test suite, and the production dependency audit. A pass belongs only to the commit that ran it.

Exact revision and rollback

Before release, the CI-tested GitHub tree, Sites checkpoint, and production smoke result must match. Browser-critical and paid test evidence stay separate. A failed gate keeps the last known-good checkpoint ready for rollback.