Initial commit of Descrybe v2 without local scratch artifacts.
Drop one-shot tmp/axe scripts and agent i18n scratch so the Gitea tree is deployable.
This commit is contained in:
@@ -0,0 +1,359 @@
|
||||
# User dashboard feature catalog (agent 1/10)
|
||||
|
||||
Inventory of signed-in **user dashboard** surfaces: everything rendered in the dashboard shell (`+layout.svelte` branch that is not marketing, auth, or `/admin/*`). Sources: `Nav.svelte`, route `+page.svelte` files, `plan-gates.ts`, `billing-display.ts`, `pricing-data.ts`, `entitlements.go`, `AssertCanStartProcessing`, and UI upgrade banners.
|
||||
|
||||
**Plan ladder (API defaults):** Free → Starter → Plus → Growth → Business → Scale → Enterprise (`apps/api/internal/billing/service.go` `defaultPublicPlans`, `apps/web/src/lib/components/pricing/pricing-data.ts`).
|
||||
|
||||
| Plan | SKU cap | Monthly AI credits | Paid (`is_paid_plan`) |
|
||||
|------|---------|-------------------|------------------------|
|
||||
| Free | 50 | 0 | No |
|
||||
| Starter | 100 | 100 | Yes |
|
||||
| Plus | 400 | 400 | Yes |
|
||||
| Growth | 1,200 | 1,200 | Yes |
|
||||
| Business | 4,000 | 4,000 | Yes |
|
||||
| Scale | 12,000 | 12,000 | Yes |
|
||||
| Enterprise | Unlimited (`max_products` null) | 1,000,000 wallet grant | Yes (custom) |
|
||||
|
||||
**Enforced today (API):** product SKU cap (`ErrProductLimitExceeded`), AI credit wallet + `can_use_ai` for AI-only processing (`ErrAIRequiresUpgrade` / `ErrInsufficientCredits`), email live-send blocked on Free (`email/service.go` dry-run), campaign AI generate (`campaigns/generate_send.go`), brand voice injection in AI prompts (`AIBrandApplyAllowed` → paid or trial). EPREL is **not** plan-gated (`CanUseEPREL` always true).
|
||||
|
||||
**Marketing copy only (not found enforced in API):** per-plan feed-source counts, export-feed counts, storage GB, WooCommerce “test vs full sync”, API read vs full access tiers, BYOK add-on packaging. Flag these when designing admin toggles — they need new enforcement or stay documentation-only.
|
||||
|
||||
---
|
||||
|
||||
## Admin toggle groups
|
||||
|
||||
Use these sections when grouping `feature_key` toggles in an admin plan editor.
|
||||
|
||||
| Section key | Scope |
|
||||
|-------------|--------|
|
||||
| `shell` | Global chrome: nav, header, command palette, tutorial, company switcher |
|
||||
| `dashboard` | Home / overview |
|
||||
| `catalog` | Products, categories, attributes, standard fields, structured descriptions |
|
||||
| `feeds` | Import feeds, mapping, export feeds, file uploads |
|
||||
| `stores` | Store hub, WooCommerce, Shopify connectors |
|
||||
| `processing` | Background job monitor |
|
||||
| `marketing` | Campaigns, calendar, brand, SEO, reviews |
|
||||
| `integrations` | AI BYOK, email sending |
|
||||
| `billing` | Billing, plans, checkout |
|
||||
| `settings` | Account, company, alerts, API keys, team |
|
||||
| `support` | Support center |
|
||||
| `capabilities` | Cross-cutting gates (AI, SKU cap, email send, etc.) |
|
||||
|
||||
---
|
||||
|
||||
## Shell (`shell`)
|
||||
|
||||
| feature_key | UI location | User actions | Default by plan |
|
||||
|-------------|-------------|--------------|-------------------|
|
||||
| `shell.navigation` | Sidebar `Nav.svelte` — primary + More (Setup / Operate) | Navigate all dashboard routes; mobile drawer | All plans |
|
||||
| `shell.command_palette` | Header area + `CommandPalette.svelte` (⌘K) | Quick-jump to Products, Feeds, Processing, Export, Settings, Billing, Support | All plans |
|
||||
| `shell.company_switcher` | `DashboardHeader` → `CompanySwitcher.svelte` | Switch active company/workspace | All plans (multi-company users) |
|
||||
| `shell.support_notifications` | `SupportNotificationBell.svelte` | Poll staff replies; open support tickets | All plans |
|
||||
| `shell.tutorial` | Header tutorial buttons + `TutorialOverlay.svelte` | Start / resume / browse guided tour | All plans |
|
||||
| `shell.account_menu` | Header avatar → `/settings` | Open account settings | All plans |
|
||||
| `shell.billing_recovery_banner` | `BillingRecoveryBanner.svelte` (layout) | Past-due or missing-plan recovery CTAs | All plans (state-driven) |
|
||||
|
||||
---
|
||||
|
||||
## Dashboard (`dashboard`)
|
||||
|
||||
| feature_key | Route / component | User actions | Default by plan |
|
||||
|-------------|-------------------|--------------|-------------------|
|
||||
| `dashboard.overview` | `/dashboard` — `dashboard/+page.svelte` | Welcome, plan/credit summary | All |
|
||||
| `dashboard.stats` | `DashboardStats.svelte` | View SKU count, active jobs, credits used/remaining | All |
|
||||
| `dashboard.quick_links` | Dashboard shortcuts section | Jump to Products, Feeds, Processing | All |
|
||||
| `dashboard.recent_jobs` | Dashboard jobs list | View recent processing jobs, open Processing | All |
|
||||
| `dashboard.news_feed` | `NewsFeed.svelte` | Product news / announcements | All |
|
||||
| `dashboard.activation_checklist` | `ActivationChecklist.svelte` | First-run onboarding steps | All |
|
||||
| `dashboard.migrated_checklist` | `MigratedCohortChecklist.svelte` | Post-migration cutover checklist (cohort flag) | All (cohort) |
|
||||
| `dashboard.etl_gaps` | `MigratedEtlGapsPanel.svelte` | Migration gap warnings | All (cohort) |
|
||||
| `dashboard.store_reconnect` | `StoreReconnectBanner.svelte` | Reconnect broken store credentials | All |
|
||||
| `dashboard.upgrade_banners` | `UpgradeBanner.svelte` on dashboard | Free plan, out-of-credits, SKU limit, trial, low credits | **Gated messaging** — see capabilities |
|
||||
|
||||
---
|
||||
|
||||
## Catalog (`catalog`)
|
||||
|
||||
### Products — `/products`
|
||||
|
||||
| feature_key | UI location | User actions | Default by plan |
|
||||
|-------------|-------------|--------------|-------------------|
|
||||
| `catalog.products` | Nav **Products** → `products/+page.svelte` | Browse, filter, sort, select products | All |
|
||||
| `catalog.products.tab_processed` | `ProductTabs.svelte` | View completed processed products | All |
|
||||
| `catalog.products.tab_needs_review` | Product tabs | Review AI enrichment before accept | All (needs AI run) |
|
||||
| `catalog.products.tab_error` | Product tabs | View failed processing rows | All |
|
||||
| `catalog.products.tab_processing` | Product tabs | View in-flight rows | All |
|
||||
| `catalog.products.tab_unprocessed` | Product tabs | View raw / unprocessed inventory | All |
|
||||
| `catalog.products.process_categories` | `ProductProcessingActions` | Run category assignment (no AI credits) | All |
|
||||
| `catalog.products.process_attributes` | Processing actions | Normalize specs / fill attributes (no AI) | All |
|
||||
| `catalog.products.process_ai_titles` | Processing actions | AI title generation | **Starter+** or Free with credits |
|
||||
| `catalog.products.process_ai_descriptions` | Processing actions | AI description generation | **Starter+** or Free with credits |
|
||||
| `catalog.products.enrichment_review` | `ProductEditPanel.svelte` | Accept / reject / edit AI fields | All (after AI run) |
|
||||
| `catalog.products.inline_rename` | Product table | Quick rename processed titles | All |
|
||||
| `catalog.products.export_selection` | Processing actions export | Export selected products | All |
|
||||
| `catalog.products.upgrade_prompt` | Upgrade banners on products page | Free-plan and credit-limit CTAs | **Already gated** (UI) |
|
||||
|
||||
### Categories — `/categories`, `/categories/[id]/title-formula`, `/categories/[id]/description-formula`
|
||||
|
||||
| feature_key | UI location | User actions | Default by plan |
|
||||
|-------------|-------------|--------------|-------------------|
|
||||
| `catalog.categories` | Nav More → Categories | List/edit category tree | All |
|
||||
| `catalog.categories.title_formula` | Title formula page | Build title formulas with variables | Free: basic (1 cat marketing); Starter+: full |
|
||||
| `catalog.categories.description_formula` | Description formula page | Build description formulas | Same as title formulas |
|
||||
|
||||
### Attributes — `/attributes`
|
||||
|
||||
| feature_key | UI location | User actions | Default by plan |
|
||||
|-------------|-------------|--------------|-------------------|
|
||||
| `catalog.attributes` | Nav More → Attributes | Define attribute definitions | All |
|
||||
| `catalog.attributes.bulk_import` | Attributes **Bulk Import** tab | CSV bulk import attributes | All |
|
||||
|
||||
### Standard fields — `/standard-fields`
|
||||
|
||||
| feature_key | UI location | User actions | Default by plan |
|
||||
|-------------|-------------|--------------|-------------------|
|
||||
| `catalog.standard_fields` | Nav More → Standard Fields | Manage field dictionary | All |
|
||||
| `catalog.standard_fields.groups` | Standard Fields **Groups** tab | Organize fields into groups | All |
|
||||
|
||||
### Other catalog pages (no nav link)
|
||||
|
||||
| feature_key | Route | User actions | Default by plan |
|
||||
|-------------|-------|--------------|-------------------|
|
||||
| `catalog.structured_descriptions` | `/structured-descriptions` | Structured description field config | All |
|
||||
| `catalog.vector_categories` | `/vector-categories` | Dev/test vector index (Pinecone) | All if Pinecone configured |
|
||||
|
||||
---
|
||||
|
||||
## Feeds (`feeds`)
|
||||
|
||||
### Import feeds — `/feeds`
|
||||
|
||||
| feature_key | UI location | User actions | Default by plan |
|
||||
|-------------|-------------|--------------|-------------------|
|
||||
| `feeds.list` | Nav **Feeds** | List supplier feeds, search, stats | All (Free marketing: 1 source) |
|
||||
| `feeds.add_url` | Add feed dialog **Feed URL** tab | Add HTTP(S) feed URL | All |
|
||||
| `feeds.add_csv` | Add feed **CSV file** tab | Upload CSV as feed source | All |
|
||||
| `feeds.sync` | Per-feed sync actions | Trigger feed sync (FTP unsupported in UI) | All |
|
||||
| `feeds.delete` | Feed row actions | Delete feed | All |
|
||||
|
||||
### Feed mapping — `/feeds/[feedId]/mapping`
|
||||
|
||||
| feature_key | UI location | User actions | Default by plan |
|
||||
|-------------|-------------|--------------|-------------------|
|
||||
| `feeds.mapping` | From feeds list → Map | Map supplier fields to standard fields | All |
|
||||
| `feeds.mapping.select_item` | Mapping tab 1 | Pick XML/CSV item element | All |
|
||||
| `feeds.mapping.map_fields` | Mapping tab 2 | Column / path mapping, transforms | All |
|
||||
| `feeds.mapping.queue_processing` | Post-map CTA | Queue products for processing after sync | All (AI steps follow capability gates) |
|
||||
|
||||
### Export feeds — `/export-feeds`
|
||||
|
||||
| feature_key | UI location | User actions | Default by plan |
|
||||
|-------------|-------------|--------------|-------------------|
|
||||
| `feeds.export_feeds` | Nav **Export feeds** | List channel export definitions | All (Free marketing: 1 export) |
|
||||
| `feeds.export_feeds.create` | Create / edit dialog | Configure export format & filters | All |
|
||||
| `feeds.export_feeds.generate` | Generate action | Run export generation (rate-limited API) | All |
|
||||
| `feeds.export_feeds.public_url` | Public URL display | Copy signed export URL | All |
|
||||
|
||||
### Uploads — `/files`
|
||||
|
||||
| feature_key | Route | User actions | Default by plan |
|
||||
|-------------|-------|--------------|-------------------|
|
||||
| `feeds.uploads` | `/files` | List/delete CSV uploads; link to product import | All |
|
||||
|
||||
---
|
||||
|
||||
## Stores (`stores`)
|
||||
|
||||
### Hub — `/stores`
|
||||
|
||||
| feature_key | UI location | User actions | Default by plan |
|
||||
|-------------|-------------|--------------|-------------------|
|
||||
| `stores.hub` | Nav **Stores** | Overview of WooCommerce / Shopify cards | All |
|
||||
| `stores.hub.api_keys_link` | Stores page | Deep-link to Settings → API keys | All |
|
||||
|
||||
### WooCommerce — `/woocommerce`
|
||||
|
||||
| feature_key | Tab / section | User actions | Default by plan |
|
||||
|-------------|---------------|--------------|-------------------|
|
||||
| `stores.woocommerce` | Nav More → Reviews uses `?tab=reviews` | Full WooCommerce integration page | All |
|
||||
| `stores.woocommerce.connection` | Connection tab | Store URL, credentials, test connection | Free: test/limited (marketing); Starter+: full |
|
||||
| `stores.woocommerce.categories` | Categories tab | Sync categories to/from Woo | Plan-dependent (marketing) |
|
||||
| `stores.woocommerce.attributes` | Attributes tab | Sync attributes | Plan-dependent (marketing) |
|
||||
| `stores.woocommerce.orders` | Orders tab | View recent orders | All |
|
||||
| `stores.woocommerce.reviews` | Reviews tab | Manage product reviews | All |
|
||||
| `stores.woocommerce.settings` | Settings tab | Sync options, overwrite guards | All |
|
||||
| `stores.woocommerce.queue_sync` | Push products to Woo | Queue catalog sync jobs | Gated by processing/SKU caps |
|
||||
|
||||
### Shopify — `/stores/shopify` (also `/shopify` legacy)
|
||||
|
||||
| feature_key | Tab | User actions | Default by plan |
|
||||
|-------------|-----|--------------|-------------------|
|
||||
| `stores.shopify` | Stores hub → Shopify | Shopify connector | All |
|
||||
| `stores.shopify.connection` | Connection tab | OAuth / API connection | All |
|
||||
| `stores.shopify.orders` | Orders tab | View orders | All |
|
||||
| `stores.shopify.settings` | Settings tab | Sync settings | All |
|
||||
| `stores.shopify.queue_sync` | Sync actions | Push products to Shopify | Gated by processing/SKU caps |
|
||||
|
||||
---
|
||||
|
||||
## Processing (`processing`)
|
||||
|
||||
| feature_key | Route | User actions | Default by plan |
|
||||
|-------------|-------|--------------|-------------------|
|
||||
| `processing.monitor` | Nav More → **Processing** (`/processing`, alias `/tasks`) | Live job list, refresh, auto-poll | All |
|
||||
| `processing.job_cancel` | Job row actions (if present) | Cancel / retry failed jobs | All |
|
||||
| `processing.pipeline_steps` | Job detail / description | normalize → specs → fill → EPREL → AI | EPREL all; AI gated |
|
||||
|
||||
---
|
||||
|
||||
## Marketing (`marketing`)
|
||||
|
||||
### Campaigns — `/campaigns`, `/campaigns/new`, `/campaigns/[id]`
|
||||
|
||||
| feature_key | UI location | User actions | Default by plan |
|
||||
|-------------|-------------|--------------|-------------------|
|
||||
| `marketing.campaigns` | Nav More → Campaigns | List seasonal email campaigns | All |
|
||||
| `marketing.campaigns.create` | `/campaigns/new` → `CampaignWizard.svelte` | Pick season, audience, products | All |
|
||||
| `marketing.campaigns.generate_ai` | Wizard generate step | AI email draft generation | **Starter+** (`showUpgrade` on Free) |
|
||||
| `marketing.campaigns.send` | Wizard / campaign detail | Send or schedule blast | Free: dry-run only (email service) |
|
||||
| `marketing.campaigns.edit_content` | Campaign editor | Edit subject/body HTML | All |
|
||||
|
||||
### Content calendar — `/marketing/calendar`
|
||||
|
||||
| feature_key | Route | User actions | Default by plan |
|
||||
|-------------|-------|--------------|-------------------|
|
||||
| `marketing.content_calendar` | Nav More → Content calendar | Seasonal presets, link campaigns to dates, export feed prep | All |
|
||||
|
||||
### Brand — `/brand`
|
||||
|
||||
| feature_key | Route | User actions | Default by plan |
|
||||
|-------------|-------|--------------|-------------------|
|
||||
| `marketing.brand_kit` | Nav More → Brand | Edit voice, colors, logo, preferred terms | All (view); admin edit |
|
||||
| `marketing.brand_ai_apply` | Brand + formula previews | Inject brand voice into AI enhance prompts | **Starter+** (`ai_apply_allowed` API) |
|
||||
|
||||
### SEO — `/seo`
|
||||
|
||||
| feature_key | Route | User actions | Default by plan |
|
||||
|-------------|-------|--------------|-------------------|
|
||||
| `marketing.seo` | Nav More → SEO | SEO checklist scores, recommendations | All |
|
||||
| `marketing.seo.template_fill` | SEO actions | Rule-based meta template fill | All |
|
||||
| `marketing.seo.ai_rewrite` | SEO actions | AI meta rewrite | **Starter+** or credits (`can_use_ai`) |
|
||||
|
||||
### Reviews — `/woocommerce?tab=reviews`
|
||||
|
||||
| feature_key | Route | User actions | Default by plan |
|
||||
|-------------|-------|--------------|-------------------|
|
||||
| `marketing.reviews` | Nav More → Reviews | WooCommerce reviews tab | All |
|
||||
|
||||
---
|
||||
|
||||
## Integrations (`integrations`)
|
||||
|
||||
### AI — `/integrations/ai`
|
||||
|
||||
| feature_key | Route | User actions | Default by plan |
|
||||
|-------------|-------|--------------|-------------------|
|
||||
| `integrations.ai` | Nav More → AI integrations | Configure OpenAI / platform AI modes | All |
|
||||
| `integrations.ai.byok` | AI integrations page | Bring-your-own API key | Growth+ marketing (BYOK add-on); Business included |
|
||||
|
||||
### Email — `/integrations/email`
|
||||
|
||||
| feature_key | Route | User actions | Default by plan |
|
||||
|-------------|-------|--------------|-------------------|
|
||||
| `integrations.email` | Nav More → Email sending | Resend or SMTP credentials | All |
|
||||
| `integrations.email.test` | Test send | Send test email (may dry-run) | Free: dry-run |
|
||||
| `integrations.email.blast` | Blast dialog | Marketing blast to audience | Free: dry-run forced |
|
||||
|
||||
---
|
||||
|
||||
## Billing (`billing`)
|
||||
|
||||
| feature_key | Route | User actions | Default by plan |
|
||||
|-------------|-------|--------------|-------------------|
|
||||
| `billing.overview` | Nav **Billing** `/billing` | Plan name, credits, SKU usage, subscription status | All |
|
||||
| `billing.customer_portal` | Billing page | Open Stripe Customer Portal (company admin) | Paid plans with Stripe |
|
||||
| `billing.quick_upgrade` | Billing quick upgrade cards | Checkout Starter / Growth / Business | Company admin |
|
||||
| `billing.add_credits` | Billing dialog (if shown) | Purchase extra credits | Paid |
|
||||
| `billing.plans_compare` | `/plans` (linked from banners) | Compare public ladder, feature matrix | All |
|
||||
| `billing.checkout` | `/plans` + Billing | Stripe Checkout self-serve upgrade | Company admin; Starter–Business |
|
||||
|
||||
---
|
||||
|
||||
## Settings (`settings`)
|
||||
|
||||
| feature_key | Tab (`/settings?tab=`) | User actions | Default by plan |
|
||||
|-------------|------------------------|--------------|-------------------|
|
||||
| `settings.profile` | `profile` | Name, language, save profile | All |
|
||||
| `settings.company` | `company` | Company name, locale, branding prefs | Company admin |
|
||||
| `settings.alerts` | `alerts` | In-app alert preferences (`alert-prefs.ts`) | All |
|
||||
| `settings.api_keys` | `api-keys` | Create/revoke company API keys | Free marketing: no API; Starter+: read/full per marketing |
|
||||
| `settings.team` | `team` | Invite members, roles, demote/remove | Company admin |
|
||||
| `settings.team_invite` | Team tab dialog | Send teammate invite | Company admin |
|
||||
|
||||
---
|
||||
|
||||
## Support (`support`)
|
||||
|
||||
| feature_key | Route | User actions | Default by plan |
|
||||
|-------------|-------|--------------|-------------------|
|
||||
| `support.center` | Nav More → Support `/support` | List own tickets | All |
|
||||
| `support.ticket_create` | `/support/new` | Open new ticket | All |
|
||||
| `support.ticket_thread` | `/support/[ticketId]` | Reply, read staff messages | All |
|
||||
|
||||
---
|
||||
|
||||
## Capabilities (`capabilities`) — cross-cutting gates
|
||||
|
||||
These map to API enforcement and/or prominent UI locks. Prefer admin toggles here for plan matrices.
|
||||
|
||||
| feature_key | Enforced where | Behavior | Suggested defaults |
|
||||
|-------------|----------------|----------|-------------------|
|
||||
| `capability.sku_cap` | `AssertCanStartProcessing`, `at_product_limit` on `/api/auth/me` | Blocks new processing when processed SKU count ≥ plan `max_products` | Free 50 · Starter 100 · Plus 400 · Growth 1.2k · Business 4k · Scale 12k · Enterprise unlimited |
|
||||
| `capability.ai_credits` | Entitlements `can_use_ai`, credit wallet debit | AI jobs need credits or paid plan | Free 0/mo · Starter 100 · Plus 400 · Growth 1.2k · Business 4k · Scale 12k · Enterprise unlimited |
|
||||
| `capability.ai_processing` | Processing pipeline + products UI | Title/description/enhance/seo AI types | Off on Free unless credits; on paid |
|
||||
| `capability.eprel` | `CanUseEPREL` (always true) | EU energy label enrichment | **All plans** |
|
||||
| `capability.normalize_specs_fill` | Pipeline steps without AI | Category, attributes, normalize | **All plans** |
|
||||
| `capability.campaign_ai` | `campaigns/generate_send.go` | AI campaign copy generation | Starter+ |
|
||||
| `capability.email_live_send` | `email/service.go` dry-run | Real marketing email delivery | Free dry-run; paid live (unless `EMAIL_DRY_RUN`) |
|
||||
| `capability.brand_ai_apply` | `AIBrandApplyAllowed` | Brand voice in AI prompts | Paid or trial |
|
||||
| `capability.seo_ai_rewrite` | SEO API `can_use_ai` | AI meta rewrite on SEO page | Same as AI credits |
|
||||
| `capability.feed_source_limit` | **Marketing only** (`pricing-data`) | Max import feed sources | Free 1 · Starter 2 · Plus 3 · Growth 5 · Business 8 · Scale 12 · Enterprise unlimited |
|
||||
| `capability.export_feed_limit` | **Marketing only** | Max export feed definitions | Free 1 · Starter 2 · Plus 4 · Growth 8 · Business unlimited · Scale unlimited · Enterprise unlimited |
|
||||
| `capability.storage_limit` | **Marketing only** | Storage GB | Free 2 · Starter 20 · Growth 100 · Business 500 · Enterprise unlimited |
|
||||
| `capability.api_access` | **Marketing only** (keys UI exists for all) | REST / v1 API | Free off · Starter read · Growth+ full |
|
||||
| `capability.byok` | AI integrations UI | Customer OpenAI key | Growth add-on · Business included · Enterprise |
|
||||
|
||||
---
|
||||
|
||||
## Already gated in UI (summary)
|
||||
|
||||
| Surface | Gate signal | feature_key |
|
||||
|---------|-------------|-------------|
|
||||
| Products processing menu | `canUseAI` locks AI options | `catalog.products.process_ai_*` |
|
||||
| Products / Dashboard / Billing banners | `isFreePlan`, credits, SKU limit | `dashboard.upgrade_banners`, `catalog.products.upgrade_prompt` |
|
||||
| Campaign wizard | `showUpgrade` on Free | `marketing.campaigns.generate_ai` |
|
||||
| SEO page | `showUpgrade`, `report.can_use_ai` | `marketing.seo.ai_rewrite` |
|
||||
| Brand page | `ai_apply_allowed` alert | `marketing.brand_ai_apply` |
|
||||
| Email integrations | `dry_run_forced` banner | `integrations.email.blast` |
|
||||
| API processing start | HTTP 402 `plan_gate` codes | `capability.ai_processing`, `capability.sku_cap` |
|
||||
|
||||
---
|
||||
|
||||
## Routes in dashboard shell but excluded from this catalog
|
||||
|
||||
| Path | Reason |
|
||||
|------|--------|
|
||||
| `/admin/*` | Platform admin (separate shell) |
|
||||
| `/login`, `/register`, `/accept-invite` | Auth shell |
|
||||
| `/`, `/pricing`, `/features`, `/docs`, `/privacy`, `/terms`, `/unsubscribe` | Marketing shell (`MARKETING_PATHS`) |
|
||||
| `/integrations` | Redirects to `/stores` |
|
||||
|
||||
---
|
||||
|
||||
## Navigation index (primary + More)
|
||||
|
||||
**Primary (`Nav.svelte` `primaryItems`):** Dashboard, Products, Feeds, Stores, Export feeds, Billing.
|
||||
|
||||
**More → Setup:** Categories, Attributes, Standard Fields, Brand, Settings, AI integrations, Email sending, Platform admin (platform admins only).
|
||||
|
||||
**More → Operate:** Processing, Campaigns, Content calendar, SEO, Reviews, Support.
|
||||
Reference in New Issue
Block a user