PlayAble Network — youth development through sport, mentorship, and community engagement in Kenya
# PlayAble Network
Marketing site for **PlayAble Network** — a Kenyan NGO doing youth development through football in Turkana County. Tagline: _Built through play, driven by purpose._
Astro 6 + Tailwind 4, multilingual (EN / SW / FR / AR / ES), content via Sanity, contact form posts to Airtable + email notification via Resend.
## Stack
- **Astro 6** with built-in i18n routing (5 locales, Arabic RTL)
- **Tailwind 4** with CSS-based `@theme` configuration (Noto Sans / Noto Sans Arabic)
- **Sanity** headless CMS (schemas in `/sanity/schemas`, studio in `/studio`)
- **Airtable** for inquiry records, **Resend** for email notifications
- **Vercel** hosting
## Local setup
```bash
npm install
cp .env.example .env # fill in real values (see Integrations below)
npm run dev # site at
localhost
```
The site auto-redirects `/` to `/en/`. Site works without any env vars — Sanity content falls back to static placeholders, and the contact form will render but fail to submit until Airtable + Resend keys are set.
## Project layout
```
src/
components/ Reusable Astro components (Header, Footer, ContactForm, LatestGrid, LanguageSwitcher)
i18n/ Locale config + translation JSON files (5 locales)
layouts/ BaseLayout handles + RTL font swap
lib/sanity.ts Sanity client + query helpers (returns null when no project ID)
pages/
index.astro redirects to /en/
[locale]/ one file per page, generates 5 locale variants each
api/contact.ts form handler -> Airtable + Resend
styles/global.css Tailwind import + @theme tokens
sanity/
schemas/ Schema-as-code (siteSettings, page, program, partner, latestPost)
studio/ Sanity Studio (separate package — see "Sanity setup")
```
## Integrations
### Sanity (CMS)
The studio is a separate npm package in `/studio` that imports schemas from `/sanity/schemas`. One-time setup:
```bash
cd studio
npm install
npx sanity login …