Public Storefront
Publish selected Stock products, capture customer interest, and turn quote carts into CRM and Sales records.
The Stock public storefront is an anonymous, read-only catalog at:
https://workspace.leenops.com/public/storefront/<workspace-handle>Visitors can search and filter published products, inspect product galleries, ask about an item, and add positively priced products to a quotation cart. The storefront does not accept payment.
Permissions
Only workspace owners and admins can:
- Enable or disable the public storefront
- Change its URL handle
- Publish or unpublish products
- Bulk-change storefront visibility
Other workspace members can view Stock data and engagement according to their normal workspace access, but cannot expose inventory publicly.
Prepare products
A product appears publicly only when all three conditions are true:
- The product is active.
- Show on public storefront is enabled for that product.
- The workspace storefront is enabled.
Before publishing, review:
- Product name and public description
- Primary photo and gallery
- Category
- Sale price, or the decision to use Price on request
- Active state
Imported products do not publish automatically. Publish one product from its edit form or use the bulk action on Stock > Products.
Configure and enable the storefront
- Open Stock > Settings.
- In Public storefront, enter a URL handle using lowercase letters, numbers, and hyphens.
- Select Save handle.
- Confirm that at least one active product is published.
- Turn on the storefront.
- Confirm the public-access warning.
- Copy or open the generated URL.
Leenops refuses to enable an empty storefront. URL handles are unique across all workspaces; if a handle is taken, choose another one. Leaving the handle empty falls back to the workspace UUID.
What visitors can do
The catalog supports server-side:
- Search
- Category filters
- Newest, name, price, and popularity sorting
- Pagination/load-more
- Card, list, and table views
- Product galleries and previous/next navigation
Only active, explicitly published products are returned by the public loaders and APIs.
Priced products: quotation workflow
A product with sale_price > 0 can be added to the quote cart.
- The visitor adds one or more products and chooses quantities.
- The cart is stored locally and isolated to that storefront.
- The visitor enters an email and optional name.
- On submission, the server verifies the storefront is still enabled.
- The server re-reads each product, confirming it is active and published, and uses the current server price rather than trusting the browser.
- Leenops creates or reuses the CRM contact for the submitted email.
- An atomic, idempotent operation creates the Sales quotation and its lines.
- The visitor receives an opaque confirmation link and an acknowledgement email.
- The cart is cleared after success.
The storefront creates a quotation request, not an order or payment. The internal team continues the commercial workflow in Sales.
Products without a positive sale price cannot enter the quote cart. They display Price on request and use the interest workflow instead.
Questions and buy interest
On a public product page, the visitor sees:
- Ask about this item for a priced product
- Request price and availability for an inquiry-only product
The form requires an email and accepts an optional name and message. The visitor's identity is remembered in that browser for 30 days so it can be reused on another product or in the quote cart.
When submitted, Leenops:
- Rate-limits the public request and checks a hidden bot-trap field.
- Confirms the storefront, product, active state, and publication state.
- Creates or reuses a CRM contact, deduplicated by lowercase email within the workspace.
- Creates a
stock_product_interestsentry with status New and quantity 1. - Records an audit event.
- Notifies workspace owners and admins through Leenops's notification service. Connected Slack, Teams, or push forwarding can receive the same notification.
- Links the notification to the product's Storefront engagement section.
The visitor's raw IP address is never stored; Leenops stores a SHA-256 hash for abuse/audit context.
Comments
The public API also supports product comments. A comment follows the same validation, CRM-contact upsert, audit, and owner/admin notification flow, then stores a non-internal comments record for the product.
The current storefront UI exposes the interest/question form, not a separate public comment form. Comments submitted through the supported endpoint appear in the internal engagement timeline, but customer-facing comment submission and public comment display are not currently part of the visible storefront flow.
Follow up internally
- Open Stock > Products.
- Open the relevant product.
- Scroll to Storefront engagement.
- Review the unified, newest-first timeline.
- Select View contact to open the CRM record, or use the visitor's email link.
- For an interest entry, update the status:
| Status | Use |
|---|---|
| New | Not reviewed yet |
| Contacted | A team member has followed up |
| Won | Interest converted successfully |
| Lost | Opportunity did not proceed |
| Archived | No longer active but retained for history |
Comments are display-only in this panel. Interest entries provide the lifecycle control.
Public storefront versus private share link
| Capability | Public storefront | Private share link |
|---|---|---|
| Audience | Anyone with the stable URL | Anyone with an expiring token |
| Scope | All active published products | Selected catalog, product, or warehouse scope |
| Customer actions | Browse, ask, quote cart | Read-only sharing |
| Configuration | Workspace toggle and product publication | Stock > Settings > Share links |
Use a private share link for temporary or controlled catalog access. Use the public storefront for an ongoing customer-facing catalog.
Disable access
- Turn off the storefront to make the complete public catalog unavailable.
- Unpublish one product to remove only that product.
- Archive a product to hide it from both active Stock views and the storefront while preserving history.
- Revoke a private share link independently under Stock > Settings.

