- Add Development URL Quick Reference section to url-routing overview with all login URLs, entry points, and full examples - Replace /shop/ path segments with /storefront/ across 50 docs files - Update file references: shop_pages.py → storefront_pages.py, templates/shop/ → templates/storefront/, api/v1/shop/ → api/v1/storefront/ - Preserve domain references (orion.shop) and /store/ staff dashboard paths - Archive docs left unchanged (historical) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
7.6 KiB
Store Landing Pages
Complete guide to creating custom landing pages for store storefronts.
Overview
Each store can have a custom landing page at their root URL with different design templates. This landing page serves as the store's homepage, separate from the e-commerce storefront section.
URL Structure
Root Landing Page:
- Custom Domain: https://customdomain.com/ → Landing Page
- Subdomain: https://orion.platform.com/ → Landing Page
- Path-based: http://localhost:8000/stores/orion/ → Landing Page
E-commerce Storefront:
- Custom Domain: https://customdomain.com/storefront/ → Storefront Homepage
- Subdomain: https://orion.platform.com/storefront/ → Storefront Homepage
- Path-based: http://localhost:8000/storefront/orion/ → Storefront Homepage
Features
✅ Multiple Templates: Choose from 4 different landing page designs ✅ CMS-Powered: Content managed through ContentPage model ✅ Per-Store Customization: Each store can have unique design ✅ Auto-Fallback: Redirects to storefront if no landing page exists ✅ Theme-Aware: Uses store's theme colors and branding
Available Templates
1. Default (landing-default.html)
- Clean and professional
- Hero section with logo and CTA
- Optional content section
- Quick links grid (3 cards)
- Best for: General purpose, simple storefronts
2. Minimal (landing-minimal.html)
- Ultra-simple centered design
- Single page, no scrolling
- One primary CTA
- Minimal navigation
- Best for: Single-product stores, portfolio sites
3. Modern (landing-modern.html)
- Full-screen hero with animations
- Feature showcase section
- Gradient backgrounds
- Multiple CTAs
- Best for: Tech products, modern brands
4. Full (landing-full.html)
- Split-screen hero layout
- Stats/badges section
- 4-feature grid
- Multiple content sections
- Final CTA section
- Best for: Established brands, full product catalogs
How to Create a Landing Page
Step 1: Create ContentPage in Database
# Using Python/SQL
from models.database.content_page import ContentPage
landing_page = ContentPage(
store_id=1, # Your store ID
slug="landing", # Must be "landing" or "home"
title="Welcome to Our Store",
content="<p>Your custom HTML content here...</p>",
template="modern", # Choose: default, minimal, modern, full
is_published=True,
show_in_footer=False,
show_in_header=False
)
db.add(landing_page)
db.commit()
Step 2: Choose Template
Set the template field to one of:
"default"- Clean professional layout"minimal"- Ultra-simple centered design"modern"- Full-screen with animations"full"- Maximum features and sections
Step 3: Add Content (Optional)
The content field supports HTML. This appears in a dedicated section on all templates:
<h2>About Our Store</h2>
<p>We've been serving customers since 2020...</p>
<ul>
<li>Quality products</li>
<li>Fast shipping</li>
<li>Great customer service</li>
</ul>
Step 4: Publish
Set is_published=True to make the landing page live.
Fallback Behavior
If no landing page exists:
- System checks for
slug="landing" - If not found, checks for
slug="home" - If neither exists, redirects to
/storefront/
This ensures stores always have a working homepage even without a landing page.
Template Variables
All templates have access to:
From Request Context
{
"store": Store object,
"theme": Theme object with colors/branding,
"base_url": "/" or "/stores/{code}/",
"page": ContentPage object,
"header_pages": List of header navigation pages,
"footer_pages": List of footer navigation pages
}
Store Properties
{{ store.name }}
{{ store.tagline }}
{{ store.description }}
{{ store.website }}
Theme Properties
{{ theme.branding.logo }}
{{ theme.branding.logo_dark }}
{{ theme.colors.primary }}
{{ theme.colors.accent }}
Page Properties
{{ page.title }}
{{ page.content | safe }}
{{ page.meta_description }}
{{ page.template }}
Migration Applied
Database migration f68d8da5315a adds template field to content_pages table:
ALTER TABLE content_pages
ADD COLUMN template VARCHAR(50) NOT NULL DEFAULT 'default';
API Endpoints
Get Landing Page
GET /api/v1/storefront/content-pages/landing
Referer: https://orion.platform.com/
Response:
{
"id": 1,
"slug": "landing",
"title": "Welcome to Orion",
"content": "<p>...</p>",
"template": "modern",
"is_published": true
}
Testing
Test Landing Page
- Create a landing page via database or admin panel
- Access store root URL:
- Path-based:
http://localhost:8000/stores/orion/ - Subdomain:
https://orion.platform.com/
- Path-based:
- Should see your custom landing page
Test Fallback
- Delete or unpublish landing page
- Access store root URL
- Should redirect to
/storefront/
Customization Guide
Adding a New Template
-
Create new template file:
app/templates/store/landing-{name}.html -
Extend storefront base:
{% extends "storefront/base.html" %} -
Use template variables as needed
-
Update
page.templateto{name}in database
Modifying Existing Templates
Templates are in:
app/templates/store/
├── landing-default.html (Clean professional)
├── landing-minimal.html (Ultra-simple)
├── landing-modern.html (Full-screen hero)
└── landing-full.html (Maximum features)
Edit directly and changes apply immediately (no rebuild needed).
Best Practices
-
Choose Template Based on Content:
- Minimal: Little content, single CTA
- Default: Moderate content, professional
- Modern: Tech/modern brands, animated
- Full: Lots of content, established brand
-
Keep Content Concise: Landing pages should be scannable
-
Strong CTAs: Always link to
/storefront/for e-commerce -
Use Theme Colors: Templates automatically use store theme
-
Test Responsiveness: All templates are mobile-friendly
-
SEO: Fill in
meta_descriptionfor better search results
Examples
Example 1: Simple Store
ContentPage(
store_id=1,
slug="landing",
title="Welcome to TechStore",
content="<p>Your one-stop shop for electronics</p>",
template="default",
is_published=True
)
Example 2: Portfolio Site
ContentPage(
store_id=2,
slug="landing",
title="John's Artwork",
content="<p>Handcrafted pieces since 2015</p>",
template="minimal",
is_published=True
)
Example 3: Modern Brand
ContentPage(
store_id=3,
slug="landing",
title="FutureWear - Style Redefined",
content="<h2>Our Story</h2><p>Innovation meets fashion...</p>",
template="modern",
is_published=True
)
Troubleshooting
Landing Page Not Showing
- Check
is_published=True - Verify
slug="landing"orslug="home" - Check store ID matches
- Verify template field is valid
Wrong Template Rendering
- Check
templatefield value - Ensure template file exists at
app/templates/store/landing-{template}.html - Check for typos in template name
Theme Colors Not Applied
- Verify store has theme configured
- Check CSS variables in template:
var(--color-primary) - Inspect theme object in template context
Future Enhancements
Phase 2: Section Builder (Future)
- Drag-and-drop section components
- Hero, Features, Testimonials, Gallery sections
- Per-section customization
- Visual page builder interface
This will allow stores to build completely custom layouts without template limitations.