Add retail catalog add-ons to /web_design pricing table #31

Closed
opened 2026-09-06 04:20:08 -07:00 by westfarn · 0 comments
Owner

Summary

web_django_template now ships four optional retail apps. Update the public /web_design estimator so leads (3D-printed toys, TCG/comic shop) can build a package that matches the template flags.

Source of truth in the template:

Catalog item Template flag App One-time Monthly
E-commerce storefront FEATURE_SHOP shop $700 $30
POS API sync FEATURE_POS_SYNC pos_sync $500 $20
Event ticketing FEATURE_EVENTS events $400 $10
Shipping automation FEATURE_SHIPPING shipping $400 $15

Pricing is the mid-range from the retail add-on plan (storefront $600–800, ticketing $300–500). Third-party usage stays billed to the client (Stripe 2.9% + 30¢, EasyPost after 3,000 labels).

Dependencies (must auto-select like payments → email_sms)

  • ecommerce requires email_sms and payments
  • pos_sync requires ecommerce
  • event_ticketing requires email_sms and payments
  • shipping requires ecommerce

Existing resolve_selected_features() already walks requires chains. Selecting POS or shipping must also pull storefront, which then pulls payments + email/SMS.

Files to update

  1. company_site/public/web_design_pricing.py — append these four dicts to WEB_DESIGN_FEATURES:
{
    "id": "ecommerce",
    "name": "E-commerce storefront",
    "description": "Catalog, cart, inventory dashboard, Stripe checkout. Requires Email & SMS and Payments.",
    "build": 700,
    "monthly": 30,
    "required": False,
    "requires": ("email_sms", "payments"),
    "requires_note": "Requires Email & SMS and Payments (Stripe) — auto-selected.",
},
{
    "id": "pos_sync",
    "name": "POS API sync",
    "description": "Keep in-store POS inventory in sync with the online catalog.",
    "build": 500,
    "monthly": 20,
    "required": False,
    "requires": ("ecommerce",),
    "requires_note": "Requires E-commerce storefront — auto-selected.",
},
{
    "id": "event_ticketing",
    "name": "Event ticketing",
    "description": "Events, capacity limits, digital tickets. Requires Email & SMS and Payments.",
    "build": 400,
    "monthly": 10,
    "required": False,
    "requires": ("email_sms", "payments"),
    "requires_note": "Requires Email & SMS and Payments (Stripe) — auto-selected.",
},
{
    "id": "shipping",
    "name": "Shipping automation",
    "description": "EasyPost labels + Pirate Ship CSV export. Requires E-commerce storefront.",
    "build": 400,
    "monthly": 15,
    "required": False,
    "requires": ("ecommerce",),
    "requires_note": "Requires E-commerce storefront — auto-selected.",
},
  1. company_site/public/templates/public/web_design.html — growth add-on copy (commented services cards + meta description) should mention storefront, POS sync, events, shipping.
  2. company_site/public/tests.pyWebDesignPricingTests:
    • Selecting ecommerce auto-selects email_sms + payments (build 600 base + 500 email + 500 payments + 700 shop = 2300, monthly 40 + 10 + 20 + 30 = 100).
    • Selecting pos_sync also pulls ecommerce (+ email/SMS + payments).
    • Selecting event_ticketing auto-selects email_sms + payments.
    • Selecting shipping pulls ecommerce (+ email/SMS + payments).
    • Page render still shows the estimator; assert new feature names appear.
  3. company_site/public/static/public/js/webmcp-tools.js / llms.txt if they hard-code the old feature list — add the four ids so estimate_web_design_cost can quote retail packages.

What the template already does

  • Public /shop/ catalog + session cart + Stripe Checkout; portal product/inventory + orders.
  • Stocked vs made-to-order (print-minute queue limit).
  • POS inbound webhook decrements SKU stock; paid online orders enqueue outbound POS reserves (dispatch_due).
  • Public /events/ + capacity-limited tickets + confirmation email.
  • Portal shipping: EasyPost rates/labels when EASYPOST_API_KEY is set, otherwise stub rates + Pirate Ship CSV export.

Test plan

  • /web_design shows the four new rows with build/monthly prices
  • Toggling E-commerce checks Email & SMS + Payments
  • Toggling POS or Shipping also checks E-commerce (and its deps)
  • Toggling Event ticketing checks Email & SMS + Payments
  • Unchecking Email & SMS unchecks payments, shop, POS, events, shipping as required
  • Estimate totals and contact CTA feature list include the new ids
  • WebDesignPricingTests + WebMCP estimate tool still pass
