Initial commit: Hoomat storefront with Meshkee API and static-image slots.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-09-04 15:00:41 +03:30
co-authored by Cursor
commit cfabf3e327
95 changed files with 12651 additions and 0 deletions
+109
View File
@@ -0,0 +1,109 @@
# Hoomat Store Context
## Current Prompt
Source prompt: `https://api.meshkee.com/api/v1/public/ai-prompts/hoomat-store/images-placeholder/28488577c9163eaa8fdb8e86`
Goal: wire homepage/about static-image slots from Meshkee (`GET /tenants/hoomatstore.com/website/static-images`) and publish the slot catalog at `/meshkee/static-image-slots`. Empty/fail → keep local placeholders.
Previous prompts:
- Backend: `…/backend/114f70b804d97953f91ad26a` (API auth/cart/store/blog/contact)
- Basic create: `…/basic-create/d3ca3d1229f0e5c8e532b073` (Persian RTL flat-design clone)
## Meshkee Backend
- Docs: `https://api.meshkee.com/docs/website`
- OpenAPI: `https://api.meshkee.com/docs/website/openapi.json`
- API base: `https://api.meshkee.com/api/v1`
- Apex domain: `hoomatstore.com` (business id currently `35`)
- Customer app: `https://customer.hoomatstore.com`
- Business admin: `https://business.hoomatstore.com`
- Tenant resolve: `GET /tenants/hoomatstore.com`
- Public content: `/tenants/hoomatstore.com/...`
- Cart/orders: `/businesses/{businessId}/...` with Bearer JWT
- Auth token keys (localStorage): `meshkee_customer_access_token`, `meshkee_customer_refresh_token`
- Guest cart key: `meshkee-guest-cart`
- Cart continue: authenticated users go to `customer.hoomatstore.com/checkout/cart`; guests go to customer login with `redirect=/checkout/cart` and optional `#guestCart=` payload (Meshkee customer dashboard handoff)
## Static image slots
Catalog source: `lib/meshkee/static-slots.ts` → `GET /meshkee/static-image-slots`
| key | kind | pageKey | count | UI |
|-----|------|---------|-------|----|
| `slider` | list | home | n | homepage hero |
| `categories-icon` | list | home | 6 | quick category icons |
| `special-sale-banner` | single | home | 1 | sale promo beside product carousel |
| `product-features-image` | single | home | 1 | features sofa |
| `contactus-image` | single | home | 1 | homepage contact guarantee panel |
| `two-banner-row` | list | home | 2 | dual promo banners |
| `aboutus-image` | single | home | 1 | homepage about panel |
| `three-banner-row` | list | home | 3 | triple promo banners |
| `about-us-image` | list | about | 2 | about page panels |
Rules: use `slot.images` (all if list, first if single); `url` → img/bg; `linkUrl` → wrap link; map `titleFa` / `titleEn` / `subtext` to UI; if UI aspect/size changes, update the catalog. Cursor rule: `.cursor/rules/static-image-slots.mdc`.
## Source Website Data
- Main site: `https://www.hoomatstore.com/`
- About page: `https://www.hoomatstore.com/about-us`
- Contact page: `https://www.hoomatstore.com/contactus`
- Footer inspiration for bottom Meshkee row: `https://safeteb.com/`
## Design Requirements
- Language: Persian (`fa`)
- Direction: RTL
- Framework: Next.js app router
- Style: flat design, furniture-store feel, responsive layout
- Header: fixed with blurry/translucent background; stronger glass after scroll
- Header now includes user menu, cart icon/badge + drawer, and products mega menu (1st + 2nd category levels)
- Palette:
- Primary: `#00234B`
- Secondary: `#CC9966`
- Tertiary: `#883F3F`
- Fonts: Iran Sans (FA), Josefin Sans (EN titles), Montserrat fallback
- Logo local fallback: `public/assets/hoomat-logo.png`
- Favicon: from `GET /tenants/{domain}/website/favicon` when available; otherwise local logo
## Implemented Routes
- `/` homepage (static-image slots + local fallbacks; product carousels still sample)
- `/about-us` (about-us-image ×2 + local fallbacks)
- `/contactus` (contact form posts to Meshkee contact-submissions)
- `/store` store-items listing
- `/store/[variantId]/[[...slug]]` store item detail
- `/blog` blog listing
- `/blog/[id]/[slug]` blog detail
- `/meshkee/static-image-slots` slot catalog JSON for Meshkee dashboard
## Auth / Cart UX
- Logged out user icon → customer login
- Logged in: `{firstName} عزیز` with dropdown: پروفایل من, خروج, and مدیریت وبسایت (admins only, handoff to business app)
- Cart badge shows total quantity; drawer continue follows Meshkee customer checkout flow above
## Key Code Locations
- API client: `lib/meshkee/api.ts` (`getStaticImages`, `getStaticImageSlot`)
- Slot catalog/helpers: `lib/meshkee/static-slots.ts`
- Slot UI helpers: `app/components/slot-media.tsx`
- Config/domain: `lib/meshkee/config.ts`
- Auth/cart/toast providers: `app/providers/*`
- Header + cart drawer + mega menu: `app/components/header.tsx` and related components
- Shared static homepage content still in `lib/site-data.ts`
- Global styles: `app/globals.css`
## Data Notes
- Store-items for this tenant may be empty until inventory is published; blogs/categories are live.
- Static-images for this tenant may be empty until CMS slots are filled; UI keeps local placeholders.
- Product description/gallery/technical/comments for a store variant come from the linked catalog product (`productId`).
- Homepage carousels still use local sample products until a later prompt wires them to API.
## Maintenance Notes
- Update this file on every Meshkee prompt.
- Prefer Meshkee Website API docs over inventing CMS/admin endpoints.
- Keep RTL/FA patterns and existing visual language when adding pages.
- When UI image size/aspect changes, update `STATIC_IMAGE_SLOT_CATALOG` so `/meshkee/static-image-slots` stays correct.