Compare commits

Author SHA1 Message Date
DeCentN2Madness a643383e79 feat(deploy): support positional release inputs 2026-11-07 14:02:35 -07:00
DeCentN2Madness 2fca442922 fix(seo): add .html to privacy policy berkeley phi info link 2026-11-07 02:06:25 -07:00
DeCentN2Madness e002427aef fix(seo): noindex early intervention landing page 2026-11-07 01:49:58 -07:00
DeCentN2Madness eeff641a1d feat(blog): limit rapid repeat views 2026-11-06 14:05:37 -07:00
DeCentN2Madness 96288b1eb8 style(blog): strengthen accent treatments 2026-11-06 13:35:41 -07:00
DeCentN2Madness 8c19266760 feat(blog): enable live likes and first-party views 2026-11-06 10:54:18 -07:00
DeCentN2Madness 89cdb00765 fix(portal): preserve readable download filenames 2026-11-05 19:21:26 -07:00
DeCentN2Madness 596246f20a feat(portal): reuse unlock code for protected downloads 2026-11-05 19:21:26 -07:00
DeCentN2Madness 475dd3379b fix(deploy): avoid source guard self-match 2026-11-05 13:29:38 -07:00
DeCentN2Madness 81492125f4 fix(portal): prepare approved resource mappings safely 2026-11-05 00:40:18 -07:00
DeCentN2Madness 36d417a422 fix(deploy): make portal installer runtime portable 2026-11-05 00:40:18 -07:00
DeCentN2Madness 4987f5ee1a fix(deploy): isolate portal gate from fixture validation 2026-11-05 00:40:18 -07:00
DeCentN2Madness 362b984753 fix(deploy): detect SSH tooling without connecting 2026-11-05 00:40:18 -07:00
DeCentN2Madness ba93a54942 feat(deploy): add Contabo release workflow and portal payload gate 2026-11-05 00:40:18 -07:00
DeCentN2Madness 5fa54719b2 docs(nginx): import HubSpot redirect rules 2026-11-02 00:01:38 -07:00
DeCentN2Madness e224616b99 fix(forms): accept HIPAA Jotform completion origin 2026-11-01 19:16:19 -07:00
DeCentN2Madness a72470459a docs(referrals): record owner-approved existing Jotform cutover workflow 2026-11-01 18:10:57 -07:00
DeCentN2Madness 80e0c405bc docs(referrals): retire Form C plan and document existing hosted workflow 2026-11-01 18:10:54 -07:00
DeCentN2Madness 5c8ba2e11e fix(referrals): restore existing hosted referral CTA and remove native placeholder 2026-11-01 18:10:51 -07:00
DeCentN2Madness 85def8466c refactor(maps): share localized OpenStreetMap component 2026-11-01 17:48:38 -07:00
DeCentN2Madness b5e606a839 fix(tour): restore location map and schedule button 2026-11-01 16:41:20 -07:00
DeCentN2Madness 8dff6a5ad0 style(portal): refine resource links, list markers and focus styling
Remove forced link underlines and suppress bullets and numbering only on
staff lists whose items contain resource buttons. Keep the responsive
Management Templates grid while allowing its buttons to use their natural
size instead of stretching to fill each cell.

Remove the outline around the unlocked content container while preserving
programmatic focus and visible keyboard focus on inputs and resource links.
Update the presentation regression assertions for these styling choices.

Validation: Astro build (128 pages), link audit (zero broken links), and
10 focused service/portal tests pass.
2026-11-01 14:45:13 -07:00
AIAMarketing b0cf2d7119 docs(portal): staff button and Management Templates layout parity 2026-11-01 14:05:35 -07:00
AIAMarketing 3e05458944 test(portal): staff buttons, management-template grid, isolated management view 2026-11-01 14:05:35 -07:00
AIAMarketing 4d7955fb48 test(portal): pin staff-template styling and safe resource rules 2026-11-01 14:05:35 -07:00
AIAMarketing 81d1f21236 style(portal): two-column management template buttons on desktop 2026-11-01 14:05:35 -07:00
AIAMarketing aa406e623d fix(portal): restore staff resource buttons and tag template list 2026-11-01 14:05:35 -07:00
AIAMarketing 5d6d4af8bd docs(portal): record screenshot-driven styling corrections 2026-10-30 15:40:57 -07:00
AIAMarketing d944cb0afe test(portal): exercise live-style report buttons and orange markers 2026-10-30 15:40:57 -07:00
AIAMarketing 9d6e0b982e test(portal): cover legacy report labels without class inheritance 2026-10-30 15:40:57 -07:00
AIAMarketing 167277b037 style(portal): restore orange list markers in unlocked views 2026-10-30 15:40:57 -07:00
AIAMarketing db8d90f579 fix(portal): classify sanitized report anchors by visible label 2026-10-30 15:40:57 -07:00
AIAMarketing 16a72caa00 fix(portal): recognize legacy lineup report links as resource buttons 2026-10-30 15:40:57 -07:00
DeCentN2Madness 95c5f229f5 refactor(forms): enable approved Form A placements by default 2026-10-30 15:08:02 -07:00
DeCentN2Madness 55adb79705 fix(forms): close completed drawers and restore portal styling 2026-10-30 14:21:27 -07:00
DeCentN2Madness e97f0ea9b4 feat(portal): add service drawers and employee portal preview 2026-10-30 00:03:21 -07:00
DeCentN2Madness ff80ee516f feat(forms): add isolated Form A consultation testing 2026-10-29 10:21:45 -07:00
DeCentN2Madness 6a5e54e130 docs(forms): adopt two-form consultation architecture 2026-10-28 18:51:42 -07:00
DeCentN2Madness ebc99c0f36 chore(reports): archive superseded reconciliation evidence 2026-10-28 18:45:02 -07:00
DeCentN2Madness 0eb3fcc3f6 feat(forms): gate Form A production embedding 2026-10-28 18:29:32 -07:00
DeCentN2Madness 1a56cd7603 feat(forms): add Form A iframe fallback safeguards 2026-10-28 18:29:32 -07:00
DeCentN2Madness 7cdf209032 test(routing): cover nginx slashless serving template 2026-10-28 17:19:56 -07:00
DeCentN2Madness eecb582665 docs(forms): record Form A privacy verification 2026-10-28 17:19:56 -07:00
DeCentN2Madness 61b2bd0f1e feat(forms): add isolated Form A iframe adapter 2026-10-28 17:19:56 -07:00
AIAMarketing a635a5f55c docs(forms): link Form A runtime evidence from P9-03 plan 2026-10-25 13:37:01 -07:00
AIAMarketing 63806f106c docs(forms): record Form A unique-name and locale verification 2026-10-25 13:37:01 -07:00
DeCentN2Madness f41af1966e fix(routing): enforce slashless public URLs 2026-10-25 13:13:46 -07:00
DeCentN2Madness 7a6cab29db feat(forms): add local Form A presentation preview 2026-10-25 13:04:00 -07:00
DeCentN2Madness b102a061fe fix(landing): remove inactive-form availability copy 2026-10-25 12:52:38 -07:00
DeCentN2Madness 356282f61c fix(landing): align early intervention campaign header 2026-10-25 12:38:03 -07:00
DeCentN2Madness ce17728e0b docs(phase10): record technical QA and release readiness 2026-10-21 23:02:35 -07:00
DeCentN2Madness 704c8d27c9 fix(phase10): harden responsive layouts and release validation 2026-10-21 23:02:25 -07:00
DeCentN2Madness d20372fe33 feat(phase9): isolate forms and counters for nonproduction 2026-10-21 23:02:13 -07:00
DeCentN2Madness e874b26bb9 docs(forms): adopt new Jotform form architecture 2026-10-21 20:31:08 -07:00
DeCentN2Madness 08612d97e6 fix(landing): reconcile inactive forms and release copy 2026-10-21 20:31:01 -07:00
DeCentN2Madness f98576f3ae feat(landing): integrate campaign and early intervention pages 2026-10-20 17:50:56 -07:00
DeCentN2Madness 537f9864a0 docs(forms): record P9-03 Jotform integration contract and inventory 2026-10-18 13:30:46 -07:00
DeCentN2Madness 59911eb929 fix(a11y): reconcile responsive layouts and multilingual UI 2026-10-15 12:18:44 -07:00
DeCentN2Madness 8e64d32209 feat(i18n): reconcile multilingual pages and shared forms 2026-10-13 23:01:38 -07:00
DeCentN2Madness b5bc95bc2b feat(library): complete multilingual content parity reconciliation 2026-10-13 14:18:24 -07:00
DeCentN2Madness a699d467f1 feat(i18n): reconcile multilingual navigation and RTL rendering 2026-10-10 20:15:25 -07:00
DeCentN2Madness 8192ea71c4 feat(seo): reconcile URLs and author page-one redirects 2026-10-11 00:43:45 +00:00
DeCentN2Madness 8646792d46 feat(library): add multilingual author archives and linked bylines 2026-10-10 00:17:25 -07:00
AIAMarketing 0957c06a18 docs(migration): add living handoff after Phase 6B.2 2026-10-09 20:15:34 -07:00
DeCentN2Madness 6f5ac3c0d2 feat(library): add static pagination and page-one redirects 2026-10-09 20:00:26 -07:00
DeCentN2Madness b20c253383 feat(library): implement multilingual static search 2026-10-09 19:26:58 -07:00
DeCentN2Madness 76a035424d docs(migration): propose Phase 6A Library architecture 2026-10-09 12:31:25 -07:00
DeCentN2Madness 34d5394b3c fix(content): reconcile published team roster and assets 2026-10-09 10:40:08 -07:00
DeCentN2Madness bc399b43b6 feat(content): reconcile homepages and restore HSA/FSA section 2026-10-08 23:23:23 -07:00
DeCentN2Madness 051fb7c108 fix(content): reconcile service eligibility and consultation pages 2026-10-08 20:43:25 -07:00
DeCentN2Madness 4079156776 feat(seo): add validated article and FAQ structured data 2026-10-08 17:38:06 -07:00
DeCentN2Madness 4ed01d7d28 feat(seo): separate display headings and improve social metadata 2026-10-08 14:50:54 -07:00
AIAMarketing c720917627 docs: link Ads conversion implementation handoff from Astro README 2026-10-08 14:23:47 -07:00
AIAMarketing 2ce8c849c0 docs: record Google Ads consultation conversion configuration and privacy-gated Astro handoff 2026-10-08 14:23:35 -07:00
DeCentN2Madness 32112edbde feat(seo): validate translation relationships and generate hreflang 2026-10-08 13:53:31 -07:00
AIAMarketing f28bf9ad06 docs: record employee portal migration requirements and access decision 2026-10-08 11:30:26 -07:00
434 changed files with 94768 additions and 1744 deletions

No files matched your search

