Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0ab08131d6
|
||
|
|
b0cf2d7119 | ||
|
|
3e05458944 | ||
|
|
4d7955fb48 | ||
|
|
81d1f21236 | ||
|
|
aa406e623d | ||
|
|
5d6d4af8bd | ||
|
|
d944cb0afe | ||
|
|
9d6e0b982e | ||
|
|
167277b037 | ||
|
|
db8d90f579 | ||
|
|
16a72caa00 | ||
|
|
95c5f229f5 | ||
|
|
55adb79705 | ||
|
|
e97f0ea9b4 | ||
|
|
ff80ee516f | ||
|
|
6a5e54e130 | ||
|
|
ebc99c0f36 | ||
|
|
0eb3fcc3f6 | ||
|
|
1a56cd7603 | ||
|
|
7cdf209032
|
||
|
|
eecb582665
|
||
|
|
61b2bd0f1e
|
||
|
|
a635a5f55c | ||
|
|
63806f106c | ||
|
|
f41af1966e
|
||
|
|
7a6cab29db
|
||
|
|
b102a061fe
|
||
|
|
356282f61c
|
||
|
|
ce17728e0b
|
||
|
|
704c8d27c9
|
||
|
|
d20372fe33
|
||
|
|
e874b26bb9
|
||
|
|
08612d97e6
|
||
|
|
f98576f3ae
|
||
|
|
537f9864a0
|
||
|
|
59911eb929
|
||
|
|
8e64d32209
|
||
|
|
b5bc95bc2b
|
||
|
|
a699d467f1
|
||
|
|
8192ea71c4 | ||
|
|
8646792d46
|
||
|
|
0957c06a18 | ||
|
|
6f5ac3c0d2
|
||
|
|
b20c253383
|
||
|
|
76a035424d
|
||
|
|
34d5394b3c
|
||
|
|
bc399b43b6
|
||
|
|
051fb7c108
|
||
|
|
4079156776
|
||
|
|
4ed01d7d28
|
||
|
|
c720917627 | ||
|
|
2ce8c849c0 | ||
|
|
32112edbde
|
||
|
|
f28bf9ad06 |
No files matched your search
@@ -58,3 +58,6 @@ temp/
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
Desktop.ini
|
Desktop.ini
|
||||||
|
|
||||||
|
# Private portal collection, mappings and ciphertext; never a public asset source.
|
||||||
|
/www/private/employee-portal/
|
||||||
@@ -82,6 +82,35 @@ sandboxed command-line tools may fail HTTPS certificate verification. Do not
|
|||||||
disable certificate verification for package installation or sensitive
|
disable certificate verification for package installation or sensitive
|
||||||
retrievals; use live web search or review the retrieval from the host instead.
|
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
|
## Git limitation
|
||||||
|
|
||||||
Codex always protects `.git` recursively in its `workspace-write` sandbox.
|
Codex always protects `.git` recursively in its `workspace-write` sandbox.
|
||||||
|
|||||||
@@ -16,9 +16,10 @@
|
|||||||
function: nixpkgs.lib.genAttrs supportedSystems (system: function nixpkgs.legacyPackages.${system});
|
function: nixpkgs.lib.genAttrs supportedSystems (system: function nixpkgs.legacyPackages.${system});
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
devShells = forAllSystems (pkgs: {
|
devShells = forAllSystems (
|
||||||
default = pkgs.mkShell {
|
pkgs:
|
||||||
packages = with pkgs; [
|
let
|
||||||
|
developmentPackages = with pkgs; [
|
||||||
nodejs_24
|
nodejs_24
|
||||||
git
|
git
|
||||||
curl
|
curl
|
||||||
@@ -27,8 +28,35 @@
|
|||||||
fd
|
fd
|
||||||
python3
|
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 = false;
|
||||||
|
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);
|
formatter = forAllSystems (pkgs: pkgs.nixfmt);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,2 +1,16 @@
|
|||||||
PUBLIC_AIA_API_BASE=https://api.azinstitute4autism.com
|
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
|
PUBLIC_ALLOW_INDEXING=false
|
||||||
|
|
||||||
|
# Employee portal ciphertext is an opt-in local compatibility preview only.
|
||||||
|
# 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
|
||||||
@@ -26,7 +26,7 @@ edits. Stop it with `Ctrl+C`.
|
|||||||
|
|
||||||
Requirements:
|
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
|
- npm
|
||||||
|
|
||||||
This repository also has a Nix development shell at the repository root:
|
This repository also has a Nix development shell at the repository root:
|
||||||
@@ -38,6 +38,40 @@ cd www
|
|||||||
npm install
|
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
|
Copy the example environment file when testing the like/view counter or staging
|
||||||
SEO behavior:
|
SEO behavior:
|
||||||
|
|
||||||
@@ -176,6 +210,43 @@ Article content goes here.
|
|||||||
|
|
||||||
Set `draft: true` while preparing unpublished content.
|
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
|
### Publication, Canonicals, and Sitemap
|
||||||
|
|
||||||
`src/utils/publication-policy.ts` owns route eligibility, normalized public
|
`src/utils/publication-policy.ts` owns route eligibility, normalized public
|
||||||
@@ -317,14 +388,30 @@ benefits
|
|||||||
skills
|
skills
|
||||||
insurance
|
insurance
|
||||||
esa
|
esa
|
||||||
|
hsaFsa (optional; English only where published)
|
||||||
financialHelp
|
financialHelp
|
||||||
process
|
process
|
||||||
director
|
director
|
||||||
testimonials
|
testimonials
|
||||||
|
logos (optional)
|
||||||
```
|
```
|
||||||
|
|
||||||
Keep homepage copy in those named blocks so the page remains easy to scan in
|
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.
|
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
|
### Images And Downloads
|
||||||
|
|
||||||
@@ -380,7 +467,10 @@ src/data
|
|||||||
|
|
||||||
### Add A Translation
|
### 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
|
```txt
|
||||||
src/content/blog/en/post-slug.md
|
src/content/blog/en/post-slug.md
|
||||||
@@ -398,7 +488,32 @@ The URLs become:
|
|||||||
|
|
||||||
Arabic routes automatically render with `lang="ar"` and `dir="rtl"`.
|
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
|
### Edit A Blog FAQ
|
||||||
|
|
||||||
@@ -409,12 +524,49 @@ import FAQAccordion from '../../../components/FAQAccordion.astro';
|
|||||||
```
|
```
|
||||||
|
|
||||||
Edit the component's `label`, `heading`, and `items` data in the post. Keep
|
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` and `answerHtml` consistent. JSON-LD derives its answer text from the
|
||||||
answer. Shared FAQ markup, styling, interaction, and schema generation live in
|
actual visible `answerHtml` when supplied, otherwise from the rendered `answer`
|
||||||
`src/components/FAQAccordion.astro`.
|
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
|
## 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/`.
|
Migration reports are stored in `reports/`.
|
||||||
|
|
||||||
Useful commands:
|
Useful commands:
|
||||||
@@ -430,12 +582,35 @@ The live crawl is optional and may fail in restricted network environments.
|
|||||||
|
|
||||||
## Forms
|
## 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.
|
Use `PUBLIC_AIA_FORMS_MODE=off npm run build` for an offline artifact, or
|
||||||
2. Connect the forms.
|
`PUBLIC_AIA_FORMS_MODE=mock npm run dev` for synthetic fixtures. Missing/empty
|
||||||
3. Add spam protection.
|
mode means live; obsolete `isolated-test` and other invalid values produce an
|
||||||
4. Test validation, confirmation, and failure states.
|
explicit configuration error. Remove old approval/environment variables from
|
||||||
|
local settings. Indexing is independent of forms; counters remain off by default.
|
||||||
|
|
||||||
|
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`;
|
||||||
|
use `--mode=indexing` for indexing output and `--forms=off` or `--forms=mock`
|
||||||
|
for those explicit builds. No actual submissions run in automated tests.
|
||||||
|
|
||||||
|
### 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
|
## Troubleshooting
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
"pageBundle": false,
|
"pageBundle": false,
|
||||||
"fields": [
|
"fields": [
|
||||||
{ "title": "Title", "name": "title", "type": "string", "required": true },
|
{ "title": "Title", "name": "title", "type": "string", "required": true },
|
||||||
|
{ "title": "Display H1", "name": "displayH1", "type": "string" },
|
||||||
{ "title": "Description", "name": "description", "type": "string" },
|
{ "title": "Description", "name": "description", "type": "string" },
|
||||||
{ "title": "Slug", "name": "slug", "type": "string", "required": true },
|
{ "title": "Slug", "name": "slug", "type": "string", "required": true },
|
||||||
{ "title": "Language", "name": "lang", "type": "choice", "choices": ["en", "ar", "es"] },
|
{ "title": "Language", "name": "lang", "type": "choice", "choices": ["en", "ar", "es"] },
|
||||||
@@ -28,6 +29,7 @@
|
|||||||
"pageBundle": false,
|
"pageBundle": false,
|
||||||
"fields": [
|
"fields": [
|
||||||
{ "title": "Title", "name": "title", "type": "string", "required": true },
|
{ "title": "Title", "name": "title", "type": "string", "required": true },
|
||||||
|
{ "title": "Display H1", "name": "displayH1", "type": "string" },
|
||||||
{ "title": "Description", "name": "description", "type": "string" },
|
{ "title": "Description", "name": "description", "type": "string" },
|
||||||
{ "title": "Slug", "name": "slug", "type": "string", "required": true },
|
{ "title": "Slug", "name": "slug", "type": "string", "required": true },
|
||||||
{ "title": "Date", "name": "date", "type": "datetime", "required": true },
|
{ "title": "Date", "name": "date", "type": "datetime", "required": true },
|
||||||
@@ -47,6 +49,7 @@
|
|||||||
"pageBundle": false,
|
"pageBundle": false,
|
||||||
"fields": [
|
"fields": [
|
||||||
{ "title": "Name", "name": "name", "type": "string", "required": true },
|
{ "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": "Slug", "name": "slug", "type": "string", "required": true },
|
||||||
{ "title": "Description", "name": "description", "type": "string" },
|
{ "title": "Description", "name": "description", "type": "string" },
|
||||||
{ "title": "Avatar", "name": "avatar", "type": "image" },
|
{ "title": "Avatar", "name": "avatar", "type": "image" },
|
||||||
|
|||||||
@@ -0,0 +1,144 @@
|
|||||||
|
# Employee portal compatibility and private migration
|
||||||
|
|
||||||
|
Recorded 2026-10-30. Browser-side shared-code decryption is approved only for
|
||||||
|
local compatibility development. It is not authentication, individual revocation,
|
||||||
|
a secure session or a HIPAA compliance determination. Resources need separate
|
||||||
|
server authorization before cutover.
|
||||||
|
|
||||||
|
## Source and private collection
|
||||||
|
|
||||||
|
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. No access code was available
|
||||||
|
to the agent. The exact resource count and real content compatibility remain
|
||||||
|
unverified. Do not infer the earlier approximate 43 links as a measured count.
|
||||||
|
|
||||||
|
From `www`, in the owner's private interactive terminal:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
node tools/employee-portal-migrate.mjs collect \
|
||||||
|
/home/alice/projects/wrk/aia/local-archives/aia-employee-portal-hubspot-footer-source.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Enter each legitimate view code at its hidden prompt. Never place codes in
|
||||||
|
arguments, environment variables, shell history or reports. The utility checks
|
||||||
|
both streams, keeps plaintext in memory, and collects only referenced `/hubfs/`
|
||||||
|
resources from the verified source origin. Other origins require explicit
|
||||||
|
review/code allowlisting; redirects are bounded and never inherit credentials.
|
||||||
|
No Jotform, Google or other vendor forms are fetched.
|
||||||
|
|
||||||
|
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.
|
||||||
|
All new resources default to UNRESOLVED. Publicly reachable does not mean public
|
||||||
|
approved. Resuming verifies an existing file's content hash; mismatches are not
|
||||||
|
overwritten. HTML error documents, executable responses, invalid known signatures,
|
||||||
|
redirects outside approved destinations and resources over 50 MiB are rejected.
|
||||||
|
The first pass allows only the verified site origin. If a legitimate `/hubfs/`
|
||||||
|
response redirects to a HubSpot CDN, inspect that exact HTTPS origin first, then
|
||||||
|
add its origin to the private manifest's `approvedOrigins` list and rerun. Never
|
||||||
|
approve a redirect based only on a failed download or a broadly shared vendor
|
||||||
|
domain. Failures remain private review items. The utility prints counts only.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
## Approved rewriting
|
||||||
|
|
||||||
|
The owner classifies records as PUBLIC-APPROVED, STAFF-INTERNAL,
|
||||||
|
MANAGEMENT-INTERNAL or UNRESOLVED in the private manifest. Set `deliveryPath`,
|
||||||
|
`rewriteApproved`, `destinationImplemented`, `destinationVerified`, and (for
|
||||||
|
internal documents) `destinationAccessControlled` only with actual evidence.
|
||||||
|
The utility does not create those destinations or infer their approval.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
node tools/employee-portal-migrate.mjs rewrite \
|
||||||
|
/home/alice/projects/wrk/aia/local-archives/aia-employee-portal-hubspot-footer-source.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
It reauthenticates both views, changes approved quoted href/src attributes only,
|
||||||
|
preserves unrelated HTML/labels, and re-encrypts with fresh salts and IVs. It
|
||||||
|
verifies round-trip decryption and distinct codes before writing new ciphertext
|
||||||
|
with exclusive filenames. The original source is untouched. CSS/srcset mappings
|
||||||
|
require separate review and are rejected rather than silently rewritten.
|
||||||
|
Unresolved links retain their original destination as a recorded dependency,
|
||||||
|
not a claim of verified destination health. A changed manifest alone never
|
||||||
|
changes links in the encrypted stream.
|
||||||
|
|
||||||
|
## Local preview and content safety
|
||||||
|
|
||||||
|
Use a private ciphertext file generated by `collect` or `rewrite`:
|
||||||
|
|
||||||
|
```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.
|
||||||
@@ -0,0 +1,144 @@
|
|||||||
|
# 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. Form C and
|
||||||
|
`/referrals` remain inactive; 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.
|
||||||
|
|
||||||
|
## 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, plus future Form C 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.
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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 compatibility preview cannot grant production portal access. Before cutover,
|
||||||
|
classify every document, implement and verify its delivery destination, rewrite
|
||||||
|
and re-encrypt links, test two-view separation, rotate shared codes privately,
|
||||||
|
check the public artifact for private files, and obtain owner/security approval.
|
||||||
|
Back up encrypted configuration and documents separately from keys; rehearse
|
||||||
|
restore and rollback. Revoking a static release cannot retract ciphertext or
|
||||||
|
files already downloaded by visitors. Site cutover is still unauthorized.
|
||||||
@@ -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.
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -20,6 +20,10 @@
|
|||||||
"test:routes": "node --experimental-strip-types --test tools/audit-routes.test.mjs",
|
"test:routes": "node --experimental-strip-types --test tools/audit-routes.test.mjs",
|
||||||
"test:markdown": "node --test tools/markdown.test.mjs",
|
"test:markdown": "node --test tools/markdown.test.mjs",
|
||||||
"test:publication": "node --experimental-strip-types --test tools/publication.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",
|
||||||
|
"verify:campaign": "node tools/campaign-browser.mjs",
|
||||||
"generate:sitemap": "node tools/generate-sitemap.mjs",
|
"generate:sitemap": "node tools/generate-sitemap.mjs",
|
||||||
"generate:redirects": "node tools/generate-redirects.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.
|
||||||
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 119 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 163 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 135 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
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 |
|
After Width: | Height: | Size: 109 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
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 |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
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,UklGRi5oAABXRUJQVlA4ICJoAABwegKdASogA8IBPpE+mkilpqimLJKL0RASCWdtfo3ent6kcvj7xnPe8oWli47S/muKKl6rKtDGnhT9nNj3K084ef151NM415w3fKmS15NIXLk6Oz57IPqd/q+825z28pbgi8snzfsj/POumxb/AeDfZS7pf2DPh+A4jShLK2aTHsPTHf+Xnb/aN+seWA/6notgh7XN+YC/0j0i4fV8tIliDG2ZhTEnI6xFK27tmPQzU24Sqh6h4xSUtN/Eu2aouDX1nX7jEFJXevnmow6GnAckwgw1Rg+3i917yl0CCo065gJHW2c3y4OURRrFlx+UqM8DJCoDYGsw2PKrFTXkPu8v6HtkrUvFCYgUXwPWkP7uHihIu5oojsO6uX/+xCKx3UXQHVrVj/q//t+nZvhLTjt1iVaVbLEteS8+vshnC2nUwJLTtdNejgJKhVAAclZYmC4DWobrZDoUzBceUtPi6gWD/4hN8USkK/A0sthn2o5sAbGM4mYvmjLEavEvuVOneDfjpnrYriifsQZae+ocJos8MB+bJl4+NLu0dUm/ao6H8nLhz8/7PdMZTCQnMU9Fi7yjDNb2exK1PTqjbYPodvxtfloDbeKjwEl6HRxcDxi2aieWT7DH0LeQneDmXtoTizAMxjg2SDp+qOUXaZIXs13T0HPUFHiiMtp5falOGJE1phA7JQjLAeBblolRY4irrAwr/cg8VZHyXuo3+4u9GulhYQtSuqpfqPmX1TvpGfWPkiffTztwXnGQXilFbGrXND//LfKYaBubooUxXnx65++0zBSTL4ZAYoouS0m2c0XU23/n3N1PdSRAgym1MCe7Bn88VOVzbDckT+GPJWDrJynwTnCYDfkHJRw5bjbMtsQyxkjPJ4zVacsqQPUEVLlzsQhwqm1YcHZ/bEPcJb8QYOR248QuaKIwjSvgWiSvuSMHHV7t2z2Pih+1aZx4uQhEWYvWVsF3ebuvDGgUssVbG2UbWLc3oQYjkpS4uAGe9UJQCL3gz+ShqonzowBDYLoUxJsfE0aL6jrxbH1oRoVeUF0BS80c+34GIuVVBQnbjlyXtCPSMAvTRKoOhU9y4wzA5sZ5XfqM6mJLTrfKsyXWcUxAnBzgsYRJ0sH5YVdLUcaX6SaLU1vYKZylT5pNs6U8EcGBuQGO1d7RB9enjtrby5QX7eLR2PyaxRZ62nrblnLZCoEAEmTSFWFhFEWAaJqQQ4wdOR5XbNrtL3Ri+Fm1hFp5jDrrHcMhPago4k3xk2OOvXs8Mx2s9PFhx8SP6bjQfb51yuCfQTSS3JJOVcMKhDjHT8Pih55GVAzCeSK2b+eCtd5G6/6BT9roA9S4G+aYCp2gpmKJe2kEgkRL5qcswbYBRHTLPynXmX4WUyLoo8hAa01a32DTAVVDAy/cMCA9ATC3SQTRkLxTyOhmXxfy3t30JfIzd9XzgGZpjD7gxRA32g+D+ZzA2ghJNS/oeGEqK6kFi3yA07nK/IhTZd4Fw011pbUEn1JrTJsUz9VF6ItBP9epbDyG8moiL/ZKr3ccOjfIAUnSWz92wNPrvD2mTJivdxgotaO9p42IzX91kqjt+Af4y4u/zC9RyfiUc8JHekA6r9mN7wwP/eF/7rSguHLQIw7uYC473fwy2zIl33baSLkcu26rCu5kLOP4wkBb57945XvCcFJd3ebgGqaSmXmHii9IQqzwV+G6pUi7xpxNcG+E6OTZCBBGYFdLqFZpnsmzU+I0uaZd7mTweGq/DX7xg2N0rUGUoYsEsHauHOY/Ar1nTDAd9XBJLkmHmwwTUDghSDGnzB6Y8AkPnOhy1SsgPYBLHwLtWG9sv3Owc0lmw++nkubyWzhw51lFfHGRJv46VcdOh07u+GO9wYnJi/cbFkAAPI2/9LNismor9Za68TrKAlt/WgjoQiSpI7bpZdaQal4JrTfjt2RAutx5/WsJy/7PQ7/eNlA0BdlBj1/AOpLpI3IDBgfCvCi4giYd00MvPXtiW9DFzJYm/6RP+O9TrSLcd2snpx8dhdgwf2/quwAjIFQk7zetqQjRjJqWNNKvBv0SHV48MYuI3xwLQu0/pT2Qe/BzKHv4JvULKlKYrZbwOOXMSdYLAmKl8SWv5PYRicGZMYcUlmcALDS9BIfaTkwKYGl89ambOEQk5KFSD8oFE0EVZq5ZShX0sxRzOCZXvKTZ5pUKBPvZ4Ki/ckAnwHlIAiuHuHDzNkAAUkVEzohGL0YBV4jd/G84Poy7Q215PHwo2K4rMnwA4itkVmtS/fD7g9ojNZq8nNXRovYlaLMpi/yuz6pjkCoXMMGsVWzAtPHCThw4ZohRYblDpLsTSGSIvhxLMT+Ccj6LHQqjoYKlY8TAQpS1nbzUWzYkT7f35Grevukux+ptYeNpcHfVhLAuIo3IrIIc+bBaxBHaCLB98nxVMxvgiMp5a9JraJkn2IuyzMM4W3wXBNt6Bt6dtJsiHecM66lTGZjqA4VSnQKE3qRleG2q5QOfc6Jb42Q4dxeQtOCnLrez5xuUwqrCCtHiokMboG9HLvWpJexBazgssoJisJxlr3+xB5Y35/wdu3INKdfXmFppwjm2gGJMWbyDDsmUtR/6S3qYzYcCTkpKVPaykDqdSvo32uLcUX5nojv9rGE1yFJG5JeE3QZLkWnG8oAqQ9O/D8jxV706ZI9DBZYwozTd0mKA2DbIw3WgStsp+Qxx4f1KoWJq/t7iHjDJFzH9tu18FXA+WIMM0FwBcqtMqTLwSrpmVuJz3F+fyo0q1g7tAjjFOkF2R9iJkvxKjpMBykmnNNui8qsqcImUN+eOIEbxDOpHG0srcJVd8JJb0PP2WxX7qlFvOuLK22a/1SfHjo2qhEUvoRdzz0iv58SQXe7f6IJlOHAClh0hv5LTD3dZRVpMK0WN8epNuZMQ96cMJEzcnXDCc9Mwtp4MyMlGS+mcCPnTfVAISxq6R2ILcw6xpWR3znbF74Uwba4wCny9TQj0bMjoBgLfIngwouGHw0MzWl0sYttibK1dPmeDW/lPoFS+5de7x8OOPNP++tnxOhLkXto2l8P1Mi5Lhd3zW20GCMflL6xuD+XntbuZttI2OGmbiunJcNo3V3apvGRUYIeSab9gZnm2knIF9Z9FwTsl08z2Qn4ymUZGMEwX/6FQmCeNbrqo66Fm0aulgwkXw/DEgzVy1Ce9TqKk2yTrCd3rPEjapSR05esZxE79YfZe+jvW097NV4HS2YRZNr3yomtINu81ahrukbVi2uc5YoyQhE9ULYaXOYVFkzRns8uxKMPi268YCHUEc2CXGDK0AIEIZ6eZF4w9Hm5sI8maCEL7Fd7pAAcn7SR8MQqTUXeDHYF/NJNWplbCYRDqxQ5dyREL/WfrJK8NytlRq/i22eDrdL2TfdWyN8aO+VTOLzdI2XuqvPHmXFl3ahyTxNY+3Yaqmbjk8Xdk4v+G6PT/pJqw/R2AE4WERIrObgKXpWxqm4Jy5BuRvbInmu5VeaId5SKf9B4nw0Qa7Y0qcFDvr5wd10ENzT6/U9xe5MqSVVSx/8o9EiLTk+zeAGpz54q4Zjv2sG/emNTKsawqkgfbm3ZkBUxCaf0dtb/4R0FgtP0er5WrR3TJbrWWueNxzooC5+lOqwwjauTs505ecRu0RkCpqvNYySG9ly2Ty4oP8Wio966fEymzgzn5TDLhkq6dgVZTpG06dB4bbnS3T+mgUURRzikNji/hYVvuaDidJuuhAsY0gx+QrdbJCiIYShyNxmdPRGccSJhBDtrIgE+ORw46pzy3XF8WqfBQPdmWB5hARIoEtJNSIiUze1ZNar/HUKId2/NG+iyL6/jKQjrBCDMCJV+G2y1ko/XLfR6jo3xLsM3XQjbsf9vS6+RHBS1+e0POC/m7M2Fgcp9B9YL+quhH+h7UjEUKki/FdSkePKEVAlCxVxSLzgHpG2J0Rnp2WQF5u4GgWfXAD/aCf+LkGmgK//XHcgsip7A3+NQJEUph+5YKa6O0BmlMYTtkpxSadpat49PPAg7OK9zQ3rxaVxXUOxVTopQ7RgVC9YfxtP8rPadiEinYMPBBbz33k5R5oYg8pRyVdiquIxbuwGYm38OdAAZSrHyDsG4+sD7eQogW7+k9On6p3GHbDJ8G+296XghObmiZH1HakXeBZW68E3L9yubIDsj5x2EAV+/WnIko6l6qyqN+LMojR9uODAiAhLc7BBhudTXqStxreftpi9FwpjgpfhlMWTH2xbXIJBfUX4PiixzC9AF7PIprVVKoQatoqayrUnxITQQ2eTJIv5fKaFCVoZ+wYqTyfFcupN1BVjZKl7Wa+gWl5pPl6F36wxjaSIWLoZP8b9tu4nAI2mERz9FWPZatkTyrGqHq0Cl8VOq174ziGnECGrNreVMAaIwfd9tRmTssNV1oMt73VGcVwdhHL68uel0YRGnlfaXjrxulsB3ZjCcywZJdaTo2LeclK889TckcFIm0DLHKEwmrBU5lihYtQ0uKr/LLl8wDitFSOhlskzG4DCxw0j/J5Mo1b/1zhlho/r5dfR7psb93NC/yKjkvfIz9f9h3WbaKiDt5XmvvnVKID0bpVRiuPKLGLlbqfyXu3IcIsR/OzdrezM0aPNZ4dxAxm7We/CBk/0X8IXld6hW41queopZH/CY94yC+Wecb81f/KXP85u6XRqIKITuZqqoeqX0eaYE7amPWQ6gWOz8TAvu7MB6rMMkgsZYapLKJJTW29Zuy9pv6btAwyPCWZLExqQpaQ5/V6MiyIfJiiI6Yks5qeLnjnDsmHvrTrUn+hPQ+OnOGnq9svrY5eATyLESNwz7Ejx5w1XRKuC67hlyRrKQu25OtWPbocAj+l1fwpsXeRkm0fj6ATSPa3xbQyKmdPM37+Px2Jszo7w70deoHmvY3+Ckfi4HzSwkDFLs8ZMuqD2G+q0gGSVXScqP0m3C3mh+wrLine 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 |
|
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,UklGRvzbAABXRUJQVlA4IPDbAAAQrgKdASogAxUCPpFAm0olo6KhpxH8KLASCWVu+/fYXH1v3aylMcQ+uPpNsf6d/JvgfwN/mPfKwuef8yP23vq/9/1j/2b/kewd/Y/RP6Y/8P6E/3Y9XH0z/3z1AP6d6XnrD+jd5ynrLf4Pf7Oj37C/37+5ftJ7yflv7b/e/8B+0/+D9N/I164/ef87/vP8V7fX1P5burP/J/tfUr+a/hn93/gv3k+Jf87/xv8h+T/p38ef8L/L/vT/ePkL/JP5z/nP7x+RnyP/af+bvUdx/2f/M/3fsF+vv0n/lf4L/X/tt7/vzH+2/w/+c/9Xu99iP9z/kPyk+wH+Xf1L/b/4f8l/n7/df8P+/fvJ6pH33/Wf8L/O/l19gn81/qf+z/vn+d/Zf/////8bv7b/2/6n/Y/up7g/0f/Qf+n/Rf6/5Bv5n/Z/+1/jv9J75P///3fwR/cT/8/734R/2X//v+u/55/YXBFICX1qQEvrUgJfWpAS+tSAl9akBL61ICX1qQEvrUgJfWd09Uk+ap7efqWoJ7OZzPPiXrJSQL2V5maRuyWXkevZGGcfdB5xSYgV2SgcqILFuXzR7i1Wf9cepH29E3XiK2FV1V/pS/aKMEsr6XlF37z5dlYeEls0ertG5QB0+BRCL+pu0kBE5OqDEMuf9yqKm7bXfiRVC91zF9FR1C0YkfnDiJeshzwRTtnSCIjkaoHcIEUgJfWpAS+tRVBwVZDfcY3Sby/w5bMq6nOM8FvMpK5b4IbCF41UXhZMsxI7CQ6fRn3VthfqGOCmPg92OJHJnRCCxELwv1qTaev2VRfSNz4u2GqnHJz3PlTP9+RctfwtR5TjnJMP0sGx7RV4ldz73ayiCdtrvqEP1/o2zrHhPOO/m7VHL2z5vLQmzMlWI9UlGfXFeCqoYiAe8zzevYX2Omg2mXYLXaivnok2A+vjpm4kB9AzyIkBL61Dhspjoije3tP1LojNKWLjDec2rVCNXkiG5CxSYIdLnPpXkGjT9mu+LdsZZe1EFWOlkXVKagkYjcz27XQiiF0TNMmWQL0cfhONgTVJkNcbGVY6P/iq7q/qe8rBtL94d4QjJFCnFezJHMRgSqXiZvcJwytDYm2x1NIDCMl+kM2DjVsRqlkVnxWjNlPjhxRomxT1m9C14gq2GoiMB64OuEUQ0PIlB0PJp+OU0hb/RKL4cRXdyf+l+JO/cIAKBtpVLN1EIuNq0N6Uou3NrrvtHY5+7zFq0CC5EQX0UMEkfkv3tNtGJDOTTSleJOtJrwO+ng/ZQkVErPSPXZyC+ENETrzodHRSGrfPg6E68k+yyW1h059IhwvCoTZb/aXio/REloV2qsF/MYqzCzd5ff3qZe5hTUUJ6VGRHrwgkVm/POdNDsM8RqrxSGPma5jpwiSUF3b9IKijWUnyqMo+SQzTzV2WMveEmlNY7HhJ5P2HEafBD48ZWfUQE9rSP0p3dwBFNSkZdttv5TGQZhmuMokwFj06pXeEzZa1miBYsohpBCQBrpm/RK9hDGV9RsAzMXUzcxsm8iXN0khX4kHzGo/rTt+F1Ck/rWQnZMTW4Pd9dvGAQ4jSry4bPvqmEta0lpLZUv54Rt4BCj5g5m1F2nmzpIpNwjAdom570qHJD8++k2OTQa4jUQ+3OU5he9N8aC+VBC65bHkCI9cQWljOTJLIkNAFHILt4BxiQDRpFMDpxY5T3jo4o8KVvEyfzRBE5mw60zBp3FH/pXewoe8MZACkj90beHzYVRHevNiCsmg/1sRk++y2YDq3bgx17AnX2KYrH216nuZ4Gq+4Yi/Wqk9RF2losibQ9/N7BoycjQZwT6V7O8X6cgyKWPuyGRWomHFq7xfWL/wTCO8qXHCDDJDgLIuXL0NI8Q28t4Y0DygPfGE6G3gwxwbxZBlVoZhLPepWmxbZdR5sxUmtbm9EERsjtqwveceRgRE9OJRS+0kPdXXy4zJKHun8iGMM1I2fulvPRB1Jn66gklTVQDsVdK1ucMuk2t78KRFGK5LbpUPWjq3bIi6O5V+UmMd0UITel1exmqo773V088n8bKQHTQlAMNege2p5Ikj9VSr1bXcEFKPUXI0PVFF9wBGfuZzD5Wh1+USZD+etiwAjFG2WBQs/ND/G+KcUPqH8zP23v5YMw4LpnJd/HwY1VLgqNSMO7YQ97oOHZ3TeGME4xj6PTkhNFFOnrXyuqUegr1beDmJ5pesQjqddUnkXS5z1AkwUmJlrNC00LrcKYWUR2Cc1pin68QaJFQ/8xXjV4RgctWXluCQkKk7NMLDO4OBO+iGY1zq5c02cnVGT+dGsR5yLfCYpZuHRXL4GTp13+LmREv3+Pjpimga9tw8THdEJ5nkb7SWXAu+n8sEC8dVf7wxaYUJp5vBy2KNgMXCoxWIr7H4DxW6mqDaBYVnVD4Je9DrtRNJwNKRBID7tvdAY1q39HChL4bTHd580FM99xc/XyasMWRNNxlASR/sltEVjcdcKyUDM8y+sFfUIJewNdpiLtgUA7epIgmsxpoptI1PtfQAKod8maGw5DLdf7/7WHgBhMjCRYFZ5eGfZu2OZ9UjxJOS72eeVGCBRpl+G4gMKhqq9Kll8uTZtfkfJCfs3rRaHdnmq/i686l1kvtrqav2qBAlbvgrTzvF5l29VK07lunuf4CfNGc5bRP1K6uIQ5BCziOPCPM8Vsb8Ydy0ZXox7Vuq7IdY9VLTx+3BcdjQa7KAp6xkf2qJLRb3Fps2/8Q59yYVxlrY/3THO54+cJCjhquXywuXnycCU/Tv8stfo4Jf16p4767A3FPal6hjmlZRxAUaXZlyAu+ihRlPD3f0He9gCRwbM87Pjw0q+r0LnhzopbV2jdiBh6bbqXIx7l8Gy/H2zQ5PdW9OZKtxzQ5XGBcPOHx1C0bAsirvJAuemoxMz+WVZwHwHH0Xk/OPQLZDWdHi9EFJukMWRrYhkUQDLhg9MlvRc8KraHgRosCwvd71PdyTB7yuYMyzG5vTixBpZlvaBiWjMNU8pG26Ha4odzMZE58JzyMvopdq3GNCovjHPsTDwqi4BAbLjYmwPGrXXEVKNBvlzjRZQNzWqQ+roRW45n7ikm2GvJrSNG9dF9YDrrSlalXpDEJxHrp2vVj3lyNGgFGmn8aZAEVCK3ixnA96nylJ0CrgdYZo0bN8uelNk5SBAgyoDq+zMSTb79AbAuB1/yFksUSRyV/frgEwa9dq/Q5hMwI6G0WkTXhhRs8R+H6TtaPiWqccC9SLUD+Rw6K3SyX9MX9uuThQNXpluIS4z90EaMxFYVdz2S7YFjub+26kr82/GWoTLlQdib6mHewbc5/IxfExr3h29fsyYTRWqVtroaOoXVzlZFEMWB2pYeAiQPQtAOkeE8rHkh916uU9V8DGHce1u/91S1Dw18mAQB7xQ49omQr5esEk/QSgICeXuCNrBLmhvMKGEzqsYsv4nOeDlIISOv47UbjX7W0sq3zhrgMWLOmvyaog0deaxGSIrY38qLRZefakgwxtkTf66EmbGR6iK8NZqdvv9BfaXEZvKOKCb2suBjVEGru8DweXYHPGIqeBMFhS4RDYx8lLYjdD1SWw+yX9akBL7u/AA/rUVM3OF4FOE1DrpK7ECeCEwFliULIcnWHtSp/MAEEe06XztqMWaYaEjLkV2CFgQN7Z5+XeysmhxMqShzCS9bcAgEvrUgJfWpAS+tSAl9Z+lMUvHxnUNelU8CdzVjWzd+LgFnQCOZ6y2qiRKjn6M+mZ+5WNo/N5/zPqRKXs5k1HQxqngUJW70QM8bnwgGycE9BlCemCf+eBVgjCrmd+U+COu5phWJJCsim9WCJp+38MkSRD/qfmTeozG01sayteaphCkuFNSEgkzizqWuY6Bzq59/1Jr2vN9/IbpAtRi65powWxiaadkoG3Tfh+oEO9RW0PTQx1zlTtgkVtN5y3BubnvbuacpVNifWwn/5DWtmNxbLrstDUA5MLw4FibIATleR0rcL+qI7A7WpMj52J1yXs/AJSGK6r2WBFAH1hJ6ZehWLm4iU3rZh8qrN/2soXJx4xqH8dKJMnQ2G1XX89PL3XKHtApbVH1vO1JlHOhEZLgUVIIBj4DBCn+uPQO7jSLSFK4ZcOfSvGjI0u2XbOpReDXEMJ5z6ZVCbQtF6XhAJeSJIZNr+10mAeEtMFeWsJGvEPref/S78byM73UxE0WecZVEB14zBFwXGS1YwrjE0OPUZttYR60a0LWcx51R6Fj0d25hDtfDB13hCIWwpCDYVhAVgZo8agH4m9g9UUHYqXe/31SGmZ3HxzzKnOOq7XyVM5XhREkI7Qvewy/iVJzn/KQEoPsa/WXdOzfRYbkh1Xnc9Nic5pjHU+GCZLxxVrPoobyyQihIa+pECWbrYv61yGB4ux6C8QXuh8zX3TTG3Pjc/qcYeho/BWF4RXyffchN77JNxEosBUpceT3T8Mt0+awqYdXS81J0eI9sni7tE4G635kJfZ3FXuHXbOzG4VPpLA92OO0tQ5xqrvzOd10VdxiVNq3BT9C5M1W4W9GkSz3uLqtI26qa8m8X4jNUr2CFdStIbot7F5PBg+WuMyyHdrke7KPA17qXmXQvA2SVSChaYKKcPuDzi0QdFGvstFcbnCitEZwod7YpINgWRyPuNw0JFaAt/fza8TRngH+BWqjsCu6sgCY7NKv/3pBlaFInRkUtE4Arce1/gnCdeX8UwjcjYmWf9/QrZJVxCvz9lAqMhMTAWHciDNZje/toijXPSY85ehPA6dRLFOik4dC2Ua1nv/Te3/U0pyugHlsTyvXIc6kQhFWj7mfnrZ4JYmvpR3QYNlJXrWaia9fxWmUyxDywWepnz0dpQSZWe3/ndwukJv8OFFITeCaik0mpZ0zRaTyF16vFcO7Jmh5lJ71SfTkHfi4RUukAFVeHqEby8VyR1idA5G/UJP28c7NkLine 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 |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 37 KiB |
@@ -0,0 +1,478 @@
|
|||||||
|
# AIA Astro Migration — Living Session Handoff
|
||||||
|
|
||||||
|
**Last updated:** October 30, 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. Forms B/C are not activated; physical B is retired.
|
||||||
|
|
||||||
|
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. See the current decision above and the two-form specification.
|
||||||
|
- 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. Form C, 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).
|
||||||
@@ -1,5 +1,16 @@
|
|||||||
# Accessibility Audit
|
# 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
|
## Implemented
|
||||||
|
|
||||||
- Semantic header, navigation, main, article, section, and footer landmarks.
|
- Semantic header, navigation, main, article, section, and footer landmarks.
|
||||||
@@ -13,16 +24,279 @@
|
|||||||
- Reduced decorative image announcements through empty alt text where appropriate.
|
- Reduced decorative image announcements through empty alt text where appropriate.
|
||||||
- Responsive typography and layouts without fixed text sizing.
|
- Responsive typography and layouts without fixed text sizing.
|
||||||
- Language-switcher choices are limited to routes that actually exist.
|
- 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.
|
- Like buttons expose pressed and disabled state.
|
||||||
- Source-faithful colors, section hierarchy, and controls were retained while
|
- Source-faithful colors, section hierarchy, and controls were retained while
|
||||||
avoiding the source site's modal that obscures content on initial load.
|
avoiding the source site's modal that obscures content on initial load.
|
||||||
|
|
||||||
## Manual Review
|
## 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.
|
- Test keyboard and screen-reader behavior across all migrated pages.
|
||||||
- Perform contrast testing against final approved brand colors.
|
- Perform contrast testing against final approved brand colors.
|
||||||
- Review extracted article heading hierarchy and any table markup.
|
- Review extracted article heading hierarchy and any table markup.
|
||||||
- Confirm Arabic content and RTL reading order with a fluent reviewer.
|
- 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
|
- Validate the rebuilt mobile navigation and all full-page responsive
|
||||||
layouts in a browser outside the autonomous sandbox.
|
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.
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
# Blog Content Audit
|
# Blog Content Audit
|
||||||
|
|
||||||
Checked 65 blog post bodies for layout content duplicated in Markdown.
|
Checked 74 blog post bodies for layout content duplicated in Markdown.
|
||||||
Verified 125 FAQ questions across 19 FAQ-bearing posts.
|
Verified 182 FAQ questions across 30 FAQ-bearing posts.
|
||||||
Detected 32 source-faithful blog blockquotes.
|
Detected 58 source-faithful blog blockquotes.
|
||||||
|
|
||||||
No duplicated article headers or invalid MDX FAQ components were detected.
|
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.
|
||||||
@@ -1,3 +1,23 @@
|
|||||||
|
## 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;
|
||||||
|
}
|
||||||
|
|
||||||
rewrite ^/aba$ /aba-therapy permanent;
|
rewrite ^/aba$ /aba-therapy permanent;
|
||||||
rewrite ^/autismevaluations$ /autism-evaluations permanent;
|
rewrite ^/autismevaluations$ /autism-evaluations permanent;
|
||||||
rewrite ^/learnersocialclub$ /learner-social-club 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,5 +1,5 @@
|
|||||||
# Page Imagery Audit
|
# 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.
|
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,115 @@
|
|||||||
|
# Phase 10 — Technical Readiness Package
|
||||||
|
|
||||||
|
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. Forms B/C are not activated; physical B is retired.
|
||||||
|
|
||||||
|
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. Form C remains unimplemented. 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, Form C, private portal serving and hosting activation remain separate and unauthorized by this package.
|
||||||
|
|
||||||
|
## 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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -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."
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,550 @@
|
|||||||
|
# Phase 6A Library Architecture Proposal
|
||||||
|
|
||||||
|
**Decision date:** 2026-10-09 UTC
|
||||||
|
**Starting checkpoint:** `34d5394b3ce765028a27b9cddd9952de3f09bfe7`
|
||||||
|
**Status:** proposal only; implementation is not authorized
|
||||||
|
|
||||||
|
## A. Executive Decision Summary
|
||||||
|
|
||||||
|
### Recommended architecture
|
||||||
|
|
||||||
|
1. **Search:** generate one compact JSON document index per language from the
|
||||||
|
existing publication manifest and blog collection. Load it on demand and use
|
||||||
|
a small dependency-free TypeScript client for normalization, ranking, result
|
||||||
|
rendering, URL state, and accessibility. Search title, description, headings,
|
||||||
|
category, author display data, and future tags. Do not index full article
|
||||||
|
bodies in the first release.
|
||||||
|
2. **Library pagination:** render ten articles per static page, matching the
|
||||||
|
verified production page size. Keep each locale's existing Library root as
|
||||||
|
page 1, generate only nonempty `/page/{n}` pages for `n >= 2`, and permanently
|
||||||
|
redirect `/page/1` aliases to the corresponding root.
|
||||||
|
3. **Author archives:** derive localized author pages and their pagination from
|
||||||
|
author records plus the same eligible-post catalog. Generate no manually
|
||||||
|
maintained post lists. Author roots use explicit author `translationKey`
|
||||||
|
relationships; numbered author pages do not become translations merely
|
||||||
|
because their numbers match.
|
||||||
|
4. **Routing and policy:** add archive/search descriptors to the shared route and
|
||||||
|
publication model rather than creating a second eligibility system. The
|
||||||
|
existing `[...slug].astro` manifest-driven route architecture should dispatch
|
||||||
|
content and generated archive kinds from one validated static-path inventory.
|
||||||
|
5. **Progressive enhancement:** server-rendered paginated Library and author
|
||||||
|
pages remain complete navigation without JavaScript. Search is an explicit
|
||||||
|
enhancement; without JavaScript the search control is not presented as
|
||||||
|
functional and visitors retain normal archive navigation.
|
||||||
|
|
||||||
|
This is preferable at the present scale because the three measured metadata
|
||||||
|
indexes total **42,090 bytes uncompressed, 12,693 bytes gzip, or 10,709 bytes
|
||||||
|
Brotli** for 65 records. English alone is 26,391/8,036/6,652 bytes. A custom
|
||||||
|
metadata index keeps queries local, adds no package or service, excludes drafts
|
||||||
|
at build time, and can implement Spanish/Arabic normalization explicitly. A
|
||||||
|
full-body prototype would be 474,623 bytes uncompressed and 135,796 bytes gzip;
|
||||||
|
that additional payload is not justified by a verified visitor requirement.
|
||||||
|
|
||||||
|
### Important tradeoffs
|
||||||
|
|
||||||
|
- Metadata search will not find a term appearing only in article body copy.
|
||||||
|
- Dependency-free ranking will be deterministic and understandable but less
|
||||||
|
sophisticated than fuzzy/stemmed third-party search.
|
||||||
|
- Production currently has 55 English articles and six ten-item pages; Astro has
|
||||||
|
46 English records and can create only five nonempty pages. The nine missing
|
||||||
|
Phase 6C articles must be reconciled before English page 6 and author page 6
|
||||||
|
can be accepted. The architecture must not create an empty page or redirect a
|
||||||
|
distinct archive page merely to satisfy a route count.
|
||||||
|
- The current localized author records are structurally usable but their names
|
||||||
|
and English-only short descriptions do not reproduce the current Spanish and
|
||||||
|
Arabic archive headings/biographies. Author content needs source-supported
|
||||||
|
reconciliation and human language review before those archives publish.
|
||||||
|
|
||||||
|
### Approval gates
|
||||||
|
|
||||||
|
Approval is required for the metadata-only search scope, the `/search`
|
||||||
|
compatibility behavior, inclusion of accessible noindex syndicated records in
|
||||||
|
listings/search, pagination/archive indexing and sitemap treatment, author
|
||||||
|
record changes, and sequencing Phase 6C before final English pagination.
|
||||||
|
|
||||||
|
## B. Current Architecture Inventory
|
||||||
|
|
||||||
|
### Rendering and routing
|
||||||
|
|
||||||
|
- `src/pages/[...slug].astro` asks `getPublicationManifest()` for every eligible
|
||||||
|
page/post route and dispatches the three `slug: library` records to separate
|
||||||
|
English, Spanish, and Arabic components. There is no generated archive kind.
|
||||||
|
- `LibraryEnglish.astro`, `LibrarySpanish.astro`, and `LibraryArabic.astro` each
|
||||||
|
independently filter the manifest by language, sort by date descending, render
|
||||||
|
every eligible post, and repeat a five-item “popular” slice. English alone
|
||||||
|
renders an inert `<input type="search">`; no script, form, filtering, state, or
|
||||||
|
announcements exist.
|
||||||
|
- `BlogIndexLayout.astro` supplies shared hero/intro/sidebar layout and delegates
|
||||||
|
list contents. `BlogCard.astro` creates localized article URLs and dates, but
|
||||||
|
hardcodes Rula Diab's English byline/avatar and does not link to an author
|
||||||
|
archive.
|
||||||
|
- `BlogPostLayout.astro` likewise hardcodes the visible English byline. Its
|
||||||
|
BlogPosting JSON-LD independently resolves an exact locale/slug author and
|
||||||
|
already fails for missing or ambiguous records.
|
||||||
|
- The three Library Markdown bodies contain old extracted listing snapshots.
|
||||||
|
`[...slug].astro` bypasses these bodies, so they do not render, but they are a
|
||||||
|
competing stale representation. Phase 6B should replace them with maintenance
|
||||||
|
notes only after the generated Library implementation is accepted.
|
||||||
|
|
||||||
|
### Publication and translation policy
|
||||||
|
|
||||||
|
- `publication.ts` combines page and blog collections and delegates route,
|
||||||
|
canonical, eligibility, sitemap, collision, and translation validation to
|
||||||
|
`publication-policy.ts`.
|
||||||
|
- Drafts are not generated. Published noindex and external-canonical records are
|
||||||
|
generated but excluded from the sitemap and hreflang graph. Staging globally
|
||||||
|
emits `noindex,nofollow`, an empty sitemap, and no hreflang.
|
||||||
|
- Translation equivalence is explicit and collection-scoped through
|
||||||
|
`translationKey`; it is never guessed from slugs.
|
||||||
|
- Authors are intentionally outside the current publication manifest. Author
|
||||||
|
records declare locale and translation keys, but no author routes exist.
|
||||||
|
|
||||||
|
### Current content inventory
|
||||||
|
|
||||||
|
The historical 65-post count remains accurate, but it was independently
|
||||||
|
recalculated from the current files and frontmatter:
|
||||||
|
|
||||||
|
| Language | Records | Generated/non-draft | Noindex + external canonical | Sitemap-eligible | Raw Markdown/MDX body bytes |
|
||||||
|
| --- | ---: | ---: | ---: | ---: | ---: |
|
||||||
|
| English | 46 | 46 | 2 | 44 | 276,099 |
|
||||||
|
| Spanish | 12 | 12 | 0 | 12 | 105,272 |
|
||||||
|
| Arabic | 7 | 7 | 0 | 7 | 41,832 |
|
||||||
|
| **Total** | **65** | **65** | **2** | **63** | **423,203** |
|
||||||
|
|
||||||
|
There are no drafts. The two exceptions are
|
||||||
|
`community-highlight-meet-rula-diab` and `new-aia-scottsdale-office`; both are
|
||||||
|
accessible local English routes with verified `noindex` and external canonicals.
|
||||||
|
Current Library components use `eligible`, not `sitemapEligible`, so all 65
|
||||||
|
appear in lists.
|
||||||
|
|
||||||
|
Every record has title, description, date, author, category, featured image,
|
||||||
|
canonical, and translation key. All use category `Library`, all have an empty
|
||||||
|
tags array, none has `updatedDate`, and none supplies image `alt` frontmatter.
|
||||||
|
The content model can support tags and modification dates later without changing
|
||||||
|
the archive algorithm. Search should not pretend empty tags add useful ranking.
|
||||||
|
|
||||||
|
Equal-date sets exist in both English and Spanish. Current ordering is date
|
||||||
|
descending with an implicit stable route order inherited from the manifest.
|
||||||
|
The new catalog should make this explicit: **date descending, then normalized
|
||||||
|
route/slug ascending**.
|
||||||
|
|
||||||
|
### Author inventory and relationships
|
||||||
|
|
||||||
|
| Language | Author records | Author slug | Referencing posts |
|
||||||
|
| --- | ---: | --- | ---: |
|
||||||
|
| English | 1 | `rula-diab` | 46 |
|
||||||
|
| Spanish | 1 | `rula-diab` | 12 |
|
||||||
|
| Arabic | 1 | `rula-diab` | 7 |
|
||||||
|
|
||||||
|
The three records share `translationKey: rula-diab`, name `Rula Diab`, one
|
||||||
|
avatar, and the same short English description. The schema has `name`, `slug`,
|
||||||
|
optional `description`, optional `avatar`, `lang`, and `translationKey`. It is
|
||||||
|
sufficient to identify and relate archives, but not to reproduce production's
|
||||||
|
localized credentialed headings and biographies without content reconciliation.
|
||||||
|
An optional locale-specific `displayName` is justified for archive presentation
|
||||||
|
while preserving `name` as the person's name in BlogPosting schema. No multiple-
|
||||||
|
author field should be added until a real multi-author record requires it.
|
||||||
|
|
||||||
|
## C. Production Behavior and URL Evidence
|
||||||
|
|
||||||
|
### Method and freshness
|
||||||
|
|
||||||
|
`robots.txt` was checked first. It allows the requested public paths. Twenty-nine
|
||||||
|
bounded sequential GETs were made from **2026-10-09 18:01:51 through 18:02:17
|
||||||
|
UTC** with no-cache request headers, no redirect following, no authentication,
|
||||||
|
and no form submission. Requests covered representative roots, first-page
|
||||||
|
aliases, last pages, first invalid boundaries, author equivalents, and search.
|
||||||
|
One headless Chromium GET then allowed the existing search JavaScript to render
|
||||||
|
one result page; it did not submit a form or write to production.
|
||||||
|
|
||||||
|
HubSpot responses variously reported `HIT`, `MISS`, or `REVALIDATED` and mostly
|
||||||
|
identified October 3–4 prerenders. `Cache-Control: no-store, no-cache,
|
||||||
|
must-revalidate` did not establish origin freshness. Findings are current public
|
||||||
|
behavior from consistent responses, with potentially cached content. The older
|
||||||
|
2026-10-07 route report remains historical evidence for URLs not repeated.
|
||||||
|
|
||||||
|
### Observed behavior
|
||||||
|
|
||||||
|
| Family | Fresh result | Visible results | Navigation / metadata |
|
||||||
|
| --- | --- | ---: | --- |
|
||||||
|
| `/library` | 200, `lang=en-us` | 10 | Pages 1–6; page 6 has 5; page 7 is 404 |
|
||||||
|
| `/es/library` | 200, `lang=es` | 10 | Pages 1–2; page 2 has 2; page 3 is 404 |
|
||||||
|
| `/ar/library` | 200, `lang=ar dir=rtl` | 7 | One page; page 2 is 404 |
|
||||||
|
| English author root | 200 | 10 | Pages 1–6; page 6 has 5; page 7 is 404 |
|
||||||
|
| Spanish author root | 200 | 10 | Pages 1–2; page 2 has 2; page 3 is 404 |
|
||||||
|
| Arabic author root | 200, RTL | 7 | One page; page 2 is 404 |
|
||||||
|
|
||||||
|
All six `/page/1` candidates return 200 and show the same ordered article links,
|
||||||
|
title, and counts as their root rather than redirecting. English trailing slashes
|
||||||
|
on `/library/` and `/library/author/rula-diab/` return 301 to their no-slash
|
||||||
|
forms. The inspected archive/listing pages expose no canonical or robots meta;
|
||||||
|
their pagination/author URLs are absent from the production sitemap.
|
||||||
|
|
||||||
|
The author roots display substantial localized bios and credentialed headings:
|
||||||
|
English `Rula Diab, Clinical Director, M.Ed, BCBA, LBA`, a Spanish localized
|
||||||
|
equivalent, and an Arabic localized equivalent. These are not represented by
|
||||||
|
the current local author records and must not be invented from this report.
|
||||||
|
|
||||||
|
### Production search
|
||||||
|
|
||||||
|
Library search forms use GET `/search` with `term` plus repeated `type=BLOG_POST`
|
||||||
|
and `type=LISTING_PAGE`. The search page's own form uses `q` and also includes
|
||||||
|
`SITE_PAGE`. Raw `/search` and `/search?term=autism` HTML contains no results;
|
||||||
|
the existing HubSpot JavaScript loads them after page load.
|
||||||
|
|
||||||
|
A browser-level GET of
|
||||||
|
`/search?term=autism&type=BLOG_POST&type=LISTING_PAGE` displayed **66 mixed-
|
||||||
|
language results**, ten per result page, and result offsets `0`, `10`, … `60`.
|
||||||
|
The first page included English and Spanish Library roots/posts, confirming that
|
||||||
|
production search is global rather than scoped to the Library page's language.
|
||||||
|
The search page has no useful document title (raw parsing resolves an SVG title),
|
||||||
|
canonical, or robots directive. With JavaScript unavailable, production shows
|
||||||
|
no results.
|
||||||
|
|
||||||
|
## D. URL Disposition Matrix
|
||||||
|
|
||||||
|
`Current` below means the October 9 check; `historical` means the accepted
|
||||||
|
October 7 route evidence. Proposed archive pages are self-canonical, indexable,
|
||||||
|
and sitemap-eligible under the shared policy. `/search` is noindex and excluded.
|
||||||
|
|
||||||
|
| Production URL or pattern | Purpose / language | Evidence and existing behavior | Proposed Astro behavior and preservation | Redirect / canonical / indexing | Phase 6B validation |
|
||||||
|
| --- | --- | --- | --- | --- | --- |
|
||||||
|
| `/library` | Library page 1, EN | Current 200, 10 results, pages 1–6 | Preserve static page 1 | Self-canonical; index; sitemap; existing EN/ES/AR root hreflang | Generated HTML, canonical, first 10 sorted posts |
|
||||||
|
| `/es/library` | Library page 1, ES | Current 200, 10 results, pages 1–2 | Preserve static page 1 | Self-canonical; index; sitemap; existing root hreflang | Locale cards/date/labels and two-page navigation |
|
||||||
|
| `/ar/library` | Library page 1, AR | Current 200, 7 results, RTL | Preserve static one-page archive | Self-canonical; index; sitemap; existing root hreflang | `lang=ar dir=rtl`; no nonexistent page 2 |
|
||||||
|
| `/library/page/1` | First-page alias, EN | Current 200 duplicate | Preserve incoming URL through **301 to `/library`** | Redirect only; canonical destination `/library`; no HTML/sitemap | Redirect map and no duplicate HTML |
|
||||||
|
| `/es/library/page/1` | First-page alias, ES | Current 200 duplicate | 301 to `/es/library` | Redirect only | Redirect test |
|
||||||
|
| `/ar/library/page/1` | First-page alias, AR | Current 200 duplicate | 301 to `/ar/library` | Redirect only | Redirect test |
|
||||||
|
| `/library/page/2`–`/5` | Library pages, EN | Current 200; `/2` historical/current, `/3`–`/5` historical 200 | Generate nonempty ten-item pages from current corpus | Self-canonical; index; sitemap; no hreflang inferred | Route/card boundaries, prev/next, direct access |
|
||||||
|
| `/library/page/6` | Library last page, EN | Current 200 with 5 production posts | Generate only after Phase 6C supplies the missing records; do not create empty/redirected substitute | Self-canonical; index; sitemap once real | Phase 6C prerequisite; assert 5 real cards |
|
||||||
|
| `/library/page/7+` | Invalid future boundary, EN | Current `/7` 404 | Generate only if eligible count later requires it; otherwise 404 | No canonical/sitemap while absent | Beyond-last route absent |
|
||||||
|
| `/es/library/page/2` | Library last page, ES | Current 200 with 2 | Generate static page | Self-canonical; index; sitemap; no page-number hreflang | Exactly 2 cards today |
|
||||||
|
| `/es/library/page/3+` | Invalid boundary, ES | Current `/3` 404 | No route until count requires it | 404 while absent | Beyond-last route absent |
|
||||||
|
| `/ar/library/page/2+` | Invalid boundary, AR | Current `/2` 404 | No route until count requires it | 404 while absent | Beyond-last route absent |
|
||||||
|
| `/library/author/rula-diab` | Author root, EN | Current 200, localized bio, pages 1–6 | Generate from EN author record and posts after author content reconciliation | Self-canonical; index; sitemap; explicit author-root hreflang only | Author resolution, bio, links, first 10 posts |
|
||||||
|
| `/es/library/author/rula-diab` | Author root, ES | Current 200, Spanish bio, pages 1–2 | Generate from ES author record; no invented copy | Self-canonical; index; sitemap; author-root hreflang | Human-reviewed source content and route test |
|
||||||
|
| `/ar/library/author/rula-diab` | Author root, AR | Current 200, Arabic bio, RTL | Generate from AR author record; no invented copy | Self-canonical; index; sitemap; author-root hreflang | RTL and human-reviewed source content |
|
||||||
|
| `/library/author/rula-diab/page/1` | Author first alias, EN | Current 200 duplicate | 301 to author root | Redirect only | Redirect test |
|
||||||
|
| `/es/library/author/rula-diab/page/1` | Author first alias, ES | Current 200 duplicate | 301 to ES author root | Redirect only | Redirect test |
|
||||||
|
| `/ar/library/author/rula-diab/page/1` | Author first alias, AR | Current 200 duplicate | 301 to AR author root | Redirect only | Redirect test |
|
||||||
|
| `/library/author/rula-diab/page/2`–`/5` | Author pages, EN | Current/historical 200 | Generate from current matching posts | Self-canonical; index; sitemap; no numbered hreflang | Same deterministic chunks as Library today |
|
||||||
|
| `/library/author/rula-diab/page/6` | Author last page, EN | Current 200 with 5 | Generate after Phase 6C; no empty substitute | Self-canonical; index; sitemap once real | Phase 6C prerequisite |
|
||||||
|
| `/library/author/rula-diab/page/7+` | Invalid boundary, EN | Current `/7` 404 | 404 until count requires route | Absent from sitemap | Beyond-last route absent |
|
||||||
|
| `/es/library/author/rula-diab/page/2` | Author last page, ES | Current 200 with 2 | Generate static page | Self-canonical; index; sitemap | Exactly 2 matching posts |
|
||||||
|
| `/es/library/author/rula-diab/page/3+` | Invalid boundary, ES | Current `/3` 404 | No route until required | 404 | Boundary test |
|
||||||
|
| `/ar/library/author/rula-diab/page/2+` | Invalid boundary, AR | Current `/2` 404 | No route until required | 404 | Boundary test |
|
||||||
|
| `/search` | Search shell, global | Current 200; client-rendered; malformed/absent SEO metadata | Preserve one static compatibility route using generated locale indexes and locale filter | Self-canonical path; **noindex,follow**; no sitemap/hreflang | Direct route, empty state, JS/no-JS behavior |
|
||||||
|
| `/search?term={query}` and repeated `type` | Legacy search state | Current form behavior; mixed-language results | Read `term`; safely ignore legacy `type`; preserve URL and client-render compatible results | Canonical `/search`; noindex; query escaped | Direct-load and XSS/Unicode tests |
|
||||||
|
| `/search?q={query}` | Search-page form state | Current search page uses `q` | Accept as alias input; normalize to one in-page state without network forwarding | Canonical `/search`; noindex | `q` and `term` equivalence test |
|
||||||
|
| `/search?...&offset={10n}` | Search pagination state | Browser verified offsets 0–60 | Honor nonnegative multiples of 10 on compatibility route; invalid values normalize to 0 | Canonical `/search`; noindex | Direct page, last/invalid offset tests |
|
||||||
|
| `/{locale?}/library/` and author trailing slash variants | Normalization | English examples current 301; other variants not individually requested | Host-level 301 to no-slash normalized route | Redirect only | Redirect-map and deployment acceptance test |
|
||||||
|
|
||||||
|
## E. Search Alternatives and Comparison
|
||||||
|
|
||||||
|
| Approach | Quality / languages | Payload and build | Accessibility / privacy | Maintenance | Decision |
|
||||||
|
| --- | --- | --- | --- | --- | --- |
|
||||||
|
| Generated metadata JSON + custom TypeScript | Explicit field weighting; deterministic Unicode normalization; Spanish accent and Arabic mark handling tested locally; no stemming/fuzzy by default | Current all-language index 42,090 raw / 12,693 gzip; one small client module; ordinary Astro static endpoints | Full control of semantic form/status/focus; queries stay in browser except legacy `/search` URLs; no third party | Small project-owned helper and tests; transparent failure modes | **Recommended** |
|
||||||
|
| MiniSearch-style client index | Built-in field boost, prefix, fuzzy matching, suggestions | Adds dependency and serialized index/client code; exact project payload not measured because no package was installed | Local/private and static; UI still project-owned | Better relevance features, but tokenizer/fuzzy behavior needs locale tuning and dependency upkeep | Defer until measured search-quality failures justify it |
|
||||||
|
| Pagefind-style post-build search | Indexes rendered pages after Astro, separates indexes by document language, supports static hosting | Adds post-build executable/runtime bundles and tends toward full-page text; changes build/deployment pipeline | Local/private; UI can be accessible but requires integration; no server | Strong general-site search, but broader than this Library and duplicates manifest eligibility/filter work | Reject for current 65-record Library; reconsider for verified site-wide full-text search |
|
||||||
|
| External hosted search/API | Potentially strongest ranking/analytics | Network/service dependency and operational credentials | Visitor terms leave the site; logging, consent, retention, failure, and cost concerns | Highest operational burden | Reject under static/data-minimization requirements |
|
||||||
|
|
||||||
|
The proposed index stores route, locale, title, description, headings, category,
|
||||||
|
future nonempty tags, author display name/slug, and publication date. It excludes
|
||||||
|
article body HTML, unpublished content, likes/views, and sensitive or runtime
|
||||||
|
data. Featured images need not be duplicated; result cards can use the existing
|
||||||
|
article metadata or omit thumbnails in the compact search view.
|
||||||
|
|
||||||
|
Normalization should use Unicode NFKC, locale-aware lowercasing, collapsed
|
||||||
|
whitespace, and Unicode punctuation separators. A secondary comparison key may
|
||||||
|
fold Latin combining marks so `evaluacion` finds `evaluación`, and remove Arabic
|
||||||
|
tashkeel/tatweel so marked and unmarked forms match, while preserving original
|
||||||
|
display text. Do not apply English stemming to Spanish or Arabic. Rank exact
|
||||||
|
title phrase, title tokens, heading matches, description, category/tags, and
|
||||||
|
author in that order; break equal scores by date descending then route ascending.
|
||||||
|
Prefix matching should require a minimum token length. Empty queries render the
|
||||||
|
normal archive; no-result queries announce zero and offer clear/reset.
|
||||||
|
|
||||||
|
## F. Pagination and Author Architecture
|
||||||
|
|
||||||
|
### Shared catalog
|
||||||
|
|
||||||
|
Add a pure `library-catalog` module that accepts the existing publication
|
||||||
|
manifest and author records and returns:
|
||||||
|
|
||||||
|
- eligible posts grouped by locale;
|
||||||
|
- explicit deterministic ordering;
|
||||||
|
- ten-item page slices and nonempty page descriptors;
|
||||||
|
- exact locale/slug author resolution with duplicate/missing validation;
|
||||||
|
- author archive descriptors derived from post relationships;
|
||||||
|
- compact locale search records.
|
||||||
|
|
||||||
|
It must not read extracted Library Markdown listing bodies or maintain manual
|
||||||
|
post arrays. Current accessible noindex/external-canonical posts remain listable
|
||||||
|
because that is established behavior, while drafts remain absent. An author
|
||||||
|
archive should require a valid locale author record and at least one eligible
|
||||||
|
post, including at least one sitemap-eligible post before the archive itself can
|
||||||
|
be indexable.
|
||||||
|
|
||||||
|
### Static route generation
|
||||||
|
|
||||||
|
Extend the manifest-driven static-path inventory with validated generated route
|
||||||
|
descriptors (`library-page`, `author-index`, `author-page`, `search`) and run
|
||||||
|
their canonical, collision, robots, and sitemap state through reusable Phase 3A
|
||||||
|
policy functions. Do not hand-author content records for numbered pages. The
|
||||||
|
catchall renderer can dispatch descriptor kinds to shared Library/archive
|
||||||
|
components while preserving content routes and collision detection.
|
||||||
|
|
||||||
|
Page 1 is always the unnumbered root. Next/previous and numbered links are real
|
||||||
|
anchors with localized accessible labels, `aria-current="page"` on the current
|
||||||
|
page, and no links to nonexistent pages. Invalid numbers, zero, negative values,
|
||||||
|
nonintegers, unknown author slugs, authors with no eligible posts, and pages past
|
||||||
|
the end produce no static route and therefore 404.
|
||||||
|
|
||||||
|
Search temporarily replaces the visible page list with all-language-appropriate
|
||||||
|
matching results and hides the archive pager; clear/reset restores the original
|
||||||
|
server-rendered page. Adding, removing, drafting, or changing an article updates
|
||||||
|
search and page chunks in one build without manual index edits.
|
||||||
|
|
||||||
|
### Author presentation
|
||||||
|
|
||||||
|
Resolve the author once by exact locale and slug. Reuse the same resolution in
|
||||||
|
BlogCard, BlogPostLayout, BlogPosting schema, and author archives. Add an optional
|
||||||
|
locale-specific `displayName` only to preserve the published credentialed archive
|
||||||
|
heading; retain `name` for the Person entity. The existing description/avatar can
|
||||||
|
drive the bio after source reconciliation. Build must fail on missing or duplicate
|
||||||
|
locale/slug records. Do not treat authors as team members or infer employment.
|
||||||
|
|
||||||
|
### Route-count model
|
||||||
|
|
||||||
|
With the current 46/12/7 corpus and ten items per page:
|
||||||
|
|
||||||
|
| Addition | HTML routes | Sitemap URLs | Hreflang links |
|
||||||
|
| --- | ---: | ---: | ---: |
|
||||||
|
| `/search` | +1 | 0 | 0 |
|
||||||
|
| Library pages 2+ (4 EN, 1 ES) | +5 | +5 | 0 |
|
||||||
|
| Three author roots | +3 | +3 | +12 if explicit author equivalence is approved |
|
||||||
|
| Author pages 2+ (4 EN, 1 ES) | +5 | +5 | 0 |
|
||||||
|
| **Projected current total** | **96 + 14 = 110** | **92 + 13 = 105** | **174 + 12 = 186** |
|
||||||
|
|
||||||
|
This current-corpus model intentionally lacks the two distinct English page-6
|
||||||
|
routes. If all nine Phase 6C English posts are ordinary eligible/indexable
|
||||||
|
records, those posts add nine HTML/sitemap URLs and produce one more Library and
|
||||||
|
one more author page. The combined projection becomes **121 HTML routes** and
|
||||||
|
**up to 116 sitemap URLs**. Exact counts must be recalculated from final policy;
|
||||||
|
new translation relationships could separately affect hreflang.
|
||||||
|
|
||||||
|
## G. Multilingual and SEO Design
|
||||||
|
|
||||||
|
- Each JSON index contains one locale only. Embedded Library search never mixes
|
||||||
|
languages. The `/search` compatibility page may search all locales but must
|
||||||
|
expose an explicit locale filter and label result language.
|
||||||
|
- Components receive localized labels/messages; none are generated by machine
|
||||||
|
translation. Missing copy blocks implementation for that locale rather than
|
||||||
|
falling back silently to English.
|
||||||
|
- Arabic uses the existing `lang=ar dir=rtl` layout. Pagination order, arrows,
|
||||||
|
search icon placement, result counts, focus order, and mixed Latin/Arabic text
|
||||||
|
require RTL browser testing. Use `Intl.DateTimeFormat`/`Intl.NumberFormat` with
|
||||||
|
the page locale; keep machine-readable dates stable.
|
||||||
|
- Existing Library roots retain their explicit three-language translation set.
|
||||||
|
Numbered pages do not receive hreflang because page N contains different
|
||||||
|
records across locales.
|
||||||
|
- Author roots may participate only through the author collection's explicit,
|
||||||
|
validated `translationKey`, with reciprocal published archives and English as
|
||||||
|
`x-default`. Numbered author pages receive no hreflang.
|
||||||
|
- `/search` has no translation graph and is noindex. JSON endpoints and redirect
|
||||||
|
sources never enter the sitemap.
|
||||||
|
- Generated archive pages self-canonicalize to normalized local URLs and use the
|
||||||
|
staging/production robots switch. Page 2+ and author archives are recommended
|
||||||
|
as indexable and sitemap-eligible to remain consistent with Phase 3A's “all
|
||||||
|
eligible self-canonical local routes” rule. This intentionally improves on
|
||||||
|
production's missing canonicals and sitemap omission and requires approval.
|
||||||
|
- LanguageSwitcher uses only the validated graph. It must not construct page-N,
|
||||||
|
author, or search equivalents from route shape.
|
||||||
|
|
||||||
|
## H. Accessibility and Progressive Enhancement
|
||||||
|
|
||||||
|
- Render complete cards and archive pagination on the server.
|
||||||
|
- Hide/reveal the enhanced search form only after its script initializes; include
|
||||||
|
a `<noscript>` explanation and links to the three Library roots. Do not show a
|
||||||
|
control that appears functional when JavaScript is unavailable.
|
||||||
|
- Use an explicit label, native search input, submit button, and clear button.
|
||||||
|
Preserve browser keyboard behavior; Escape may clear only when documented and
|
||||||
|
must not trap focus.
|
||||||
|
- Announce result counts/no-results through a persistent `aria-live="polite"`
|
||||||
|
status. Do not announce on every keystroke without debouncing.
|
||||||
|
- Keep focus in the input while typing. On explicit submission, move focus to a
|
||||||
|
results heading only when that improves navigation; clearing returns to the
|
||||||
|
input and restores the original archive.
|
||||||
|
- Use real result links and real pagination anchors. Mark current page with
|
||||||
|
`aria-current`; give previous/next localized accessible names; maintain visible
|
||||||
|
focus indication and adequate touch targets.
|
||||||
|
- New embedded searches should store state in a URL fragment to avoid sending
|
||||||
|
terms to the static server while retaining share/back-forward behavior. The
|
||||||
|
legacy `/search?term=` compatibility route necessarily sends its query and
|
||||||
|
should document that static-host access logs may retain it.
|
||||||
|
|
||||||
|
## I. Performance and Deployment
|
||||||
|
|
||||||
|
Expected static output is three JSON files such as
|
||||||
|
`/assets/search/library-en.json`, `library-es.json`, and `library-ar.json`, one
|
||||||
|
compiled client module, the generated HTML archives, and redirect-map entries.
|
||||||
|
Load only the current locale index on first interaction; `/search` can load the
|
||||||
|
selected locale and additional indexes only when requested. Cache fingerprinted
|
||||||
|
client code immutably and JSON with normal deploy revalidation so new posts are
|
||||||
|
visible after a release.
|
||||||
|
|
||||||
|
No database, persistent process, server-side search, external query service,
|
||||||
|
environment variable, or production API is required. The result works on nginx,
|
||||||
|
the current Nix environment, a Raspberry Pi serving static files, the existing
|
||||||
|
VPS, and conventional static hosts. Build cost is a small pass over content and
|
||||||
|
JSON serialization. Redirect behavior remains a deployment concern and must be
|
||||||
|
validated against the selected host; Phase 6A changes no nginx/Nix/deployment
|
||||||
|
file.
|
||||||
|
|
||||||
|
## J. Proposed Phase 6B Implementation Checkpoints
|
||||||
|
|
||||||
|
### 6B.1 — Shared catalog and search assets
|
||||||
|
|
||||||
|
- **Likely files:** new `src/utils/library-catalog.ts`; JSON endpoint(s);
|
||||||
|
`LibrarySearch.astro` and client script; existing Library components/layout;
|
||||||
|
tests and README/report.
|
||||||
|
- **Work:** derive eligible locale catalogs, explicit sort, metadata-only index,
|
||||||
|
normalization/ranking, locale messages, embedded search, and `/search`
|
||||||
|
compatibility route. Replace inert English input; add Spanish/Arabic controls.
|
||||||
|
- **Dependencies:** approval of search fields, legacy route behavior, and
|
||||||
|
noindex-record inclusion. No package dependency recommended.
|
||||||
|
- **Acceptance:** all search cases pass; JSON contains no drafts/body; current
|
||||||
|
route count increases by one for `/search`; search remains noindex/out of
|
||||||
|
sitemap; normal Library works without JavaScript.
|
||||||
|
- **Validation:** `test:library`, SEO/publication suites, both builds, route/link
|
||||||
|
audits, browser keyboard/RTL/JS-disabled checks.
|
||||||
|
|
||||||
|
### 6B.2 — Library pagination and first-page redirects
|
||||||
|
|
||||||
|
- **Likely files:** catalog helper, route manifest/catchall dispatch, shared
|
||||||
|
Library renderer/pager, redirect generator/map, tests/reports.
|
||||||
|
- **Work:** ten-item chunks, page 2+ descriptors, root page 1, invalid-page 404,
|
||||||
|
six page-1 redirects, localized pagination. Remove bypassed listing snapshots
|
||||||
|
from the three Library bodies only after rendered acceptance.
|
||||||
|
- **Prerequisite:** Phase 6C must supply the nine missing English records before
|
||||||
|
`/library/page/6` can pass preservation acceptance. If Phase 6C is not ready,
|
||||||
|
stop this checkpoint with five English pages rather than fabricating content.
|
||||||
|
- **Acceptance:** every page has unique real content, explicit sort, valid
|
||||||
|
canonicals/robots/sitemap state, no empty pages, and production URLs through
|
||||||
|
current last pages.
|
||||||
|
|
||||||
|
### 6B.3 — Author model, archive roots, and byline links
|
||||||
|
|
||||||
|
- **Likely files:** author schema/records, catalog/route descriptors, new author
|
||||||
|
archive presentation, BlogCard, BlogPostLayout, structured-data resolution
|
||||||
|
helper, tests/report.
|
||||||
|
- **Work:** optional `displayName`, source-supported localized bios/headings,
|
||||||
|
exact locale/slug resolution, archive pages/pagination, and shared linked
|
||||||
|
bylines. Preserve BlogPosting attribution semantics.
|
||||||
|
- **Dependencies:** source reconciliation and human Spanish/Arabic review;
|
||||||
|
approval of author-root hreflang and sitemap policy.
|
||||||
|
- **Acceptance:** roots and all nonempty numbered routes resolve; missing,
|
||||||
|
duplicate, zero-post, and invalid authors fail/404 appropriately; no manual
|
||||||
|
article arrays; no employment claims.
|
||||||
|
|
||||||
|
### 6B.4 — URL and SEO reconciliation
|
||||||
|
|
||||||
|
- **Likely files:** existing redirect generation/report outputs, publication
|
||||||
|
tests, route-audit evidence; no hosting config until separately authorized.
|
||||||
|
- **Work:** add exact page-1/trailing normalization decisions, verify canonical,
|
||||||
|
robots, sitemap, collisions, invalid boundaries, search noindex, and preserve
|
||||||
|
all known paths.
|
||||||
|
- **Acceptance:** disposition matrix is executable and audited; no redirect to a
|
||||||
|
generic Library root for a distinct page 2+ URL; staging safeguards remain.
|
||||||
|
|
||||||
|
### 6B.5 — Multilingual, accessibility, and performance acceptance
|
||||||
|
|
||||||
|
- **Likely files:** focused tests/report and only defect fixes in approved
|
||||||
|
components.
|
||||||
|
- **Work:** English/Spanish/Arabic search, localized counts/dates, RTL pager,
|
||||||
|
screen-reader announcements, keyboard/focus, JS-off browse, payload checks,
|
||||||
|
mobile/desktop browser review.
|
||||||
|
- **Acceptance:** no fabricated translation routes; index sizes recorded; no
|
||||||
|
external query transmission; complete build/audit matrix passes.
|
||||||
|
|
||||||
|
Each checkpoint must be an isolated reviewable diff. Failed validation stops the
|
||||||
|
sequence. Phase 6C content changes should remain a separate checkpoint even if
|
||||||
|
they are scheduled between 6B.1 and 6B.2.
|
||||||
|
|
||||||
|
## K. Test Matrix
|
||||||
|
|
||||||
|
| Area | Scenario | Test level | Expected result |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Search | Empty/whitespace query | Unit + browser | Normal archive restored; no false zero-result state |
|
||||||
|
| Search | No match, one match, many matches | Unit + generated browser fixture | Correct deterministic count/order and polite announcement |
|
||||||
|
| Search | Case, repeated whitespace, punctuation | Unit | Normalized equivalent matches |
|
||||||
|
| Search | `evaluación`/`evaluacion` and Spanish punctuation | Unit + browser | Accent-folded key matches; original text displayed |
|
||||||
|
| Search | Arabic marked/unmarked query and punctuation | Unit + RTL browser | Diacritics/tatweel do not block intended match; direction stays RTL |
|
||||||
|
| Search | Clear/reset, back/forward, direct fragment | Browser | State and original page restore predictably |
|
||||||
|
| Search | Keyboard/focus/screen reader | Browser/manual assistive review | Native operation, visible focus, stable focus, live count |
|
||||||
|
| Search | JavaScript disabled | Generated HTML + browser | Paginated browse works; honest no-search message |
|
||||||
|
| Search | Draft/unpublished fixture | Unit + integration | Absent from JSON/results; body content never leaked |
|
||||||
|
| Search | Legacy `term`, `q`, `type`, valid/invalid `offset` | Integration + browser | Compatibility route safely normalizes and remains noindex |
|
||||||
|
| Pagination | First, middle, last page | Unit + generated HTML | Correct slices, count, prev/next/current links |
|
||||||
|
| Pagination | Page 1 aliases | Redirect test | Locale/author-specific 301 to root |
|
||||||
|
| Pagination | Beyond-last, zero, negative, noninteger | Route integration | No generated route; 404 |
|
||||||
|
| Pagination | Zero posts / one page | Unit | No archive for zero-post author; no pager for one page |
|
||||||
|
| Pagination | Equal publication dates | Unit | Date descending then route ascending |
|
||||||
|
| Pagination | Add/remove/draft post | Fixture build | Page counts/routes/index update without manual edits |
|
||||||
|
| Author | Existing author with multiple posts | Unit + HTML | Localized record and correctly ordered posts |
|
||||||
|
| Author | New author / zero eligible posts | Fixture build | New route derives automatically only with eligible posts |
|
||||||
|
| Author | Missing/duplicate locale record | Unit + build failure | Explicit actionable validation error |
|
||||||
|
| Author | Invalid slug and page boundary | Route integration | 404; no leakage |
|
||||||
|
| Author | Localized records and links | HTML + browser | Card/article links use matching locale archive |
|
||||||
|
| SEO | Canonical/robots/sitemap | Publication unit + both builds | Shared policy exactly matches generated descriptors |
|
||||||
|
| SEO | Hreflang | Unit + HTML | Roots only when explicitly equivalent; never page-number guessing |
|
||||||
|
| SEO | Staging versus indexing | Build integration | Global noindex/empty sitemap/no hreflang restored at end |
|
||||||
|
| Routing | Known production URLs/redirects | Route audit | Every matrix row matches route or redirect evidence |
|
||||||
|
| Quality | Internal links/assets | Existing audits | No broken links or missing images |
|
||||||
|
|
||||||
|
## L. Human-decision Register
|
||||||
|
|
||||||
|
### Established project policy
|
||||||
|
|
||||||
|
- Static Astro, Markdown/MDX content collections, TypeScript, Zod, no database or
|
||||||
|
headless CMS, no form/search backend, and no invented translations.
|
||||||
|
- Publication eligibility, canonicals, robots, sitemap, explicit translation
|
||||||
|
relationships, staging protection, and external-canonical exceptions remain
|
||||||
|
governed by Phases 3A/3B.
|
||||||
|
- Search, pagination, and author archives are required visitor capabilities;
|
||||||
|
HubSpot internals need not be copied.
|
||||||
|
|
||||||
|
### Codex recommendations requiring approval
|
||||||
|
|
||||||
|
1. Approve dependency-free generated metadata JSON search and defer full-body,
|
||||||
|
fuzzy, and stemmed search until measured failures justify them.
|
||||||
|
2. Approve ten posts per page, unnumbered page-1 canonicals, and locale-specific
|
||||||
|
301 redirects from all six `/page/1` aliases.
|
||||||
|
3. Approve `/search` as a preserved noindex compatibility page accepting `term`,
|
||||||
|
`q`, legacy `type`, and `offset`; embedded Library search remains locale-only.
|
||||||
|
4. Approve indexable, self-canonical, sitemap-listed page 2+ and author archives,
|
||||||
|
even though HubSpot omits those URLs from its sitemap and canonical markup.
|
||||||
|
5. Approve retaining accessible noindex/external-canonical articles in lists and
|
||||||
|
internal search, matching current Astro behavior; they remain excluded from
|
||||||
|
sitemap/hreflang and preserve their metadata.
|
||||||
|
6. Approve explicit author-root hreflang from author `translationKey`, with no
|
||||||
|
hreflang for numbered pages.
|
||||||
|
7. Approve an optional localized `displayName` author field and a separate
|
||||||
|
source-supported author-content reconciliation with human Spanish/Arabic
|
||||||
|
review.
|
||||||
|
8. Approve scheduling the nine-post Phase 6C reconciliation before pagination
|
||||||
|
and author page-6 acceptance. No empty or misleading page 6 should ship.
|
||||||
|
|
||||||
|
### Not yet verified or intentionally deferred
|
||||||
|
|
||||||
|
- Production-cache timestamps do not prove origin freshness.
|
||||||
|
- Search query frequency and the value of body-only/fuzzy matching have not been
|
||||||
|
measured; no analytics should be added to answer this without consent review.
|
||||||
|
- Exact hosting redirect syntax remains undecided and must be validated for the
|
||||||
|
selected deployment target.
|
||||||
|
- Current author records are not adequate evidence for localized biography copy.
|
||||||
|
- Phase 6C publication/indexing/translation status for the nine missing posts is
|
||||||
|
unknown, so the post-6C route projection is an upper-bound model.
|
||||||
|
|
||||||
|
No Phase 6B implementation, dependency installation, redirect, content edit, or
|
||||||
|
deployment change is authorized by this proposal.
|
||||||