# context.md — هدیه مزون (Hediyeh Maison) Living context file for AI assistants and future contributors. **Update this file on every prompt whenever the project changes** (new pages, data source swaps, design decisions). ## What this project is A Next.js rebuild of the original Laravel/Blade "Hediyeh Maison" storefront (`../hediyeh-maison`, a Meshkee web-builder site). The original was a clothing **store**; this rebuild repurposes the same visual identity into a **portfolio / showcase site** — no cart, checkout, or product purchasing. Portfolio content is still local showcase data; Blog listing/detail content is connected to the public Meshkee Website API for `hediehmezon.ir`. While that tenant has no published articles, three clearly labelled local sample articles are shown; they disappear automatically as soon as the CMS returns any published article. - Language: Persian (`fa`) only, `dir="rtl"`. - Framework: Next.js (App Router), TypeScript, Tailwind CSS v4. - Carousel: Swiper (`swiper/react`). - Icons: Font Awesome (`@fortawesome/react-fontawesome` + free-solid / free-regular / free-brands). - Fonts: **Iran Yekan** (self-hosted `next/font/local`, all Persian text — body, UI, every heading) + **Valky** (self-hosted `next/font/local`, Latin-only display face — used *only* for the hero's "Hediyeh" / "MAISON" words). See `src/app/fonts.ts`. ## Fonts — do not use cdn.meshkee.com, do not use Google Fonts for the display face The source theme (`hediyeh-maison/settings.php`, `metadata.php`) references `cdn.meshkee.com/web-builder/fonts/...`. **These links are unreachable from this environment** — confirmed by the user; don't attempt to fetch from `cdn.meshkee.com`, it will hang/fail. - Persian body/UI face: **Iran Yekan**, per explicit user instruction — self-hosted `.woff` files copied from `../../raoofi/src/assets/fonts/` into `src/assets/fonts/`. - Latin display face: the live source site's hero heading computes to `font-family: Valky` at `font-size: 300px` (confirmed via `getComputedStyle` on `http://hediyeh-maison.local:8000/`). The user placed `Valky Regular.ttf` in `public/` — it now lives at `src/assets/fonts/valky-regular.ttf`, loaded via `next/font/local` as the `valky` export (`--font-valky` / `.font-latin` utility class in `globals.css`). **An earlier version of this site used Google's Playfair Display as a substitute — that was wrong and was replaced.** `.font-latin` (Valky) must only wrap genuine Latin/English copy (currently: the Hero's "Hediyeh" and "MAISON"). Every Persian heading uses plain `font-bold`/`font-extrabold` on the default Iran Yekan body font — Valky has no Persian glyphs, so applying it to Persian text silently falls back to a generic serif and looks wrong. If you add new Latin display copy, use `.font-latin`; if it's Persian, don't. ## Content & asset provenance The Blade project's theme-level static images (`hediyeh-maison/assets/img/**`) are **broken Git LFS pointers** (never pulled — `git lfs pull` fails, git.meshkee.com unreachable from this environment). Do not copy from `assets/img/`. The **real, working photography** lives in `hediyeh-maison/assets/files/` (hashed filenames, CMS-uploaded media, valid binaries). These were identified by inspecting the live rendered DOM (`img.currentSrc`) on the local dev site (`http://hediyeh-maison.local:8000`, ports proxied through the Blade app) and copied into `public/images/` with descriptive names. Mapping (source hash → usage): | Source file (`assets/files/`) | Used as | |---|---| | `PGnhGwcJfR.png` | `public/images/brand/logo.png` (header + footer) | | `cYbVH0Fg4Z.png` | `public/images/brand/monogram.png` (small cursive "H" mark, unused so far) | | `X8XbnYcoSl.jpg` | `public/images/hero/hero-1.jpg` | | `VEs3mZuCir.jpg` | `public/images/hero/hero-2.jpg` | | `WfD9E9TJd1.png` | `public/images/categories/trousers.png` (شلوار) | | `DbVccNhN6N.png` | `public/images/categories/sunglasses.png` (عینک آفتابی) | | `VEVtsmcNRu.png` | `public/images/categories/coat.png` (پالتو) | | `PzlA8CwvA8.png` | `public/images/categories/hoodie.png` (هودی) | | `G6U04V8fhX.png` | `public/images/categories/scarf.png` (شال و روسری) | | `ptZvorsSiP.jpg` | `public/images/banners/banner-bags.jpg` (کیف editorial banner) | | `o8x3phkJEQ.jpg` | `public/images/banners/banner-clothing.jpg` (لباس editorial banner) | | `1L3fCdTL2g.png` | `public/images/about/about-image.png` | | `7xIvsBoGth.png` | `public/images/about/signature.png` | | `uT9b3ZoiSs.jpg` | `public/images/about/storefront.jpg` (⚠ shows a *different* real shop's signage — "UTERO" — currently unused in any page; do not display it as Hediyeh Maison's own storefront) | | `2SLidM7KQV.jpg`, `5vCbHMQbmt.jpg`, `6ncMx3U2nt.jpg` | `public/images/interior/*.jpg` (boutique interior shots, reused across about/portfolio/blog) | | `pHcCJphsTp.png`, `oryXTQOfe0.png`, `swJLLftw08.png`, `1t8I5IZoob.png`, `kTwhmXLhxe.png` | `public/images/portfolio/*-alt.png` (duplicate product angles, used as extra portfolio/blog imagery) | Several other files in `assets/files/` are unrelated demo leftovers (cake/bakery photos, duplicate wavy-pattern subheader banners with baked-in **English** copy like "About Us", "Contact Us") and were intentionally **not** used — see next section. ### Subheader banners were rebuilt as SVG, not reused as images The source site's inner-page hero banners (`assets/files/5qiwBQYHMA.jpg` and several duplicates) are a cream background with a wavy line texture **and English text baked into the raster** ("About Us", "Contact Us", "Products", "Articles", "Article Details", "Product Details"). Since this site is Persian/RTL with different headings, reusing those images verbatim would show mismatched/wrong-language text. Instead, `WavePattern.tsx` recreates the line texture as inline SVG, composed in `PageHero.tsx` with our own Persian `