+3
View File
@@ -58,3 +58,6 @@ temp/
.DS_Store
Thumbs.db
Desktop.ini
# Private portal collection, mappings and ciphertext; never a public asset source.
/www/private/employee-portal/
+29
View File
@@ -82,6 +82,35 @@ sandboxed command-line tools may fail HTTPS certificate verification. Do not
disable certificate verification for package installation or sensitive
retrievals; use live web search or review the retrieval from the host instead.
## Optional local browser environment
The repository now provides a Linux-only `browser` development shell, separate
from the default content-editing shell. In a normal host terminal, from the
repository root:
```sh
nix --extra-experimental-features "nix-command flakes" develop .#browser
```
It supplies a lockfile-matched Playwright driver, Chromium, headless shell and
font configuration. New processes launched inside this shell inherit
`PLAYWRIGHT_MODULE` and `PLAYWRIGHT_BROWSERS_PATH`; existing sessions do not.
For a guarded real-page smoke test, run from `www`:
```sh
TMPDIR=/tmp npm run build
TMPDIR=/tmp node tools/playwright-smoke.mjs
```
Preview and browser run in the same process environment, avoiding dependence on
remote MCP transport or cross-execution loopback access. All non-loopback and
non-GET/HEAD browser requests are blocked. Results/screenshots stay in `/tmp`.
The tool does not grant access to files or sockets denied by the autonomous
profile. If Nix realization, Chromium startup or loopback access is denied, keep
that result as an environment limitation and use the normal host terminal;
do not weaken TLS, identity, signing or sandbox configuration. No global MCP
configuration or launcher permissions were changed for this setup.
## Git limitation
Codex always protects `.git` recursively in its `workspace-write` sandbox.
+33 -5
View File
@@ -16,9 +16,10 @@
function: nixpkgs.lib.genAttrs supportedSystems (system: function nixpkgs.legacyPackages.${system});
in
{
devShells = forAllSystems (pkgs: {
default = pkgs.mkShell {
packages = with pkgs; [
devShells = forAllSystems (
pkgs:
let
developmentPackages = with pkgs; [
nodejs_24
git
curl
@@ -27,8 +28,35 @@
fd
python3
];
};
});
in
{
default = pkgs.mkShell { packages = developmentPackages; };
}
// pkgs.lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux {
# Keep driver and browser revisions paired through the existing lockfile.
# Opt-in so ordinary content editing does not require browser downloads.
browser = pkgs.mkShell {
packages = developmentPackages ++ [ pkgs.playwright-driver ];
PLAYWRIGHT_MODULE = "${pkgs.playwright-driver}/index.mjs";
PLAYWRIGHT_BROWSERS_PATH = pkgs.playwright-driver.selectBrowsers {
withFirefox = true;
withWebkit = false;
withFfmpeg = false;
};
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD = "1";
# Nix supplies browser libraries via patched runtime paths, not apt.
PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS = "true";
FONTCONFIG_FILE = pkgs.makeFontsConf {
fontDirectories = with pkgs; [
dejavu_fonts
liberation_ttf
noto-fonts
];
};
ASTRO_TELEMETRY_DISABLED = "1";
};
}
);
formatter = forAllSystems (pkgs: pkgs.nixfmt);
};
+17
View File
@@ -1,2 +1,19 @@
PUBLIC_AIA_API_BASE=https://api.azinstitute4autism.com
PUBLIC_COUNTERS_MODE=off
PUBLIC_COUNTERS_LIVE_APPROVED=false
PUBLIC_COUNTERS_MOCK_RESULT=success
# Optional override only: absent/empty means live on exactly 16 approved routes.
# PUBLIC_AIA_FORMS_MODE=off
# PUBLIC_AIA_FORMS_MODE=mock
PUBLIC_AIA_FORMS_MOCK_RESULT=success
# Explicit, local-only Form A meeting preview; requires PUBLIC_AIA_FORMS_MODE=mock.
PUBLIC_AIA_FORM_A_PREVIEW=false
PUBLIC_ALLOW_INDEXING=false
# Employee portal ciphertext is a non-PUBLIC build-only input.
# Never supply a passphrase through environment variables or build arguments.
AIA_PORTAL_LOCAL_PREVIEW_APPROVED=false
# AIA_PORTAL_CIPHERTEXT_FILE=/owner-controlled/private/ciphertext.json
# Explicit production-indexing input; it is never placed in Git or source snapshots.
AIA_PORTAL_PRODUCTION_APPROVED=false
# AIA_PORTAL_PRODUCTION_CIPHERTEXT_FILE=/absolute/private/employee-portal/approved-production-ciphertext.json
+226 -11
View File
@@ -26,7 +26,7 @@ edits. Stop it with `Ctrl+C`.
Requirements:
- Node.js 20.19 or newer; the Nix shell currently supplies Node.js 22
- Node.js 22.12 or newer (see `package.json`); the Nix shell supplies Node.js 24
- npm
This repository also has a Nix development shell at the repository root:
@@ -38,6 +38,40 @@ cd www
npm install
```
### Local Playwright environment (Linux)
From the repository root, enter the opt-in browser shell:
```sh
nix --extra-experimental-features "nix-command flakes" develop .#browser
cd www
TMPDIR=/tmp npm run build
TMPDIR=/tmp node tools/playwright-smoke.mjs
```
The existing `flake.lock` pairs the Nix Playwright driver and Chromium/headless
shell. `PLAYWRIGHT_MODULE` points directly to that driver; `PLAYWRIGHT_BROWSERS_PATH`
selects its matching browsers. Fontconfig supplies Latin/Arabic fallback fonts.
The ordinary development shell and npm dependencies remain unchanged. This
browser shell is offered on Linux; the existing Darwin development shell is
unchanged. Do not run `npx playwright install` or mix an unrelated npm Playwright
version with these browser revisions.
The smoke test starts Astro preview and Chromium in the **same execution** on an
ephemeral `127.0.0.1` port. It blocks external and non-GET/HEAD requests, loads the
real Spanish privacy and Library pages, verifies staging robots/title/H1, captures
two full-page screenshots in a new `/tmp/aia-playwright-smoke-*` directory, and
closes browser/preview. It does not submit forms or exercise production APIs.
Success establishes browser transport only, not Phase 8 visual or human acceptance.
Use the [Phase 8 guarded browser procedure](reports/phase-8-host-browser-verification-2026-10-14.md)
for full review. Entering the Nix shell does not repair an already-running remote
MCP transport or relax sandbox permissions. If the autonomous environment cannot
access the Nix store, trusted certificates, sockets or browser runtime files, run
the same smoke test from the host terminal. Do not disable TLS verification or
bypass the sandbox. The Nix environment needs host validation before browser
availability can be claimed.
Copy the example environment file when testing the like/view counter or staging
SEO behavior:
@@ -49,6 +83,8 @@ The default values are:
```txt
PUBLIC_AIA_API_BASE=https://api.azinstitute4autism.com
PUBLIC_COUNTERS_MODE=off
PUBLIC_COUNTERS_LIVE_APPROVED=false
PUBLIC_ALLOW_INDEXING=false
```
@@ -60,6 +96,16 @@ not deploy anything or change environment files. Run `npm run build` afterward
to restore staging output. Only explicitly authorized production deployments
should publish indexing-enabled artifacts.
Ordinary local builds keep counters off. `npm run deploy` deliberately and
non-overridably builds the production artifact with live counters, the approved
API origin and `PUBLIC_COUNTERS_LIVE_APPROVED=true`. Article pages post one
first-party view per real navigation; Library cards only batch-read statistics.
Likes use the existing POST/DELETE API and store only the visitor's chosen slug
set in localStorage. No view cookies or visitor identifiers are created. Run
`npm run test:counters`, then build in live mode and run `npm run
verify:counters -- --browser=chromium` (or `firefox`) for a fully intercepted
browser regression that cannot write production counters.
## View And Build
### Development Server
@@ -176,6 +222,43 @@ Article content goes here.
Set `draft: true` while preparing unpublished content.
### Display Headings and Social Metadata
Pages and articles may supply an optional plain-text `displayH1` in frontmatter:
```yaml
title: "The existing SEO title"
displayH1: "The source-supported visible heading"
```
The override changes only the visible H1. It does not change the document or
social title, article cards, navigation labels, or related-post text. Empty,
whitespace-only and non-string overrides fail content validation. Without an
override, articles keep `title`, regular pages keep their existing service/page
heading mappings and title-derived fallback, and homepage/Library components
keep their existing headings. Homepage heading markup stays intact unless a
plain-text override is explicitly supplied. Library template SEO titles remain
unchanged. Front Matter CMS exposes the optional field for pages and blog posts.
Existing featured images and page banner fallbacks supply `og:image` and
`twitter:image`. Relative paths resolve against the public origin in
`src/data/site.json`, never a preview host or an external canonical. Existing
`alt` text supplies both image-alt metadata tags only when it describes the
selected featured image; no descriptions are invented for banner fallbacks.
Pages without a selected image omit image tags and retain the `summary` card;
image pages retain `summary_large_image`.
`og:locale` is omitted: the content languages `en`, `es` and `ar` do not establish
the regional `language_TERRITORY` values required by the
[Open Graph protocol](https://ogp.me/). Regional targeting remains a human
localization decision. HTML language/direction and hreflang are unchanged.
Run `npm run test:seo` for isolated real-Astro builds covering heading defaults,
overrides, schema rejection, image metadata and shared publication invariants
in staging and indexing modes. Fixtures never modify the working content or
the project's `dist/`. See the dated Phase 4A section of
[`reports/migration-summary.md`](reports/migration-summary.md) for source evidence.
### Publication, Canonicals, and Sitemap
`src/utils/publication-policy.ts` owns route eligibility, normalized public
@@ -317,14 +400,30 @@ benefits
skills
insurance
esa
hsaFsa (optional; English only where published)
financialHelp
process
director
testimonials
logos (optional)
```
Keep homepage copy in those named blocks so the page remains easy to scan in
Front Matter CMS and VS Code. `src/content.config.ts` validates the structure.
`hsaFsa` uses `heading`, `body`, `image`, and `imageAlt`; omit the whole block
where no section is published. It renders between ESA and financial help.
`logos.items` holds `file`/`alt` pairs after testimonials. Process steps accept
an optional `href`; use an existing intake route and section ID in the same
language. Steps without a destination remain plain content.
### Edit The Team Page
The English Team page uses the validated `team:` frontmatter block in
`src/content/pages/en/team.md`. That block is the single source for the intro,
ordered clinical groups, ABA care team, member names/roles/images, and careers
content. The Markdown body contains no second roster. Update the structured
frontmatter rather than hardcoding people in `TeamPage.astro`; image filenames
refer to `public/assets/images`.
### Images And Downloads
@@ -380,7 +479,10 @@ src/data
### Add A Translation
Use the same `translationKey` across translated entries:
Use the same nonempty `translationKey` across genuine translated entries in
the **same collection**. The key is an explicit equivalence declaration, not a
URL or an entry reference. Slugs may differ; similar slugs alone never create a
relationship. Do not change keys to manufacture translation pairs.
```txt
src/content/blog/en/post-slug.md
@@ -398,7 +500,32 @@ The URLs become:
Arabic routes automatically render with `lang="ar"` and `dir="rtl"`.
Do not publish unreviewed machine translations. Clearly mark placeholders.
The shared publication manifest supplies both the language switcher and SEO
alternates. A translation set needs at least two eligible members. Drafts,
unpublished placeholders, noindex pages, and external-canonical pages do not
participate. Mark placeholders `draft: true`; `/ar` remains unpublished.
Author records have no generated routes yet and cannot participate.
One member per language per collection/key is allowed, including draft members;
duplicates and blank/whitespace-padded keys fail validation. A lone key is valid
and emits no alternate: it does not assert that a particular missing language
exists. Dangling graph references, wrong-family targets, ineligible targets,
and nonreciprocal links fail validation. The rendered-output regression checks
also fail if an alternate target has no generated HTML file.
Indexing-enabled builds emit the same absolute hreflang links on every member,
including its own language. `x-default` points to the eligible English member
only; sets without one omit it. Staging suppresses hreflang while retaining the
eligible language menu and global `noindex,nofollow`. Unpaired/excluded pages
retain their current-language label without an empty interactive menu.
Run `npm run test:publication`, `npm run build`, and
`PUBLIC_ALLOW_INDEXING=true npm run build` to validate both modes. Finish with
`npm run build` to restore staging. See `reports/migration-summary.md` for
Phase 3B's exact route sets, evidence, and route-audit refresh commands.
Do not publish unreviewed machine translations. Do not invent translations;
substantive translation changes require human language review.
### Edit A Blog FAQ
@@ -409,12 +536,49 @@ import FAQAccordion from '../../../components/FAQAccordion.astro';
```
Edit the component's `label`, `heading`, and `items` data in the post. Keep
`answer` as plain text for JSON-LD and `answerHtml` as the matching visible
answer. Shared FAQ markup, styling, interaction, and schema generation live in
`src/components/FAQAccordion.astro`.
`answer` and `answerHtml` consistent. JSON-LD derives its answer text from the
actual visible `answerHtml` when supplied, otherwise from the rendered `answer`
fallback. Shared FAQ markup, styling, interaction, and schema generation remain
in `src/components/FAQAccordion.astro`, using `src/utils/structured-data.ts`.
The standalone FAQ page passes its rendered Markdown/MDX slot as `sourceHtml`
to the same component. Its server schema describes the direct H3 questions and
following answer nodes that the existing browser code turns into accordions.
Runtime-only sources without server content emit no invented FAQ schema. Do
not mix `items` with `sourceSelector`. Duplicate questions, multiple schema
producing accordions on one page, empty answers and conflicting canonical
props fail validation; consolidate questions into one accordion per page.
### Article and FAQ Structured Data
Article JSON-LD uses the existing SEO `title`, description, featured image,
language, `date`, optional `updatedDate`, and the exact locale/slug match in the
authors collection. Dates use calendar-day precision; article/card bylines
format that day in UTC to avoid shifting it on the build host. Missing
modification dates are omitted. Missing or ambiguous author references fail validation.
No author archive URL or publisher is invented. `displayH1` does not change
the schema headline. No new frontmatter fields are required.
BlogPosting and FAQPage emission reuse the manifest's `sitemapEligible` record
gate: drafts, noindex records and external-canonical records are excluded.
This gate is independent of the build's global indexing switch, so staging
can exercise schema while retaining its global noindex, empty sitemap and
absent hreflang. The existing site organization block remains unchanged.
These schemas describe the rendered local records; they do not certify that
older article dates or FAQ answers have been reconciled with production.
Phase 6C drift observations and validation results are recorded in
`reports/migration-summary.md`. Run `npm run test:seo` and
`npm run test:publication`, and validate both build modes before publication.
## Reports And Utilities
For the current migration checkpoint, next Codex phase, ratified decisions,
and outstanding cutover blockers, begin with the
**[living session handoff](reports/SESSION_HANDOFF.md)**. Update that short
handoff at each accepted milestone transition; detailed historical evidence
remains in `reports/migration-summary.md`.
Migration reports are stored in `reports/`.
Useful commands:
@@ -428,14 +592,65 @@ npm run audit:links
The live crawl is optional and may fail in restricted network environments.
## Referral CTA
The public `/referrals` page preserves the existing site's **Refer a Client**
button, linking directly to https://form.jotform.com/231638510219149. The
site does **not** embed a referral form or require Form C. This destination is
separate from Form A's 16 allowlisted placements. Legacy-hosted-form privacy,
recipient, accessibility and operational acceptance remain the owner's release
responsibility.
## Forms
Forms are intentionally static and do not submit anywhere. Before production:
As of the owner decision on 2026-10-30, `npm run dev` and `npm run build`
use live Jotform Form A on exactly 16 approved placements: 10 immediate frames
and six deferred bilingual service drawers. No Form A flags are required.
Public development-host forms are owner-authorized. This does not authorize cutover.
1. Select a form backend.
2. Connect the forms.
3. Add spam protection.
4. Test validation, confirmation, and failure states.
Use `PUBLIC_AIA_FORMS_MODE=off npm run build` for an offline artifact, or
`PUBLIC_AIA_FORMS_MODE=mock npm run dev` for synthetic fixtures. Missing/empty
mode means live; obsolete `isolated-test` and other invalid values produce an
explicit configuration error. Remove old approval/environment variables from
local settings. Indexing and form mode remain independent of counter mode.
See the [current Form A guide](integrations/jotform/README.md) for the exact
registry, safeguards, rollback and owner acceptance requirements. Form C remains
inactive. Employee-portal private input retains its own separate gates.
Verify matching output with
`node tools/phase10-artifact-verify.mjs --mode=staging --forms=live --counters=off`;
use `--mode=indexing` for indexing output and `--forms=off` or `--forms=mock`
for those explicit builds. Production counter artifacts require
`--counters=live`. No actual submissions or production counter writes run in
automated tests.
## Static releases and employee portal
The Contabo deployment interface is intentionally separate from NixOS changes.
Use [the release runbook](integrations/nixos/deploy.md) for `npm run deploy`,
dry-run, rollback, the encrypted production portal input and the separate
one-time employee-resource installer. The server-side installer is a root-only
POSIX shell script using NixOS base tools; it does not require Node.js on
Contabo. Ordinary releases never copy employee documents into `dist`;
protected staff and management resources remain under server-controlled Basic
Auth namespaces. After a successful unlock, the page keeps that role's code
only in memory and uses it for same-origin authenticated document fetches. The
response is downloaded as a local Blob, so employees do not receive a second
browser authentication prompt. Cross-role requests are stopped before
credentials are sent; direct resource URLs still require nginx authentication.
Codes are never put in URLs or browser storage. The accepted interim portal is
explicitly non-PHI.
### Google Ads consultation-form conversion handoff
The Google Ads conversion ID, label, and privacy-gated Astro integration
instructions are in
[`reports/google-ads-consultation-conversion.md`](reports/google-ads-consultation-conversion.md).
This is documentation only: **do not install Google tags or conversion snippets**
on health-service pages or turn on enhanced conversions until AIA's
privacy/HIPAA and advertising-policy review explicitly approves the complete
data flow. Any future measurement needs separately approved success and privacy semantics; the former API-success premise is historical and no tracking is active.
## Troubleshooting
+3
View File
@@ -13,6 +13,7 @@
"pageBundle": false,
"fields": [
{ "title": "Title", "name": "title", "type": "string", "required": true },
{ "title": "Display H1", "name": "displayH1", "type": "string" },
{ "title": "Description", "name": "description", "type": "string" },
{ "title": "Slug", "name": "slug", "type": "string", "required": true },
{ "title": "Language", "name": "lang", "type": "choice", "choices": ["en", "ar", "es"] },
@@ -28,6 +29,7 @@
"pageBundle": false,
"fields": [
{ "title": "Title", "name": "title", "type": "string", "required": true },
{ "title": "Display H1", "name": "displayH1", "type": "string" },
{ "title": "Description", "name": "description", "type": "string" },
{ "title": "Slug", "name": "slug", "type": "string", "required": true },
{ "title": "Date", "name": "date", "type": "datetime", "required": true },
@@ -47,6 +49,7 @@
"pageBundle": false,
"fields": [
{ "title": "Name", "name": "name", "type": "string", "required": true },
{ "title": "Display name (published heading/byline)", "name": "displayName", "type": "string" },
{ "title": "Slug", "name": "slug", "type": "string", "required": true },
{ "title": "Description", "name": "description", "type": "string" },
{ "title": "Avatar", "name": "avatar", "type": "image" },
+185
View File
@@ -0,0 +1,185 @@
# Employee portal compatibility and private migration
Recorded 2026-11-04. The clinical director accepted the collected, non-PHI
staff and management portal content and the interim shared-code presentation.
Browser-side decryption remains access friction rather than individual
authentication, revocation, a secure session, or a HIPAA determination.
The same successfully validated code authorizes protected document downloads
for that role during the current page session. The browser keeps it only in a
closure, performs a same-origin authenticated fetch, and saves the returned
document without opening nginx's native Basic Auth dialog. Staff uses the
`staff` username and stream `b`; management uses the `management` username and
stream `a`. Direct URLs remain nginx-protected, cross-role fetches are rejected
before credentials are sent, and failed authenticated downloads show an inline
error without direct-navigation fallback. No code enters a URL, browser
storage, public artifact, or log. Downloads use a bounded safe form of the
approved link label and preserve the validated extension from the protected
SHA-256 server destination; server resources are not renamed.
## Approved production ciphertext
An indexing-enabled production build may include one owner-approved encrypted
two-stream payload when both of these non-public build inputs are set:
```sh
AIA_PORTAL_PRODUCTION_APPROVED=true
AIA_PORTAL_PRODUCTION_CIPHERTEXT_FILE=/absolute/private/employee-portal/approved-production-ciphertext.json
```
The build rejects missing, malformed, symlinked, oversized, wrong-mode, or
simultaneous local-preview/production inputs. It never decrypts the payload at
build time. `/employee-portal` remains noindex, sitemap-excluded and
hreflang-excluded. See [the deployment runbook](../nixos/deploy.md) for the
approved release and protected-resource installation commands.
## Source and private collection
The 42 approved non-PHI resources have already been collected under the ignored
`private/employee-portal/hubfs/` workspace. Collection and clinical review are
complete. Do not run a new collection pass for production preparation.
Production preparation is an owner-only, hidden-prompt sequence. The first
command identifies the encrypted streams from the staff and management codes;
the codes are never accepted in arguments, environment variables, files or
output:
```sh
npm run portal:prepare -- identify \
/home/alice/projects/wrk/aia/local-archives/aia-employee-portal-hubspot-footer-source.txt
npm run portal:prepare -- propose-mappings \
/home/alice/projects/wrk/aia/local-archives/aia-employee-portal-hubspot-footer-source.txt
```
Review the private mapping summary. The role rule maps staff-only references to
`/staff-resources/`, management-only references to `/management-resources/`, and
duplicates a shared source into both protected namespaces. After the owner
approves that operational policy, run:
```sh
npm run portal:prepare -- approve-mappings \
/home/alice/projects/wrk/aia/local-archives/aia-employee-portal-hubspot-footer-source.txt
npm run portal:prepare -- rewrite-production \
/home/alice/projects/wrk/aia/local-archives/aia-employee-portal-hubspot-footer-source.txt
```
The rewrite command prompts for both codes again, rewrites every approved legacy
resource URL, re-encrypts with fresh salts and IVs, verifies each role privately,
and atomically installs `approved-production-ciphertext.json` plus a matching
private `production-readiness.json`. It refuses unresolved `/hubfs/` references.
Prior manifests and production ciphertext are retained as timestamped private
backups.
### Mapping approval versus server verification
`mappingApproved`, `accessPolicyApproved`, and `rewriteApproved` mean the
verified collected source has an approved role and safe protected destination
and may be prepared or installed. They do not claim the destination exists.
`destinationInstalled`, `destinationHashVerified`,
`destinationPermissionsVerified`, and `destinationAccessVerified` remain false
until an authorized VPS rehearsal actually installs the file and verifies its
bytes, `root:nginx` permissions, Basic Auth boundary and protected URL. Local
preparation and installation accept the first state; release acceptance must
still complete the second state before browser cutover.
Read-only legacy footer source:
`/home/alice/projects/wrk/aia/local-archives/aia-employee-portal-hubspot-footer-source.txt`.
The original stays outside Git as rollback evidence. The 42-file collection and
its accepted content are complete; no current command downloads resources.
Private output is `private/employee-portal/`: directories 0700, manifests and
binary resources 0600. This exact subtree is gitignored and outside Astro's
public directory. Filenames are SHA-256 hashes of source URLs, independently
verified by content hashes. The manifest retains original references, labels,
view membership, MIME, bytes, status and delivery/classification decisions.
The manifest preserves the original source URL, collection hash, size, reference
membership and accepted source evidence. Public legacy reachability did not
infer public approval.
Before every artifact transfer, verify that only `dist` is copied and that it
contains no private manifest, document or real ciphertext unless that ciphertext
has separately been authorized for the local preview. Never archive the whole
working directory as a deployable artifact.
## Historical collection and rewriting recovery notes
The original source, collection manifests, collected bytes and prior ciphertext
revisions remain recovery evidence. Do not change their classifications or
destination flags by hand; use the production-preparation sequence above so
stream identity, references, source hashes and protected destinations remain
consistent. CSS/srcset dependencies remain an explicit error rather than a
silent rewrite.
## Local preview and content safety
Use a retained private ciphertext revision:
```sh
AIA_PORTAL_LOCAL_PREVIEW_APPROVED=true \
AIA_PORTAL_CIPHERTEXT_FILE=/absolute/private/ciphertext-TIMESTAMP.json \
PUBLIC_AIA_FORMS_MODE=off PUBLIC_ALLOW_INDEXING=false \
npm run dev -- --host 127.0.0.1
```
The 2026-10-30 revision removes dependence on the retired Form A environment role. Form mode is independent; `off` above is optional for local testing and cannot grant portal approval. The page defaults to locked/unavailable without its own explicit approval and valid private input. Indexing
builds cannot include it. The codes never go to a server, storage or URL. No
native form submits; Enter and Unlock use local WebCrypto. Only the matching
stream is displayed; refresh or leaving the page locks it again.
The passive DOM renderer preserves headings, lists, text, tables and safe
HTTPS/mailto/tel links, with no referrer on links. It rejects scripts, inline
handlers, styles, media, embedded forms and unknown tags. Real portal markup
has not been decrypted or reviewed; any removed behavior must be reviewed with
the owner before claiming fidelity. It must not silently become arbitrary
script execution. No real encrypted stream or plaintext is in Git.
### Scoped presentation correction, 2026-10-30
The renderer now maps only `hs-button`, `content-button`, or
`portal-resource-button` anchor tokens, or exact inline AIA orange background
colors (`#ffbd59` / `#ff914d`), to the local `portal-resource-button` class.
It does not copy the original style or arbitrary classes. These are narrow
compatibility candidates, not a claim that encrypted real views have been
inspected. HTTPS/mailto/tel links retain the existing safe URL checks; contact
links receive a local dark-orange accent for readable contrast. Table scope
and bounded numeric row/column spans are preserved. All other executable or
unapproved attributes remain removed.
The follow-up styling correction recognizes the live portal's `Daily Lineup
Report` and `Monthly Lineup Report` link labels, even when their original
HubSpot classes or inline fills are absent. It maps only those links to the
existing orange resource-button style; arbitrary anchors remain ordinary links.
Both unlocked views now use the site's orange accent for list-item markers.
The source classes and styles still do not reach the passive DOM.
### Staff resources and Management Templates, 2026-11-01
The owner observed that the non-management (general-staff) portal still lost
HubSpot's resource-button presentation. After **sanitizing** the decrypted DOM,
a headed `Management Templates` section identifies the general-staff resource
view. Valid HTTP(S) resource links in that view receive only the local
`portal-resource-button` class; `mailto:` and `tel:` retain contact-link
styling. Neither destination validation nor removed legacy classes/styles,
scripts, media or HTML attributes are relaxed.
The `Management Templates` unordered list receives a local
`portal-template-grid` class: two columns at desktop widths (768px+),
one column on smaller screens. Semantic list order and keyboard tab order
are retained, with responsive full-width buttons. This is a presentation
change only: it does not infer or approve employee resource access.
Synthetic staff/management browser fixtures check the distinction and
responsive columns. The actual decrypted staff source remains private;
owner should confirm layout and links in the local preview before merging.
Scoped typography, spacing, lists, table rules and keyboard focus apply to both
unlocked streams. Synthetic staff/management fixtures exercise these mappings
at 320/390/768/1440px. Owner must inspect the real views privately to confirm
legacy button recognition and source fidelity; if a different class is used,
provide sanitized class semantics rather than decrypted content or credentials.
Before owner acceptance: validate two real view codes privately, inspect every
resource/category, responsive directories, focus, link semantics and sanitization
impact. Check wrong-code feedback, keyboard unlock, no-JS explanation and refresh.
Production must use a separately reviewed runtime ciphertext delivery mechanism;
this batch intentionally provides only a gated local build input. Browser-delivered
ciphertext is publicly downloadable by anyone able to reach that preview.
+156
View File
@@ -0,0 +1,156 @@
# AIA Form A Jotform styling and conditional-button guide
This directory contains the accepted CSS backup and integration guidance for AIA Form A. [`aia-form-a.css`](./aia-form-a.css) is intended for Jotform Classic Forms' **Form Designer → Styles → Inject Custom CSS** under owner-controlled configuration review. The existing repository CSS is the accepted backup; do not regenerate it from Astro styles.
The CSS translates the existing AIA form treatment: Rubik typography, blue labels and text, `#fcf9f5` inputs with `#edeef3` borders, the `#ffbd59` filled button, the `#ff914d` hover/focus border, four-pixel corners, visible validation errors, and strong keyboard focus. The Astro page supplies the heading, introduction, privacy-policy link, and surrounding card. The stylesheet therefore removes the Jotform surface rather than adding another header, footer, or nested card.
The selectors target Jotform Classic Forms identifiers such as `#form`, `.form-all`, `.form-line`, `.form-label`, `.form-sub-label`, `.form-required`, `.form-textbox`, `.form-dropdown`, `.form-textarea`, `.form-error-message`, and `.form-submit-button`. Jotform's final generated DOM must be checked in the account before relying on pixel-level parity. The stylesheet does not hide required indicators, error messages, honeypots, or focus outlines, and it does not request fonts or other external assets.
The current Builder theme reconciliation adds narrowly scoped `!important` declarations to the outer surface, labels, inputs, and submit-button treatments that Jotform's generated theme otherwise overrides. Error, required-indicator, and focus rules remain visible and are deliberately not reset. The account owner must still confirm the final generated DOM and rendered form after any Jotform theme or field change.
## Installation and comparison
1. Open the approved Form A in AIA's HIPAA-enabled Jotform account. Do not change its fields or settings from this repository workflow.
2. Preserve the approved account configuration; account changes and site cutover require their separate authorization.
3. Paste the contents of `aia-form-a.css` into Jotform's custom CSS area.
4. Compare the Jotform preview with the Astro Form A mock at 390px and 1440px. Check the form surface, label rhythm, input height, button fill, outlined hover/focus state, error state, and mobile reflow.
5. Check both English and Spanish configurations. Confirm translated labels, required indicators, validation messages, confirmation copy, and the accessible iframe title supplied by the parent Astro integration.
6. Test the form in a real embedded iframe and on the direct hosted-form fallback. Confirm the iframe has a practical mobile height, does not create horizontal overflow, and does not trap keyboard focus.
The optional Astro meeting preview requires `PUBLIC_AIA_FORMS_MODE=mock` and `PUBLIC_AIA_FORM_A_PREVIEW=true` in a non-indexing build. It does not load Jotform and is not a live submission test.
## Current Form A operation — superseding decision, 2026-10-30
The owner authorizes real Form A on the publicly reachable development host
`https://aia.web3app.dev/`. Normal development and static builds use **live** Form A
without environment flags. This intentionally supersedes the former isolated-test
and seven-route production approval gates. It is not site-cutover authorization.
From `www/`:
```sh
npm run dev
npm run build
# Optional offline/restricted artifact:
PUBLIC_AIA_FORMS_MODE=off npm run build
# Optional synthetic fixtures:
PUBLIC_AIA_FORMS_MODE=mock npm run dev
```
`PUBLIC_AIA_FORMS_MODE` is optional; missing/empty means `live`. The only accepted
values are `live`, `off`, and `mock`. Remove obsolete `isolated-test` settings from
local environment files; invalid explicit values stop the build with actionable
guidance. The former live/isolated/consultation/production approvals and form
environment role are removed, with no replacement gates. `PUBLIC_ALLOW_INDEXING`
controls publication independently: both staging and indexing builds use the same
16 placements. Explicit off/mock builds contain no real Form A iframe.
One typed registry in `src/utils/form-integration.ts` fixes every route, locale
and context. No visitor query, referrer, arbitrary URL or option preselection is
forwarded. The only origin/ID is `https://form.jotform.com/262946078314059`.
Every URL has exactly `formContext` and `language` parameters:
| Context | Routes | Loading |
|---|---|---|
| contact | `/contact` (en), `/es/contact` (es) | Immediate, 2 |
| landing | `/lp/aba-therapy`, `/lp/aba-insurance`, `/lp/aba-ahcccs`, `/lp/aba-private-pay`, `/lp/early-intervention` (en) | Immediate, 5 |
| consultation | `/client-consultation` (en), `/es/client-consultation` (es), `/schedule-consultation` (en) | Immediate, 3 |
| consultation | `/aba-therapy`, `/autism-evaluations`, `/learner-social-club` (en), and their `/es/` counterparts (es) | Deferred, 6 |
The context is presentation-only. Physical Form B is retired. No Form C is planned.
`/referrals` independently links to the existing hosted Jotform
`https://form.jotform.com/231638510219149`, not to Form A. That link is
owner-directed but its legacy form's runtime privacy/recipient acceptance remains
separate from Form A. Other routes cannot acquire Form A by setting a mode.
The typed future Academy service copy does not publish another page.
Live service drawers open at four seconds OR 50% scroll, canceling the unused
trigger. Dismissal or verified completion sets the existing shared 30-day
suppression timestamp. The existing service CTA overrides automatic suppression;
without JavaScript it remains a normal consultation-page link. Jotform loads only
when the drawer opens. Off mode never automatically opens an inactive drawer.
Mock mode retains the existing synthetic fixture workflow.
A verified `submission-completed` message must match the exact approved origin,
actual activated/open iframe window, approved form ID and action. It displays a
localized acknowledgment, waits five seconds, then uses the existing slide-out.
Duplicate messages cannot restart the countdown. Manual close/navigation cancels
it; suppression remains. Deliberate reopening after completion creates a fresh
iframe. Provider-envelope acceptance still requires the owner-controlled real
submission check; synthetic browser messages are not that acceptance.
The shared iframe preserves fixed responsive heights, accessible EN/ES titles,
`referrerpolicy="no-referrer"`, and
`sandbox="allow-forms allow-scripts allow-same-origin"`. No popup, top-navigation,
camera, microphone, payment or geolocation permissions are added. The hosted
fallback is outside the iframe and hidden without layout space until a 15-second
missing-load timeout. Late load hides it; disposal cancels timers. A localized
`noscript` fallback remains. Load does not prove application health or submission.
No helper script, cross-origin DOM inspection, arbitrary messaging or submission
forwarding is introduced. The official resize handler remains unimplemented and
conditionally acceptable only after its separate security/browser review.
Owner-reported direct EN/ES synthetic acceptance and sampled embedded acceptance
(English contact, Spanish contact and one ABA landing page) remain recorded as
owner evidence. This change does not independently verify Jotform or resolve its
Spanish consultation dropdown discrepancy, runtime telemetry, fluent-language,
screen-reader, final HTTPS-host or operational recipient review.
For form rollback, explicitly set `PUBLIC_AIA_FORMS_MODE=off`, rebuild, verify
`--forms=off`, and use the separately authorized artifact-switch procedure.
Removing that override restores live, so removing settings is **not** rollback.
Do not change the Jotform account as part of an Astro rollback.
Artifact checks (build matching output first):
```sh
node tools/phase10-artifact-verify.mjs --mode=staging --forms=live
# For PUBLIC_ALLOW_INDEXING=true output:
node tools/phase10-artifact-verify.mjs --mode=indexing --forms=live
# For explicit off or mock output, select the matching --forms value.
```
Employee-portal ciphertext remains separately gated by its own approval, private
input and non-indexing preview requirement. Form A modes cannot authorize it.
## Existing professional referral destination (owner decision 2026-11-01)
`/referrals` has one `Refer a Client` link to
[the existing hosted Jotform](https://form.jotform.com/231638510219149). It does not embed Form A
or use Form C. No new form, question, Jotform integration, query parameter or
notification routing is introduced. Test the link and verify the separate
existing form's privacy, field necessity, recipients and confirmation with its
account owner before release.
## Form context and button labels
The current Form A design uses a hidden `formContext` value with fixed, approved values such as `contact` and `landing`. Jotform does not provide a native conditional rule that changes one Submit button's accessible label safely in every context. If owner-approved context-specific labels are required, use multiple native Jotform Submit buttons and Jotform's conditional visibility rules:
- Add one native Submit button for each approved context/language label.
- Show exactly one intended Submit button for the current, validated `formContext`.
- Keep every button a real Jotform Submit control; do not use CSS `::before`/`::after` text as a label.
- Verify that every visible variant submits through the same approved form and preserves the honeypot and validation behavior.
- Make the no-context and invalid-context states fail closed: no ambiguous extra button and no unintended submission path.
- Verify keyboard order, focus visibility, screen-reader names, English/Spanish labels, and mobile layout for every variant.
All five landing routes use Form A's fixed `landing` context. The nine consultation
placements use its fixed `consultation` context. Jotform owns native Submit labels
and conditions. Do not add an external Astro button that attempts to submit a
cross-origin iframe.
## Verification checklist
- [x] Direct English/Spanish Form A language handling, conditional email requirement, synthetic submission and native thank-you were owner-verified; this is not embedded-iframe acceptance.
- [x] Direct staff-notification/autoresponder delivery, generic no-answer/no-PDF content, fixed Reply-To, recipient access/retention, and absent webhooks/integrations were owner-verified for Form A.
- [ ] Exact remaining Form A consultation question properties, choices, conditional routing and availability, and consultation language/configuration, are approved.
- [ ] English and Spanish embedded-iframe labels, validation, confirmation, and button variants are reviewed by fluent-language owners.
- [ ] The hidden honeypot remains present, effective, and excluded from user-facing visual changes.
- [ ] Exactly one native Submit button is visible for every valid context.
- [ ] Invalid or missing context does not expose an unintended submission path.
- [ ] No PHI-bearing answer, PDF, recipient, redirect, webhook, or HTTP POST forwarding is inherited without privacy/security approval.
- [x] Owner-reported embedded synthetic submission and confirmation passed on English contact, Spanish contact and one ABA landing placement; record the exact ABA path in the owner test log before release.
- [ ] All sixteen placements have final responsive, keyboard, screen-reader and fluent-language acceptance, including timeout/fallback and error expansion.
- [ ] Jotform runtime requests, telemetry and cross-origin failure behavior are reviewed with privacy/security owners.
- [ ] No Jotform, Contabo, analytics, advertising, or production API request is made by off/mock builds.
Existing owner-verification scopes remain recorded in the contract/checklist. Outstanding consultation configuration acceptance, runtime/privacy, accessibility, fluent-language and site-release gates remain open. Default-live Form A is owner-authorized; this guide does not authorize Jotform account changes or site deployment.
+252
View File
@@ -0,0 +1,252 @@
/* ==========================================================
AIA FORM A — JOTFORM CUSTOM CSS
Form ID: 262946078314059
Maximum form width: 640px
========================================================== */
/* Document and language selector */
html.supernova,
html.supernova body,
body.supernova {
background: #fff !important;
background-image: none !important;
}
/* Avoid horizontal overflow, including on the thank-you page */
body {
margin: 0 !important;
}
/* Confirmation page styling */
body.thankyou,
body.thankyou #stage {
background: #fff !important;
background-image: none !important;
}
.jfLangDd.jfLangDd--match-form {
padding: 12px 0 !important;
}
/* Form container */
form[id="262946078314059"] {
width: 100% !important;
max-width: 640px !important;
margin: 8px auto !important;
box-sizing: border-box;
}
.form-all {
width: 100% !important;
max-width: 100% !important;
margin: 0 !important;
padding: 0 !important;
background: #fff !important;
border: 0 !important;
box-shadow: none !important;
color: #254080;
font-family: Rubik, Arial, sans-serif;
}
.form-all .form-section {
margin: 0 !important;
padding: 0 !important;
}
/* Field layout */
.form-all .form-line {
margin: 0 !important;
padding: 0 0 21px !important;
background: transparent !important;
border: 0 !important;
}
.form-all .form-input-wide {
margin-top: 0 !important;
padding-top: 0 !important;
}
/* Labels and sublabels */
.form-all .form-label,
.form-all .form-label-left,
.form-all .form-label-right,
.form-all .form-label-top {
color: #254080 !important;
font-size: .875rem;
font-weight: 700;
line-height: 1.35 !important;
margin: 0 0 6px !important;
padding: 0 !important;
}
.form-all .form-sub-label {
color: #254080;
font-size: .75rem;
line-height: 1.3 !important;
margin: 4px 0 0 !important;
padding: 0 !important;
}
.form-all .form-sub-label-container {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.form-all .form-required {
color: #a21c28 !important;
margin-left: .2rem;
visibility: visible;
}
/* Inputs */
.form-all input.form-textbox,
.form-all select.form-dropdown,
.form-all textarea.form-textarea {
background: #fcf9f5 !important;
background-image: none !important;
border: 1px solid #edeef3 !important;
border-radius: 4px !important;
box-shadow: none !important;
box-sizing: border-box;
color: #254080 !important;
font-family: inherit;
font-size: 1rem;
line-height: 1.4;
min-height: 2.75rem;
padding: .55rem .7rem;
max-width: 100%;
}
/* Preserve two-column name fields */
.form-all .form-sub-label-container input.form-textbox {
width: 100% !important;
max-width: 100% !important;
}
/* Full-width phone and email fields */
.form-all
.form-line:is(
[data-type="control_phone"],
[data-type="control_email"]
)
:is(.form-input, .form-input-wide, input.form-textbox) {
width: 100% !important;
max-width: 100% !important;
}
/* Message field */
.form-all textarea.form-textarea {
width: 100% !important;
min-height: 5.5rem !important;
resize: vertical;
}
/* Radio buttons and checkboxes */
.form-all .form-radio-item,
.form-all .form-checkbox-item {
color: #254080;
line-height: 1.4;
margin: 0 .75rem .2rem 0 !important;
padding: 0;
}
.form-all .form-radio,
.form-all .form-checkbox {
accent-color: #254080;
}
/* Submit button and wrapper */
.form-all .jf-form-buttons,
.form-all .form-buttons-wrapper {
box-sizing: border-box;
width: 100% !important;
max-width: 100% !important;
margin: 0 !important;
padding: 0 !important;
background: transparent !important;
border: 0 !important;
}
.form-all .form-submit-button,
.form-all button[type="submit"] {
width: 100%;
box-sizing: border-box;
min-height: 3rem;
padding: .65rem 1.2rem;
background: #ffbd59 !important;
background-image: none !important;
border: 2px solid #ffbd59 !important;
border-radius: 4px !important;
box-shadow: none !important;
color: #254080 !important;
cursor: pointer;
font-family: inherit;
font-size: 1rem;
font-weight: 400;
line-height: 1.4;
text-shadow: none !important;
transition: background .3s linear, border-color .3s linear;
}
.form-all .form-submit-button:hover,
.form-all button[type="submit"]:hover {
background: transparent !important;
border-color: #ff914d !important;
color: #254080 !important;
}
.form-all .form-submit-button:disabled,
.form-all button[type="submit"]:disabled {
cursor: not-allowed;
opacity: .65;
}
/* Keyboard focus */
.form-all input.form-textbox:focus-visible,
.form-all select.form-dropdown:focus-visible,
.form-all textarea.form-textarea:focus-visible,
.form-all input[type="radio"]:focus-visible,
.form-all input[type="checkbox"]:focus-visible,
.form-all .form-submit-button:focus-visible {
outline: 3px solid #115bbd !important;
outline-offset: -3px;
}
/* Validation */
.form-all .form-line-error input.form-textbox,
.form-all .form-line-error select.form-dropdown,
.form-all .form-line-error textarea.form-textarea,
.form-all input.form-validation-error {
border-color: #a21c28 !important;
}
.form-all .form-error-message,
.form-all .form-line-error .form-error-message {
color: #a21c28 !important;
font-size: .8rem;
font-weight: 700;
line-height: 1.4;
margin: .3rem 0 0 !important;
visibility: visible;
}
/* Accessibility: reduced motion */
@media (prefers-reduced-motion: reduce) {
.form-all .form-submit-button,
.form-all button[type="submit"] {
transition: none;
}
}
+72
View File
@@ -0,0 +1,72 @@
# Inactive SOPS/age preparation, 2026-10-30
The owner selected SOPS, age and sops-nix. This directory is a template, not a
host configuration. The development flake remains unchanged. No real recipient,
key, encrypted secret or server user is supplied. No module is deployed.
Official references inspected for this pass:
- [SOPS documentation](https://getsops.io/docs/)
- [sops-nix installation and secret permissions](https://github.com/Mic92/sops-nix)
SOPS encrypts configuration at rest. sops-nix can supply decrypted values at
runtime under `/run/secrets` with explicit owners and modes. This does not make
browser ciphertext or publicly served documents private.
## Owner setup before activation
1. Supply the actual NixOS topology, host flake, deploy user, persisted key
location, backup owner, HTTPS termination and resource-service identity.
2. Pin a reviewed `github:Mic92/sops-nix` input in that host flake; import
`inputs.sops-nix.nixosModules.sops` and the reviewed template. Do not add the
input to the Astro development flake just to evaluate a deployment sketch.
3. The owner generates independent developer/recovery and VPS age identities in
private terminals. Record only public recipients in the reviewed SOPS
creation rule. Use distinct recipients, never a placeholder recipient. Keep
the VPS private identity on persistent root-controlled storage (0600), outside
`/nix/store`, Git, the public static root and CI artifacts.
4. Encrypt the approved credential material using SOPS with both recipients.
Review recipient access, least privilege and an offline recovery copy. SOPS
encrypted files may enter a deployment repository only after owner approval.
5. Set `aia.portalSecrets` options explicitly, then evaluate the complete host
configuration and test decryption on authorized nonproduction infrastructure.
Runtime consumers use the generated `.path`, not Nix evaluation of plaintext.
6. Decide which service reloads after rotation. Rotate application credentials
as well as SOPS recipients when revoking access: rewrapping alone does not
invalidate an already copied password. Test recovery and key restoration.
## Separate staff and management resource authorization
Keep original documents outside Astro `public`, `dist`, release archives and
CDN roots. Proposed delivery namespaces are `/staff-resources/` and
`/management-resources/`; neither is implemented or considered working here.
Use nginx `auth_request` to an approved authorization service or an equivalent
server-enforced policy with individually revocable identities and staff and
management roles. Staff credentials must not authorize management resources;
management access to staff resources must be an explicit policy. Backend file
locations must be internal, inaccessible through static aliases or alternate
paths. Never trust a browser-provided role header.
A separate shared Basic Auth credential file per namespace can be considered
only as an explicitly approved weaker interim model, not identity management or
automatic role inheritance. The template prepares separate secret inputs without
selecting that access model or installing an identity provider.
Use HTTPS, `Cache-Control: private, no-store`, no shared/CDN caching, and
`Referrer-Policy: no-referrer` for protected delivery. Avoid credentials and
sensitive resource paths in access/error logs; review monitoring and backups.
Authorization failures must fail closed, including at proxy/cache boundaries.
Test direct requests, alternate encodings, role crossover and rollback.
## Distinct boundaries and release checks
- SOPS: deployment secrets at rest and controlled runtime access.
- Portal HTML: shared-code browser decryption, offline-guessable access friction.
- Documents: require server authorization even if URLs are encrypted in the UI.
The approved production portal build uses a non-public encrypted two-stream
payload and retains the same browser-side decryption boundary. Approved non-PHI
documents install separately into the VPS-owned staff/management directories;
they are never copied into `dist`. Verify both protected namespaces, two-view
separation, artifact exclusions, code rotation, restore and rollback before
cutover. Revoking a static release cannot retract ciphertext or files already
downloaded by visitors. Site cutover remains separately authorized.
+135
View File
@@ -0,0 +1,135 @@
# Contabo release operations
This site publishes static content through the merged Contabo release manager.
It does not run `nixos-rebuild`, reload nginx, change DNS, or write directly to
`/srv/www/azinstitute4autism.com/www/dist`.
## Required local tools and private inputs
- Node.js 22+, Git, tar, SSH and rsync.
- Either an OpenSSH host alias already configured locally, or a normal SSH
identity accepted by the existing root receiver.
- For environment-only invocations: `AIA_DEPLOY_HOST=administrator@host`,
`AIA_DEPLOY_SSH_IDENTITY=/absolute/path/to/identity`, and
`AIA_PORTAL_PRODUCTION_CIPHERTEXT_FILE=/absolute/private/employee-portal/approved-production-ciphertext.json`.
- For positional invocations, use either `SSH_HOST CIPHERTEXT` (OpenSSH resolves
the host alias and identity) or `SSH_HOST SSH_IDENTITY CIPHERTEXT` (the CLI
supplies `-i` and `IdentitiesOnly=yes`).
The payload remains outside Git and the source snapshot. It is browser ciphertext
only; neither access code nor decrypted portal HTML enters an Astro environment
variable, public resource directory, build log, or deployment manifest.
## Commands
From `www/`:
```sh
npm run deploy -- --dry-run
# Use a configured OpenSSH host alias and a private ciphertext path.
npm run deploy -- --dry-run aiar \
"$PWD/private/employee-portal/approved-production-ciphertext.json"
# Supply an explicit SSH identity; paths may contain spaces.
npm run deploy -- --dry-run 'root@66.94.121.180' \
"$HOME/.ssh/AIAMarketing" \
"$PWD/private/employee-portal/approved-production-ciphertext.json"
```
Dry-run performs the local production build, tests, artifact verification,
manifest creation and source-snapshot preparation. With no private production
payload it uses a generated synthetic two-stream fixture and explicitly reports
that the result is not production-ready. It never opens SSH or rsync.
```sh
AIA_DEPLOY_HOST='root@approved-host' \
AIA_DEPLOY_SSH_IDENTITY="$HOME/.ssh/AIAMarketing" \
AIA_PORTAL_PRODUCTION_CIPHERTEXT_FILE="$PWD/private/employee-portal/approved-production-ciphertext.json" \
npm run deploy -- --confirm
```
The equivalent confirmed positional commands are:
```sh
npm run deploy -- --confirm aiar \
"$PWD/private/employee-portal/approved-production-ciphertext.json"
npm run deploy -- --confirm 'root@66.94.121.180' \
"$HOME/.ssh/AIAMarketing" \
"$PWD/private/employee-portal/approved-production-ciphertext.json"
```
When positional values are present, they take precedence over all three
deployment environment variables. Two positional values deliberately omit
`-i`, allowing the local OpenSSH configuration to select the identity. Dry-run
never opens SSH or rsync, even when host and identity arguments are provided.
Invalid modes, mixed confirmation flags, incomplete positional sets, unsafe
hosts, relative positional paths, and missing ciphertext files fail before a
release can be promoted.
The confirmed command builds with `PUBLIC_ALLOW_INDEXING=true`, Form A live and
the approved live counters configuration, then uploads only fresh commit-specific `staging/source-<sha>` and
`staging/dist-<sha>` directories. It runs, in order:
```text
aia-website-release verify
aia-website-release sync-source
aia-website-release promote
```
The VPS verifies the manifest, promotes an immutable release by atomic symlink,
and retains the prior release. A successful rsync transfer alone is not success.
Rollback requires the reviewed manifest retained at the server’s fixed path:
```sh
AIA_DEPLOY_HOST='root@approved-host' \
AIA_DEPLOY_SSH_IDENTITY="$HOME/.ssh/AIAMarketing" \
npm run deploy:rollback -- FULL_APPROVED_SHA --confirm
```
## Employee resources: separate one-time operation
Approved non-PHI employee files are never part of an ordinary release. After
the VPS SOPS-backed Basic Auth material is independently ready:
```sh
npm run deploy:portal-resources -- --dry-run
AIA_DEPLOY_HOST='root@approved-host' \
AIA_DEPLOY_SSH_IDENTITY="$HOME/.ssh/AIAMarketing" \
npm run deploy:portal-resources -- --confirm
```
For the first install, the client extracts `portal-resource-install.sh` from the
current reviewed Git commit, uploads it into the root-controlled commit staging
directory, verifies its SHA-256 remotely, and invokes it through NixOS's base
`/bin/sh` and coreutils path. A prior public site release and a globally installed
Node.js runtime are not prerequisites. It reads only the private collection manifest,
accepts approved `STAFF-INTERNAL` and `MANAGEMENT-INTERNAL` mappings to
`/staff-resources/` and `/management-resources/`, verifies every local hash, rejects links/traversal and
uploads a root-controlled temporary tree. It never uses `--delete` for resource
directories and refuses to replace a different existing file. The VPS installs
regular files as `root:nginx` mode `0640` and reports metadata only.
Local mapping approval authorizes preparation and installation only. After the
authorized VPS rehearsal, verify installed hashes, ownership/mode, staff versus
management Basic Auth, and both protected URLs before deploying portal links.
Before public DNS cutover, test the site with approved host-header/SNI methods,
including the portal’s noindex response, valid ciphertext unlock, both protected
resource namespaces, denial cases, redirects, Form A, IPv4 and IPv6. Portal
shared-code rotation is coordinated: update VPS SOPS inputs and privately
re-encrypt the browser payload together. This interim portal is non-PHI and is
not an employee identity system.
The portal uses one code entry per page session. A successful decrypt retains
the code only in page memory and sends the matching fixed username (`staff` or
`management`) in an explicit same-origin Basic Authorization header when a
protected link is clicked. It downloads the authenticated response as a Blob
and never navigates directly to the protected URL after an error. Verify that
ordinary clicks download without a native credential dialog, inline errors
appear for denied or unavailable files, direct unauthenticated requests remain
401, and neither role can request the other namespace. Reloading, leaving the
page, or an Astro page swap discards the in-memory credential.
+26
View File
@@ -0,0 +1,26 @@
# INACTIVE TEMPLATE. Not imported by the development flake or any deployed host.
# Requires an owner-reviewed sops-nix NixOS module import in the host flake.
{ config, lib, ... }:
let cfg = config.aia.portalSecrets;
in {
options.aia.portalSecrets = {
enable = lib.mkEnableOption "owner-reviewed portal deployment secrets";
encryptedFile = lib.mkOption { type = lib.types.path; description = "SOPS-encrypted YAML only; never a plaintext file"; };
ageKeyFile = lib.mkOption { type = lib.types.str; description = "Private persisted host age key path outside the Nix store"; };
readerUser = lib.mkOption { type = lib.types.str; description = "Approved resource authorization service user"; };
};
config = lib.mkIf cfg.enable {
assertions = [{ assertion = lib.hasPrefix "/" cfg.ageKeyFile && !(lib.hasPrefix "/nix/store/" cfg.ageKeyFile);
message = "The host age identity must be an absolute runtime path outside the Nix store."; }];
sops.defaultSopsFile = cfg.encryptedFile;
sops.age.keyFile = cfg.ageKeyFile;
sops.age.generateKey = false;
sops.age.sshKeyPaths = [];
sops.gnupg.sshKeyPaths = [];
sops.secrets."portal/staff-credentials" = { owner = cfg.readerUser; mode = "0400"; };
sops.secrets."portal/management-credentials" = { owner = cfg.readerUser; mode = "0400"; };
# Consumers reference config.sops.secrets.<name>.path at runtime.
# Do not use builtins.readFile on a decrypted secret, environment.etc.text,
# PUBLIC_* values, or Astro/Vite imports to transport secrets.
};
}
+10
View File
@@ -10,6 +10,10 @@
"check": "astro check",
"build": "astro check && astro build",
"build:sandbox": "NODE_OPTIONS=--require=./tools/localhost-dns.cjs astro check && NODE_OPTIONS=--require=./tools/localhost-dns.cjs astro build",
"deploy": "node tools/deploy.mjs",
"deploy:rollback": "node tools/deploy-rollback.mjs",
"deploy:portal-resources": "node tools/deploy-portal-resources.mjs",
"portal:prepare": "node tools/employee-portal-migrate.mjs",
"preview": "astro preview",
"extract:blog-footers": "node tools/extract-blog-footers.mjs",
"crawl:live": "node tools/crawl-live-site.mjs",
@@ -20,6 +24,12 @@
"test:routes": "node --experimental-strip-types --test tools/audit-routes.test.mjs",
"test:markdown": "node --test tools/markdown.test.mjs",
"test:publication": "node --experimental-strip-types --test tools/publication.test.mjs",
"test:seo": "node --experimental-strip-types --test tools/seo.test.mjs",
"test:library": "node --experimental-strip-types --test tools/library.test.mjs",
"test:campaign": "node --test tools/campaign.test.mjs",
"test:counters": "node --experimental-strip-types --test tools/counters.test.mjs",
"verify:counters": "node tools/counters-browser.mjs",
"verify:campaign": "node tools/campaign-browser.mjs",
"generate:sitemap": "node tools/generate-sitemap.mjs",
"generate:redirects": "node tools/generate-redirects.mjs"
},
@@ -0,0 +1,93 @@
Copyright 2017 The Playfair Display Project Authors (https://github.com/clauseggers/Playfair-Display), with Reserved Font Name "Playfair Display"
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,93 @@
Copyright 2015 The Rubik Project Authors (https://github.com/googlefonts/rubik)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
https://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

@@ -0,0 +1 @@
<svg viewBox="113.85996 134.2596 679.2 315.6" xmlns="http://www.w3.org/2000/svg" id="Layer_1" style="max-height: 500px" width="679.2" height="315.6"><defs><style>.cls-1,.cls-2,.cls-3,.cls-4,.cls-5,.cls-6{stroke-width:0px;}.cls-2{fill:#27417f;}.cls-3{fill:#554f62;}.cls-4{fill:#254080;}.cls-5{fill:#aea990;}.cls-6{fill:#f2b85b;}</style></defs><path d="m176.47,162.76l22.18,57.09c.85,2.24,1.83,3.76,2.95,4.54,1.12.79,2.17,1.21,3.14,1.27v1.82c-1.46-.12-3.17-.2-5.14-.22-1.97-.03-3.95-.05-5.95-.05-2.54,0-4.91.01-7.09.05-2.18.03-3.94.11-5.28.22v-1.82c3.09-.12,5.05-.65,5.87-1.59.82-.94.62-2.95-.59-6.04l-16.36-44.17,1.46-1.64-15.09,39.45c-1.09,2.73-1.74,5-1.95,6.82-.22,1.82-.06,3.24.45,4.27.52,1.03,1.41,1.76,2.68,2.18,1.27.43,2.85.67,4.73.73v1.82c-1.82-.12-3.65-.2-5.5-.22-1.85-.03-3.59-.05-5.23-.05-1.46,0-2.74.01-3.86.05-1.12.03-2.14.11-3.05.22v-1.82c1.27-.3,2.55-1.06,3.82-2.27,1.27-1.21,2.48-3.27,3.63-6.18l21.09-54.45h3.09Zm9.54,38.54v1.82h-27.08l.91-1.82h26.18Z" class="cls-2"/><path d="m235.82,179.3c1.76,0,3.26.37,4.5,1.09,1.24.73,2.18,1.65,2.82,2.77.64,1.12.96,2.38.96,3.77,0,1.76-.53,3.26-1.59,4.5-1.06,1.24-2.47,1.86-4.23,1.86-1.51,0-2.8-.46-3.86-1.36-1.06-.91-1.59-2.15-1.59-3.73,0-1.33.35-2.47,1.04-3.41.7-.94,1.5-1.68,2.41-2.22-.6-.49-1.33-.7-2.18-.64-1.64.06-3.15.59-4.55,1.59-1.39,1-2.58,2.27-3.54,3.82-.97,1.54-1.73,3.19-2.27,4.95-.54,1.76-.82,3.4-.82,4.91v20.91c0,2.97.82,4.96,2.46,5.95,1.63,1,3.91,1.5,6.81,1.5v1.91c-1.39-.06-3.38-.14-5.95-.22-2.58-.09-5.28-.14-8.14-.14-2.18,0-4.36.05-6.54.14-2.18.09-3.85.16-5,.22v-1.91c2.37,0,4.04-.45,5.05-1.36,1-.91,1.5-2.64,1.5-5.18v-28.54c0-2.73-.46-4.74-1.36-6.04-.91-1.3-2.64-1.95-5.18-1.95v-1.91c1.94.18,3.82.27,5.64.27,2.06,0,3.99-.11,5.77-.32,1.78-.22,3.44-.53,4.95-.96v10.46c.73-1.76,1.7-3.45,2.91-5.09,1.21-1.63,2.66-2.98,4.36-4.04,1.7-1.06,3.58-1.59,5.64-1.59Z" class="cls-2"/><path d="m264,179.57v39.45c0,2.54.5,4.27,1.5,5.18,1,.91,2.68,1.36,5.05,1.36v1.91c-1.03-.06-2.62-.14-4.77-.22-2.16-.09-4.35-.14-6.59-.14s-4.38.05-6.59.14c-2.21.09-3.86.16-4.96.22v-1.91c2.37,0,4.04-.45,5.05-1.36,1-.91,1.5-2.64,1.5-5.18v-28.54c0-2.73-.46-4.74-1.36-6.04-.91-1.3-2.64-1.95-5.18-1.95v-1.91c1.94.18,3.82.27,5.64.27,2.06,0,3.99-.11,5.77-.32,1.78-.22,3.44-.53,4.95-.96Zm-5.45-21.91c1.88,0,3.45.59,4.73,1.78,1.27,1.18,1.91,2.65,1.91,4.41s-.64,3.23-1.91,4.41c-1.27,1.18-2.85,1.77-4.73,1.77s-3.45-.59-4.73-1.77c-1.27-1.18-1.91-2.65-1.91-4.41s.64-3.23,1.91-4.41c1.27-1.18,2.85-1.78,4.73-1.78Z" class="cls-2"/><path d="m312.54,180.12l-25.09,45.99h8.18c2.42,0,4.58-.49,6.45-1.46,1.88-.97,3.42-2.57,4.64-4.81,1.21-2.24,1.94-5.21,2.18-8.91h2.09c0,4.06.03,7.45.09,10.18s.15,4.97.27,6.73c-2.72-.12-5.54-.22-8.45-.27-2.91-.06-5.79-.09-8.63-.09-3.09,0-6.23.05-9.41.14-3.18.09-6.23.2-9.14.32l25.09-45.99h-8.36c-2.6,0-4.85.5-6.73,1.5-1.88,1-3.35,2.61-4.41,4.82-1.06,2.21-1.74,5.17-2.05,8.86h-2c0-4.12-.03-7.51-.09-10.18-.06-2.66-.15-4.91-.27-6.73,2.67.12,5.45.22,8.36.27,2.91.06,5.82.09,8.73.09s6.14-.05,9.32-.14c3.18-.09,6.26-.2,9.23-.32Z" class="cls-2"/><path d="m340.81,179.3c4.06,0,7.66.85,10.82,2.55,3.15,1.7,5.66,4.36,7.55,8,1.88,3.64,2.81,8.39,2.81,14.27s-.94,10.62-2.81,14.23c-1.88,3.61-4.4,6.24-7.55,7.91-3.15,1.67-6.76,2.5-10.82,2.5s-7.6-.83-10.82-2.5c-3.21-1.67-5.74-4.3-7.59-7.91-1.85-3.61-2.77-8.35-2.77-14.23s.92-10.63,2.77-14.27c1.85-3.64,4.38-6.3,7.59-8,3.21-1.7,6.82-2.55,10.82-2.55Zm0,1.82c-3.15,0-5.73,1.8-7.73,5.41-2,3.61-3,9.47-3,17.59s1,13.95,3,17.5c2,3.55,4.58,5.32,7.73,5.32s5.65-1.77,7.68-5.32c2.03-3.55,3.05-9.38,3.05-17.5s-1.02-13.98-3.05-17.59c-2.03-3.61-4.59-5.41-7.68-5.41Z" class="cls-2"/><path d="m400.07,179.3c2.42,0,4.41.32,5.95.96,1.55.64,2.83,1.5,3.86,2.59,1.09,1.15,1.86,2.64,2.32,4.46.45,1.82.68,4.27.68,7.36v24.36c0,2.54.5,4.27,1.5,5.18,1,.91,2.68,1.36,5.05,1.36v1.91c-1.03-.06-2.64-.14-4.82-.22-2.18-.09-4.33-.14-6.45-.14s-4.11.05-6.14.14c-2.03.09-3.56.16-4.59.22v-1.91c2.06,0,3.51-.45,4.37-1.36.85-.91,1.27-2.64,1.27-5.18v-26.9c0-1.76-.15-3.35-.45-4.77-.31-1.42-.94-2.58-1.91-3.45-.97-.88-2.43-1.32-4.37-1.32-2.24,0-4.23.64-5.95,1.91-1.73,1.27-3.09,3.02-4.09,5.23-1,2.21-1.5,4.68-1.5,7.41v21.91c0,2.54.44,4.27,1.32,5.18.88.91,2.32,1.36,4.32,1.36v1.91c-.97-.06-2.44-.14-4.41-.22-1.97-.09-4.01-.14-6.14-.14s-4.21.05-6.45.14c-2.24.09-3.91.16-5,.22v-1.91c2.37,0,4.04-.45,5.05-1.36,1-.91,1.5-2.64,1.5-5.18v-28.54c0-2.73-.46-4.74-1.36-6.04-.91-1.3-2.64-1.95-5.18-1.95v-1.91c1.94.18,3.82.27,5.64.27,2.06,0,3.99-.11,5.77-.32,1.78-.22,3.44-.53,4.95-.96v9.91c1.57-3.76,3.74-6.39,6.5-7.91,2.75-1.51,5.68-2.27,8.77-2.27Z" class="cls-2"/><path d="m436.06,228.11c-2.54,0-4.73-.49-6.54-1.46-1.82-.97-3.18-2.3-4.09-4-.91-1.69-1.36-3.63-1.36-5.82,0-2.67.6-4.83,1.82-6.5,1.21-1.67,2.77-3.02,4.69-4.04,1.91-1.03,3.94-1.89,6.09-2.59,2.15-.7,4.18-1.36,6.09-2,1.91-.64,3.48-1.38,4.73-2.22,1.24-.85,1.86-1.97,1.86-3.36v-6.18c0-2.18-.35-3.93-1.05-5.23-.7-1.3-1.63-2.22-2.81-2.77-1.19-.55-2.59-.82-4.23-.82-1.4,0-2.88.2-4.46.59-1.57.39-2.81,1.17-3.72,2.32,1.33.37,2.44,1.08,3.32,2.14.88,1.06,1.32,2.38,1.32,3.95,0,1.7-.56,3.03-1.68,4s-2.53,1.45-4.Line truncated

After

Width:  |  Height:  |  Size: 33 KiB

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160" fill="none" stroke="#E5AE56" stroke-width="2">
<path d="m67 13 2-10h22l2 10 13 5 9-6 16 16-6 9 5 13 10 2v22l-10 2-5 13 6 9-16 16-9-6-13 5-2 10H69l-2-10-13-5-9 6-16-16 6-9-5-13-10-2V52l10-2 5-13-6-9 16-16 9 6Z" transform="translate(0 17)"/>
<circle cx="80" cy="80" r="26"/>
</svg>

After

Width:  |  Height:  |  Size: 346 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

@@ -0,0 +1,24 @@
<svg xmlns="http://www.w3.org/2000/svg" width="800" height="450" viewBox="0 0 800 450">
<title>نموذج المقدمة والسلوك والنتيجة اللاحقة</title>
<image href="data:image/webp;base64,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 truncated
<rect width="800" height="64" fill="#fbf8ef" />
<g fill="#082f55" font-family="Arial, sans-serif" font-size="25" font-weight="700" text-anchor="middle" direction="rtl">
<text x="132" y="43">المُقدِّمة</text>
<text x="400" y="43">السلوك</text>
<text x="668" y="43">النتيجة اللاحقة</text>
</g>
<g fill="none" stroke="#082f55" stroke-linecap="round" stroke-linejoin="round" stroke-width="4">
<path d="M235 37h60m-12-11 12 11-12 11" />
<path d="M507 37h57m-12-11 12 11-12 11" />
</g>
<rect x="381" y="190" width="50" height="24" rx="3" fill="#fff" opacity=".98" />
<text x="406" y="206" fill="#1f2933" font-family="Arial, sans-serif" font-size="9" text-anchor="middle" direction="rtl">المزيد</text>
<rect x="611" y="190" width="65" height="24" rx="3" fill="#fff" opacity=".98" />
<text x="643" y="205" fill="#1f2933" font-family="Arial, sans-serif" font-size="7" text-anchor="middle" direction="rtl">دقيقتان إضافيتان</text>
<rect x="531" y="351" width="255" height="91" rx="12" fill="#e8efe8" />
<g fill="#082f55" font-family="Arial, sans-serif" font-size="14" direction="rtl" text-anchor="middle">
<text x="658" y="374">◷ حصلتَ على دقيقتين إضافيتين.</text>
<text x="658" y="399">← ثم ينتهي الوقت.</text>
<text x="658" y="424">▣ تستمر خطة «أولًا/ثم».</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

@@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" width="800" height="450" viewBox="0 0 800 450">
<title>طفل يعمل في مساحة هادئة تقل فيها المشتتات</title>
<image href="data:image/webp;base64,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 truncated
<g transform="translate(639 35) rotate(-1 71 87)">
<rect width="142" height="174" rx="3" fill="#eee9d8" stroke="#716b5d" stroke-width="2" />
<g fill="#304c39" font-family="Arial, sans-serif" direction="rtl" text-anchor="middle">
<text x="71" y="31" font-size="17" font-weight="700">ركن الهدوء</text>
<text x="71" y="65" font-size="12">♥ كن لطيفًا</text>
<text x="71" y="95" font-size="12">◯ خذ نفسًا عميقًا</text>
<text x="71" y="125" font-size="12">★ ابذل جهدك</text>
<text x="71" y="155" font-size="12">✓ أنت قادر</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

@@ -0,0 +1,68 @@
<svg xmlns="http://www.w3.org/2000/svg" width="800" height="533" viewBox="0 0 800 533">
<title>مقارنة بين الهروب من مهمة صعبة واستخدام سلوك بديل لطلب المساعدة</title>
<image href="data:image/webp;base64,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 truncated
<style>
text { font-family: Arial, sans-serif; }
.heading { fill: #092f54; font-weight: 700; }
.body { fill: #202b31; }
</style>
<rect width="800" height="61" fill="#fbf8ef" />
<text class="heading" x="400" y="41" font-size="24" text-anchor="middle" direction="rtl">الموقف نفسه: المهمة صعبة</text>
<rect x="18" y="69" width="91" height="185" rx="12" fill="#c75f45" />
<g fill="#fff" text-anchor="middle" direction="rtl">
<text x="63" y="96" font-size="15" font-weight="700">المسار أ</text>
<text x="63" y="119" font-size="12" font-weight="700"><tspan x="63">استجابة</tspan><tspan x="63" dy="17">غير فعّالة</tspan></text>
<text x="63" y="187" font-size="10"><tspan x="63">تُلبّى الحاجة بطريقة</tspan><tspan x="63" dy="15">لا تساعد الطفل</tspan><tspan x="63" dy="15">على التعلّم.</tspan></text>
</g>
<rect x="111" y="59" width="550" height="29" fill="#fbf8ef" />
<g class="heading" font-size="12" text-anchor="middle" direction="rtl">
<text x="190" y="79">١. تقديم المهمة</text>
<text x="374" y="79">٢. سلوك يعيق المشاركة</text>
<text x="566" y="79">٣. النتيجة اللاحقة</text>
</g>
<rect x="111" y="190" width="550" height="66" fill="#fbf8ef" />
<g class="body" font-size="10" text-anchor="middle" direction="rtl">
<text x="190" y="211"><tspan x="190">تُقدَّم مهمة</tspan><tspan x="190" dy="15">صعبة.</tspan></text>
<text x="374" y="207"><tspan x="374">يدفع الطفل المواد بعيدًا</tspan><tspan x="374" dy="15">للهروب أو التجنب.</tspan></text>
<text x="566" y="203"><tspan x="566">تُزال المهمة أو تتوقف مؤقتًا،</tspan><tspan x="566" dy="14">فيتعزز الهروب ويزداد احتمال</tspan><tspan x="566" dy="14">تكرار السلوك.</tspan></text>
</g>
<rect x="679" y="70" width="103" height="184" rx="12" fill="#f7eadf" />
<g fill="#9c452e" text-anchor="middle" direction="rtl">
<text x="731" y="99" font-size="14" font-weight="700">النتيجة</text>
<text x="731" y="153" font-size="10"><tspan x="731">يلبّي السلوك الصعب</tspan><tspan x="731" dy="15">حاجة الطفل على المدى</tspan><tspan x="731" dy="15">القصير، لكن التعلّم</tspan><tspan x="731" dy="15">لا يتقدم.</tspan></text>
</g>
<rect x="18" y="271" width="91" height="194" rx="12" fill="#3f7a65" />
<g fill="#fff" text-anchor="middle" direction="rtl">
<text x="63" y="298" font-size="15" font-weight="700">المسار ب</text>
<text x="63" y="321" font-size="12" font-weight="700">بديل فعّال</text>
<text x="63" y="388" font-size="10"><tspan x="63">تُلبّى الحاجة نفسها</tspan><tspan x="63" dy="15">بطريقة آمنة وفعّالة</tspan><tspan x="63" dy="15">تدعم التعلّم.</tspan></text>
</g>
<rect x="109" y="245" width="566" height="44" fill="#fbf8ef" />
<g fill="#316b58" font-size="11" font-weight="700" text-anchor="middle" direction="rtl">
<text x="173" y="279">١. تقديم المهمة</text>
<text x="302" y="279">٢. السلوك البديل</text>
<text x="441" y="279">٣. استجابة مفيدة</text>
<text x="593" y="279">٤. النتيجة اللاحقة</text>
</g>
<rect x="110" y="405" width="565" height="68" fill="#fbf8ef" />
<g class="body" font-size="9.5" text-anchor="middle" direction="rtl">
<text x="173" y="427"><tspan x="173">تُقدَّم مهمة</tspan><tspan x="173" dy="14">صعبة.</tspan></text>
<text x="302" y="419"><tspan x="302">يطلب الطفل المساعدة</tspan><tspan x="302" dy="14">ببطاقة أو طلب</tspan><tspan x="302" dy="14">أو إشارة.</tspan></text>
<text x="441" y="415"><tspan x="441">يستجيب البالغ بطريقة داعمة،</tspan><tspan x="441" dy="14">فيقدم المساعدة أو استراحة</tspan><tspan x="441" dy="14">مناسبة حسب الخطة.</tspan></text>
<text x="593" y="415"><tspan x="593">تُلبّى الحاجة ويستطيع الطفل</tspan><tspan x="593" dy="14">المتابعة أو العودة إلى المهمة</tspan><tspan x="593" dy="14">بدعم.</tspan></text>
</g>
<rect x="680" y="272" width="102" height="193" rx="12" fill="#e7f0e8" />
<g fill="#316b58" text-anchor="middle" direction="rtl">
<text x="731" y="301" font-size="14" font-weight="700">النتيجة</text>
<text x="731" y="350" font-size="9.5"><tspan x="731">يساعد السلوك البديل</tspan><tspan x="731" dy="14">على تلبية حاجة الطفل،</tspan><tspan x="731" dy="14">فيزداد احتمال استخدامه</tspan><tspan x="731" dy="14">مجددًا ويتقدم التعلّم.</tspan></text>
</g>
<rect x="136" y="476" width="558" height="50" rx="12" fill="#e5edf3" />
<g fill="#173b5b" text-anchor="middle" direction="rtl">
<text x="415" y="497" font-size="13" font-weight="700">التعزيز الفعّال يجعل استخدام المهارة البديلة مجديًا.</text>
<text x="415" y="516" font-size="10">عندما يُعزَّز السلوك البديل، يصبح الخيار الأسهل والأكثر فاعلية.</text>
</g>
<rect x="305" y="347" width="49" height="25" rx="2" fill="#fff" />
<text x="329" y="364" fill="#253238" font-size="8" text-anchor="middle" direction="rtl">مساعدة</text>
</svg>

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

+533
View File
@@ -0,0 +1,533 @@
# AIA Astro Migration — Living Session Handoff
## Deployment and employee-portal release preparation — 2026-11-04
The clinical director has accepted the collected non-PHI employee portal views,
their interim shared-code presentation and the approved employee resources.
This supersedes earlier collection/content-acceptance tasks. Deployment,
filesystem permissions, protected-resource authorization, DNS and cutover remain
separate technical gates.
The site-side deployment workflow builds an indexing-enabled release with an
explicit non-public approved portal ciphertext input, validates the artifact and
Contabo-compatible manifest, uploads only commit-specific staging trees, then
uses `aia-website-release verify`, `sync-source`, and `promote`. It does not
rebuild NixOS or alter nginx. Employee documents are a separate owner-run,
hash-verified resource-installation operation into the VPS-owned protected
namespaces. See [the release runbook](../integrations/nixos/deploy.md).
The browser payload remains ciphertext only; codes, plaintext portal content,
private manifests and resources must never enter Git, `dist`, source snapshots,
logs or deployment manifests. `/employee-portal` remains noindex and excluded
from sitemap/hreflang. Form A, referral and publication behavior are unchanged.
### Portal resource preparation correction — 2026-11-04
The resource schema now separates approved source-to-role mapping from actual
VPS installation evidence. An approved mapping may be prepared and installed
while all server-installed/hash/permission/authentication/URL verification flags
remain false. Shared resources can be installed from one verified source into
both protected namespaces without weakening management isolation. The owner-only
private workflow identifies the two encrypted streams via hidden prompts,
derives deterministic role mappings, rewrites all legacy employee `/hubfs/`
links, and creates a hash-bound private readiness record. A real production
ciphertext cannot pass `npm run deploy -- --dry-run` merely because it is
structurally valid.
The first resource install no longer depends on a previously promoted site
release: the reviewed POSIX installer is staged from the exact Git commit and
verified by SHA-256 before root execution. Server installation, SOPS-backed
Basic Auth and protected URL verification remain future VPS-rehearsal gates.
## Current referral decision — 2026-11-01 (supersedes Form C planning)
The owner directs `/referrals` to retain the current public-site workflow: one
button-styled **Refer a Client** link to
[the existing hosted Jotform](https://form.jotform.com/231638510219149). There is **no separate Form C**
to create, embed, configure or launch. The former Form C / proposed two-form
architecture is historical only. `/referrals` renders no local form or Form A
iframe; the original 16 approved Form A placements remain unchanged.
This is authorization to restore the existing destination in Astro, **not**
verification of that separate legacy Jotform's HIPAA configuration, notification
recipients, patient-data handling, accessibility or continued operational
suitability. Review the actual hosted form and its clinical/privacy claims before
production cutover. No account modification or submission occurred in this PR.
**Last updated:** November 1, 2026 (UTC)
**Repository:** `AIAMarketing/azinstitute4autism.com`
**Working branch:** `faithful-astro-migration`
**Last pushed checkpoint:** `55adb797051473c3067a0d454515153237e9b8d6` — completion handling and portal styling. The new commit containing this handoff simplifies Form A to default-live without rewriting that history.
**Previous accepted checkpoint:** P9-03 documentation, signed `537f9864a0a3d0806180cbeca909bf1d03200c6f`
**Implementation checkpoint:** the commit containing this handoff update; obtain its actual SHA from Git history after the signed checkpoint is created.
**Next milestone:** continue Phase 9 owner decisions and authorized integration batches; then Phase 10 — Final QA/Cutover Readiness.
The landing-page migration is technically completed for checkpoint purposes.
Editorial, accessibility, stakeholder and production-release approval remain
separate. This handoff does not authorize deployment or integration activation.
## Current decision — 2026-10-30: default-live Form A
The owner intentionally supersedes the earlier isolated-test and seven-route
production-gate architecture. `npm run dev` and `npm run build` now enable Form A
on exactly **16 approved placements**, including the publicly reachable
`aia.web3app.dev` environment. No additional approval flags or access restriction
are required. `PUBLIC_AIA_FORMS_MODE` is optional: absent/empty means `live`;
explicit `off` and `mock` remain available. Invalid/obsolete `isolated-test`
settings produce an actionable configuration error. The former approval flags
and form environment role are retired, not renamed.
Indexing and forms are independent. Both publication modes emit ten immediate
frames (two contact, five landing, three consultation) and six deferred bilingual
service-drawer frames. The bounded registry fixes ID `262946078314059`, HTTPS
origin, context and language. Form B is retired; Form C is canceled by the November 1 referral decision.
Live drawers retain four-second/50%-scroll opening, shared 30-day suppression,
manual CTA override, deferred loading, verified completion acknowledgment for
five seconds, animated dismissal and fresh-form reopening. Off mode does not
automatically show inactive drawers. All iframe security/fallback behavior is
preserved. Employee-portal preview remains independently gated by explicit local
approval, valid private ciphertext input and non-indexing output; Form A cannot
authorize private content. No portal private resources enter normal artifacts.
This owner authorization does not modify Jotform, authorize site cutover or
complete pending consultation-language, provider-event, accessibility, runtime
telemetry/privacy, recipient-routing or hosting acceptance. See the
[current operating guide](../integrations/jotform/README.md) and
[implementation and validation report](phase-9-form-a-default-live-2026-10-30.md).
Earlier dated decisions and test results below are historical evidence, not
current environment setup instructions.
## Latest verified validation — 2026-10-30 default-live revision
206 tests pass; Astro check has zero diagnostics. Normal default-live staging:
128 routes, empty sitemap, zero hreflang, ten immediate plus six deferred Form A
frames. Indexing-enabled: 127 routes, 109 sitemap URLs, 180 hreflang links, the
same 16 placements. Explicit off/mock artifacts contain no real Form A frames.
Guarded browser regressions preserve drawer completion/suppression and portal
fixture behavior; 128/128 staging routes open. Link/image/blog audits have zero
findings. See the current default-live report for exact overlapping check counts,
network interception evidence and remaining owner acceptance. No deployment,
Jotform mutation or new real submission was performed.
## Authority and checkpoint history
Read repository-root `AGENTS.md`, `MIGRATION_BRIEF.md` and `AUTONOMOUS-CODEX.md`,
then this handoff and the relevant [migration summary](migration-summary.md).
Later Phase 6A ratification controls conflicting original recommendations.
- Phase 5C Team: `34d5394b3ce765028a27b9cddd9952de3f09bfe7`.
- Phase 6A proposal: `76a035424dc5245443476b168d8c91ea62eed27b`.
- Phase 6B.1 search: `b20c253383440598c2d07bf6f852906ac00c42df`.
- Phase 6B.2 pagination: `6f5ac3c0d233cee5fbbb62be79bc6909e6bec183`.
- Phase 6B.3 author archives: `8646792d46a8a117ef617f5dd2582c2550b45d19`.
- Phase 6B.4 URL/SEO: `8192ea71c47a7163b40a7fad144ebbd2523282d1`.
- Phase 6B.5 multilingual navigation/RTL: the signed replacement checkpoint
`a699d467f19fafbfdda5fce1ce6226baa6e5fc3c`; do not use its superseded unsigned SHA.
- Phase 6C Library/multilingual parity: signed checkpoint
`b5bc95bc2b8e36c58e8b4d8ab4b11391374a7883`.
- Phase 7 multilingual reconciliation: signed checkpoint
`8e64d322092b1fa6e0f648ddf26a665c80588198`.
- Phase 8 visual/accessibility implementation: signed checkpoint
`59911eb929579af7bcd6c42de6476128dab62289`.
- P9-03 Jotform contract and complete owner inventory: signed checkpoint
`537f9864a0a3d0806180cbeca909bf1d03200c6f`.
- Phase 9 landing-page integration: the commit containing this handoff update;
obtain its actual SHA from Git history. It does not resolve P9-01 through P9-10.
Phase 6B.5 visitor navigation remains independent of SEO hreflang. Published
locale destinations, explicit fallback notices, native language disclosure,
Arabic contact bidi isolation and the two-line shared address remain intact.
`/ar` remains unpublished with an explicit English-home fallback.
ContactObfuscation is unchanged; reversed no-JavaScript strings are intentional.
The earlier Phase 6B.5 manual acceptance does not cover subsequent Phase 6C work.
## Completed Phase 6C technical sequence
- **6C:** restored nine missing English articles and source-backed self-hosted
media; derived English Library and author page 6 from the catalog.
- **6C.1:** restored source-supported Halloween contextual links in English
self-advocacy and AAC articles.
- **6C.2:** reconciled three materially outdated English articles and current
published Spanish school readiness; replaced the obsolete Arabic
antecedent/consequence body with a complete translation; audited all 19
established translation relationships.
- **6C.3:** reconciled featured-image alternatives, source-supported headings,
truncated descriptions and supported modification dates; retained the new
Arabic guide's intentional modification-date omission; localized three diagrams.
- **6C.4:** reconciled contextual and external links, previous/next/related
relationships, image links and fragments; added localized self-advocacy
Halloween references while preserving the landing-page ownership gate.
- **6C.5:** audited all 74 articles, corrected narrow structural/accessibility
regressions, and verified metadata, links, FAQs, translation relationships,
pagination, search and publication policies. Technical readiness has
documented nontechnical release gates.
Detailed evidence and reviewer checklists are in the
[final acceptance report](phase-6c5-final-library-acceptance-2026-10-13.md).
The [checkpoint manifest](phase-6c5-checkpoint-manifest-2026-10-13.md) lists 148
implementation/evidence paths; that checkpoint included its handoff as path 149.
Historical phase records retain their original context.
## Completed Phase 7 technical sequence
- Recovered Spanish privacy policy with February 19, 2025 revision date,
localized metadata and reciprocal English/Spanish policy navigation.
- Localized actual Spanish form labels, options, instructions, disabled notices
and Contact map text using explicitly passed publication locale; no backend enabled.
- Translated the Spanish reinforcement tip without changing article identity,
dates or surrounding content; fluent/clinical approval remains pending.
- Localized Spanish/Arabic author headings and isolated Arabic BCBA/LBA text;
biographies, identities and archive SEO unchanged.
- Prepared the [nonproduction verification plan](phase-7-nonproduction-verification-plan-2026-10-14.md)
and [Phase 9 decision register](phase-9-decision-register-2026-10-14.md).
P9-01 through P9-10 all remain **Pending decision**.
See the [Phase 7 reconciliation report](phase-7-multilingual-reconciliation-2026-10-14.md)
and [checkpoint manifest](phase-7-checkpoint-manifest-2026-10-14.md).
The non-Library matrix excludes all three Library-root content records:
20 EN / 8 ES / 1 unpublished AR draft → 20 EN / 9 ES / 1 unpublished AR draft;
28 → 29 eligible pages and 8 → 9 English–Spanish pairs. The final matrix has
30 records including the draft. Whole pages-collection counts (including roots)
are 21/9/2 → 21/10/2, with 9 → 10 English–Spanish pairs. Do not mix populations.
## Completed Phase 8 technical sequence
- Static checks and guarded Chromium smoke covered all 122 generated routes.
The original browser pass captured 50 desktop/50 mobile full pages, checked
50 routes without JavaScript, and passed 40 focused interactions, with one
native-dialog review finding subsequently compared against a native control.
- Corrected prose/FAQ/contact/form link contrast and underlines, navigation,
language-menu, skip-link, byline and diagram focus treatments; fixed the
scoped homepage director-grid overflow at 320px.
- Localized Arabic article controls and bidi counts without changing the API
script. Corrected DTT/NET peer sections and consultation heading semantics
while preserving text, fragments and appearance. Native dialogs remain intact;
Chromium's browser-chrome boundary did not establish application focus escape.
- Corrected Phase 7 carryovers: Spanish HSA/FSA section after ESA/before financial
help, Spanish alternative text and APROBADO artwork; Spanish privacy's missing
information-collection H2 (eleven sections/four items), with no legal-text change.
The final Spanish badge preserves the original alpha and every pixel outside
its lettering rectangle; the English artwork is unchanged.
- Replaced flattened Tour Markdown with one MDX publication, structured nine-photo
data and accessible carousel: captions, thumbnails, wraparound, keyboard/focus,
restrained announcements, no auto-rotation, full no-JavaScript fallback and
restored consultation link. No new dependency or production integration.
- Bounded follow-up: 30 grouped Chromium checks. Consolidated pass: 21 grouped
checks, two contrast/reduced-motion probes, five distinct routes, 20 full-page
captures, native 200% zoom on Tour/privacy (26 overlapping frames), four crops.
Earlier follow-up also tested seven routes at native 200% zoom. Badge correction:
eight EN/ES checks/crops at 320/390/768/1440px. These are distinct evidence
populations, not additional unique-site-route totals.
- Loopback-only contexts allowed only local GET/HEAD, blocked external traffic,
WebSockets and website service workers. Map-resource attempts and a synthetic
fixture POST were prevented; no production API/like/form/conversion request
was transmitted. Disabled controls/noindex remain insufficient API isolation.
See [consolidated findings](phase-8-consolidated-followup-2026-10-15.md),
[browser results](phase-8-browser-verification-2026-10-15.md),
[badge correction evidence](phase-8-badge-correction-evidence-2026-10-15.json),
and the [Phase 8 checkpoint manifest and validation](phase-8-checkpoint-manifest-2026-10-15.md).
Historical failed browser attempts remain recorded. System Playwright 1.61.0 /
Chromium 151.0.7922.75 now work; the optional Nix browser-shell realization is
not independently verified. No real screen-reader session or owner sign-off occurred.
Tour's public source passed normal TLS but was cache-qualified. Spanish privacy's
capture used a certificate-insecure fallback after validation failed. Neither
establishes current origin freshness; Spanish policy additionally requires a
trusted-source comparison. No insecure retrieval was repeated.
## Completed Phase 9 landing-page integration
- Imported four independently styled campaign routes from the sibling landing-page
repository: `/lp/aba-therapy`, `/lp/aba-insurance`, `/lp/aba-ahcccs` and
`/lp/aba-private-pay`. Their local fonts, images, components, metadata and
source noindex policy are isolated from ordinary site pages.
- Migrated the branded public `/lp/early-intervention` route with its compact
header/footer, source section order, existing byte-identical local imagery and
cache-qualified source evidence. It is self-canonical and adds one sitemap URL.
- Omitted the sibling project's API, tracking, success-state and attribution
runtime. Normal staging and indexing artifacts keep all five lead panels inactive,
with no native POST, live Jotform or conversion behavior. The later seven-route
Form A isolated-test adapter is separately gated and remains outside those artifacts.
P9-01, P9-03, P9-05 and P9-07 remain open.
- Added `/lp` as a temporary staging/testing index linking the five pages. It is
always `noindex,nofollow`, sitemap/hreflang-excluded and omitted entirely when
`PUBLIC_ALLOW_INDEXING=true`. This build gate is not access control.
- Detailed evidence is in the
[integration report](phase-9-campaign-page-integration-2026-10-20.md),
[sanitized evidence JSON](phase-9-campaign-integration-evidence-2026-10-20.json),
[early-intervention source record](phase-9-early-intervention-source-2026-10-20.json)
and [final offline reconciliation](route-reconciliation-2026-10-20-offline-18-37-43-828Z.json).
Earlier October 20 reconciliations remain superseded local evidence outside
the checkpoint.
### Current two-form status — 2026-10-29
- Form A uses one 16-placement live registry: two contact, five landing, three standalone consultation and six EN/ES service drawers. Mode defaults to live; off/mock are explicit options. `/referrals` independently links to the owner-approved existing hosted Jotform; Form C creation is canceled. See the November 1 decision above.
- Owner-confirmed direct-Jotform evidence covers synthetic EN/ES submission, native thank-you, conditional email/language, generic no-answer/no-PDF staff notification, autoresponder delivery, corrected fixed Reply-To, no webhooks/integrations, privacy scope, recipient access and retention. The owner also reports successful Astro-iframe synthetic submission and confirmation on English contact, Spanish contact and one ABA landing placement; record the exact third route before release. Functional submission acceptance is complete only for those owner-reported samples. All-sixteen-route accessibility, runtime-network/telemetry, deployment and site-release acceptance remain open.
- The adapter retains fixed URLs, responsive fixed heights, `no-referrer`, `allow-forms allow-scripts allow-same-origin`, no helper script, and a hosted fallback that is hidden without space until a 15-second missing-load timeout. A frame load only clears that timeout; it does not prove cross-origin application health or accepted submission. The official Jotform resizing handler is conditionally acceptable pending separately authorized source, origin, privilege, Firefox and error-state verification; it is not implemented. Fixed heights remain current.
- No additional Form A approval/environment flags remain. Indexing does not authorize or disable forms. Marketing-only notification routing remains a pre-cutover operational check. Rollback requires explicit mode `off`, rebuild and artifact verification; merely removing the mode restores live. No Form C is needed. Counters, analytics and API forwarding remain inactive.
The indexing-enabled build has 127 HTML routes/canonicals and 109 sitemap URLs.
Normal staging has 128 `noindex,nofollow` pages because it also contains `/lp`;
its sitemap and hreflang are empty. Existing 180 hreflang links across 55 routes,
25 translation sets, 74 Library articles, nine author archives and nine redirect
definitions are unchanged. Guarded Chromium covered the four campaign routes at
320/390/768/1440px, the branded route at those widths plus no-JavaScript checks,
and `/lp` at 320/1440px. Real screen-reader, non-Chromium and authorized visual,
clinical, privacy and organizational acceptance remain pending.
## Verified technical baseline
| Metric | Result |
|---|---:|
| Library articles / locale search records | 55 EN / 12 ES / 7 AR = 74 |
| Indexing-enabled HTML routes / unique canonical targets | 127 / 127 |
| Normal staging HTML routes, including temporary `/lp` | 128 |
| Author archive routes | 9 |
| Indexing-enabled sitemap URLs | 109 |
| Hreflang links / participating routes | 180 / 55 |
| Validated page/article translation sets | 25 |
| Repository redirect definitions | 9, not activated on deployed hosts |
| Visible/schema-aligned FAQ answers / articles | 182 / 30 |
English Library and author pagination is `10/10/10/10/10/5`; Spanish is `10/2`,
Arabic is one seven-article root. Page 6 is derived, with no page 7 or page-one
HTML alias. Search remains locale-scoped, metadata-only and demand-loaded.
Publication ordering uses original dates, not modification dates. Existing
syndicated external-canonical/noindex exceptions remain unchanged.
Normal staging output is **128 `noindex,nofollow` HTML pages, an empty sitemap
and no hreflang**. Indexing-enabled validation is local only. No deployment,
redirect activation, form submission or production integration is authorized.
Final source-matching offline evidence is the
[October 20 reconciliation](route-reconciliation-2026-10-20-offline-18-37-43-828Z.json):
138 dispositions, 128 local generated routes, 70 reused historical production
requests and schema 2. Use this explicit evidence path for read-only checks.
Earlier Phase 8 and October 20 reports remain historical evidence, not the
current source fingerprint. No fresh production crawl was performed.
The historical Phase 6C.5 parity classifications were 10 confirmed, 58 with accepted intentional
deviations, one minor discrepancy, five requiring human review, zero material
discrepancies and zero insufficient-verification records against the selected
evidence. Findings rely on dated, sometimes cached/prerendered public HubSpot
representations; they do not establish independent current origin freshness.
The newer Arabic antecedent/consequence translation intentionally supersedes
its outdated public Arabic body. Machine-assisted work is not professional approval.
Phase 8 checkpoint preparation revalidation on October 15 passed sequentially
with `TMPDIR=/tmp`: Astro check (101 files, zero diagnostics), Markdown 20,
publication 33, SEO 35, **Library 53**, routes 10 and Phase 8 5 tests: **156 total**.
Both build modes and link/image/blog audits pass. The final normal staging build
and explicit offline consistency check retain the publication safeguards above.
Git identity/signing remains the user’s host-terminal responsibility.
## Outstanding Stakeholder Review and Production Release Gates
- **Clinical/organizational — AIA:** approve eligibility and program-specific
ranges against general ABA eligibility of **18 months through eight years**;
resolve the summer-routine age discrepancy. Review Preparatory Academy ages
2–6 and 1:2 delivery ratio, ABA versus education, Arizona educational guidance,
functional assessment, behavior intervention, reinforcement, extinction,
aggression, self-injury, safety, treatment/outcome claims and author roles,
credentials and biographies, including Arabic physician-like wording versus
English “clinician.” Source publication alone is not clinical approval.
- **Fluent Spanish/Arabic and clinical review:** revised Spanish school readiness,
rewritten Arabic antecedent/consequence guidance and terminology, all three
localized Arabic diagrams, localized self-advocacy Halloween additions,
operational labels and cross-language notices remain pending.
- **Spanish tip review:** Phase 7 corrected the English tip at
`/es/library/positive-reinforcement-techniques`. Its fluent-Spanish and
clinical/editorial acceptance remains open; historical Phase 6C findings remain intact.
- **Privacy/legal and trusted-source approval — P9-07:** both policy claims need
AIA privacy/legal approval. Spanish privacy was recovered from a cache-qualified
response after standard TLS certificate validation failed; fallback disabled
certificate verification. Matching captured text does not prove authenticated
origin fidelity. Before production, compare against a certificate-validated
source or owner-supplied authoritative export with provenance; no trusted
comparison is available yet. Fluent Spanish approval remains mandatory.
Do not repeat insecure retrieval or rewrite policies to hide this limitation.
- **Browser/accessibility:** guarded Chromium automation now covers desktop/mobile,
keyboard, no-JavaScript, RTL/diagram scrolling and actual 200% zoom. Authorized
visual/source-fidelity acceptance, non-Chromium coverage, native-dialog AT
behavior, Arabic visual-language acceptance and real screen-reader testing
remain pending. Earlier failed attempts remain historical; browser automation
and DOM inspection do not constitute reviewer or assistive-technology approval.
- **Spanish HSA/FSA financial claims:** fluent-Spanish and organizational/financial
review of wording, account use, pre-tax and tuition claims remains pending.
Localized artwork is not financial eligibility or reimbursement approval.
- **Landing-page integration — Phase 9 owner gate:** presentation for the four
campaign routes and `/lp/early-intervention` is now imported under explicit
owner authorization. The Library CTA remains provisionally
`/client-consultation`; its equivalence to `/lp/early-intervention`, campaign
routing, redirects and live form behavior are not approved. Do not activate
submissions or production redirects without separate authorization.
- **Employee portal — P9-02:** staff/management access separation, authentication,
authorization and employee/clinical data security remain unresolved; current
metadata-only route is not a completed portal. See the
[portal brief](employee-portal-migration-brief-2026-10-08.md).
- **Likes/views API — P9-04:** the uncommitted local implementation now defaults
to explicit fail-closed `off`, with deterministic local `mock` behavior and
no live adapter. A future live adapter still requires separate API-origin,
credential, cookie, consent and production-approval evidence.
- **Author SEO:** keep archives self-canonical, `noindex,follow` in indexing-enabled
builds, sitemap-excluded and hreflang-excluded. Changes require explicit approval.
- **Forms/privacy/analytics/advertising:** approve form destinations and submission
APIs, HIPAA/privacy safeguards, consent/analytics, Google Ads conversion tracking
and each production integration's activation. No new PHI flow is authorized.
- **Hosting/release:** separately verify Contabo/NixOS deployment assumptions,
HTTPS, canonical host, slashless URLs, query preservation, redirect targets and
loops, real 404 responses, asset delivery, sitemap/robots, reproducible deployment,
rollback and organizational release approval. The temporary Docker/nginx
trailing-slash HTTPS-to-HTTP-to-HTTPS chain remains explicitly deferred.
Static-build success does not verify these deployed behaviors.
## Uncommitted extended Phase 10 technical QA — 2026-10-22
The signed baseline remains `e874b26bb9dc24beb6bce2e83a10e7800e7e12b9` on
`faithful-astro-migration`; this section records uncommitted verification and
must not be treated as an accepted checkpoint. The local Phase 9 batches for
counter isolation, off/mock form infrastructure and Contabo release planning
were revalidated. Two bounded responsive defects were corrected: mobile
PageHero headings now fit their available width, and the Library two-column
grid allows its primary track to shrink at tablet width.
The final guarded Chromium pass opened 128/128 staging routes. The responsive
matrix passed 110/110 checks across 22 routes at 320/390/768/1024/1440px.
Four Leaflet GET requests were intercepted before transmission; no production
API, Jotform, Contabo form, analytics, advertising or WebSocket request was
transmitted. The normal staging artifact has 128 noindex,nofollow pages, an
empty sitemap and zero hreflang; the indexing artifact has 127 pages, 109
sitemap URLs and 180 hreflang links, with the temporary `/lp` review index
excluded.
New local verification tools and reports are described in the Phase 10 audit,
browser, release-rehearsal and technical-readiness reports. A loopback Node
release rehearsal passed atomic switch and rollback. nginx, Contabo topology,
real screen-reader, non-Chromium, fluent-language, clinical, privacy/legal and
all P9 owner decisions remain pending. No checkpoint SHA is assigned to this
uncommitted work; the next signed SHA must come from the user's Git history.
## Next: Phase 9 — Human-Decision Gates
Begin from the commit containing this handoff update; obtain its actual SHA from
Git history and verify branch, history and working tree. Review
[P9-01 through P9-10](phase-9-decision-register-2026-10-14.md)
and gather evidence/owner decisions before proposing bounded implementation:
landing-page ownership; portal security/access; forms/APIs; likes/views isolation;
analytics/consent/Ads; clinical/organizational claims; policy/legal/provenance;
author SEO; hosting/rollback; production authorization. All ten remain **Pending decision**.
Do not infer approval from a technically feasible option or this checkpoint.
Use the [nonproduction plan](phase-7-nonproduction-verification-plan-2026-10-14.md)
and [reviewer procedure](phase-8-host-browser-verification-2026-10-14.md) for remaining
human acceptance. No hosted preview before approved fail-closed integration
isolation. Phase 10 retains final QA, deployed routing/integration tests,
rollback rehearsal and cutover readiness. Neither phase is authorized for live
changes by this handoff. The user separately authorizes each implementation scope.
## Working protocol and protected local files
Preserve the Markdown-first manifest-driven architecture, explicit translation
relationships and ratified publication policies. Implement only authorized scope;
report evidence and structural diffs before checkpoint actions. Follow
`AUTONOMOUS-CODEX.md`; do not repair identity/signing or bypass sandbox restrictions.
Do not read, modify, move, delete, stage or checksum root `merge-plan.md`.
### Reconciliation archive — 2026-10-28
The owner explicitly superseded the former local-preservation instruction for
the seven untracked reconciliation artifacts below. They were all confirmed
untracked and moved, without overwrite, to the local archive outside this Git
repository:
`/home/alice/projects/wrk/aia/local-archives/azinstitute4autism-route-reconciliation-2026-10-28`
- `route-reconciliation-2026-10-11-offline.json`
- `route-reconciliation-2026-10-12-offline.json`
- `route-reconciliation-2026-10-13-offline.json`
- `route-reconciliation-2026-10-13-offline-06-16-06-857Z.json`
- `route-reconciliation-2026-10-20-offline.json`
- `route-reconciliation-2026-10-20-offline-18-04-39-776Z.json`
- `route-reconciliation-2026-10-22-offline.json`
They remain excluded from Git because they are superseded intermediate or
local-only evidence. Filename-reference review found historical report links
only; no runtime, test, build or audit dependency. The tracked final evidence
remains `route-reconciliation-2026-10-20-offline-18-37-43-828Z.json` and
`route-reconciliation-2026-10-22-offline-05-10-47-827Z.json`. Historical
reports may retain filename references as their contemporaneous record; no
active dependency remains unresolved. The four October 11–13 files were moved
under this explicit authorization without parsing or checksumming their
contents.
Exclude root `merge-plan.md` and temporary `.phase8-stage-paths.nul` as well.
The old `.phase7-stage-paths.nul` is absent; do not recreate it.
The staging aid is for the user's host terminal only; never stage it or use a
broad Git add. The actual future checkpoint SHA comes from Git after the user
signs; do not amend merely to insert it here.
## Consolidated service drawers and portal checkpoint, 2026-10-30
This section supersedes earlier explicit-only drawer behavior. The checkpoint
containing this update adds four-second/50%-scroll consultation opening, one
shared 30-day localStorage expiry preference, manual override through the six
existing EN/ES service CTAs, and typed bilingual service introductions. The
Academy configuration is prepared without a new page. The fixed seven production
and separate nine consultation-test route lists remain unchanged. Consultation
indexing approval must explicitly be `false`.
The employee route now has a locked, local-decryption UI and a private owner-run
collection/rewrite utility. Real passphrases were unavailable: real portal
content/resource inventory and collection remain blocked pending the owner-run
step. Do not claim approximately 43 resources as a measured inventory. Do not
commit the original source, ciphertext, decrypted views or private resources.
`www/private/employee-portal/` is ignored and outside Astro public output.
The accepted Jotform CSS backup and reconciliation archives are unchanged.
SOPS/age/sops-nix preparation is inactive, with no generated production identity,
recipient, deployed module or server-access activation. Portal browser encryption
remains access friction; internal resources require separate server-enforced
staff/management authorization. See
[consolidated implementation and validation](phase-9-service-portal-consolidated-2026-10-30.md)
and [owner utility instructions](../integrations/employee-portal/README.md).
The actual checkpoint SHA is the commit containing this section; obtain it from
Git history. No push, deployment or cutover is authorized by this work.
## Focused completion, portal styling and Spanish diagnostic — 2026-10-30
Authorized consultation drawers now accept only the documented
`submission-completed` / `formID` envelope from their activated iframe window
at the exact configured Jotform origin while the drawer is open. Object and
bounded JSON-string envelopes are supported; other actions/messages are ignored.
Completion writes the existing global 30-day expiry immediately, reveals EN/ES
acknowledgment, then starts slide-out after five seconds. Manual dismissal or
navigation cancels the countdown. Duplicate completion cannot restart it.
The next deliberate opening replaces the completed iframe; incomplete forms
remain intact across ordinary close/reopen. Load remains fallback-only, never
submission evidence. Real provider-message acceptance requires one owner-run
synthetic submission; automated tests use intercepted local fixtures only.
Portal presentation now restores scoped blue headings, spacing, directories,
orange report buttons and accessible contact accents without retaining arbitrary
classes, styles or scripts. Two synthetic encrypted views are verified. Private
source exposed no plaintext class/CSS semantics, and real view codes were not
available; exact legacy button recognition and visual parity require owner review.
No private content/resource or ciphertext was added to Git or public output.
The reported seven-option Spanish consultation dropdown is an unresolved
Jotform configuration issue: generated EN/ES URLs have identical form ID and
`formContext=consultation`, differing only in `language`. Astro neither supplies
nor edits child dropdown options. Owner should compare the direct hosted Spanish
form and review multilingual option translations/Update Options conditions.
No account changes or real submissions were performed. Seven production and
nine isolated-test placements remain unchanged; production consultation, portal
cutover and site cutover remain unauthorized. See the
[focused correction evidence](phase-9-drawer-portal-corrections-2026-10-30.md).
+275 -1
View File
@@ -1,5 +1,16 @@
# Accessibility Audit
**Checkpoint preparation — 2026-10-15:** The [exact checkpoint manifest](phase-8-checkpoint-manifest-2026-10-15.md)
records final revalidation (156 tests, including Library 53), current publication
metrics, preserved release gates and the source-matching **18:21** offline report.
The [badge correction](phase-8-badge-correction-evidence-2026-10-15.json) supersedes
the earlier white-background derivative and its captures/hash. Current Spanish
artwork preserves original geometry/alpha outside the APROBADO lettering.
Earlier browser failures, capture results and file counts below are dated history;
they are not the latest technical state. Checkpoint preparation is now authorized;
no staging, commit, production activation or human approval has occurred.
## Implemented
- Semantic header, navigation, main, article, section, and footer landmarks.
@@ -13,16 +24,279 @@
- Reduced decorative image announcements through empty alt text where appropriate.
- Responsive typography and layouts without fixed text sizing.
- Language-switcher choices are limited to routes that actually exist.
- The language selector uses native `details`/`summary` disclosure semantics and
real links. Visitor navigation is resolved independently from SEO hreflang,
so validated noindex author roots remain reachable without adding them to the
hreflang graph.
- Desktop, mobile, and footer navigation resolve against eligible generated
routes. Cross-language fallbacks are explicitly identified rather than
silently linking visitors to another language.
- Arabic footer phone, email, and Latin-script address values use narrowly
scoped left-to-right bidi isolation while the surrounding footer remains RTL.
- Like buttons expose pressed and disabled state.
- Source-faithful colors, section hierarchy, and controls were retained while
avoiding the source site's modal that obscures content on initial load.
## Manual Review
- Review extracted image alt text; source content frequently omitted or duplicated alt text.
- Have fluent Spanish/Arabic reviewers assess the newly localized article hero
descriptions and Arabic diagram alternatives in their full article context.
- Test keyboard and screen-reader behavior across all migrated pages.
- Perform contrast testing against final approved brand colors.
- Review extracted article heading hierarchy and any table markup.
- Confirm Arabic content and RTL reading order with a fluent reviewer.
- Review Spanish and Arabic operational labels and fallback-language notices
with fluent reviewers. Phase 7 localizes the existing Spanish and Arabic
author-archive labels; fluent review remains pending.
- Test the native language disclosure, mobile navigation, search announcements,
contact links, and full-page RTL reading order with screen readers. Phase
6B.5 validated generated markup and keyboard semantics, but no screen-reader
executable was available in the implementation environment.
- Validate the rebuilt mobile navigation and all full-page responsive
layouts in a browser outside the autonomous sandbox.
## Phase 6C.3 article-image update — 2026-10-12
The current 74-article Library corpus was re-audited after the Phase 6C.2
rewrites. All 74 featured images are informative in their present article
context. The 60 records that still lacked frontmatter descriptions now have
concise, locale-appropriate alt text based on direct visual inspection and the
corresponding public-page evidence. No current featured image is treated as an
accidental empty-alt fallback; this is a decision about the audited corpus, not
a rule that future decorative images must have nonempty alt text.
The three English-text diagrams in the revised Arabic antecedent/consequence
article now use separate self-hosted Arabic SVG counterparts. Each preserves
the source raster and its relationships while replacing the visible labels
with Arabic. The article also retains adjacent Arabic prose and semantic tables
that communicate the same information without relying on the images. The
causal panel order remains left-to-right where reversing it could obscure the
sequence, while Arabic labels render right-to-left within their panels.
At narrow widths, each detailed diagram sits in a keyboard-focusable,
explicitly named horizontal scroll region with a visible focus outline. This
keeps its labels at a readable minimum width without introducing page-level
horizontal overflow.
Generated-markup checks cover featured-image alt propagation to the article,
Open Graph, and Twitter metadata; localized Arabic asset references; and the
absence of the English diagram references from the Arabic body. The SVGs were
rendered locally for visual inspection at their native dimensions. A browser
was not available for desktop/390-pixel overflow checks, and no screen-reader
or fluent-Arabic review was performed. Those checks, plus clinical review of
the translated ABA terminology and diagram relationships, remain required
before cutover.
## Phase 6C.4 article-link update — 2026-10-13
Generated-HTML checks now cover every Library body link's published destination,
asset, and fragment, plus the rendered previous/next/related links. Spanish and
Arabic self-advocacy articles identify their Halloween-guide destination as
English; the two new localized sentences still require fluent-language review.
The play/leisure article retains two native image links to the full-size,
self-hosted infographics. Duplicate expanded images and orphaned lightbox close
symbols were removed. The ABC-data preview links to the existing full-size
worksheet. These static anchors do not require JavaScript; this is markup
verification, not a completed keyboard or no-JavaScript browser session.
Local Chromium failed its sandbox socket check; remote Playwright could not
reach the generated site and subsequently closed its transport. Desktop/mobile
visual checks, focus, image opening and browser Back behavior remain manual
acceptance items. No screen-reader or fluent Arabic/Spanish acceptance is
claimed. The three Phase 6C.3 Arabic diagrams still need visual-language review.
## Phase 6C.5 final verification — 2026-10-13
All 74 featured images retain the individually reviewed alternatives from Phase
6C.3. Final generated-output inspection found and corrected two flattened
screening/evaluation/diagnosis tables (English and Spanish), ten toilet-training
H3 labels that had absorbed adjacent list prose, and the opening headings in the
English/Spanish social-communication articles that had absorbed a quoted
paragraph. Words, article dates and clinical guidance were not changed. The
play/leisure closing CTA is now outside its last FAQ, matching the public page;
all 182 FAQ answers across 30 articles match their visible content and schema.
Actual raster inspection of the three Arabic SVGs found two bounded visual
issues: a replacement-behavior subtitle extended beyond its colored panel, and
a few original English calm-corner title pixels appeared above the overlay.
The subtitle now wraps and the calm-corner overlay starts 10 pixels higher.
Reinspection shows no exposed English labels or clipped Arabic text in the
inspection rasters. The previews used installed DejaVu fonts and losslessly
decoded PNG backing in temporary files because this environment's librsvg did
not render the SVGs' embedded WebP directly. Production SVGs retain their source
WebP artwork. This is raster evidence, not browser/font-fallback acceptance.
All three diagram wrappers retain a named, focusable region, narrow-screen
horizontal scrolling, a 720-pixel minimum image width and focus-outline CSS.
Browser transport remains unavailable; real desktop/390px overflow, keyboard
scrolling, no-JavaScript interactions, screen-reader and fluent Arabic checks
remain **pending**. The source-inherited English tip in the Spanish
positive-reinforcement article also remains a bounded language-review item.
See the final Phase 6C.5 report for the route-specific checklist and release gates.
## Phase 7 shared locale update — 2026-10-14
Spanish Contact and consultation forms now receive the publication locale
explicitly and render Spanish labels, service choices, instructions, submit
text and disabled-submission notices. Contact map landmark/tile alternatives
and zoom titles are localized from server-provided data. Provider/library and
contact values are unchanged. Empty form actions and disabled buttons remain;
these checks do not prove full Enter-key, scripted or no-JavaScript isolation.
Spanish and Arabic author archive eyebrows and list headings are localized.
Arabic BCBA/LBA abbreviations receive LTR isolation without changing identity,
biography or archive SEO. The Spanish reinforcement tip is now fully Spanish,
superseding the minor language finding recorded in Phase 6C.5. New wording is
still pending fluent-language and clinical/editorial acceptance. The Arabic
biography's physician-like wording versus English “clinician” is separately
flagged for organizational and fluent review; it was not silently rewritten.
The recovered Spanish privacy page preserves all ten source sections with
semantic headings, localized metadata and existing contact obfuscation.
Generated HTML tests verify labels, one H1, language, disabled form state and
translation navigation. Playwright opened about:blank, but its transport
closed on the subsequent isolated-local-preview attempt. No site browser,
keyboard, mobile, no-JavaScript or real screen-reader acceptance is claimed.
See [Phase 7 verification plan](phase-7-nonproduction-verification-plan-2026-10-14.md)
for reviewer fields and the API-isolation prerequisite for hosted review.
## Phase 8 bounded verification — 2026-10-14
Generated-HTML smoke checks now cover all 122 eligible routes: zero hard-rule
failures, two source-inherited H1→H3 review warnings (DTT/NET and schedule
consultation). These custom Cheerio rules check basic semantics, labels, alt
presence, fragments, assets and diagram regions; they are not a WCAG audit.
Two authored contrast defects were corrected without changing content or tokens:
inline prose/source-FAQ links now use primary blue and persistent underlines;
navigation/language/byline/diagram focus outlines now use primary blue. On white
and tint backgrounds the foreground contrast is 9.89:1 / 8.89:1, replacing
orange text at 2.23:1 / 2.01:1 and focus outlines at 1.66:1 / 1.49:1. Three focused
regression tests pass. Actual cascade/background/focus-clipping review remains
pending; other colors and controls have not received a complete rendered audit.
Three unchanged Arabic diagrams were rasterized and inspected again: no exposed
English labels or clipped Arabic detected in this DejaVu/librsvg rendering.
This is not browser/font-fallback or fluent-language acceptance. The earlier
statement that wrappers prevent page overflow describes CSS intent; actual
390px containment and keyboard scrolling remain unverified.
Remote browser transport closed before loading the site; only a same-execution
loopback HTTP fetch succeeded. Zero actual browser routes/screenshots, keyboard,
no-JS or real screen-reader sessions are claimed. Contact's external-map failure
fallback and all timed dialogs require actual browser checks. See the
[Phase 8 report](phase-8-visual-accessibility-acceptance-2026-10-14.md) and
[isolated host procedure](phase-8-host-browser-verification-2026-10-14.md).
All stakeholder/Phase 9 gates remain open. Phase 8 is partially verified, not
accepted, and the living handoff has not advanced.
## Phase 8 actual Chromium verification — 2026-10-15
The preceding unavailable-browser status is superseded for the system Chromium
151.0.7922.75 / Playwright 1.61.0 combination. See the
[browser report](phase-8-browser-verification-2026-10-15.md) and
[machine-readable evidence](phase-8-browser-evidence-2026-10-15.json).
All 122 routes loaded; 50 representative routes have full-page 1440/390 captures
and no-JavaScript content observations. The final source received another
122-route desktop check. Forty focused interaction checks pass; one modal focus
boundary remains Review required. No production API attempt was observed;
external map resources were blocked before transmission.
Two further bounded defects were corrected: low-contrast skip/contact/form
notice links now use primary blue and underlines; the homepage director grid
now follows the existing ≤760px single-column rule. Its scoped desktop rule had
caused 382px document width at a 320px viewport. Both homepages now pass actual
320/390/768/1440 reflow checks. Four CSS regression tests pass; full test suites
total 151 passing. These findings do not certify the rest of the palette.
All three unchanged Arabic SVGs rendered with their embedded artwork in Chromium;
inspected desktop captures showed no exposed English labels or clipped Arabic.
Named focusable regions scroll with arrow keys at 390px without page overflow.
Fluent Arabic and clinical review remain mandatory. Chromium AX-tree inspection
confirms Spanish form names/disabled state and Arabic named regions, but also
exposes inherited English “Like this article” and “Similar Blog Posts” labels.
Shared localized labels require a bounded follow-up and fluent review.
The service drawer focuses its heading, closes with Escape and restores prior
focus. Forward Tab reaches the native browser-chrome/BODY boundary before
returning to dialog controls; no background control received focus. Visible
browser/AT review remains pending, not a strict containment pass. A synthetic
fixture's scripted form submission was intercepted, demonstrating that disabled
buttons do not alone isolate submissions. No real form/server POST occurred;
P9-03 still owns the integration/isolation decision.
The two inherited heading skips, actual 200% browser zoom, broader rendered
contrast, complete source-qualified visual comparison, controlled live-map
behavior and real screen-reader acceptance remain open. Computed text resizing
and AX inspection are supplementary evidence, not substitutes. No human
sign-offs were received. All P9 decisions and the living handoff remain unchanged.
## Phase 8 bounded follow-up — 2026-10-15
[Follow-up results](phase-8-browser-verification-2026-10-15.md#bounded-follow-up--2026-10-15)
supersede the specific unresolved technical findings above. Arabic article and
archive counters/footer controls now receive publication locale explicitly;
Arabic names/views/navigation/related labels and isolated counts render correctly.
English/Spanish labels and the entire likes/views API script remain unchanged.
Fluent Arabic review is still pending.
The DTT/NET article's three primary peer sections and consultation's “Start Here”
now use H2 semantics, with identical heading text, IDs, appearance and searchable
text. Inspection established peer-section relationships; a numerical skip alone
was not treated as a WCAG violation. All-route generated audit: 122 pass, zero
hard failures or heading-review warnings.
Read More/eyebrow and selected nav/related-link states now use readable existing
primary colors. Card-author focus outlines also meet light-surface contrast.
Contact/skip links and focus clearance were rechecked. Native dialog Tab and
Shift+Tab, entry, Escape, keyboard Close and return pass at desktop/mobile.
The BODY/documentFocus=false boundary matches a minimal native control, with
background inertness preserved; no custom trap or application change was needed.
Real native tab zoom 200% passes seven high-risk pages: 1440px browser window,
720 CSS-pixel viewport, DPR 2, no page overflow. Overlapping actual viewport
captures replace an unreliable fullPage zoom capture. Both homepages pass
320/390/768/1440 and unchanged Arabic diagrams scroll/render correctly. Thirty
focused browser checks and 154 regression tests pass. This is technical
checkpoint-review readiness, not a complete WCAG audit. Human visual, fluent,
clinical/privacy, real screen-reader and source-fidelity gates remain pending;
all Phase 9 decisions remain unchanged. No production requests or activation.
## Phase 8 consolidated accessibility follow-up — 2026-10-15
See the [complete consolidated report](phase-8-consolidated-followup-2026-10-15.md)
and [evidence](phase-8-consolidated-evidence-2026-10-15.json).
- Phase 7 localization carryover: Spanish homepage now includes the faithful
HSA/FSA translation once after ESA/before Financial Help, with a separate
APROBADO graphic and Spanish alt. English content/artwork unchanged.
- Phase 7 structural carryover: Spanish privacy now has eleven H2 sections;
Información que recopilamos introduces the four existing collection items.
Policy wording/date/contact/metadata unchanged. Historical cache/insecure-TLS
provenance and trusted-source/legal review remain unresolved.
- Phase 8 Tour defect: replace flattened duplicated gallery with one enhanced
nine-slide carousel, caption, wraparound controls, named keyboard-operable
thumbnails, focus, restrained live announcements and full no-JS fallback.
Source is TLS-validated HTTP 200 but October 3 cached/prerendered content,
observed October 15. No live-page scripts executed or fresh-origin claim.
- Preserve prior Arabic UI, headings, contrast, responsive and native-dialog
findings. No changes to likes/views script, forms, publication architecture,
dependencies, hosting, SESSION_HANDOFF or pending Phase 9 decisions.
- Pass: 156 regression tests; 21 targeted Chromium checks and two actual-style/
reduced-motion probes; 122 generated-route static checks; link/image/blog
audits and both builds. Native 200% zoom on Tour/privacy adds 26 overlapping
frames, alongside 20 full-page captures and four crops (all outside Git).
- Counts unchanged: 122 routes/canonicals, 108 sitemap, 180 hreflang/55 routes,
25 sets, 74 Library records, 55/12/7 search, nine archives/redirects,
182 Library FAQ answers on 30 articles. Final staging 122 noindex,nofollow,
empty sitemap, zero hreflang. Raw all-site FAQ population is separately 254/32.
- Final explicit source-matching offline artifact:
[17-41-40-404Z](route-reconciliation-2026-10-15-offline-17-41-40-404Z.json),
133 dispositions/70 reused requests. Read-only consistency check passed.
**PHASE 8 TECHNICALLY READY FOR CHECKPOINT REVIEW**, not accepted by stakeholders.
Fluent Spanish/Arabic, HSA financial claims, clinical/organizational review,
privacy/legal/trusted-source comparison, real screen reader, native-dialog AT,
Arabic diagrams, source-design and non-Chromium acceptance remain open.
P9-01 through P9-10 all Pending decision; Phase 10 cutover remains unauthorized.
No staging, commit, checkpoint preparation, deployment or integration activation.
+3 -3
View File
@@ -1,7 +1,7 @@
# Blog Content Audit
Checked 65 blog post bodies for layout content duplicated in Markdown.
Verified 125 FAQ questions across 19 FAQ-bearing posts.
Detected 32 source-faithful blog blockquotes.
Checked 74 blog post bodies for layout content duplicated in Markdown.
Verified 182 FAQ questions across 30 FAQ-bearing posts.
Detected 58 source-faithful blog blockquotes.
No duplicated article headers or invalid MDX FAQ components were detected.
@@ -0,0 +1,178 @@
# AIA employee portal — migration brief and decision record
**Recorded:** 2026-10-08
**Project:** HubSpot to Astro migration, branch `faithful-astro-migration`
**Status:** Requirements clarified; implementation architecture and launch authorization still pending
**Related milestone:** Phase 9 human-decision gate, with implementation and verification required before cutover
## Purpose
Preserve the existing staff-facing `/employee-portal` experience during the move
from HubSpot to Astro on the AIA Contabo VPS. This is a small internal resource,
**not** an ordinary public marketing page. The owner describes its intended
protection as low-security, but that description is not a determination that the
underlying staff data or linked forms are safe to publish.
The current user-supplied requirements supersede earlier audit uncertainty
about the purpose of this route. They do **not** authorize a new authentication
implementation or relaxation of security/privacy checks.
## Confirmed legacy behavior (owner-supplied)
- The HubSpot employee portal contains **staff contact information** and links
or access to **day-to-day clinical-operations forms**.
- It has **two shared-password access levels**: general staff and management.
Preserve the separation and the intended content available to each group.
- The password handling and content are supplied in JavaScript/HTML through
the HubSpot page's **footer HTML field**.
- The supplied script embeds two independent encrypted HTML streams in a JSON
script element. The implementation labels them
`AES-256-CBC+HMAC-SHA256`, with PBKDF2-HMAC-SHA256 (200,000 iterations) used to
derive separate encryption and MAC keys from the entered passphrase.
- On password submission, the browser tries each stream; a matching MAC is
checked before decryption. On success, the script replaces the password
form with the decrypted HTML. Incorrect passwords leave the form visible.
- Decryption happens **entirely in the browser**, without an authenticated
server-side session. The encrypted data is downloadable with the page and
can be subjected to **offline password guesses**.
The supplied excerpt shows the encryption/decryption logic and encrypted
payload, but not the decrypted staff/management HTML or every surrounding
page element. The inventory of individual contacts, form destinations,
permissions, and client-side behavior therefore still requires a separate
owner-approved inspection.
**Sensitive material deliberately omitted:** the actual passphrases, encrypted
payload, decrypted HTML, contacts, staff details, and form-specific data are
not included in this document or any proposed Git commit. Do not paste,
log, or commit them. Rotate the shared passphrases before any migration
cutover; supply replacement secrets through an approved private mechanism.
## Current Astro state (repository-verified 2026-10-08)
- `www/src/content/pages/en/employee-portal.md` defines the
`/employee-portal` page route with metadata only; it has no portal body.
- It is `draft: false` and `noindex: true`.
- Phase 3A deliberately preserves the accessible local route while excluding
it from the production-policy sitemap. The staging build remains globally
`noindex,nofollow`.
- The existing migration audit listed employee portal replacement/access as
a human-decision gate. This brief clarifies the requirements without
treating the empty Astro route as a completed migration.
References:
- `www/reports/migration-audit-2026-10-06.md`
- `www/reports/migration-summary.md`
- `www/reports/migration-conversation-2026-10-07.txt`
- `www/src/content/pages/en/employee-portal.md`
## Desired migration behavior
1. Preserve the public-facing **route** `/employee-portal`, but do not expose
internal content to unauthenticated visitors.
2. Preserve **general staff** and **management** content separation.
3. Preserve the practical staff workflow: contact lookup, form links, and
day-to-day usability, including mobile layout.
4. Maintain the established `noindex` and sitemap-exclusion policy. Do not
add a translation alternate for this noindex route.
5. Audit each form link, embedded form, external provider, and asset before
migration. Identify whether any workflow collects, displays, or transmits
patient data or other sensitive information. Do not assume an internal
form's data handling is safe merely because the portal is gated.
6. Do not enable third-party advertising or general-purpose analytics tags
within the protected portal without an approved privacy review.
7. Preserve existing functionality without prematurely creating a user-account
database, integrating a full identity provider, or changing clinical forms.
Any such change requires a separate owner decision.
## Authentication/hosting decision — NOT YET RESOLVED
Two approaches are plausible. Do not select one implicitly.
**A. Reproduce the existing browser-side encrypted-content model.**
This offers closer functional compatibility and may remain entirely static,
but it is **obfuscation/access friction rather than robust access control**:
all ciphertext is publicly downloadable and shared passphrases can be tested
offline. It offers no individual account revocation or reliable per-user audit
trail. Use only after explicit owner acceptance of these limitations and
review of all included content.
**B. Protect staff and management resources at the Contabo server/edge.**
For example, separate protected URL/resource areas with nginx or another
server-side access control, while keeping `/employee-portal` as the entry
point. This avoids distributing readable internal content as public HTML and
can separate the two groups, but requires a design for two access levels,
credential distribution/revocation, and hosting operations. A single
undifferentiated HTTP Basic Auth gate is **not by itself** sufficient to enforce
different staff and management permissions.
**Security boundary:** `noindex` and omission from the sitemap are SEO
directives, **not** access controls. If server-side protection is selected,
protected plaintext must not be shipped as publicly retrievable assets in the
Astro `dist/` tree, public Git repository, or an unguarded CDN. Do not embed
passwords in browser JavaScript, frontmatter, static environment variables, or
committed web-server config.
## Decisions to obtain before implementation
- Confirm the exact resources visible to **staff** versus **management**
without storing them in public migration documentation.
- Classify staff contact details, form links, linked systems, and any clinical
or patient-related content; decide what is allowed in an externally reachable
portal.
- Select browser-side compatibility or server-side Contabo protection (and
whether existing URL/layout behavior should be retained verbatim).
- Decide how replacement credentials will be generated, distributed, rotated,
and revoked. Avoid reusing the old shared passphrases.
- Approve which portal forms/links are maintained, replaced, removed, or
re-hosted. Check destination URLs and privacy implications.
- Name the approver for both access-level mapping and launch acceptance.
## Future implementation milestone (separate from Phase 3B)
1. Perform a **read-only inventory** of the existing decrypted staff and
management views through owner-authorized access; record only non-sensitive
structure, required features, and form destinations in public reports.
2. Obtain the decisions above. Produce a short design and threat/operational
tradeoff review before implementing anything.
3. Implement in a scoped, reviewable milestone. Preserve the route and
publication policy; do not alter other migration page families.
4. Validate the access boundary: unauthenticated users cannot read protected
content; staff cannot read management-only content; management can access
its intended resources. Check direct URLs, page assets, and caching.
5. Validate UI and operations: wrong credentials, successful access, refresh,
mobile layout, keyboard access, link destinations, and form workflows.
6. Check `noindex`, sitemap omission, no hreflang, and absence of unintended
tracking/PHI leakage. Conduct an authorized privacy/security review.
7. Keep rollback instructions and credential-rotation procedures alongside
the Contabo cutover checklist. Do not activate until separately approved.
## Scope note
This is **documentation only**. It must not change Phase 3A publication policy,
Phase 3B hreflang implementation, Astro routing, production access, forms,
analytics, or server configuration. It does not claim authentication,
HIPAA compliance, or release readiness.
## 2026-10-30 owner authorization and implementation addendum
The owner explicitly authorized the two-stream browser-encrypted compatibility
model for development, superseding the earlier implementation hold for that
bounded scope. Production authorization and server-side resource protection are
still unresolved. The new scoped EmployeePortal component preserves the existing
route/SEO policy, local password entry, HMAC verification before decryption,
locked/unavailable default and passive content rendering.
The read-only source is at
`/home/alice/projects/wrk/aia/local-archives/aia-employee-portal-hubspot-footer-source.txt`.
Its two-stream structure and algorithm were inspected without exposing ciphertext
or plaintext. Legitimate codes were not available to the agent. Real-view
fidelity and exact resource counts remain blocked, not accepted. No real document
was fetched or published. The owner-run migration utility performs private
collection and approved link rewriting/re-encryption; see
[private workflow instructions](../integrations/employee-portal/README.md).
SOPS/age/sops-nix templates are prepared but inactive. Encryption of deployment
secrets does not authorize public delivery of staff/management documents. The
[consolidated report](phase-9-service-portal-consolidated-2026-10-30.md) records
synthetic tests and the separate remaining owner/cutover gates.
@@ -0,0 +1,156 @@
# Google Ads consultation-form conversion: Astro implementation handoff
**Recorded:** 2026-10-08
**Repository branch:** `faithful-astro-migration`
**Status:** **Configuration documented only. NOT approved for production installation or activation.**
This document preserves the conversion action configured in the AIA Google Ads
organization account for the future Astro consultation/ABA-therapy landing pages.
It is a handoff to the site-migration and landing-page implementation work, **not**
authorization to install advertising tags. Follow the repository's
`AGENTS.md`/form-implementation constraints. As of this document, existing
migration forms are intentionally static; do not silently wire them to a backend
or add tracking while working on the visual migration.
## Google Ads configuration (verified in account UI)
| Field | Value |
| --- | --- |
| Google Ads customer/account | `515-940-4739` |
| Conversion action | `AIA | Consultation Form Submitted` |
| Goal/category | `Submit lead form` |
| Source | Website, **manual event** |
| Optimization | Primary; account-default goal (alongside Phone call lead) |
| Value | USD $1, fixed nominal reporting value (not actual revenue) |
| Count | One conversion per ad interaction |
| Click-through conversion window | 90 days |
| Engaged-view / view-through windows | 3 days / 1 day |
| Attribution | Data-driven |
| Enhanced conversions | **Not configured; do not enable** |
| Google tag setup | Not installed/verified for this new account |
| Conversion type ID (Google Ads UI reference only) | `7830657062` |
**Identifiers copied from the Google Ads “See event snippet” dialog:**
- **Google Ads destination / tag ID:** `AW-18494479353`
- **Conversion label:** `MzxbCKaw-ZUdEPm37fJE`
- **`send_to` value:** `AW-18494479353/MzxbCKaw-ZUdEPm37fJE`
The event snippet displayed in Google Ads is:
```html
<!-- REFERENCE ONLY. DO NOT DEPLOY WITHOUT PRIVACY APPROVAL. -->
<script>
gtag('event', 'conversion', {
'send_to': 'AW-18494479353/MzxbCKaw-ZUdEPm37fJE'
});
</script>
```
The `AW-` destination ID and conversion label are **not secrets**. Their
publication in source documentation does not imply permission to transmit data
to Google.
## Intended conversion semantics
One conversion represents **one consultation/ABA-therapy inquiry whose form
submission is accepted successfully by the approved API**, not a page visit,
form start, validation attempt, button click, or failed request.
The Google Ads dialog offered `Page load` and `Click` snippet options. The
`Page load` option was used to **retrieve the event syntax**, not as a mandate
to fire on arbitrary page loads. For the Astro/API flow, **prefer triggering
explicitly after the API returns a verified success response**, provided the
privacy review has approved the entire data flow.
Avoid a generic `/thank-you` page-load conversion: direct visits, refreshes,
or failed/subsequently redirected submissions can create false conversions
unless access and deduplication are robustly controlled. If confirmation-page
measurement is selected later, document and test how successful submissions
are authenticated and repeated visits are prevented from counting again.
## Integration requirements — gated, not yet authorized
1. **Privacy/HIPAA and Google Ads policy approval comes first.** Review with
AIA's responsible privacy/compliance team whether any Google tag may load
on the relevant pages, including the confirmation page. A health-service URL
and request metadata can disclose sensitive context even when no form fields
are sent. Review URL/path/query string, referrer, IP/device information,
cookies, network requests, automatic collection, consent, and applicable
Google terms/policies. **No tag loading at all** until that review is
completed and explicitly approved; a nominally sanitized `gtag` event is
not itself evidence of HIPAA compliance.
2. **Keep enhanced conversions and customer-data features off.** Do not send
names, emails, phone numbers, diagnoses, dates of birth, form contents,
hashed identifiers, `user_data`, or any patient-related values to Google.
Do not import sensitive customer lists or enable remarketing/health-audience
personalization. Don't append PII/PHI to redirect URLs, analytics events,
or advertising parameters.
3. **Do not add the base Google tag globally** to `src/layouts` or shared
head scripts as part of the ordinary site migration. If approved, provide
the minimum audited, route-specific implementation with explicit policy
controls. The Google Ads event requires a correctly initialized Google tag
(or a separately approved GTM implementation); the event snippet alone
cannot measure a conversion.
4. **Fire only after confirmed API success.** Use the real form endpoint's
documented response contract, not a presumed HTTP 200 or a click handler.
Fail closed on network error, invalid/partial responses, validation failure,
or spam rejection. Guard against duplicate calls from double-clicks,
retries, navigation, and refreshes.
5. **Keep the event minimal.** Once explicitly approved and initialized, the
only required conversion-event field in the recorded snippet is `send_to`.
Do not add `value`, `currency`, `transaction_id`, URL parameters, or
custom data without separate measurement/privacy review.
6. **Test safely.** First unit/integration-test form-success logic using a
mocked `gtag` and synthetic submissions. Test zero events on errors and
exactly one on verified success; inspect final URLs and outgoing requests.
Any real Google-network testing is itself tag deployment and requires the
same privacy approval. Verify the event in Google Ads/Tag diagnostics after
approval and deployment.
7. **Release gate.** Do not enable the paused campaign until the landing pages
are production-ready, successful forms are verified end to end, conversion
measurement is tested and approved, the healthcare/call-asset terms issue is
resolved, and the advertising-policy review is complete.
### Illustrative invocation — not production-ready code
```ts
// Documentation-only. Run ONLY inside a privacy-approved implementation,
// after the approved API's actual success condition has been verified and
// the approved Google tag is initialized. Add submission-level deduplication.
gtag('event', 'conversion', {
send_to: 'AW-18494479353/MzxbCKaw-ZUdEPm37fJE',
});
```
Do **not** paste that example into a generic `submit` event handler or a
shared page layout: doing so before the asynchronous API response succeeds
would count attempted or failed inquiries.
## Related campaign and implementation notes
- The Search campaign in Google Ads account `515-940-4739` is intended to
remain **paused** during the Astro/Contabo migration and privacy audit.
- The other account-default Primary goal is `Phone call lead`, presently an
`AI-qualified call leads` action with a 60-second qualifying duration and
`Count = One`. Its Call and Messaging Ads Terms/HIPAA-exclusion question
is a separate launch blocker.
- The standalone advertising landing pages and associated form API work may
have their own repository or implementation handoff. Reconcile this document
with that source before making changes; do not assume the migration repo's
static forms already implement those endpoints.
- For privacy, keep identifiers limited to the public Ads destination ID and
conversion label; **no API credentials, patient examples, or submitted lead
data belong in this documentation**.
## Implementation checklist
- [x] Create the Google Ads manual Website conversion action and record IDs.
- [x] Configure Primary, One, $1, data-driven attribution; enhanced conversions off.
- [ ] Approve the exact third-party tag/data-flow design through AIA privacy review.
- [ ] Confirm form API success contract and documented submission deduplication.
- [ ] Implement a strictly gated, audited event only on verified form success.
- [ ] Verify outgoing network payloads and URLs contain no sensitive information.
- [ ] Complete approved end-to-end tracking tests and inspect Google Ads diagnostics.
- [ ] Confirm Google call-assets terms/HIPAA exclusion and other launch gates.
- [ ] Unpause campaign only after written go-live approval.
File diff suppressed because it is too large. Load diff
+74
View File
@@ -1,3 +1,77 @@
## Include these directives inside the public HTTPS server block, before the
## generic static `location /` handler. Root (`/`) is the only trailing-slash
## public URL; every other terminal slash receives a query-preserving 308.
location ~ ^(.+?)/+$ {
return 308 $1$is_args$args;
}
## The static handler must serve the generated directory artifact at its
## slashless public path. Do not use `$uri/`, which permits nginx's automatic
## directory-slash redirect before `$uri/index.html` can be served.
location / {
try_files $uri $uri/index.html $uri.html =404;
}
## HubSpot redirect export imported from repository-root `url-redirects.csv`
## on 2026-11-01. The export contains 45 STANDARD 301 rules. The three aliases
## already generated below (`/aba`, `/autismevaluations`, and
## `/learnersocialclub`) are intentionally not duplicated here.
##
## The IndexNow verification-file redirect retains HubSpot's original external
## target. Before cutover, confirm that target remains reachable after this
## hostname points at nginx; serving the required verification file locally may
## be necessary instead.
rewrite ^/abaportal$ /employee-portal permanent;
rewrite ^/aiaportal$ /employee-portal permanent;
rewrite ^/giveback$ /donate-autism-giveback permanent;
rewrite ^/blog$ /library permanent;
rewrite ^/donate$ /donate-autism-giveback permanent;
rewrite ^/contactus$ /contact permanent;
rewrite ^/post/4waysonhowtoreducebehaviormanagement$ /library/reduce-behavior-management permanent;
rewrite ^/post/playandleisureskillsforchildrenwithautism$ /library/play-leisure-skills permanent;
rewrite ^/post/managing-aggressive-behavior-outbursts-and-proper-communication-with-your-child-during-those-moments$ /library/managing-aggressive-behavior-outbursts permanent;
rewrite ^/post/critical-thinking-skills-for-children-with-autism$ /library/critical-thinking-skills permanent;
rewrite ^/post/new-year-goals-for-our-children-with-autism$ /library/new-year-goals-2023 permanent;
rewrite ^/post/aia-world-autism-month-celebration$ /library/aia-world-autism-community-day-celebration permanent;
rewrite ^/forms$ /client-forms permanent;
rewrite ^/post/november-aia-update$ /library/november-2022-aia-update permanent;
rewrite ^/post/behavior-modification-techniques-reinforcement-theory$ /library/behavior-modification-techniques-reinforcement-theory permanent;
rewrite ^/post/navigating-the-autism-journey-understanding-and-supporting-our-children-with-autism$ /library/understanding-autism-support permanent;
rewrite ^/post/arizona-institute-for-autism-is-thrilled-to-announce-its-transformation-into-an-integrated-aba-model$ /library/integrated-aba-model-announcement permanent;
rewrite ^/post/repetitive-behaviors-with-children-diagnosed-with-autism$ /library/repetitive-behavior permanent;
rewrite ^/post/asd-sensory-friendly-thanksgiving-recipe$ /library/asd-sensory-friendly-recipe-thanksgiving-pumpkin-cake permanent;
rewrite ^/post/toilet-training-for-a-child-with-autism-using-applied-behavior-analysis-aba$ /library/aba-toilet-training-child-autism permanent;
rewrite ^/post/new-year-2024-holiday-and-autism$ /library/new-year-2024-autism-holiday-tips permanent;
rewrite ^/post/understanding-sensory-processing-in-the-context-of-aba-therapy$ /library/sensory-processing permanent;
rewrite ^/post/enhancing-generalization-for-broader-impact$ /library/enhancing-generalization-skills permanent;
rewrite ^/post/asd-sensory-friendly-recipes-pancakes$ /library/asd-sensory-friendly-recipes-pancakes permanent;
rewrite ^/post/the-benefits-of-aba-therapy-for-children-with-autism$ /library/aba-therapy-benefits permanent;
rewrite ^/post/meet-rula-diab-board-certified-behavior-analyst-bcba$ /library/meet-rula-diab-bcba permanent;
rewrite ^/post/integrity-empowerment-and-excellence-arizona-institute-for-autism-expands-to-new-office$ /library/new-aia-scottsdale-office permanent;
rewrite ^/post/community-highlights-meet-rula-diab-of-arizona-institute-for-autism$ /library/community-highlight-meet-rula-diab permanent;
rewrite ^/post/navigating-dtt-and-net-in-aba-therapy$ /library/aba-therapy-dtt-net-guide permanent;
rewrite ^/post/benefits-of-prompting-and-parenting-in-aba-therapy$ /library/aba-therapy-prompting-parenting-benefits permanent;
rewrite ^/post/building-rapport-with-a-child-in-aba-therapy-the-key-to-fun-engaging-and-effective-sessions$ /library/autism-therapy-rapport-strategies permanent;
rewrite ^/post/exploring-behavior-management-and-understanding-the-functions-of-behavior$ /library/behavior-management-functions-guide permanent;
rewrite ^/post/navigating-back-to-school-understanding-antecedent-and-consequence-interventions-for-families-with$ /library/aba-school-readiness-guide permanent;
rewrite ^/post/proactive-and-reactive-strategies-in-aba$ /library/proactive-reactive-aba-strategies-guide permanent;
rewrite ^/post/individualized-aba-therapy$ /library/individualized-aba-therapy permanent;
rewrite ^/post/parental-self-care-for-autism-families$ /library/autism-family-self-care-tips permanent;
rewrite ^/post/teaching-self-advocacy-through-aba-empowering-children-to-express-their-needs$ /library/autism-self-advocacy-skills-aba permanent;
rewrite ^/ar/library/author/rula-diab-ar$ https://www.azinstitute4autism.com/ar/library/author/rula-diab permanent;
rewrite ^/locations$ /contact permanent;
rewrite ^/schedule/consultation$ /schedule-consultation permanent;
rewrite ^/e2ae5722f9ae40e89a9ebb8d53200e66\.txt$ https://www.azinstitute4autism.com/hubfs/e2ae5722f9ae40e89a9ebb8d53200e66.txt permanent;
rewrite ^/parent-guide$ /library/parents-guide-to-autism-and-aba permanent;
## Existing generated migration redirects follow. They include the remaining
## three rules from the HubSpot export, plus current page-one aliases.
rewrite ^/aba$ /aba-therapy permanent;
rewrite ^/autismevaluations$ /autism-evaluations permanent;
rewrite ^/learnersocialclub$ /learner-social-club permanent;
rewrite ^/library/page/1$ /library permanent;
rewrite ^/es/library/page/1$ /es/library permanent;
rewrite ^/ar/library/page/1$ /ar/library permanent;
rewrite ^/library/author/rula-diab/page/1$ /library/author/rula-diab permanent;
rewrite ^/es/library/author/rula-diab/page/1$ /es/library/author/rula-diab permanent;
rewrite ^/ar/library/author/rula-diab/page/1$ /ar/library/author/rula-diab permanent;
+1 -1
View File
@@ -1,5 +1,5 @@
# Page Imagery Audit
Checked 85 page-banner, section-background, and blog-featured-image references.
Checked 94 page-banner, section-background, and blog-featured-image references.
No missing mapped page imagery was detected.
@@ -0,0 +1,38 @@
# Phase 10 — Guarded Browser Regression
Date: 2026-10-22 UTC
Browser: Chromium 151.0.7922.75 via Playwright 1.61.0
Transport: loopback-only Astro preview; service workers blocked; WebSockets closed; all non-loopback and non-GET/HEAD requests intercepted before transmission.
## All-route smoke
`tools/phase10-browser-regression.mjs` opened **128 of 128** generated staging routes. All returned HTTP 200, had a title, one canonical, staging `noindex,nofollow`, no page errors and no horizontal overflow failure. No production/API/Jotform/Google/HubSpot attempt was observed.
Six full-page screenshots were captured outside the repository under `/tmp/aia-phase10-browser-sxY6Bg` for representative English, Spanish, Arabic, Tour and campaign routes. They are temporary evidence, not checkpoint artifacts.
The only console errors were four blocked Leaflet resource errors on `/contact` and `/es/contact`; the guard recorded the corresponding four `unpkg.com` GET attempts. They were blocked before transmission. No OpenStreetMap request followed because Leaflet did not load.
## Responsive matrix
`tools/phase10-responsive.mjs` exercised **22 representative routes × 5 widths = 110 checks** at 320, 390, 768, 1024 and 1440px. All checks passed, including one main H1 per route, Arabic `lang="ar"`/`dir="rtl"`, and document width not exceeding the viewport. Ten selected 320/1440 screenshots were written under `/tmp/aia-phase10-responsive-h1o5Kt`.
The pass includes the five campaign pages, English/Spanish home and contact routes, consultation/referral routes, Arabic article presentation, Library pagination, search, privacy, Tour and representative service pages.
The responsive run initially exposed two reproducible defects. The final run passed after:
- constraining the mobile `PageHero` heading width; and
- changing the Library grid's first track to `minmax(0, 1fr)`.
## Existing interaction and accessibility evidence
The prior guarded Phase 9/8 interaction run remains **41 checks, zero failures**. The prior no-JavaScript browser evidence covers 50 routes. This session did not claim a new real screen-reader session. Native dialog/browser-chrome focus behavior remains a manual assistive-technology review item.
Automated checks cover keyboard-visible focus and interaction paths already encoded in the repository suites, Tour fallback/controls, localized forms in off/mock presentation, Arabic direction and diagrams, and reduced-motion CSS. These are not human WCAG or clinical-language sign-offs.
## Network result
Attempted blocked requests: four Leaflet CSS/JS GETs. Successfully transmitted production requests: **zero**. Production API, Jotform, Contabo form, advertising, analytics, authentication and WebSocket interactions: **zero**.
## Outstanding browser review
Real screen-reader testing, authorized visual acceptance, non-Chromium compatibility and fluent Spanish/Arabic review remain pending. The cache-qualified source captures for Tour and Spanish privacy do not establish current-origin parity.
@@ -0,0 +1,38 @@
# Phase 10 — Local Release and Artifact Rehearsal
Date: 2026-10-22 UTC
Status: Local-only rehearsal; no host, DNS, TLS, nginx, Cloudflare or Contabo access.
## Build artifacts
The normal staging build produced **128 HTML routes**. The final static inspection confirmed every HTML page carries `noindex,nofollow`, the sitemap has zero URLs and no hreflang links are emitted. The temporary `/lp` review index is present only in this staging artifact.
The indexing-enabled build produced **127 HTML routes**, **109 sitemap URLs** and **180 hreflang links**. `/lp` is absent from this artifact. The 74 Library articles, 55/12/7 search inventories, nine author archives and nine redirects remain unchanged.
`tools/phase10-artifact-verify.mjs` passed both modes. Final staging artifact result: 128 HTML routes, 0 sitemap URLs, 0 hreflang links, 409 files, SHA-256 `7ce4341f430a0a49ccc9f074219553c5d9967659c6cf1392042b99335d5009d9`. The indexing artifact passed with 127 HTML routes, 109 sitemap URLs, 180 hreflang links, no `/lp` review index and no active native lead actions; its previously recorded digest is `7ed57ab8089f3fa77c482e3ff229cd3179c470df2a3a1c4cb94c0c76ed02034c`.
The artifact verifier rejects non-search native form actions, active Jotform/tracking scripts, live form mode, production API origins and credential-like strings. It does not claim that static validation replaces deployment or privacy approval.
## Static-serving rehearsal
No `nginx` executable is available in the current environment, so no nginx configuration was installed or tested. `tools/phase10-release-rehearsal.mjs` used an isolated loopback Node static server and passed:
- staging artifact verification;
- root and locale routes;
- slashless and trailing-slash file resolution;
- query-string preservation;
- SVG MIME type;
- robots and empty staging sitemap;
- real 404 handling;
- atomic `current` symlink switch; and
- rollback to the prior release.
The rehearsal reported `productionContact: false`. Its temporary release root was outside the repository.
## Deployment assumptions still requiring verification
The Contabo/NixOS operating system, service user, nginx topology, TLS termination, canonical host, DNS/Cloudflare ownership, release permissions, backups, monitoring and rollback operator remain unknown. The existing P9-09 plan remains the source of the sanitized questionnaire and versioned release-directory proposal. No production rewrite, redirect, cache or security-header configuration was installed.
## Required future host rehearsal
An owner-approved staging host must serve a verified indexing artifact through the intended server, then exercise HTTPS, canonical host, redirects, query strings, static assets, 404s, cache behavior, robots/sitemap, counter/form environment gates and rollback. Staging remains nonproduction and must not be treated as access control solely because it is noindex.
@@ -0,0 +1,27 @@
# Phase 10 Slashless URL Normalization — 2026-10-25
## Scope
This local-only change aligns static-serving behavior with the live site's URL convention: root remains `/`; every other public page is served at a slashless path such as `/aba-therapy` or `/lp/aba-therapy`.
Astro was already configured with `trailingSlash: 'never'`. Generated canonicals, hreflang URLs, sitemap entries, and source links therefore use slashless paths. The remaining deployment requirement is that a static web server must serve a generated `path/index.html` artifact for a slashless request without first redirecting to a directory URL.
## Required server contract
The reviewed nginx template in `reports/nginx-rewrites.conf` must be included inside the public HTTPS server block before general static routing. It requires the server to:
- return a query-preserving `308` from `/path/` to `/path`;
- serve `/path` from `path/index.html` without nginx's automatic directory-slash redirect;
- preserve query strings, for example `/search/?term=aba` redirects to `/search?term=aba`;
- keep root `/` unchanged; and
- retain explicit legacy route redirects after URL normalization.
This is a deployment template only. No Contabo, nginx, DNS, TLS, Cloudflare, or live-site configuration was changed.
## Regression protection
`tools/phase10-artifact-verify.mjs` now rejects generated root-relative `href` or `action` URLs with a terminal slash, excluding root `/`. `tools/phase10-release-rehearsal.mjs` models the required static behavior on loopback: slashless routes return `200`, trailing variants return `308`, and query strings survive the redirect.
## Acceptance still required
The template must be applied and tested by the approved hosting owner on the actual Contabo staging topology. Phase 10 must verify HTTPS, canonical host behavior, cache headers, redirects, assets, real 404s, forms/counter isolation, and rollback before any production cutover. This change does not authorize deployment.
@@ -0,0 +1,39 @@
# Phase 10 — Extended Technical Audit
Date: 2026-10-22 UTC
Status: Local nonproduction audit; no production activation.
## Baseline and scope
The audit started from signed commit `e874b26bb9dc24beb6bce2e83a10e7800e7e12b9` on `faithful-astro-migration`. The index was empty. Existing unstaged Phase 9 work was preserved. The six superseded route-reconciliation reports and root `merge-plan.md` were excluded without reading their contents.
This audit covered the P9-04 counter isolation, P9-03 off/mock form infrastructure, the runtime outbound-request inventory, generated artifacts and local release behavior. No Jotform account mutation, form submission, production API request, analytics event, advertising request, hosting connection or deployment occurred.
## Findings
| ID | Severity | Finding | Evidence and disposition |
| --- | --- | --- | --- |
| A-01 | Fixed | Page hero headings could exceed a 320px viewport on long titles. | Chromium geometry identified 3–17px overflow on consultation/evaluation pages. `PageHero.astro` now constrains the mobile heading to the available width with border-box sizing. Responsive regression passes. |
| A-02 | Fixed | Library two-column grid retained a min-content width at 768px. | Chromium identified an 881px document width caused by `1fr 240px` plus a long-content min-content contribution. `BlogIndexLayout.astro` now uses `minmax(0, 1fr) 240px`. Responsive regression passes. |
| A-03 | Pass | Counter runtime is fail-closed. | `counter-mode.ts` defaults missing/invalid settings to `off`; `LikeViewCounter.astro` emits no API fallback, fetch, credential or cookie behavior in inactive modes. `phase9-nonproduction.test.mjs`, generated artifact inspection and guarded Chromium passed. Live mode has no adapter and remains unavailable. |
| A-04 | Pass | Form runtime is fail-closed. | `form-integration.ts` defaults missing/invalid/live-without-approval to `off`. Off mode emits no native lead form or action; mock mode is local-only. No Jotform URL, Contabo form endpoint, analytics or advertising event was present in generated output. |
| A-05 | Review | Leaflet assets are external automatic requests. | Guarded Chromium intercepted four GET requests to `https://unpkg.com/leaflet@1.9.4/` on Contact pages before transmission. This is existing map behavior, not a production API request; provider/privacy review remains a release gate. |
| A-06 | Review | Existing CentralReach/Jotform links remain operational external links. | `/client-forms` contains established third-party workflow links. They were not navigated or changed. Their owner, access and privacy behavior remain P9 decision work. |
| A-07 | Pending | Real screen-reader, non-Chromium and authorized visual acceptance. | Static DOM and Chromium checks do not constitute assistive-technology or stakeholder approval. |
## Runtime inventory
Local source review found local Library search-index fetches, existing Leaflet/unpkg and OpenStreetMap map dependencies, established CentralReach/Jotform workflow links, and guarded session-storage behavior for the service drawer. No active GA4, Google Ads, GTM or HubSpot tracking script was introduced. Counter and form integrations have no active production origin in off/mock output.
## Tests added or exercised
- `tools/phase10-artifact-verify.mjs` and `tools/phase10-artifact.test.mjs` provide deterministic staging/indexing artifact checks.
- `tools/phase10-release-rehearsal.mjs` exercises a loopback static server, release switch and rollback.
- `tools/phase10-browser-regression.mjs` checks all generated staging routes with guarded requests.
- `tools/phase10-responsive.mjs` checks representative routes at 320, 390, 768, 1024 and 1440px.
The existing Phase 9 isolation tests remain unchanged except for their prior authorized scope. No production configuration was changed.
## Remaining approvals
P9-01 through P9-10 remain pending. In particular, live counter origin/credentials, Jotform Builder settings and activation, consent/measurement, clinical claims, privacy/legal review, hosting topology and production go/no-go require owner evidence. The Phase 8 real screen-reader and fluent-language gates also remain open.
@@ -0,0 +1,131 @@
# Phase 10 — Technical Readiness Package
## Current referral decision — 2026-11-01 (supersedes Form C planning)
The owner directs `/referrals` to retain the current public-site workflow: one
button-styled **Refer a Client** link to
[the existing hosted Jotform](https://form.jotform.com/231638510219149). There is **no separate Form C**
to create, embed, configure or launch. The former Form C / proposed two-form
architecture is historical only. `/referrals` renders no local form or Form A
iframe; the original 16 approved Form A placements remain unchanged.
This is authorization to restore the existing destination in Astro, **not**
verification of that separate legacy Jotform's HIPAA configuration, notification
recipients, patient-data handling, accessibility or continued operational
suitability. Review the actual hosted form and its clinical/privacy claims before
production cutover. No account modification or submission occurred in this PR.
Date: 2026-10-22 UTC
Status: Technical handoff prepared; production gates remain open.
## Current decision — 2026-10-30: default-live Form A
The owner intentionally supersedes the earlier isolated-test and seven-route
production-gate architecture. `npm run dev` and `npm run build` now enable Form A
on exactly **16 approved placements**, including the publicly reachable
`aia.web3app.dev` environment. No additional approval flags or access restriction
are required. `PUBLIC_AIA_FORMS_MODE` is optional: absent/empty means `live`;
explicit `off` and `mock` remain available. Invalid/obsolete `isolated-test`
settings produce an actionable configuration error. The former approval flags
and form environment role are retired, not renamed.
Indexing and forms are independent. Both publication modes emit ten immediate
frames (two contact, five landing, three consultation) and six deferred bilingual
service-drawer frames. The bounded registry fixes ID `262946078314059`, HTTPS
origin, context and language. Form B is retired; Form C creation was canceled by owner decision on 2026-11-01.
Live drawers retain four-second/50%-scroll opening, shared 30-day suppression,
manual CTA override, deferred loading, verified completion acknowledgment for
five seconds, animated dismissal and fresh-form reopening. Off mode does not
automatically show inactive drawers. All iframe security/fallback behavior is
preserved. Employee-portal preview remains independently gated by explicit local
approval, valid private ciphertext input and non-indexing output; Form A cannot
authorize private content. No portal private resources enter normal artifacts.
This owner authorization does not modify Jotform, authorize site cutover or
complete pending consultation-language, provider-event, accessibility, runtime
telemetry/privacy, recipient-routing or hosting acceptance. See the
[current operating guide](../integrations/jotform/README.md) and
[implementation and validation report](phase-9-form-a-default-live-2026-10-30.md).
Earlier dated decisions and test results below are historical evidence, not
current environment setup instructions.
The following acceptance matrix records the original October 22 results; see the new report for October 30 validation.
## Acceptance matrix
| Area | Evidence | Result | Human/owner gate |
| --- | --- | --- | --- |
| Astro type/check | `npm run check` | Pass, 130 files, 0 diagnostics | None for local build |
| Content/publication | Markdown 20, publication 33, SEO 35, Library 53, routes 10 | Pass, 151 core tests | Content/clinical approvals remain separate |
| Phase 8/campaign/P9 isolation | Phase 8 5, campaign 11, P9 nonproduction 5 | Pass | Language, screen-reader and stakeholder review pending |
| Artifact integrity | staging/indexing verifier | Pass; 128/127 routes, staging 0/0 sitemap/hreflang | Hosting owner verification pending |
| Browser all-route | 128/128 opened | Pass | Non-Chromium and authorized visual review pending |
| Responsive | 110/110 checks | Pass | Human visual acceptance pending |
| Release rehearsal | Node loopback switch/rollback | Pass | nginx/Contabo rehearsal pending |
| Link/image/blog audits | all three audits | Pass, zero findings | None for local audit |
| Offline reconciliation | explicit 2026-10-22 evidence check | Pass; no fresh production crawl | Source freshness remains qualified |
| Screen reader | no real session in this environment | Pending | Authorized AT reviewer |
## Reproducible validation commands
From `www`:
```sh
TMPDIR=/tmp npm run check
npm run test:markdown
npm run test:publication
npm run test:seo
npm run test:library
npm run test:routes
node --test tools/phase8.test.mjs
node --test tools/campaign.test.mjs
node --test tools/phase9-nonproduction.test.mjs
node --test tools/phase10-artifact.test.mjs
npm run build
PUBLIC_ALLOW_INDEXING=true npm run build
node tools/phase10-artifact-verify.mjs --mode=indexing --forms=live
npm run build
npm run audit:links
npm run audit:images
npm run audit:blog
node tools/phase10-artifact-verify.mjs --mode=staging --forms=live
node tools/phase10-release-rehearsal.mjs
```
The final normal staging build was restored after the indexing build. The explicit offline route reconciliation `reports/route-reconciliation-2026-10-22-offline-05-10-47-827Z.json` passed its read-only consistency check using saved request evidence; no unrestricted crawl occurred.
## Phase 10 cutover prerequisites
1. Record a locked Node/npm/toolchain and reproducible artifact manifest.
2. Obtain sanitized Contabo/NixOS/nginx/TLS/DNS/Cloudflare facts.
3. Verify host-local serving, canonical host, redirects, 404s, cache headers and rollback on an approved staging host.
4. Default-live Form A is owner-authorized on exactly 16 placements, including public development hosting. No approval flags remain; indexing is independent. Final accessibility, Spanish options/provider-event, runtime privacy and marketing-recipient operational review remain open. No Form C is required. `/referrals` links to the existing hosted Jotform; its separate privacy/recipient/operational review remains pending. Site cutover still needs release authorization.
5. Obtain P9-04 counter origin/credential/consent approval before a live adapter.
6. Resolve P9-05 analytics/advertising measurement and P9-07 privacy/legal approval.
7. Obtain P9-06 clinical/organizational and fluent-language approvals, including Arabic diagrams and Spanish HSA/FSA claims.
8. Complete real screen-reader and authorized visual/non-Chromium acceptance.
9. Name release/rollback owners and record backup/monitoring readiness.
10. Obtain P9-10 go/no-go authorization; then run Phase 10 cutover and post-cutover smoke checks.
## Decision status
P9-01 through P9-10 remain **Pending decision**. No technical feasibility result in this package is an approval. Default-live Form A is explicitly owner-authorized. Counters, analytics, advertising, The existing referral destination, private portal serving and hosting activation still require their respective acceptance; no Form C creation is planned.
## Recommended checkpoint boundaries
Keep the existing Phase 9 implementation, audit tooling and reports as one owner-reviewed technical batch. If a signed checkpoint is requested, stage exact paths only after reviewing the final status and reports. Keep any subsequent host rehearsal, Jotform configuration, counter live adapter and measurement work in separately authorized commits.
## 2026-10-30 portal and secrets preparation addendum
The local portal compatibility implementation does not close P9-02 or P9-09.
The owner must supply legitimate codes privately to collect and classify legacy
resources, accept the two decrypted views, approve delivery per resource and
verify server-side staff/management separation. SOPS preparation is an inactive
[module and operational guide](../integrations/nixos/README.md), not deployed
infrastructure. Real age recipients, host topology, access policy, recovery and
runtime key provisioning remain pending. Do not copy `private/` into a release.
The artifact verifier now rejects private resource paths and portal ciphertext
from release artifacts. A local ciphertext preview is deliberately not a
releasable artifact. No site cutover authorization is implied.
@@ -0,0 +1,919 @@
{
"phase": "5A",
"recordedAt": "2026-10-09",
"editorialAuthority": {
"source": "User-provided AIA confirmation",
"confirmedOn": "2026-10-08",
"english": "18 months through 8 years",
"spanish": "18 meses a 8 años",
"scope": "General ABA eligibility, not all programs"
},
"method": "Sequential read-only GETs, at least 1.1 seconds between page requests; redirects not followed; no scripts, authenticated requests, submissions or APIs. Four query rechecks returned identical text/metadata. Browser attempt failed Transport closed. HTML kept only in temporary storage.",
"robots": [
{
"url": "https://www.azinstitute4autism.com/robots.txt",
"observedAt": "2026-10-09T01:26:02Z",
"status": 200,
"headers": {
"date": "Fri, 09 Oct 2026 01:26:02 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"etag": "\"dffaeb51ed776c4737cfc1b108c56515\"",
"last-modified": "Sat, 12 Sep 2026 03:33:09 GMT",
"x-hs-cf-cache-status": "REVALIDATED"
}
},
{
"url": "https://form.jotform.com/robots.txt",
"observedAt": "2026-10-09T01:28:57Z",
"status": 200,
"headers": {
"cache-control": "no-cache",
"date": "Fri, 09 Oct 2026 01:28:57 GMT"
}
}
],
"observations": [
{
"url": "https://www.azinstitute4autism.com/aba-therapy",
"observedAt": "2026-10-09T01:26:21.235860+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:26:21 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sat, 03 Oct 2026 23:27:01 GMT",
"x-hs-cf-cache-status": "HIT",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sat, 03 Oct 2026 23:27:01 GMT",
"server": "cloudflare",
"cf-ray": "a47998bf797c7ab3-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "3e4835ea8562169812c61b0d98603daf7124ce4006f8b37a0539beb3d837d0be",
"title": "Integrated ABA Therapy for Autism | Arizona Institute for Autism",
"description": "Empower your child for life with one-on-one integrated ABA therapy. Book a free consultation and join our supportive autism community!",
"h1": [
"Behavioral"
],
"canonical": "https://www.azinstitute4autism.com/aba-therapy",
"links": [
{
"label": "Make an Appointment",
"href": "https://form.jotform.com/231638510219149"
}
],
"iframes": [],
"excerpts": [
"The ABA Therapy 1:1 program, designed for children aged 18 months to 8 years, adopts an integrative approach aimed at fostering independent learning. The Arizona Institute for Autism employs a naturalistic, neurodiversity-affirming model within its applied behavior analysis (ABA) program, incorporating essential insights from neuroscientific research.",
"The ABA Therapy 1:2 Academic Readiness Program is specifically designed for children aged 2 to 6 years and utilizes a tailored group therapy approach to prepare learners for successful integration into the mainstream classroom.This program incorporates the AIA Preparatory Academy© curriculum, combining the esteemed Montessori method with Applied Behavior Analysis (ABA). This integrated approach fosters a supportive environment tailored to the individual learning styles and strengths of our learners, facilitating the development of essential social, communication, cognitive, and motor skills necessary for success in mainstream classrooms."
],
"freshness": "potentially cached; fresh retrieval does not establish origin freshness",
"method": "GET"
},
{
"url": "https://www.azinstitute4autism.com/autism-evaluations",
"observedAt": "2026-10-09T01:26:22.580258+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:26:22 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sat, 03 Oct 2026 23:13:18 GMT",
"x-hs-cf-cache-status": "HIT",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sat, 03 Oct 2026 23:13:18 GMT",
"server": "cloudflare",
"cf-ray": "a47998c7baea1fab-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "d1da50ec570839f9ffb014a5309978d62895a286273a9b58e626843ebf53b15f",
"title": "Accurate Autism Assessment for Children | Arizona Institute for Autism",
"description": "Get comprehensive childhood autism evaluations in Scottsdale, AZ. Our expert team provides accurate assessments to support your child's unique development.",
"h1": [
"Psychological"
],
"canonical": "https://www.azinstitute4autism.com/autism-evaluations",
"links": [
{
"label": "Autism Spectrum Disorder (ASD)",
"href": "https://www.childrens.com/specialties-services/conditions/autism-spectrum-disorder"
},
{
"label": "Make an Appointment",
"href": "https://form.jotform.com/231638510219149"
}
],
"iframes": [],
"excerpts": [
"At the Arizona Institute for Autism, there is no single lab test to diagnose autism. Instead, our team conducts comprehensive evaluations through a series of observations and assessments to understand the underlying causes of your child's symptoms.",
"Autism Diagnostic Observation Schedule (ADOS)",
"ADOS is a structured evaluation tool used by our specialists to assess behaviors related to autism spectrum disorders. Appropriate for children of all ages, ADOS helps us understand your child's social and language skills and overall developmental level."
],
"freshness": "potentially cached; fresh retrieval does not establish origin freshness",
"method": "GET"
},
{
"url": "https://www.azinstitute4autism.com/learner-social-club",
"observedAt": "2026-10-09T01:26:23.923870+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:26:24 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sat, 03 Oct 2026 23:13:14 GMT",
"x-hs-cf-cache-status": "HIT",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sat, 03 Oct 2026 23:13:14 GMT",
"server": "cloudflare",
"cf-ray": "a47998d04d5b19b7-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "74a812f5a6a4841bc234a8058098cbf5c37630915fde608e146b04e1a091307d",
"title": "Boost Emotional and Social Functioning with Learner Social Club at AIA",
"description": "Contact AIA for a free 1-day trial pass to see how your child's social and emotional development can benefit from our Learner Social Club for ages 8-17.",
"h1": [
"Sociological"
],
"canonical": "https://www.azinstitute4autism.com/learner-social-club",
"links": [
{
"label": "Enroll Now",
"href": "https://form.jotform.com/231638510219149"
}
],
"iframes": [],
"excerpts": [
"The Learner Social Club currently serves youth learners aged 8–17 years. Our flexible scheduling options currently include:",
"Payment Type: Private Pay"
],
"freshness": "potentially cached; fresh retrieval does not establish origin freshness",
"method": "GET"
},
{
"url": "https://www.azinstitute4autism.com/services",
"observedAt": "2026-10-09T01:26:25.299584+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:26:25 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sat, 03 Oct 2026 23:13:23 GMT",
"x-hs-cf-cache-status": "HIT",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sat, 03 Oct 2026 23:13:23 GMT",
"server": "cloudflare",
"cf-ray": "a47998d8ce0ee9df-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "dca03ba7b2e1bd543d024fea4e0a948461eff05b7c0f09cb25134eb84aaa7796",
"title": "Behavioral, Psychological, and Sociological Pediatric Autism Services",
"description": "Discover comprehensive autism services for children, from integrative ABA therapy to educational and family support, at the Arizona Institute for Autism.",
"h1": [
"ABA & Educational Services"
],
"canonical": "https://www.azinstitute4autism.com/services",
"links": [
{
"label": "Discover More",
"href": "https://www.hubspot.com/"
},
{
"label": "Get Started",
"href": "https://www.hubspot.com/"
},
{
"label": "Home",
"href": "https://www.hubspot.com/"
},
{
"label": "Consult with a Client Advocate",
"href": "https://www.azinstitute4autism.com/client-consultation?hsLang=en"
},
{
"label": "Behavioral Services",
"href": "https://www.azinstitute4autism.com/aba-therapy?hsLang=en"
},
{
"label": "Psychological Services",
"href": "https://www.azinstitute4autism.com/autism-evaluations?hsLang=en"
},
{
"label": "Sociological Services",
"href": "https://www.azinstitute4autism.com/learner-social-club?hsLang=en"
},
{
"label": "Get a Free Consultation",
"href": "https://www.azinstitute4autism.com/client-consultation?hsLang=en"
}
],
"iframes": [],
"excerpts": [
"Approximately 1 in 36 children in the United States will receive an autism diagnosis each year. If your child exhibits any of the behaviors listed above, it is possible that he or she may be diagnosed on the autism spectrum. Diagnosing children with Autism Spectrum Disorder can be challenging and complex. The most important thing you can do is consult a professional if you think your child is displaying atypical behavior.",
"To meet diagnostic criteria for ASD, a child must have persistent deficits in each of three areas of social communication and interaction plus at least two of four types of restricted repetitive behaviors. Consult with a Client Advocate today to receive individual and family support!"
],
"freshness": "potentially cached; fresh retrieval does not establish origin freshness",
"method": "GET"
},
{
"url": "https://www.azinstitute4autism.com/referrals",
"observedAt": "2026-10-09T01:26:26.659817+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:26:26 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sat, 03 Oct 2026 23:45:35 GMT",
"x-hs-cf-cache-status": "HIT",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sat, 03 Oct 2026 23:45:35 GMT",
"server": "cloudflare",
"cf-ray": "a47998e12d16cbab-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "f26dbdbe53569db5ab4960cca51c2f78a441306f37311616e3d0816114fcb4c4",
"title": "Submit Your Autism Referral Online | Arizona Institute for Autism",
"description": "Arizona Institute for Autism simplifies autism referrals. Submit online now to connect families with the compassionate autism care specialists of AIA.",
"h1": [
"Physician & Insurer Referrals"
],
"canonical": "https://www.azinstitute4autism.com/referrals",
"links": [
{
"label": "Refer a Client",
"href": "https://form.jotform.com/231638510219149?hsCtaAttrib=203953990377"
}
],
"iframes": [],
"excerpts": [
"At the Arizona Institute for Autism, we are here to support your clients reach new milestones in a diverse integrated learning environment. Our mission is to improve special education and to strengthen neurodivergent communities. We offer dependable educational and therapeutic programs for children ages 18 months to 8 years that have been diagnosed with autism.",
"To provide the highest level of optimal care, we know that it is essential to provide a working partnership with the client’s diagnostic provider, physician, and their insurance company. To facilitate this collaboration, we have built a system of reporting metrics on the child’s treatment plan with supporting progress charts we share with our partners. This information keeps everyone involved up to date on the client’s progress and future needs. If you are an insurance company or diagnostic provider interested in working with us, contact us to learn more about our referral process."
],
"freshness": "potentially cached; fresh retrieval does not establish origin freshness",
"method": "GET"
},
{
"url": "https://www.azinstitute4autism.com/client-consultation",
"observedAt": "2026-10-09T01:26:28.019578+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:26:28 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sun, 04 Oct 2026 00:00:00 GMT",
"x-hs-cf-cache-status": "HIT",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sun, 04 Oct 2026 00:00:00 GMT",
"server": "cloudflare",
"cf-ray": "a47998e9bd89a69a-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "df31e8f2bc82d47e0cc1c2144177047d7f37fdfc39a0d18c26fca3a8db4cdf9b",
"title": "Client Consultation Form | Arizona Institute for Autism | Scottsdale",
"description": "Schedule your free consultation with a Client Advocate at Arizona Institute for Autism to find out what we can do for your child diagnosed with autism.",
"h1": [
"Schedule Your Free Consultation"
],
"canonical": "https://www.azinstitute4autism.com/client-consultation",
"links": [],
"iframes": [
"https://form.jotform.com/250727122848156"
],
"excerpts": [
"At the Arizona Institute for Autism (AIA), we have a no wait list policy and provide expert clinical care for children diagnosed with autism. We currently serve families in Scottsdale, Gilbert, Mesa, Tempe, and Phoenix Metropolitan areas."
],
"freshness": "potentially cached; fresh retrieval does not establish origin freshness",
"method": "GET"
},
{
"url": "https://www.azinstitute4autism.com/aba-therapy-intake-process",
"observedAt": "2026-10-09T01:26:29.339474+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:26:29 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sat, 03 Oct 2026 23:13:15 GMT",
"x-hs-cf-cache-status": "HIT",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sat, 03 Oct 2026 23:13:15 GMT",
"server": "cloudflare",
"cf-ray": "a47998f20f6753ca-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "f8cc3b24c506fac722aa6a20b558708e53c6ae2abf8770d09421d961f5dba2e5",
"title": "Starting ABA Therapy Step-by-Step Guide | Arizona Institute for Autism",
"description": "Discover how to begin ABA therapy at Arizona Institute for Autism. Our simple, supportive intake process guides your child toward growth and success.",
"h1": [
"Learner Intake Process"
],
"canonical": "https://www.azinstitute4autism.com/aba-therapy-intake-process",
"links": [
{
"label": "Take the First Step",
"href": "https://www.azinstitute4autism.com/client-consultation?hsLang=en"
}
],
"iframes": [],
"excerpts": [
"After submitting the packet, our Client Advocate will promptly reach out to discuss the next steps, answer your questions, and guide you through the intake process. We are here to support you every step of the way, ensuring you feel comfortable and informed from the start.",
"2. Speak with an AIA Client Advocate",
"Our dedicated Client Advocate team is passionate about assisting families through every aspect of starting ABA therapy. During this initial conversation, your Advocate will:",
"4. Verify Insurance and Billing Information",
"To ensure a smooth start to therapy, our billing manager will verify your insurance coverage and benefits once your intake packet is complete. Our billing team will:",
"Review your insurance plan details, including ABA therapy coverage.",
"Answer your billing-related questions, maintaining transparency and clarity.",
"With your intake and billing details finalized, our Client Advocate will assist you in scheduling a comprehensive assessment with our clinical team."
],
"freshness": "potentially cached; fresh retrieval does not establish origin freshness",
"method": "GET"
},
{
"url": "https://www.azinstitute4autism.com/es/aba-therapy",
"observedAt": "2026-10-09T01:26:30.699872+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:26:30 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sat, 03 Oct 2026 23:13:14 GMT",
"x-hs-cf-cache-status": "HIT",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sat, 03 Oct 2026 23:13:14 GMT",
"server": "cloudflare",
"cf-ray": "a47998fa8d5a2f0f-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "bf5c84fae42bbb11b6bd3e73cd28487bfee895769129f442b7ee92fe01e773e9",
"title": "Terapia ABA Integrada para el Autismo | Arizona Institute for Autism",
"description": "Empodere a su hijo para la vida con terapia ABA integrada individualizada. ¡Reserva una consulta gratuita y únete a nuestra comunidad de apoyo para el autismo!",
"h1": [
"Conductual"
],
"canonical": "https://www.azinstitute4autism.com/es/aba-therapy",
"links": [
{
"label": "Hacer una cita",
"href": "https://form.jotform.com/231638510219149"
}
],
"iframes": [],
"excerpts": [
"El programa de Terapia ABA 1:1, diseñado para niños de 18 meses a 8 años, adopta un enfoque integrador destinado a fomentar el aprendizaje independiente. El Arizona Institute for Autism emplea un modelo naturalista y que afirma la neurodiversidad dentro de su programa de análisis de comportamiento aplicado (ABA), incorporando conocimientos esenciales de la investigación neurocientífica.",
"El programa de preparación académica 1:2 de terapia ABA está diseñado específicamente para niños de 2 a 6 años y utiliza un enfoque de terapia grupal personalizado para preparar a los estudiantes para una integración exitosa en el aula regular. Este programa incorpora el currículo de la AIA Preparatory Academy©, combinando el estimado método Montessori con el Análisis de Comportamiento Aplicado (ABA). Este enfoque integrado fomenta un entorno de apoyo adaptado a los estilos de aprendizaje y fortalezas individuales de nuestros estudiantes, facilitando el desarrollo de habilidades sociales, comunicativas, cognitivas y motoras esenciales necesarias para el éxito en las aulas regulares."
],
"freshness": "potentially cached; fresh retrieval does not establish origin freshness",
"method": "GET"
},
{
"url": "https://www.azinstitute4autism.com/es/autism-evaluations",
"observedAt": "2026-10-09T01:26:32.021705+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:26:32 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sat, 03 Oct 2026 23:13:12 GMT",
"x-hs-cf-cache-status": "MISS",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sat, 03 Oct 2026 23:13:12 GMT",
"server": "cloudflare",
"cf-ray": "a4799902b84d710a-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "2f41ce71e8108b8076f90320758ec2b8b6a2231d7f0fffeca6fd2a90ecf363c6",
"title": "Evaluación precisa del autismo para niños | Arizona Institute for Autism",
"description": "Obtenga evaluaciones integrales de autismo infantil en Scottsdale, AZ. Nuestro equipo de expertos proporciona evaluaciones precisas para apoyar el desarrollo único de su hijo.",
"h1": [
"Psicológicos"
],
"canonical": "https://www.azinstitute4autism.com/es/autism-evaluations",
"links": [
{
"label": "trastorno del espectro autista (TEA)",
"href": "https://www.childrens.com/specialties-services/conditions/autism-spectrum-disorder"
},
{
"label": "Programar una cita",
"href": "https://form.jotform.com/231638510219149"
}
],
"iframes": [],
"excerpts": [
"Escala de Observación para el Diagnóstico del Autismo (ADOS)",
"ADOS es una herramienta de evaluación estructurada que utilizan nuestros especialistas para evaluar comportamientos relacionados con los trastornos del espectro autista. Apropiada para niños de todas las edades, ADOS nos ayuda a comprender las habilidades sociales y del lenguaje de su hijo/a, así como su nivel general de desarrollo."
],
"freshness": "potentially cached; fresh retrieval does not establish origin freshness",
"method": "GET"
},
{
"url": "https://www.azinstitute4autism.com/es/learner-social-club",
"observedAt": "2026-10-09T01:26:33.733723+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:26:34 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sat, 03 Oct 2026 23:13:22 GMT",
"x-hs-cf-cache-status": "MISS",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sat, 03 Oct 2026 23:13:22 GMT",
"server": "cloudflare",
"cf-ray": "a479990d5f713c7e-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "2740d0ffc65bed908841c756f68ab911c3213634391d892edc127980aca80f46",
"title": "Impulsa el funcionamiento emocional y social con Learner Social Club en AIA",
"description": "Póngase en contacto con AIA para obtener un pase de prueba gratuito de 1 día y ver cómo el desarrollo social y emocional de su hijo puede beneficiarse de nuestro Learner Social Club de 8 a 17 años.",
"h1": [
"Sociológico"
],
"canonical": "https://www.azinstitute4autism.com/es/learner-social-club",
"links": [
{
"label": "Enroll Now",
"href": "https://form.jotform.com/231638510219149"
}
],
"iframes": [],
"excerpts": [
"Learner Social Club actualmente atiende a jóvenes de 8 a 17 años. Nuestras opciones de horario flexible actualmente incluyen:",
"Tipo de pago: Pago particular"
],
"freshness": "potentially cached; fresh retrieval does not establish origin freshness",
"method": "GET"
},
{
"url": "https://www.azinstitute4autism.com/es/services",
"observedAt": "2026-10-09T01:26:35.259757+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:26:35 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sat, 03 Oct 2026 23:13:22 GMT",
"x-hs-cf-cache-status": "REVALIDATED",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sat, 03 Oct 2026 23:13:22 GMT",
"server": "cloudflare",
"cf-ray": "a4799916dd444896-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "de5dca3a3265e12d894a34f5dcddd8b3730df70829bebd3e93482367f3d60098",
"title": "Servicios pediátricos de autismo conductuales, psicológicos y sociológicos",
"description": "Descubra servicios integrales para el autismo para niños, desde terapia ABA integrativa hasta apoyo educativo y familiar, en el Instituto de Autismo de Arizona.",
"h1": [
"Servicios ABA y Educativos"
],
"canonical": "https://www.azinstitute4autism.com/es/services",
"links": [
{
"label": "Discover More",
"href": "https://www.hubspot.com/"
},
{
"label": "Get Started",
"href": "https://www.hubspot.com/"
},
{
"label": "Inicio",
"href": "https://www.azinstitute4autism.com/es/?hsLang=es"
},
{
"label": "Consulte con un Defensor del Cliente",
"href": "https://www.azinstitute4autism.com/es/client-consultation?hsLang=es"
},
{
"label": "Servicios Conductuales",
"href": "https://www.azinstitute4autism.com/aba-therapy?hsLang=es"
},
{
"label": "Servicios Psicológicos",
"href": "https://www.azinstitute4autism.com/autism-evaluations?hsLang=es"
},
{
"label": "Servicios Sociológicos",
"href": "https://www.azinstitute4autism.com/learner-social-club?hsLang=es"
},
{
"label": "Programe una consulta gratuita",
"href": "https://www.azinstitute4autism.com/client-consultation?hsLang=es"
}
],
"iframes": [],
"excerpts": [
"Aproximadamente 1 de cada 36 niños en los Estados Unidos recibirá un diagnóstico de autismo cada año. Si su hijo presenta alguno de los comportamientos enumerados anteriormente, es posible que le diagnostiquen un trastorno del espectro autista. Diagnosticar a niños con Trastorno del Espectro Autista puede ser desafiante y complejo. Lo más importante que puedes hacer es consultar a un profesional si crees que tu hijo muestra un comportamiento atípico.",
"Para cumplir los criterios diagnósticos de TEA, un niño debe tener déficits persistentes en cada una de las tres áreas de comunicación e interacción social, además de al menos dos de los cuatro tipos de comportamientos repetitivos restringidos. ¡Consulte hoy mismo a un Defensor del Cliente para recibir apoyo individual y familiar!"
],
"freshness": "potentially cached; fresh retrieval does not establish origin freshness",
"method": "GET"
},
{
"url": "https://www.azinstitute4autism.com/es/client-consultation",
"observedAt": "2026-10-09T01:26:36.736417+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:26:37 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sun, 04 Oct 2026 00:00:44 GMT",
"x-hs-cf-cache-status": "REVALIDATED",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sun, 04 Oct 2026 00:00:44 GMT",
"server": "cloudflare",
"cf-ray": "a47999201ee950a9-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "3801f2baa73936af70c5298be91db629e0257fc5fb6e80c9ce22b79b74e3c95e",
"title": "Formulario de Consulta del Cliente | Arizona Institute for Autism | Scottsdale",
"description": "Programa tu consulta gratuita con un Defensor del Cliente en el Instituto de Autismo de Arizona para descubrir qué podemos hacer por tu hijo diagnosticado con autismo.",
"h1": [
"Programa tu consulta gratuita"
],
"canonical": "https://www.azinstitute4autism.com/es/client-consultation",
"links": [],
"iframes": [
"https://form.jotform.com/250727122848156"
],
"excerpts": [
"Aquí en el Instituto de Autismo de Arizona (AIA), tenemos una política de lista de espera cero y brindamos atención clínica experta para niños diagnosticados con autismo. Actualmente atendemos a familias en las áreas metropolitanas de Scottsdale, Gilbert, Mesa, Tempe y Phoenix."
],
"freshness": "potentially cached; fresh retrieval does not establish origin freshness",
"method": "GET"
},
{
"url": "https://www.azinstitute4autism.com/es/aba-therapy-intake-process",
"observedAt": "2026-10-09T01:26:38.213768+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:26:38 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sat, 03 Oct 2026 23:13:18 GMT",
"x-hs-cf-cache-status": "MISS",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sat, 03 Oct 2026 23:13:18 GMT",
"server": "cloudflare",
"cf-ray": "a4799929590eaebe-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "7ac84bd729ad4f07db606c01e14422fde0aad46b880bf1a10251acbf5512f97c",
"title": "Guía paso a paso para comenzar la terapia ABA | Arizona Institute for Autism",
"description": "Descubra cómo comenzar la terapia ABA en el Instituto de Autismo de Arizona. Nuestro proceso de admisión simple y de apoyo guía a su hijo hacia el crecimiento y el éxito.",
"h1": [
"Proceso de admisión de estudiantes"
],
"canonical": "https://www.azinstitute4autism.com/es/aba-therapy-intake-process",
"links": [
{
"label": "Take the First Step",
"href": "https://www.azinstitute4autism.com/client-consultation?hsLang=es"
}
],
"iframes": [],
"excerpts": [
"Comience completando nuestro Paquete de Información para Estudiantes, que recopila información esencial sobre su hijo. Este paquete proporciona a nuestro equipo información inicial para comprender las necesidades únicas de su hijo.Después de enviar el paquete, nuestro Defensor del Cliente se pondrá en contacto con usted de inmediato para discutir los próximos pasos, responder a sus preguntas y guiarlo a través del proceso de admisión. Estamos aquí para apoyarte en cada paso del camino, asegurándonos de que te sientas cómodo e informado desde el principio.",
"2. Hable con un Defensor del Cliente de AIA",
"Nuestro equipo dedicado de Defensores del Cliente es apasionado por ayudar a las familias en cada aspecto de comenzar la terapia ABA. Durante esta conversación inicial, su Defensor/a:",
"4. Verificar la información del seguro y la facturación",
"Para asegurar un inicio fluido de la terapia, nuestro gerente de facturación verificará su cobertura y beneficios de seguro una vez que su paquete de admisión esté completo. Nuestro equipo de facturación:",
"Revisa los detalles de tu plan de seguro, incluida la cobertura de terapia ABA.",
"Responda a sus preguntas relacionadas con la facturación, manteniendo la transparencia y la claridad.",
"Con sus detalles de admisión y facturación finalizados, nuestro Defensor del Cliente le ayudará a programar una evaluación exhaustiva con nuestro equipo clínico.Trabajaremos estrechamente con usted para encontrar un horario de cita que se adapte a la agenda de su familia y a la comodidad de su hijo. Esta evaluación es un paso vital para comprender las fortalezas de su hijo e identificar áreas donde necesita apoyo específico.La información recopilada durante la evaluación guiará la creación de un plan de tratamiento personalizado diseñado específicamente para apoyar el crecimiento y los hitos de desarrollo de su hijo."
],
"freshness": "potentially cached; fresh retrieval does not establish origin freshness",
"method": "GET"
},
{
"url": "https://www.azinstitute4autism.com/schedule-consultation",
"observedAt": "2026-10-09T01:26:39.574860+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:26:39 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sat, 03 Oct 2026 23:13:23 GMT",
"x-hs-cf-cache-status": "REVALIDATED",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sat, 03 Oct 2026 23:13:23 GMT",
"server": "cloudflare",
"cf-ray": "a4799931d96e2bbd-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "7254085c5296eaa0339404e05a318e4b90c69d185b4e9bf059e44cb8e8ea2ab2",
"title": "Contact Arizona Institute for Autism for Your Free ASD Consultation",
"description": "Reach out to discuss autism treatment for your child with AZ Institute for Autism. Early intervention makes a difference; schedule your consultation today!",
"h1": [
"Reach Out for Your Free Consultation"
],
"canonical": "https://www.azinstitute4autism.com/schedule-consultation",
"links": [],
"iframes": [],
"excerpts": [
"A Client Advocate from Arizona Institute for Autism will contact you within one business day upon submission of this form.",
"Arizona Institute for Autism (AIA) is home to leading experts in behavioral health and special education. We provide clinical care for children and teens diagnosed with autism and have a no wait list policy.",
"AIA currently serves families in the Greater Phoenix Metropolitan area including Scottsdale, Gilbert, Mesa, and Tempe. We also provide in-home ABA therapy services for families of children diagnosed with autism in Tucson.",
"Along with ABA therapy for children and teens diagnosed with autism, our supportive services include autism advocacy, family training, and community outreach."
],
"freshness": "potentially stale: children and teens contradicts AIA editorial confirmation on 2026-10-08",
"method": "GET"
},
{
"url": "https://www.azinstitute4autism.com/insurance",
"observedAt": "2026-10-09T01:26:41.054992+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:26:41 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sat, 03 Oct 2026 23:13:18 GMT",
"x-hs-cf-cache-status": "HIT",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sat, 03 Oct 2026 23:13:18 GMT",
"server": "cloudflare",
"cf-ray": "a479993b4afc2abb-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "76445f34f71556c6f738ad80458cc658ac30f19f2fa595b120ce19743a404903",
"title": "Arizona Autism Therapy Insurance Guide | AZ Institute for Autism",
"description": "Take the first step to affordable autism care for your child. Verify insurance benefits and coverage quickly and easily with Arizona Institute for Autism.",
"h1": [
"Insurance Guide"
],
"canonical": "https://www.azinstitute4autism.com/insurance",
"links": [
{
"label": "Tricare ECHO website",
"href": "https://tricare.mil/echo"
},
{
"label": "Arizona Department of Education's ESA page",
"href": "https://www.azed.gov"
}
],
"iframes": [],
"excerpts": [
"Insurance Guide",
"Insurance Coverage for Autism Treatment in Arizona",
"Navigating insurance coverage for autism therapy can be complex. At the Arizona Institute for Autism (AIA), we're committed to guiding you through your insurance options to ensure your child receives the necessary care.",
"Accepted Insurance Carriers",
"We proudly partner with most major insurance carriers providing autism treatment benefits in Arizona. Our team regularly works with insurance plans such as the following.",
"We recognize the dedication and immense effort families devote to supporting their children. Our helpful team offers personalized consultations—both in person by appointment and over the phone—to explain the billing process thoroughly. Our goal is to ensure you feel informed and supported at every stage.",
"Frequently Asked Insurance Questions"
],
"freshness": "potentially cached; fresh retrieval does not establish origin freshness",
"method": "GET"
},
{
"url": "https://www.azinstitute4autism.com/aba-therapy?migration_review=20261009T0130",
"observedAt": "2026-10-09T01:28:06.181582+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:28:06 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sat, 03 Oct 2026 23:27:01 GMT",
"x-hs-cf-cache-status": "HIT",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sat, 03 Oct 2026 23:27:01 GMT",
"server": "cloudflare",
"cf-ray": "a4799b4f181ccb9a-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "3e4835ea8562169812c61b0d98603daf7124ce4006f8b37a0539beb3d837d0be",
"title": "Integrated ABA Therapy for Autism | Arizona Institute for Autism",
"description": "Empower your child for life with one-on-one integrated ABA therapy. Book a free consultation and join our supportive autism community!",
"h1": [
"Behavioral"
],
"canonical": "https://www.azinstitute4autism.com/aba-therapy",
"links": [
{
"label": "Make an Appointment",
"href": "https://form.jotform.com/231638510219149"
}
],
"iframes": [],
"excerpts": [
"The ABA Therapy 1:1 program, designed for children aged 18 months to 8 years, adopts an integrative approach aimed at fostering independent learning. The Arizona Institute for Autism employs a naturalistic, neurodiversity-affirming model within its applied behavior analysis (ABA) program, incorporating essential insights from neuroscientific research.",
"The ABA Therapy 1:2 Academic Readiness Program is specifically designed for children aged 2 to 6 years and utilizes a tailored group therapy approach to prepare learners for successful integration into the mainstream classroom.This program incorporates the AIA Preparatory Academy© curriculum, combining the esteemed Montessori method with Applied Behavior Analysis (ABA). This integrated approach fosters a supportive environment tailored to the individual learning styles and strengths of our learners, facilitating the development of essential social, communication, cognitive, and motor skills necessary for success in mainstream classrooms."
],
"freshness": "potentially cached; fresh retrieval does not establish origin freshness",
"method": "GET"
},
{
"url": "https://www.azinstitute4autism.com/es/aba-therapy?migration_review=20261009T0130",
"observedAt": "2026-10-09T01:28:07.479861+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:28:07 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sat, 03 Oct 2026 23:13:14 GMT",
"x-hs-cf-cache-status": "HIT",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sat, 03 Oct 2026 23:13:14 GMT",
"server": "cloudflare",
"cf-ray": "a4799b575d3e2f3d-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "bf5c84fae42bbb11b6bd3e73cd28487bfee895769129f442b7ee92fe01e773e9",
"title": "Terapia ABA Integrada para el Autismo | Arizona Institute for Autism",
"description": "Empodere a su hijo para la vida con terapia ABA integrada individualizada. ¡Reserva una consulta gratuita y únete a nuestra comunidad de apoyo para el autismo!",
"h1": [
"Conductual"
],
"canonical": "https://www.azinstitute4autism.com/es/aba-therapy",
"links": [
{
"label": "Hacer una cita",
"href": "https://form.jotform.com/231638510219149"
}
],
"iframes": [],
"excerpts": [
"El programa de Terapia ABA 1:1, diseñado para niños de 18 meses a 8 años, adopta un enfoque integrador destinado a fomentar el aprendizaje independiente. El Arizona Institute for Autism emplea un modelo naturalista y que afirma la neurodiversidad dentro de su programa de análisis de comportamiento aplicado (ABA), incorporando conocimientos esenciales de la investigación neurocientífica.",
"El programa de preparación académica 1:2 de terapia ABA está diseñado específicamente para niños de 2 a 6 años y utiliza un enfoque de terapia grupal personalizado para preparar a los estudiantes para una integración exitosa en el aula regular. Este programa incorpora el currículo de la AIA Preparatory Academy©, combinando el estimado método Montessori con el Análisis de Comportamiento Aplicado (ABA). Este enfoque integrado fomenta un entorno de apoyo adaptado a los estilos de aprendizaje y fortalezas individuales de nuestros estudiantes, facilitando el desarrollo de habilidades sociales, comunicativas, cognitivas y motoras esenciales necesarias para el éxito en las aulas regulares."
],
"freshness": "potentially cached; fresh retrieval does not establish origin freshness",
"method": "GET"
},
{
"url": "https://www.azinstitute4autism.com/client-consultation?migration_review=20261009T0130",
"observedAt": "2026-10-09T01:28:08.800682+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:28:08 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sun, 04 Oct 2026 00:00:00 GMT",
"x-hs-cf-cache-status": "HIT",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sun, 04 Oct 2026 00:00:00 GMT",
"server": "cloudflare",
"cf-ray": "a4799b5fb92b23fc-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "df31e8f2bc82d47e0cc1c2144177047d7f37fdfc39a0d18c26fca3a8db4cdf9b",
"title": "Client Consultation Form | Arizona Institute for Autism | Scottsdale",
"description": "Schedule your free consultation with a Client Advocate at Arizona Institute for Autism to find out what we can do for your child diagnosed with autism.",
"h1": [
"Schedule Your Free Consultation"
],
"canonical": "https://www.azinstitute4autism.com/client-consultation",
"links": [],
"iframes": [
"https://form.jotform.com/250727122848156"
],
"excerpts": [
"At the Arizona Institute for Autism (AIA), we have a no wait list policy and provide expert clinical care for children diagnosed with autism. We currently serve families in Scottsdale, Gilbert, Mesa, Tempe, and Phoenix Metropolitan areas."
],
"freshness": "potentially cached; fresh retrieval does not establish origin freshness",
"method": "GET"
},
{
"url": "https://www.azinstitute4autism.com/schedule-consultation?migration_review=20261009T0130",
"observedAt": "2026-10-09T01:28:10.140915+00:00",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"headers": {
"date": "Fri, 09 Oct 2026 01:28:10 GMT",
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sat, 03 Oct 2026 23:13:23 GMT",
"x-hs-cf-cache-status": "HIT",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sat, 03 Oct 2026 23:13:23 GMT",
"server": "cloudflare",
"cf-ray": "a4799b681e092abd-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"sha256": "7254085c5296eaa0339404e05a318e4b90c69d185b4e9bf059e44cb8e8ea2ab2",
"title": "Contact Arizona Institute for Autism for Your Free ASD Consultation",
"description": "Reach out to discuss autism treatment for your child with AZ Institute for Autism. Early intervention makes a difference; schedule your consultation today!",
"h1": [
"Reach Out for Your Free Consultation"
],
"canonical": "https://www.azinstitute4autism.com/schedule-consultation",
"links": [],
"iframes": [],
"excerpts": [
"A Client Advocate from Arizona Institute for Autism will contact you within one business day upon submission of this form.",
"Arizona Institute for Autism (AIA) is home to leading experts in behavioral health and special education. We provide clinical care for children and teens diagnosed with autism and have a no wait list policy.",
"AIA currently serves families in the Greater Phoenix Metropolitan area including Scottsdale, Gilbert, Mesa, and Tempe. We also provide in-home ABA therapy services for families of children diagnosed with autism in Tucson.",
"Along with ABA therapy for children and teens diagnosed with autism, our supportive services include autism advocacy, family training, and community outreach."
],
"freshness": "potentially stale: children and teens contradicts AIA editorial confirmation on 2026-10-08",
"method": "GET"
}
],
"externalDestinationChecks": [
{
"url": "https://form.jotform.com/231638510219149",
"observedAt": "2026-10-09T01:30:34.576858+00:00",
"status": 200,
"location": null,
"note": "GET status check only; no scripts or form submission"
},
{
"url": "https://form.jotform.com/250727122848156",
"observedAt": "2026-10-09T01:30:35.880703+00:00",
"status": 200,
"location": null,
"note": "GET status check only; no scripts or form submission"
}
]
}
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,343 @@
{
"phase": "5C",
"recordedAt": "2026-10-09T17:13:35Z",
"startingCheckpoint": "bc399b43b65fd865526fd68fa4252c99587f59dd",
"scope": "Published English Team page roster, supporting copy, careers contact and CTA, Team photographs, and page metadata",
"method": "robots.txt followed by two bounded, sequential read-only Team-page GETs with no-cache request headers and one query recheck; ten published Team/hero image GETs and one social-image GET; no authentication, form submission, API call, script execution through direct requests, or production write. An independent web rendering matched the direct response. Playwright browser validation was attempted but failed because the browser transport closed.",
"robots": {
"url": "https://www.azinstitute4autism.com/robots.txt",
"observedAt": "2026-10-09T17:11:37Z",
"status": 200,
"cacheControl": "s-maxage=36000, max-age=5",
"etag": "\"dffaeb51ed776c4737cfc1b108c56515\"",
"lastModified": "Sat, 12 Sep 2026 03:33:09 GMT",
"hubspotCacheStatus": "HIT",
"prerendered": "Sat, 12 Sep 2026 03:33:09 GMT",
"relevantPolicy": "User-agent * allows /; HubSpot preview and hsCacheBuster query patterns are disallowed."
},
"requests": [
{
"url": "https://www.azinstitute4autism.com/team",
"observedAt": "2026-10-09T17:11:39Z",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"responseHeaders": {
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sat, 03 Oct 2026 23:13:20 GMT",
"x-hs-cf-cache-status": "HIT",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sat, 03 Oct 2026 23:13:20 GMT",
"server": "cloudflare",
"cf-ray": "a47f01762f826e62-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"bodySha256": "246f1afc7ebee26cf855f79fd82b3b734c717969bcd8e00361108d68af867adf"
},
{
"url": "https://www.azinstitute4autism.com/team?migration_review=20261009T_phase5c",
"observedAt": "2026-10-09T17:11:40Z",
"status": 200,
"requestHeaders": {
"Cache-Control": "no-cache, max-age=0",
"Pragma": "no-cache"
},
"responseHeaders": {
"cache-control": "s-maxage=36000, max-age=5",
"last-modified": "Sat, 03 Oct 2026 23:13:20 GMT",
"x-hs-cf-cache-status": "HIT",
"x-hs-cache-control": "s-maxage=36000, max-age=0",
"x-hs-prerendered": "Sat, 03 Oct 2026 23:13:20 GMT",
"server": "cloudflare",
"cf-ray": "a47f017f2e02f7bd-LAX",
"age": null,
"etag": null,
"cf-cache-status": null
},
"bodySha256": "246f1afc7ebee26cf855f79fd82b3b734c717969bcd8e00361108d68af867adf"
}
],
"sourceFreshness": {
"classification": "potentially cached but consistently publicly presented",
"reason": "Both direct responses are byte-identical HubSpot/Cloudflare HITs and identify an October 3 prerender. An independent current web rendering shows the same ordered roster, copy, links, and image assignments. No contradictory public response was found. The reconciliation describes only the current published page and makes no inference about personnel history or underlying employment records."
},
"metadata": {
"title": "Meet Our Dedicated Autism Support Team | Arizona Institute for Autism",
"description": "Meet the all-star team of compassionate, experienced professionals transforming personalized autism therapy and education at Arizona Institute for Autism.",
"canonical": "https://www.azinstitute4autism.com/team",
"h1": "Meet the Team",
"openGraphType": "website",
"socialImage": "https://www.azinstitute4autism.com/hubfs/AIALanding_BG_V2.jpg",
"socialImageAlt": "learn more about arizona institute for autism"
},
"content": {
"intro": {
"heading": "Our Clinical Team",
"organization": "Arizona Institute for Autism",
"location": "Scottsdale, Arizona",
"body": "AIA's clinical team consists of experienced professionals and paraprofessionals as well as Board Certified Behavior Analysts (BCBA) and Psychologists who have diverse experience and expertise."
},
"groups": [
{
"heading": "Board Certified Behavioral Analysts & Psychologists",
"members": [
{
"name": "Rula Diab, BCBA, LBA, M.Ed",
"role": "Clinical Director",
"image": "https://www.azinstitute4autism.com/hubfs/team-rula-diab.webp",
"sourceAlt": "chief clinical director rula diab"
},
{
"name": "Jennifer Espinoza, MAOL/ABA",
"role": "Clinical BCBA",
"image": "https://www.azinstitute4autism.com/hubfs/team-jennifer-espinoza.webp",
"sourceAlt": "team jennifer espinoza"
}
]
},
{
"heading": "Clinical Support",
"members": [
{
"name": "Jennifer Bonefont, B.A. Psy",
"role": "Clinical Client Advocate Supervisor",
"image": "https://www.azinstitute4autism.com/hubfs/team-jennifer-bonefont.webp",
"sourceAlt": "team jennifer bonefont"
}
]
},
{
"heading": "Clinical Case Supervisors",
"members": [
{
"name": "Rachael Sanchez, BS, M Psy/ABA",
"role": "Clinical Supervisor",
"image": "https://www.azinstitute4autism.com/hubfs/team-rachael-sanchez.webp",
"sourceAlt": "team rachael sanchez"
}
]
},
{
"heading": "Clinical Education Specialists",
"members": [
{
"name": "Mahima Bedi",
"role": "Clinical Instructor",
"image": "https://www.azinstitute4autism.com/hubfs/team-mahima-bedi.webp",
"sourceAlt": "team mahima bedi"
}
]
},
{
"sectionHeading": "Our ABA Care Team",
"heading": "ABA Clinic Management",
"tagline": "Applied Behavior Analysis \"(ABA) at your service\"",
"members": [
{
"name": "Mariah Marley",
"role": "Claims Billing",
"image": "https://www.azinstitute4autism.com/hubfs/team-mariah-marley.webp",
"sourceAlt": "team mariah marley"
},
{
"name": "Eney Garcia, BA",
"role": "Accounts Billing",
"image": "https://www.azinstitute4autism.com/hubfs/team-eney-garcia.webp",
"sourceAlt": "team eney garcia"
},
{
"name": "Ayah Shahbander",
"role": "Human Resources",
"image": "https://www.azinstitute4autism.com/hubfs/team-ayah-shahbander.webp",
"sourceAlt": "team ayah shahbander"
},
{
"name": "Barbara Samanich, BFA",
"role": "Creative Marketing Developer",
"image": "https://www.azinstitute4autism.com/hubfs/team-barbara-samanich.webp",
"sourceAlt": "team barbara samanich"
}
],
"closingStatement": "ABA's leading experts in special education and clinical care."
}
],
"careers": {
"eyebrow": "Join the AIA Team!",
"heading": "Employment Opportunities",
"intro": "Apply online to join the AIA team! At the Arizona Institute for Autism (AIA) we are on a mission to improve special education and strengthen communities throughout Arizona.",
"contactText": "Our talented and passionate employees are a critical piece to the high-quality ABA therapy we provide along with our commitment to behavioral health, school solutions, and community outreach. For questions regarding open positions, please contact us at",
"ctaLabel": "View Open Positions",
"ctaUrl": "https://www.azinstitute4autism.com/careers?hsLang=en",
"hrFallbackInSource": "hr [at] abaclinicaz [dot] com",
"hrScriptText": "hr@azinstitute4autism.com",
"hrScriptDestination": "mailto:hr@azinstitute4autism.com",
"contactResolution": "Use hr@azinstitute4autism.com as the single active value and generate the no-JavaScript fallback from it; this matches production's executable text and destination while removing its internal fallback mismatch."
},
"footerContact": {
"phone": "(480) 687-7099",
"email": "info@azinstitute4autism.com",
"address": "8901 E Raintree Dr Ste 160, Scottsdale, AZ 85260",
"resolution": "Existing shared site data matches production; unchanged in Phase 5C."
}
},
"reconciliation": [
{
"group": "Board Certified Behavioral Analysts & Psychologists",
"existingAstro": "Rula Diab; Jennifer Espinoza; Timirah Clay",
"production": "Rula Diab; Jennifer Espinoza",
"resolution": "Retain the first two in published order; remove the Timirah Clay entry from the migrated public roster. This is not an employment-status finding."
},
{
"group": "Clinical Support",
"existingAstro": "Carol Harrington; Rachel Crosby; Jennifer Bonefont",
"production": "Jennifer Bonefont",
"resolution": "Retain Jennifer Bonefont; remove the Carol Harrington and Rachel Crosby entries from the migrated public roster. This is not an employment-status finding."
},
{
"group": "Clinical Case Supervisors",
"existingAstro": "Rachael Sanchez",
"production": "Rachael Sanchez",
"resolution": "Retain name, credentials, role, image, and order."
},
{
"group": "Clinical Education Specialists",
"existingAstro": "Mahima Bedi",
"production": "Mahima Bedi",
"resolution": "Retain name, role, image, and order."
},
{
"group": "ABA Clinic Management",
"existingAstro": "Mariah Marley; Eney Garcia; Ayah Shahbander; Barbara Samanich",
"production": "Mariah Marley; Eney Garcia; Ayah Shahbander; Barbara Samanich",
"resolution": "Retain all names, credentials, roles, images, and order; restore the published Our ABA Care Team heading and closing statement to rendered output."
}
],
"assets": [
{
"source": "https://www.azinstitute4autism.com/hubfs/hero-meet-the-aia-team.webp",
"local": "/assets/images/hero-meet-the-aia-team.webp",
"status": 200,
"dimensions": "1200x428",
"sha256": "86e8ff93f42c93e84cd50bf0edbff2f93422decc630234f79d5f147bc5f560ac",
"localMatch": true
},
{
"source": "https://www.azinstitute4autism.com/hubfs/AIALanding_BG_V2.jpg",
"local": "/assets/images/AIALanding_BG_V2.jpg",
"status": 200,
"dimensions": "2200x1146",
"sha256": "3036a9dc996b8ccd4672451fcc83b31b0421db4413f20d891f64f47d7707d6a8",
"localMatch": "new exact self-hosted copy",
"response": {
"observedAt": "2026-10-09T17:13:35Z",
"cf-cache-status": "HIT",
"age": "1945333",
"etag": "\"228eba211291cab48d2e9edc3c811118\"",
"last-modified": "Tue, 04 Feb 2025 22:36:06 GMT"
}
},
{
"source": "https://www.azinstitute4autism.com/hubfs/team-rula-diab.webp",
"local": "/assets/images/team-rula-diab.webp",
"status": 200,
"dimensions": "342x456",
"sha256": "6382277beb23ff9bc98edda79d62636a01a63504ceb6d0fa2af5d9d30fa12bc0",
"localMatch": true
},
{
"source": "https://www.azinstitute4autism.com/hubfs/team-jennifer-espinoza.webp",
"local": "/assets/images/team-jennifer-espinoza.webp",
"status": 200,
"dimensions": "342x456",
"sha256": "28d3512fc70def1604320eba3336745d5c671651a2994f31eaedcce3b477dd38",
"localMatch": true
},
{
"source": "https://www.azinstitute4autism.com/hubfs/team-jennifer-bonefont.webp",
"local": "/assets/images/team-jennifer-bonefont.webp",
"status": 200,
"dimensions": "342x456",
"sha256": "f3aac4faaff9ef45c03c613c00ec41e5711de023b53c156a8f70a5225c0cc2e4",
"localMatch": true
},
{
"source": "https://www.azinstitute4autism.com/hubfs/team-rachael-sanchez.webp",
"local": "/assets/images/team-rachael-sanchez.webp",
"status": 200,
"dimensions": "342x456",
"sha256": "93f573767cef7eb5768aecbc99dee49da7cb0d5935812a3933fedd72d4771407",
"localMatch": true
},
{
"source": "https://www.azinstitute4autism.com/hubfs/team-mahima-bedi.webp",
"local": "/assets/images/team-mahima-bedi.webp",
"status": 200,
"dimensions": "342x456",
"sha256": "4253c63f9b37d00feb7dd74da19cd0a99c32c1143477fb33979932f982e10487",
"localMatch": true
},
{
"source": "https://www.azinstitute4autism.com/hubfs/team-mariah-marley.webp",
"local": "/assets/images/team-mariah-marley.webp",
"status": 200,
"dimensions": "342x456",
"sha256": "1269d1e32d8aa75c758aa68aad91866e171bce01a19be7034c6763d373e3a196",
"localMatch": true
},
{
"source": "https://www.azinstitute4autism.com/hubfs/team-eney-garcia.webp",
"local": "/assets/images/team-eney-garcia.webp",
"status": 200,
"dimensions": "342x456",
"sha256": "dac8113ad3d2424bf435ce740320d65692fd8aca1c155e62398077c578047533",
"localMatch": true
},
{
"source": "https://www.azinstitute4autism.com/hubfs/team-ayah-shahbander.webp",
"local": "/assets/images/team-ayah-shahbander.webp",
"status": 200,
"dimensions": "342x456",
"sha256": "bcece062e538264af4a250379b7e4142f369179a22b8884abbb614a28ce40c23",
"localMatch": true
},
{
"source": "https://www.azinstitute4autism.com/hubfs/team-barbara-samanich.webp",
"local": "/assets/images/team-barbara-samanich.webp",
"status": 200,
"dimensions": "342x456",
"sha256": "96b28fe1dca89cb365c7dad5710853d39406deec3ee74d8b1ad3b0c17f245a86",
"localMatch": true
}
],
"assetSafety": "All retrieved roster/hero assets identify as WebP with expected dimensions; the social image identifies as a progressive JPEG. The nine rendered portraits and hero are byte-for-byte matches to existing local files. No executable or unexpected embedded content was identified by file-type inspection.",
"validation": {
"completedAt": "2026-10-09T17:20:21Z",
"seoTests": "34 passed, including four Phase 5C Team tests",
"publicationTests": "33 passed",
"markdownTests": "20 passed",
"normalBuilds": "initial and final builds passed; Astro check reported 0 errors, 0 warnings, and 0 hints; 96 routes",
"indexingBuild": "passed; 96 routes, 92 sitemap URLs, and 174 hreflang links across 53 pages",
"routeAudit": "offline reconciliation and --check passed using 70 inherited production observations; no new production requests",
"linkAudit": "0 broken internal links",
"imageAudit": "0 missing mapped page images",
"blogAudit": "0 failures",
"finalStaging": "96 routes; all noindex,nofollow; empty sitemap; no hreflang",
"routeSet": "unchanged from the pre-Phase 5C staging artifact"
},
"browserValidation": {
"status": "unavailable",
"reason": "Playwright browser transport closed before navigation completed.",
"claim": "No browser-level desktop/mobile fidelity claim is made."
},
"limitations": [
"Current public presentation is evidence for migration output, not evidence of hiring, departure, promotion, dates, or underlying employment status.",
"Professional credentials and group membership are reproduced only as published and are not independently verified.",
"The October 3 HubSpot prerender may be cached; no conflicting public version was found, and repeated/current independent views agree.",
"Production's HR fallback domain conflicts with its executable link text and destination; Astro resolves that internal mismatch in favor of the active azinstitute4autism.com destination.",
"Raw production HTML, cookies, and removed nonpublic personnel information are not committed. Historical migration observations remain unchanged."
]
}
Loaded 100 of 434 files, more files were not shown because too many files have changed in this diff. Show more