## Summary `web_django_template` now ships four optional retail apps. Update the public `/web_design` estimator so leads (3D-printed toys, TCG/comic shop) can build a package that matches the template flags. Source of truth in the template: | Catalog item | Template flag | App | One-time | Monthly | |---|---|---|---|---| | E-commerce storefront | `FEATURE_SHOP` | `shop` | $700 | $30 | | POS API sync | `FEATURE_POS_SYNC` | `pos_sync` | $500 | $20 | | Event ticketing | `FEATURE_EVENTS` | `events` | $400 | $10 | | Shipping automation | `FEATURE_SHIPPING` | `shipping` | $400 | $15 | Pricing is the mid-range from the retail add-on plan (storefront $600–800, ticketing $300–500). Third-party usage stays billed to the client (Stripe 2.9% + 30¢, EasyPost after 3,000 labels). ## Dependencies (must auto-select like payments → email_sms) - `ecommerce` requires `email_sms` **and** `payments` - `pos_sync` requires `ecommerce` - `event_ticketing` requires `email_sms` **and** `payments` - `shipping` requires `ecommerce` Existing `resolve_selected_features()` already walks `requires` chains. Selecting POS or shipping must also pull storefront, which then pulls payments + email/SMS. ## Files to update 1. **`company_site/public/web_design_pricing.py`** — append these four dicts to `WEB_DESIGN_FEATURES`: ```python { "id": "ecommerce", "name": "E-commerce storefront", "description": "Catalog, cart, inventory dashboard, Stripe checkout. Requires Email & SMS and Payments.", "build": 700, "monthly": 30, "required": False, "requires": ("email_sms", "payments"), "requires_note": "Requires Email & SMS and Payments (Stripe) — auto-selected.", }, { "id": "pos_sync", "name": "POS API sync", "description": "Keep in-store POS inventory in sync with the online catalog.", "build": 500, "monthly": 20, "required": False, "requires": ("ecommerce",), "requires_note": "Requires E-commerce storefront — auto-selected.", }, { "id": "event_ticketing", "name": "Event ticketing", "description": "Events, capacity limits, digital tickets. Requires Email & SMS and Payments.", "build": 400, "monthly": 10, "required": False, "requires": ("email_sms", "payments"), "requires_note": "Requires Email & SMS and Payments (Stripe) — auto-selected.", }, { "id": "shipping", "name": "Shipping automation", "description": "EasyPost labels + Pirate Ship CSV export. Requires E-commerce storefront.", "build": 400, "monthly": 15, "required": False, "requires": ("ecommerce",), "requires_note": "Requires E-commerce storefront — auto-selected.", }, ``` 2. **`company_site/public/templates/public/web_design.html`** — growth add-on copy (commented services cards + meta description) should mention storefront, POS sync, events, shipping. 3. **`company_site/public/tests.py`** — `WebDesignPricingTests`: - Selecting `ecommerce` auto-selects `email_sms` + `payments` (build 600 base + 500 email + 500 payments + 700 shop = **2300**, monthly 40 + 10 + 20 + 30 = **100**). - Selecting `pos_sync` also pulls `ecommerce` (+ email/SMS + payments). - Selecting `event_ticketing` auto-selects `email_sms` + `payments`. - Selecting `shipping` pulls `ecommerce` (+ email/SMS + payments). - Page render still shows the estimator; assert new feature names appear. 4. **`company_site/public/static/public/js/webmcp-tools.js`** / llms.txt if they hard-code the old feature list — add the four ids so `estimate_web_design_cost` can quote retail packages. ## What the template already does - Public `/shop/` catalog + session cart + Stripe Checkout; portal product/inventory + orders. - Stocked vs made-to-order (print-minute queue limit). - POS inbound webhook decrements SKU stock; paid online orders enqueue outbound POS reserves (`dispatch_due`). - Public `/events/` + capacity-limited tickets + confirmation email. - Portal shipping: EasyPost rates/labels when `EASYPOST_API_KEY` is set, otherwise stub rates + Pirate Ship CSV export. ## Test plan - [ ] `/web_design` shows the four new rows with build/monthly prices - [ ] Toggling E-commerce checks Email & SMS + Payments - [ ] Toggling POS or Shipping also checks E-commerce (and its deps) - [ ] Toggling Event ticketing checks Email & SMS + Payments - [ ] Unchecking Email & SMS unchecks payments, shop, POS, events, shipping as required - [ ] Estimate totals and contact CTA feature list include the new ids - [ ] `WebDesignPricingTests` + WebMCP estimate tool still pass
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ai_ml_operations/company_site#31