# Advanced E-Commerce Features Checklist
## Saleor Built-in vs Missing Features
### ✅ Built-in (Ready to Use)
| Feature | Saleor Support | Notes |
|---------|---------------|-------|
| **Products & Variants** | ✅ Native | Simple & variable products |
| **Categories** | ✅ Native | Hierarchical with nesting |
| **Collections** | ✅ Native | Manual & automated collections |
| **Inventory** | ✅ Native | Multi-warehouse support |
| **Multi-language** | ✅ Native | Full translation support |
| **Multi-currency** | ✅ Native | Per-channel pricing |
| **Promotions** | ✅ Native | % off, fixed amount, vouchers |
| **Gift Cards** | ✅ Native | Digital gift cards |
| **Taxes** | ✅ Native | Per-country tax rates |
| **Shipping** | ✅ Native | Zones & methods |
| **Customer Accounts** | ✅ Native | Full account management |
| **Order Management** | ✅ Native | Status tracking, fulfillments |
| **Staff Permissions** | ✅ Native | Role-based access |
| **Pages & Menus** | ✅ Native | CMS features |
| **Checkout** | ✅ Native | Customizable flow |
| **Payments** | ✅ Native | Stripe, Adyen, etc. |
---
## ❌ Missing Features (Need to Build/Add)
### 1. Product Reviews ⭐ HIGH PRIORITY
**Status:** NOT in Saleor (on roadmap but not planned)
**Solutions:**
| Solution | Cost | Effort | Best For |
|----------|------|--------|----------|
| **Judge.me** | Free-$15/mo | 2 hours | Budget option, works well |
| **Trustpilot** | $200+/mo | 2 hours | SEO, brand trust |
| **Yotpo** | $300+/mo | 4 hours | Enterprise, UGC |
| **Build Custom** | Free | 2-4 weeks | Full control |
**Custom Build SQL:**
```sql
CREATE TABLE product_review (
id SERIAL PRIMARY KEY,
product_id INTEGER REFERENCES product_product(id),
user_id INTEGER REFERENCES account_user(id),
rating INTEGER CHECK (rating >= 1 AND rating <= 5),
title VARCHAR(255),
comment TEXT,
is_verified_purchase BOOLEAN DEFAULT false,
is_approved BOOLEAN DEFAULT false,
helpful_count INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT NOW()
);
```
---
### 2. Upsells & Cross-sells ⭐ HIGH PRIORITY
**Status:** NOT in Saleor (confirmed missing)
**What You Need:**
```sql
-- Related products / upsells table
CREATE TABLE product_related (
id SERIAL PRIMARY KEY,
product_id INTEGER REFERENCES product_product(id),
related_product_id INTEGER REFERENCES product_product(id),
type VARCHAR(50), -- 'upsell', 'cross_sell', 'related'
sort_order INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT NOW(),
UNIQUE(product_id, related_product_id, type)
);
```
**Types of Upsells:**
| Type | Example | Location |
|------|---------|----------|
| **Upsell** | 500ml → 1L (upgrade) | Product page |
| **Cross-sell** | Olive oil + vinegar (complementary) | Cart page |
| **Related** | Same category products | Product page |
| **Bundle** | Oil + vinegar + herbs package | Product page |
| **Frequently Bought Together** | AI-based recommendations | Cart page |
**Implementation Options:**
#### Option A: Manual (Product-Level)
```sql
-- Admin manually assigns related products
INSERT INTO product_related (product_id, related_product_id, type, sort_order)
VALUES
(1, 5, 'upsell', 1), -- Product 1 shows Product 5 as upsell
(1, 6, 'cross_sell', 1), -- Product 1 shows Product 6 as cross-sell
(1, 7, 'related', 1); -- Product 1 shows Product 7 as related
```
**Admin UI Needed:**
- Product edit page with "Related Products" section
- Search & select products
- Drag to reorder
- Choose type (upsell/cross-sell/related)
#### Option B: Automated (Category-Based)
```typescript
// Automatically show products from same category
const getRelatedProducts = async (productId: string, categoryId: string) => {
return await saleorClient.query({
query: gql`
query GetRelatedProducts($categoryId: ID!, $excludeId: ID!) {
products(
first: 4,
filter: {categories: [$categoryId]},
channel: "default-channel"
) {
edges {
node {
id
name
slug
thumbnail { url }
variants {
channelListings {
price { amount currency }
}
}
}
}
}
}
`,
variables: { categoryId, excludeId: productId }
});
};
```
#### Option C: AI/ML Recommendations (Advanced)
Services:
- **Recombee** - $99/mo+
- **Amazon Personalize** - Pay per use
- **Algolia Recommend** - $29/mo+
- **Build custom** - Requires order history analysis
**Effort:** High (4-8 weeks)
---
### 3. Product Bundles ⭐ MEDIUM PRIORITY
**Status:** NOT in Saleor (requested, on roadmap)
**Example:**
- Olive Oil 500ml + Vinegar 250ml = Bundle price $15 (save $3)
**Custom Implementation:**
```sql
-- Bundle definition
CREATE TABLE product_bundle (
id SERIAL PRIMARY KEY,
name VARCHAR(250),
slug VARCHAR(255) UNIQUE,
description JSONB,
product_type_id INTEGER REFERENCES product_producttype(id),
bundle_price_amount NUMERIC(20,3),
currency VARCHAR(3),
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMP DEFAULT NOW()
);
-- Bundle items
CREATE TABLE product_bundle_item (
id SERIAL PRIMARY KEY,
bundle_id INTEGER REFERENCES product_bundle(id),
product_variant_id INTEGER REFERENCES product_productvariant(id),
quantity INTEGER DEFAULT 1,
sort_order INTEGER DEFAULT 0
);
```
**Storefront Display:**
```typescript
// Show bundle on product page
| Feature | {products.map(p =>{p.name} | )}
|---|---|
| Price | {products.map(p =>${p.price} | )}
| Volume | {products.map(p =>{p.volume} | )}