# Arad Arisman Website Context ## Project - Persian RTL storefront for Arad Arisman (livestock/poultry feed supplements). - Next.js 16 App Router, React 19, TypeScript, Tailwind 4, `src/app`. - Apex domain: `aradarisman.com`. - Local images live in `public/images`. ## Meshkee API - Canonical docs: `https://api.meshkee.com/docs/website` - API base: `https://api.meshkee.com/api/v1` - Tenant domain: `aradarisman.com` (`TENANT_DOMAIN` in `src/lib/meshkee.ts`) - All public fetches go through `src/lib/meshkee.ts`. Do not call the API from components. - Do not invent dashboard/CMS/upload endpoints. ## Homepage static-image slots Consumers read `GET /tenants/aradarisman.com/website/static-images` and match by `key`. Empty or failed slots keep local placeholders. | Key | Kind | itemCount | Aspect | Width | Component | |---|---|---|---|---|---| | `hero-category-icons` | list (duplicatable) | null | 1:1 | 256 | `HeroSlider` category boxes (square icons) | | `categories` | list (duplicatable) | null | 3:5 | 720 | `CategoryShowcase` | | `four-icon-image` | list | 4 | 1:1 | 128 | `Features` | | `about-us` | single | 1 | 4:3 | 960 | `About` | | `brands` | list (duplicatable) | null | 1:1 | 200 | `Partners` | Dashboard import catalog: `GET /meshkee/static-image-slots` (`src/app/meshkee/static-image-slots/route.ts`). If a rendered image size or crop ratio changes, update both the component container (`aspectRatioToCss`) and the matching catalog entry. ## Other conventions - Category tiles from live products (`getCategorySummary`) because the raw `/categories` taxonomy has duplicate display names. - Blog field names are inferred; accessors fall back across `nameFa` / `titleFa` / `title`, etc. - Next.js `images.remotePatterns` allows `c804387.parspack.net` (Meshkee media CDN).