# Safeteb — Meshkee website context Next.js storefront for **safeteb.com** (RTL, Persian). Uses the Meshkee Website API for CMS-managed static images and favicon. ## Environment | Variable | Purpose | |----------|---------| | `NEXT_PUBLIC_DOMAIN` or `NEXT_PUBLIC_WEBSITE_DOMAIN` | Apex domain (`safeteb.com`) | | `NEXT_PUBLIC_API_BASE_URL` or `NEXT_PUBLIC_MESHKEE_API_BASE` | API base (`https://api.meshkee.com/api/v1`) | | `NEXT_PUBLIC_CUSTOMER_DASHBOARD_URL` | Customer portal URL | ## Meshkee integration ### Static images - **Fetch:** `GET /tenants/safeteb.com/website/static-images?pageKey=home` - **Catalog (dashboard refresh):** `GET /meshkee/static-image-slots` - **Implementation:** `src/lib/static-images.ts` + homepage in `src/app/page.tsx` Homepage slot keys (match by `key`): | Key | Section | Kind | Count | |-----|---------|------|-------| | `slider` | Hero slider | list (duplicatable) | — | | `four-icon` | Hero quick links | list | 4 | | `two-banner` | Hero promo row | list | 2 | | `online-program-banner` | Online program image | single | 1 | | `four-link-icon` | Services icons | list | 4 | | `medical-plants-banner` | Medicinal plants image | single | 1 | | `two-banner` (2nd occurrence) | Lower promo row | list | 2 | | `about-us-banner` | About section image | single | 1 | Rules: - Use `slot.images` — all images if `kind=list`, first if `kind=single`. - `url` → ``. `linkUrl` → wrap in ``. - Empty slot or API failure → keep local placeholder from `public/images/`. - Use `slot.aspectRatio` from API; catalog ratios in `STATIC_IMAGE_SLOTS` must stay in sync when layout changes. ### Favicon - **Fetch:** `GET /tenants/safeteb.com/website/favicon` → `{ faviconUrl, logoUrl, ... }` - **Layout:** `src/app/layout.tsx` uses `faviconUrl` when set; otherwise `/favicon.png`. ### SEO + sitemap - **Do not ship** `public/sitemap.xml` or `public/robots.txt` — nginx proxies both to the Meshkee API. - **Sitemap config:** `GET /meshkee/sitemap-config.json` (generated at build via `scripts/generate-sitemap-config.mjs`). - **On-page SEO:** unique title + meta description per page (`src/lib/seo.ts`), one H1 per page, meaningful image `alt` text. - **After deploy:** business dashboard → Website → Settings → Sync sitemap config. ## Pages - `/` — Home (static-image slots wired) - `/about` — About - `/contact` — Contact ## AI prompt reference Latest images-placeholder prompt: https://api.meshkee.com/api/v1/public/ai-prompts/safeteb/images-placeholder/67da3a9c5a81b4c50d53768c Latest SEO prompt: https://api.meshkee.com/api/v1/public/ai-prompts/safeteb/seo/52c03d5a636374e28da417cd ## Docs - Meshkee Website API: https://api.meshkee.com/docs/website - OpenAPI: https://api.meshkee.com/docs/website/openapi.json