Compare commits
1 Commits
main
...
feat/rtk-u
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a32d225fd8 |
212
Multi-Surface Feature Parity Guide.md
Normal file
212
Multi-Surface Feature Parity Guide.md
Normal file
@@ -0,0 +1,212 @@
|
|||||||
|
# Multi-Surface Feature Parity Guide
|
||||||
|
|
||||||
|
> **Rule source:** AGENTS.md §8 — every feature change must be evaluated against all 4 surfaces and ported where an equivalent exists.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## The 4 surfaces at a glance
|
||||||
|
|
||||||
|
```
|
||||||
|
/dashboard/seller/* → Seller Dashboard
|
||||||
|
/dashboard/request-template/* → Seller Dashboard (product/template management)
|
||||||
|
/dashboard/shop-settings/* → Seller Dashboard (shop branding & settings)
|
||||||
|
|
||||||
|
/shop/* → Platform Marketplace (public)
|
||||||
|
/dashboard/shops/* → Platform Marketplace (buyer logged-in)
|
||||||
|
|
||||||
|
/dashboard/shop/[slug]/* → White-label Shop Platform (tenant admin)
|
||||||
|
/store/* → White-label Shop Platform (public storefront)
|
||||||
|
|
||||||
|
/telegram/* → Telegram Mini App
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Surface primitives — never mix
|
||||||
|
|
||||||
|
### Seller Dashboard + Platform Marketplace
|
||||||
|
Both share the same layout and component system.
|
||||||
|
|
||||||
|
| Concern | Primitive |
|
||||||
|
|---|---|
|
||||||
|
| Layout | `DashboardContent`, `Card`, `CustomBreadcrumbs` (MUI) |
|
||||||
|
| Styling | MUI `sx` + `theme.vars.palette.*` — no hex colors (see rule §1) |
|
||||||
|
| Strings | `useTranslate()` → `src/locales/langs/en/common.json` + `fa/common.json` |
|
||||||
|
| Data | `useSWR` + `src/actions/*.ts` hooks |
|
||||||
|
| Components | MUI + `src/components/*` |
|
||||||
|
|
||||||
|
### White-label Shop Platform
|
||||||
|
Uses the same MUI/SWR stack but a **different layout shell**.
|
||||||
|
|
||||||
|
| Concern | Primitive |
|
||||||
|
|---|---|
|
||||||
|
| Layout | `ShopDashboardLayout` (`src/sections/shop/shop-dashboard-layout.tsx`) for admin; `StorefrontLayout` (`src/sections/storefront/storefront-layout.tsx`) for public |
|
||||||
|
| Sections | `src/sections/shop/shop-*.tsx`, `src/sections/storefront/storefront-*.tsx` |
|
||||||
|
| Strings | Same `useTranslate()` → `common.json` |
|
||||||
|
| Data | Same `src/actions/*.ts` — **reuse actions, don't duplicate** |
|
||||||
|
|
||||||
|
### Telegram Mini App
|
||||||
|
Completely different design system — **never import MUI here**.
|
||||||
|
|
||||||
|
| Concern | Primitive |
|
||||||
|
|---|---|
|
||||||
|
| Layout | Full-bleed mobile, `TelegramTabBar`, bottom-sheets |
|
||||||
|
| Styling | `TG_PALETTE` CSS vars (`var(--tg-saffron-600)`, `var(--tg-ink-700)`, etc.) via `inline style={{}}` |
|
||||||
|
| Strings | `t` prop typed as `TelegramDict` — add to `locales/en.ts` + `locales/fa.ts` + declare in `locales/types.ts` |
|
||||||
|
| Data | `src/sections/telegram/hooks/use-telegram-*.ts` (wrap the same `src/actions/*.ts` calls) |
|
||||||
|
| Components | `src/sections/telegram/components/telegram-*.tsx` only |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Feature → surface mapping
|
||||||
|
|
||||||
|
Legend: ✅ full ⚠️ partial (read/display only) ❌ not present 🔮 planned
|
||||||
|
|
||||||
|
### Product Templates (کالا)
|
||||||
|
|
||||||
|
| Feature | Seller Dash | Platform | White-label | Mini App |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| Create / edit template | ✅ `request-template-create/edit-view` | ❌ | ❌ | ❌ |
|
||||||
|
| Template list (my products) | ✅ `request-template-list-view` | ❌ | ✅ `shop-catalog-view` | ❌ |
|
||||||
|
| Template detail (buyer) | ❌ | ✅ `request-template-shop-details-view` | ✅ `storefront-item-view` | ✅ `telegram-template-detail-view` |
|
||||||
|
| Browse all templates | ❌ | ✅ `public-shops-view` | ✅ `storefront-catalog-view` | ✅ `telegram-shop-view` |
|
||||||
|
|
||||||
|
### Collections (مجموعه)
|
||||||
|
|
||||||
|
| Feature | Seller Dash | Platform | White-label | Mini App |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| Create / edit collection | ✅ `seller-collections-new-edit-form` | ❌ | ❌ | ❌ |
|
||||||
|
| Browse by collection | ❌ | 🔮 | 🔮 | 🔮 |
|
||||||
|
| Collection detail (buyer) | ❌ | 🔮 | 🔮 | 🔮 |
|
||||||
|
|
||||||
|
### Shop / Seller Profile
|
||||||
|
|
||||||
|
| Feature | Seller Dash | Platform | White-label | Mini App |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| My shop overview | ⚠️ `shop-settings/*` | ❌ | ✅ `shop-overview-view` | ❌ |
|
||||||
|
| Public shop page | ❌ | ✅ `public-seller-shop-view`, `seller-profile-view` | ✅ `storefront-catalog-view` | ✅ `telegram-seller-shop-view` |
|
||||||
|
| Shop branding / settings | ✅ `shop-settings/` | ❌ | ✅ `shop-settings-view` | ❌ |
|
||||||
|
| Shop admins | ❌ | ❌ | ✅ `shop-admins-view` | ❌ |
|
||||||
|
|
||||||
|
### Requests (درخواستها)
|
||||||
|
|
||||||
|
| Feature | Seller Dash | Platform | White-label | Mini App |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| Request list (seller side) | ✅ `seller/marketplace` | ❌ | ✅ `shop-orders-view` | ✅ `telegram-requests-view` |
|
||||||
|
| Request list (buyer side) | ❌ | ✅ `/dashboard/request` | ❌ | ✅ `telegram-requests-view` |
|
||||||
|
| Request detail | ✅ | ✅ | ✅ | ✅ `telegram-request-detail-view` |
|
||||||
|
| Create new request | ❌ | ✅ `/dashboard/request/new` | ✅ | ✅ `telegram-new-request-view` |
|
||||||
|
| Request from template | ❌ | ✅ `/dashboard/request/from-template` | ✅ | ✅ |
|
||||||
|
| Archived requests | ❌ | ✅ | ❌ | ✅ `telegram-archived-requests-view` |
|
||||||
|
|
||||||
|
### Chat
|
||||||
|
|
||||||
|
| Feature | Seller Dash | Platform | White-label | Mini App |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| Chat list | ✅ `/dashboard/chat` | ✅ | ❌ | ✅ `telegram-chat-view` |
|
||||||
|
| Chat thread | ✅ | ✅ | ❌ | ✅ `telegram-chat-thread-view` |
|
||||||
|
| Archived chats | ❌ | ✅ | ❌ | ✅ `telegram-archived-chats-view` |
|
||||||
|
|
||||||
|
### Analytics & Reporting
|
||||||
|
|
||||||
|
| Feature | Seller Dash | Platform | White-label | Mini App |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| Analytics dashboard | ✅ `seller-analytics-view` | ❌ | ✅ `shop-overview-view` | ❌ |
|
||||||
|
| Home stats summary | ❌ | ❌ | ❌ | ✅ `telegram-home-stats` |
|
||||||
|
|
||||||
|
### Inventory
|
||||||
|
|
||||||
|
| Feature | Seller Dash | Platform | White-label | Mini App |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| Inventory list | ✅ `inventory-list-view` | ❌ | ✅ `shop-inventory-view` | ❌ |
|
||||||
|
| Inventory detail | ✅ `inventory-detail-view` | ❌ | ⚠️ | ❌ |
|
||||||
|
|
||||||
|
### Customers & Reviews
|
||||||
|
|
||||||
|
| Feature | Seller Dash | Platform | White-label | Mini App |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| Customer list | ✅ `seller-customers-view` | ❌ | ✅ `shop-customers-view` | ❌ |
|
||||||
|
| Reviews | ✅ `seller-reviews-view` | ❌ | ❌ | ❌ |
|
||||||
|
|
||||||
|
### Payments & Wallet
|
||||||
|
|
||||||
|
| Feature | Seller Dash | Platform | White-label | Mini App |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| Cart | ❌ | ✅ `/dashboard/shops/checkout` | ✅ `/store/checkout` | ✅ `telegram-cart-view` |
|
||||||
|
| Checkout | ❌ | ✅ `request-template-checkout-view` | ✅ | ✅ `telegram-checkout-view` |
|
||||||
|
| Payment flow | ✅ | ✅ | ✅ | ✅ `telegram-payment-view` |
|
||||||
|
| Payment history | ✅ | ✅ | ✅ | ✅ `telegram-payment-history-view` |
|
||||||
|
| Wallet | ✅ `/dashboard/account/wallet` | ✅ | ❌ | ✅ `telegram-wallet-view` |
|
||||||
|
|
||||||
|
### Account & Profile
|
||||||
|
|
||||||
|
| Feature | Seller Dash | Platform | White-label | Mini App |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| Profile settings | ✅ `/dashboard/account` | ✅ | ✅ | ✅ `telegram-account-view` |
|
||||||
|
| Delivery addresses | ✅ `/dashboard/account/address` | ✅ | ❌ | ✅ `telegram-addresses-view` |
|
||||||
|
| Notifications settings | ✅ | ✅ | ❌ | ✅ `telegram-notifications-view` |
|
||||||
|
| Passkey / security | ✅ | ✅ | ❌ | ❌ |
|
||||||
|
|
||||||
|
### Other
|
||||||
|
|
||||||
|
| Feature | Seller Dash | Platform | White-label | Mini App |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| AI Assist | ✅ `/dashboard/assist` | ✅ | ❌ | ✅ `telegram-settings-view` (assist tab) |
|
||||||
|
| Points / loyalty | ✅ `/dashboard/points` | ✅ | ❌ | ✅ `telegram-points-view` |
|
||||||
|
| Disputes | ✅ `/dashboard/disputes` | ✅ | ❌ | ❌ |
|
||||||
|
| Posts / blog | ✅ `/dashboard/post` | ✅ `/post` | ❌ | ❌ |
|
||||||
|
| Dynamic pricing | ✅ (admin) | ❌ | ❌ | ❌ |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Porting recipes by change type
|
||||||
|
|
||||||
|
### Text / copy change
|
||||||
|
1. Update `en/common.json` + `fa/common.json` (covers Seller Dash, Platform, White-label).
|
||||||
|
2. Find the matching key in `src/sections/telegram/locales/types.ts` → update `locales/en.ts` + `locales/fa.ts`.
|
||||||
|
3. If key doesn't exist in Mini App yet: declare it in `TelegramDict` (types.ts) first.
|
||||||
|
|
||||||
|
### New field displayed on an entity card/row
|
||||||
|
1. Find every view that renders that entity (use mapping table above).
|
||||||
|
2. Add the field to each view using **that surface's primitives** — no MUI inside telegram, no TG_PALETTE outside it.
|
||||||
|
3. Add locale strings for every surface involved.
|
||||||
|
|
||||||
|
### New status / enum value
|
||||||
|
1. Update `TG_REQUEST_STATUS_VARIANT` or `TG_ESCROW_STATE_CHIPS` in `src/sections/telegram/constants.ts`.
|
||||||
|
2. Update the corresponding color/label map in `src/sections/request/constants.ts` (used by Seller Dash + Platform).
|
||||||
|
3. Add the label string to all locale files.
|
||||||
|
4. Check `shop-orders-view.tsx` for any inline status chip that also needs updating.
|
||||||
|
|
||||||
|
### New API field on a shared type
|
||||||
|
1. Update the type in `src/types/*.ts`.
|
||||||
|
2. Update `src/actions/*.ts` — the normalization function that maps API responses to the type.
|
||||||
|
3. All 4 surfaces reuse the same types and actions — they get the field for free once it's in the type.
|
||||||
|
4. Decide per surface whether to **display** it (add UI) or just carry it silently.
|
||||||
|
|
||||||
|
### Platform has a feature Seller Dashboard is missing
|
||||||
|
Platform (`/shop/*`) was built later and has richer discovery, cart, and public browsing. If Platform adds something that would benefit sellers too (e.g. a filter, a sort option, a field on a product card), evaluate adding it to the Seller Dashboard equivalent view in the same PR.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## What's intentionally surface-specific (do NOT port)
|
||||||
|
|
||||||
|
| Feature | Where only | Why |
|
||||||
|
|---|---|---|
|
||||||
|
| Template CRUD (create/edit) | Seller Dashboard | Sellers create products; buyers only view |
|
||||||
|
| Collection CRUD | Seller Dashboard | Sellers organize; buyers browse (future) |
|
||||||
|
| Shop admins management | White-label only | Multi-admin is a tenant feature |
|
||||||
|
| Admin dashboard (networks, trezor, thresholds, AML) | Dashboard `/admin/*` | Platform operator only |
|
||||||
|
| Haptic feedback | Mini App only | Telegram Web App SDK, no equivalent on web |
|
||||||
|
| TG_PALETTE dark/light toggle | Mini App only | Uses Telegram's native color scheme |
|
||||||
|
| Tenant slug routing `[tenantSlug]` | White-label only | Multi-tenant feature |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Checklist before merging
|
||||||
|
|
||||||
|
- [ ] Identified which surface(s) the change affects
|
||||||
|
- [ ] Checked all 3 other surfaces against the mapping table
|
||||||
|
- [ ] Ported to every surface with a full or partial equivalent
|
||||||
|
- [ ] Used each surface's own primitives (no cross-contamination)
|
||||||
|
- [ ] Added locale strings to all surfaces involved (both fa + en)
|
||||||
|
- [ ] PR description names every surface updated — and explicitly names any surface skipped
|
||||||
Reference in New Issue
Block a user