Files
brb-store/CONTEXT.md
T
Alireza HassaniandCursor 8e14748b48 Wire Meshkee catalog: products, blog, mega menu, and product search.
Catalog-only (no cart); search targets store items and products pages.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-21 16:04:31 +03:30

111 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BRB Store — AI context
Persian RTL storefront for **brb-store.com** (فروشگاه و تعمیرگاه لوازم خانگی برادران برقعی، قم).
Next.js App Router rebuild of the original WillaMall/BeTheme site. Keep this file current — other AI tools read it first.
## Stack
- Next.js 16 (App Router, Turbopack) + React 19 + TypeScript + Tailwind v4
- Locale: `fa`, direction: `rtl`
- Fonts: Vazirmatn (Persian) + Montserrat (English kickers)
- Icons: Lucide
- Dev: `npm run dev`
## Brand
| Token | Value |
| --- | --- |
| Brand red | `#e7432b` |
| Brand dark | `#c93621` |
| Ink | `#161616` |
| Muted | `#6c6363` |
| Paper | `#f4f0ec` |
Logo: `public/images/brand/logo.png`. Dark glossy caption bars: `lib/glossy.ts`.
## Meshkee API
- Docs: https://api.meshkee.com/docs/website
- OpenAPI: https://api.meshkee.com/docs/website/openapi.json
- Base: `https://api.meshkee.com/api/v1`
- Tenant domain: `brb-store.com` (`NEXT_PUBLIC_WEBSITE_DOMAIN` / `WEBSITE_DOMAIN`)
- Customer portal: `https://customer.brb-store.com` (`NEXT_PUBLIC_CUSTOMER_PORTAL_URL`)
- Public reads: `/tenants/{domain}/...` (no auth).
- Do not invent CMS, upload, or dashboard APIs.
This site is **catalog-only** (no shopping cart). Login / user icon goes to the customer portal. Do not build a local login page.
## Routes
| Path | Source |
| --- | --- |
| `/` | Homepage + static image slots + store specials + latest blogs |
| `/products` | Store items (`GET /tenants/{domain}/store-items`) |
| `/products?categoryId=` | Same, filtered |
| `/products/[variantId]` | Store item variant + product description/gallery + comments |
| `/blog` | `GET /tenants/{domain}/blogs` (falls back to `lib/data.ts` `blogPosts`) |
| `/blog/[slug]` | Blog details + comments |
| `/about` | About us |
| `/contact` | Contact us |
| `/meshkee/static-image-slots` | Slot catalog for the dashboard Refresh button |
| `/api/search?q=` | Instant product search (`store-items?name=`, min 3 chars) |
## Homepage order
`Hero` → `Services` → three product carousels → `CategoryShowcase` → `AboutPreview` → five-banner (2+3) → `BlogCarousel` → `two-banner-row` → `Stats` → `WideBanner` → `Branches`.
## Homepage carousels (store specials)
`GET /tenants/{domain}/store-specials` matched by `key`:
1. `consumeables` — اقلام مصرفی
2. `refrigrator-parts` — قطعات یخچال
3. `washing-machine-parts` — قطعات ماشین لباسشویی
If a special has no `items`, keep sample products from `lib/data.ts`. Use `variants[0].id` as the product URL.
## Catalog
- Mega menu: product categories **level 1 and 2** (`GET /tenants/{domain}/categories?entityType=product`). Links: `/products?categoryId={id}`.
- Instant search: header input searches **products** when query length **> 2** (`/api/search` → `store-items?name=`). Enter or “مشاهده همه” → `/products?q=`.
- Product pages are display-only (price, gallery, description, comments). No cart / add-to-cart.
- Details gallery: product `images[].url` + thumbnail. Click = lightbox, hover = zoom.
- Details tabs: description (`descriptionHtml`) and comments (`GET /comments?entityType=product&entityId={productId}`). Unauthenticated users see a login box to the customer portal.
## Static image slots
`GET /tenants/{domain}/website/static-images?pageKey=home`. Catalog: `GET /meshkee/static-image-slots` from `STATIC_IMAGE_SLOTS` in `lib/static-images.ts`.
| key | kind | itemCount |
| --- | --- | --- |
| `slider` | list | null |
| `three-icon-image` | list | 3 |
| `categories` | list | null |
| `about-us-image` | single | 1 |
| `five-banner-section` | list | 5 |
| `two-banner-row` | list | 2 |
| `full-row-image` | single | 1 |
| `two-branch-image` | list | 2 |
`url` → img, `linkUrl` → wrap in a link, empty/fail → placeholder. Use `slot.aspectRatio`. If a slot’s size/ratio changes in CSS, update `STATIC_IMAGE_SLOTS` in the same change.
## Original business data (do not invent replacements)
**About:** 30+ years. Sells home appliances, spare parts, and repairs small appliances. Wholesale and retail.
**Branches**
1. قم، خیابان سی متری کیوانفر، روبروی داروخانه الهادی
2. قم، بلوار صدوقی، خیابان امام حسین (ع)، نبش کوچه ۲۱
**Phones:** 0912-309-3407، 0912-651-7619، 025-36604454، 025-32404070، تلفکس 0253-6638866
**Telegram:** https://t.me/borgheeibrothers
**Email:** `alirezaborghei20@gmail.com`
**Map:** 34.6564, 50.8696
## Local fallbacks
- Copy / nav / sample products / local blog: `lib/data.ts`
- Empty catalog art: `/public/placeholders/*.svg`
- Downloaded originals: `public/images/`