Catalog-only (no cart); search targets store items and products pages. Co-authored-by: Cursor <cursoragent@cursor.com>
111 lines
4.6 KiB
Markdown
111 lines
4.6 KiB
Markdown
# 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/`
|