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.