fix(content): reconcile published team roster and assets

This commit is contained in:
DeCentN2Madness committed 2026-10-09 10:40:08 -07:00
1 parent bc399b43b6
commit 34d5394b3c
11 files changed
+1051 -183

No files matched your search

+58 -67
View File
@@ -1,76 +1,66 @@
---
import Button from '../Button.astro';
import ContactObfuscation from '../ContactObfuscation.astro';
const groups = [
{
title: 'Board Certified Behavioral Analysts & Psychologists',
members: [
['team-rula-diab.webp', 'Rula Diab, BCBA, LBA, M.Ed', 'Clinical Director'],
['team-jennifer-espinoza.webp', 'Jennifer Espinoza, MAOL/ABA', 'Clinical BCBA'],
['team-timirah-clay.webp', 'Timirah Clay, M.Psy/ABA', 'Clinical BCBA']
]
},
{
title: 'Clinical Support',
members: [
['team-carol-harrington.webp', 'Carol Harrington, A.A. Spec. Ed.', 'Clinical Manager'],
['team-rachel-crosby.webp', 'Rachel Crosby', 'Clinical Administrator'],
['team-jennifer-bonefont.webp', 'Jennifer Bonefont, B.A. Psy', 'Clinical Client Advocate Supervisor']
]
},
{
title: 'Clinical Case Supervisors',
members: [['team-rachael-sanchez.webp', 'Rachael Sanchez, BS, M Psy/ABA', 'Clinical Supervisor']]
},
{
title: 'Clinical Education Specialists',
members: [['team-mahima-bedi.webp', 'Mahima Bedi', 'Clinical Instructor']]
},
{
title: 'ABA Clinic Management',
tagline: 'Applied Behavior Analysis "(ABA) at your service"',
tinted: true,
members: [
['team-mariah-marley.webp', 'Mariah Marley', 'Claims Billing'],
['team-eney-garcia.webp', 'Eney Garcia, BA', 'Accounts Billing'],
['team-ayah-shahbander.webp', 'Ayah Shahbander', 'Human Resources'],
['team-barbara-samanich.webp', 'Barbara Samanich, BFA', 'Creative Marketing Developer']
]
}
];
import type { TeamPageContent } from '../../types/team-page';
interface Props { content: TeamPageContent }
const { content } = Astro.props;
const obfuscatedEmail = content.careers.email
.replace('@', ' [at] ')
.replaceAll('.', ' [dot] ');
---
<article class="team-page">
<section class="team-intro container-narrow">
<h2>Our Clinical Team</h2>
<p class="eyebrow">Arizona Institute for Autism<br />Scottsdale, Arizona</p>
<p>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.</p>
</section>
{groups.map((group) => (
<section class:list={['team-group', { 'section-tint': group.tinted }]}>
<div class="container">
<h2>{group.title}</h2>
{group.tagline && <p class="team-group__tagline"><em>{group.tagline}</em></p>}
<div class="team-grid">
{group.members.map(([image, name, role]) => (
<article class="team-member">
<div class="team-thumb">
<img src={`/assets/images/${image}`} alt={name} loading="lazy" />
</div>
<h3>{name}</h3>
<p>{role}</p>
</article>
))}
<section class="team-clinical" aria-labelledby="clinical-team-heading">
<div class="team-intro container-narrow">
<h2 id="clinical-team-heading">{content.intro.heading}</h2>
<p class="eyebrow">{content.intro.organization}<br />{content.intro.location}</p>
<p>{content.intro.body}</p>
</div>
{content.clinicalGroups.map((group, groupIndex) => (
<section class="team-group" aria-labelledby={`clinical-group-${groupIndex}`}>
<div class="container">
<h3 id={`clinical-group-${groupIndex}`}>{group.heading}</h3>
<div class="team-grid">
{group.members.map(({ image, imageAlt, name, role }) => (
<article class="team-member">
<div class="team-thumb">
<img src={`/assets/images/${image}`} alt={imageAlt} width="342" height="456" loading="lazy" />
</div>
<h4>{name}</h4>
<p>{role}</p>
</article>
))}
</div>
</div>
</section>
))}
</section>
<section class="team-care section-tint" aria-labelledby="care-team-heading">
<div class="container">
<h2 id="care-team-heading">{content.careTeam.heading}</h2>
<h3>{content.careTeam.groupHeading}</h3>
<p class="team-group__tagline"><em>{content.careTeam.tagline}</em></p>
<div class="team-grid">
{content.careTeam.members.map(({ image, imageAlt, name, role }) => (
<article class="team-member">
<div class="team-thumb">
<img src={`/assets/images/${image}`} alt={imageAlt} width="342" height="456" loading="lazy" />
</div>
<h4>{name}</h4>
<p>{role}</p>
</article>
))}
</div>
</section>
))}
<p class="team-closing">{content.careTeam.closingStatement}</p>
</div>
</section>
<section class="team-careers">
<div class="container-narrow">
<p class="eyebrow">Join the AIA Team!</p>
<h2>Employment Opportunities</h2>
<p>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.</p>
<p>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 <ContactObfuscation email="hr@azinstitute4autism.com" obfuscatedText="hr [at] abaclinicaz [dot] com" class="team-email" />.</p>
<Button href="/careers">View Open Positions</Button>
<p class="eyebrow">{content.careers.eyebrow}</p>
<h2>{content.careers.heading}</h2>
<p>{content.careers.intro}</p>
<p>{content.careers.contactText} <ContactObfuscation email={content.careers.email} obfuscatedText={obfuscatedEmail} class="team-email" id="team-careers-email" />.</p>
<Button href={content.careers.cta.href}>{content.careers.cta.label}</Button>
</div>
</section>
</article>
@@ -78,16 +68,17 @@ const groups = [
<style>
.team-intro { padding-block: 4rem; text-align: center; }
.team-intro .eyebrow { font-size: 1.8rem; }
.team-group { padding-block: 2rem 4rem; text-align: center; }
.team-group h2 { margin: 0 auto 1rem; max-width: 760px; }
.team-group, .team-care { padding-block: 2rem 4rem; text-align: center; }
.team-group h3, .team-care h2, .team-care h3 { margin: 0 auto 1rem; max-width: 760px; }
.team-group__tagline { font-size: 1.125rem; margin: 0 auto 2rem; }
.team-grid { display: flex; flex-wrap: wrap; gap: 2rem 1.5rem; justify-content: center; }
.team-member { flex: 0 0 227px; }
.team-thumb { border-radius: 4px; overflow: hidden; }
.team-thumb img { display: block; object-fit: cover; transform: scale(1.1); transition: transform .5s; width: 100%; }
.team-thumb img:hover { transform: scale(1.05); }
.team-member h3 { font-family: var(--font-body); font-size: .8rem; margin-bottom: 0; }
.team-member h4 { font-family: var(--font-body); font-size: .8rem; margin-bottom: 0; }
.team-member p { font-size: .85rem; margin: 0; }
.team-closing { font-weight: 700; margin: 3rem auto 0; text-align: center; }
.team-careers { padding-block: 5rem; }
.team-careers :global(.content-button) { margin-left: 50%; margin-top: 4rem; translate: -50%; }
.team-email { font-weight: 700; }
+3 -1
View File
@@ -2,6 +2,7 @@ import { defineCollection } from 'astro:content';
import { glob } from 'astro/loaders';
import { z } from 'astro/zod';
import { homePageSchema, homeSectionsSchema } from './types/home-sections';
import { teamPageSchema } from './types/team-page';
const language = z.enum(['en', 'ar', 'es']);
const translationKey = z.string().min(1).refine((value) => value === value.trim(), {
@@ -22,7 +23,8 @@ const shared = {
draft: z.boolean().default(false),
noindex: z.boolean().default(false),
home: homePageSchema.optional(),
sections: homeSectionsSchema.optional()
sections: homeSectionsSchema.optional(),
team: teamPageSchema.optional()
};
const pages = defineCollection({
+69 -113
View File
@@ -3,120 +3,76 @@ 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."
slug: "team"
canonical: "https://www.azinstitute4autism.com/team"
featuredImage: "/assets/images/AIALanding_BG_V2.jpg"
alt: "learn more about arizona institute for autism"
lang: "en"
translationKey: "team"
draft: false
team:
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.
clinicalGroups:
- heading: Board Certified Behavioral Analysts & Psychologists
members:
- name: Rula Diab, BCBA, LBA, M.Ed
role: Clinical Director
image: team-rula-diab.webp
imageAlt: Rula Diab
- name: Jennifer Espinoza, MAOL/ABA
role: Clinical BCBA
image: team-jennifer-espinoza.webp
imageAlt: Jennifer Espinoza
- heading: Clinical Support
members:
- name: Jennifer Bonefont, B.A. Psy
role: Clinical Client Advocate Supervisor
image: team-jennifer-bonefont.webp
imageAlt: Jennifer Bonefont
- heading: Clinical Case Supervisors
members:
- name: Rachael Sanchez, BS, M Psy/ABA
role: Clinical Supervisor
image: team-rachael-sanchez.webp
imageAlt: Rachael Sanchez
- heading: Clinical Education Specialists
members:
- name: Mahima Bedi
role: Clinical Instructor
image: team-mahima-bedi.webp
imageAlt: Mahima Bedi
careTeam:
heading: Our ABA Care Team
groupHeading: ABA Clinic Management
tagline: Applied Behavior Analysis "(ABA) at your service"
members:
- name: Mariah Marley
role: Claims Billing
image: team-mariah-marley.webp
imageAlt: Mariah Marley
- name: Eney Garcia, BA
role: Accounts Billing
image: team-eney-garcia.webp
imageAlt: Eney Garcia
- name: Ayah Shahbander
role: Human Resources
image: team-ayah-shahbander.webp
imageAlt: Ayah Shahbander
- name: Barbara Samanich, BFA
role: Creative Marketing Developer
image: team-barbara-samanich.webp
imageAlt: 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
email: hr@azinstitute4autism.com
cta:
label: View Open Positions
href: /careers
---
## Our Clinical Team
### Arizona Institute for Autism Scottsdale, Arizona
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.
### Board Certified Behavioral Analysts & Psychologists
##
![chief clinical director rula diab](/assets/images/team-rula-diab.webp)
### Rula Diab, BCBA, LBA, M.Ed
Clinical Director
![team jennifer espinoza](/assets/images/team-jennifer-espinoza.webp)
### Jennifer Espinoza, MAOL/ABA
Clinical BCBA
![team timirah clay](/assets/images/team-timirah-clay.webp)
### Timirah Clay, M.Psy/ABA
Clinical BCBA
### Clinical Support
## Our Creative Team
![team carol harrington](/assets/images/team-carol-harrington.webp)
### Carol Harrington, A.A. Spec. Ed.
Clinical Manger
![team rachel crosby](/assets/images/team-rachel-crosby.webp)
### Rachel Crosby
Clinical Administrator
![team jennifer bonefont](/assets/images/team-jennifer-bonefont.webp)
### Jennifer Bonefont, B.A. Psy
Clinical Client Advocate Supervisor
### Clinical Case Supervisors
## Our Creative Team
![team rachael sanchez](/assets/images/team-rachael-sanchez.webp)
### Rachael Sanchez, BS, M Psy/ABA
Clinical Supervisor
### Clinical Education Specialists
## Our Creative Team
![team mahima bedi](/assets/images/team-mahima-bedi.webp)
### Mahima Bedi
Clinical Instructor
## Our ABA Care Team
### ABA Clinic Management
Applied Behavior Analysis "(ABA) at your service"
## Our Creative Team
![team mariah marley](/assets/images/team-mariah-marley.webp)
### Mariah Marley
Claims Billing
![team eney garcia](/assets/images/team-eney-garcia.webp)
### Eney Garcia, BA
Accounts Billing
![team ayah shahbander](/assets/images/team-ayah-shahbander.webp)
### Ayah Shahbander
Human Resources
![team barbara samanich](/assets/images/team-barbara-samanich.webp)
### Barbara Samanich, BFA
Creative Marketing Developer
ABA's leading experts in special education and clinical care.
Join the AIA Team!
## Employment Opportunities
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.
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 hr [at] abaclinicaz [dot] com .
View Open Positions
<!-- Team content is maintained in the validated `team:` frontmatter above and rendered by TeamPage.astro. -->
+4 -1
View File
@@ -54,12 +54,15 @@ const pageTitles: Record<string, Record<string, string>> = {
const bannerTitle = serviceTitles[entry.data.lang]?.[entry.data.slug] || pageTitles[entry.data.lang]?.[entry.data.slug] || entry.data.title.split('|')[0].trim();
const isService = Boolean(serviceTitles[entry.data.lang]?.[entry.data.slug]);
const heroImage = pageHeroImages[entry.data.slug];
if (entry.data.slug === 'team' && entry.data.lang === 'en' && !entry.data.team) {
throw new Error('The English Team page requires structured team frontmatter.');
}
---
<BaseLayout title={entry.data.title} description={entry.data.description} image={entry.data.featuredImage || heroImage} lang={entry.data.lang}>
{entry.data.slug === 'contact' && <Fragment slot="head"><link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin="" /></Fragment>}
<PageHero title={entry.data.displayH1 ?? bannerTitle} subtitle={entry.data.slug === 'faqs' ? 'FAQs' : undefined} image={heroImage} constrain />
{entry.data.slug === 'team' && entry.data.lang === 'en'
? <TeamPage />
? <TeamPage content={entry.data.team!} />
: entry.data.slug === 'about' && entry.data.lang === 'en'
? <AboutPage />
: entry.data.slug === 'services' && entry.data.lang === 'en'
+60
View File
@@ -0,0 +1,60 @@
import { z } from 'astro/zod';
const requiredText = z.string().refine((value) => value.trim().length > 0, {
message: 'Team content must not be empty or whitespace-only'
});
const teamMemberSchema = z.object({
name: requiredText,
role: requiredText,
image: requiredText,
imageAlt: requiredText
});
const teamGroupSchema = z.object({
heading: requiredText,
members: z.array(teamMemberSchema).min(1)
});
export const teamPageSchema = z.object({
intro: z.object({
heading: requiredText,
organization: requiredText,
location: requiredText,
body: requiredText
}),
clinicalGroups: z.array(teamGroupSchema).min(1),
careTeam: z.object({
heading: requiredText,
groupHeading: requiredText,
tagline: requiredText,
members: z.array(teamMemberSchema).min(1),
closingStatement: requiredText
}),
careers: z.object({
eyebrow: requiredText,
heading: requiredText,
intro: requiredText,
contactText: requiredText,
email: z.email(),
cta: z.object({
label: requiredText,
href: z.string().regex(/^\/(?!\/)/, 'Team CTA must use a root-relative local path')
})
})
}).superRefine((content, context) => {
const members = [
...content.clinicalGroups.flatMap((group) => group.members),
...content.careTeam.members
];
const seen = new Set<string>();
for (const member of members) {
const key = member.name.trim().toLocaleLowerCase('en-US');
if (seen.has(key)) {
context.addIssue({ code: 'custom', message: `Duplicate Team member: ${member.name}` });
}
seen.add(key);
}
});
export type TeamPageContent = z.infer<typeof teamPageSchema>;