# Platform Homepage & Content Pages ## Overview The Platform Homepage feature provides a customizable, CMS-driven public homepage and content pages for your multi-store marketplace platform at the root domain (e.g., `localhost:8000` or `platform.com`). **Key Features:** - ✅ CMS-driven customizable homepage with multiple templates - ✅ Multiple content pages (About, FAQ, Contact, Terms, Privacy) - ✅ Dynamic header and footer navigation - ✅ Responsive design with dark mode support - ✅ SEO-optimized with meta tags - ✅ Template selection system (default, minimal, modern) --- ## Architecture ### URL Structure | URL | Purpose | CMS Slug | Template | |-----|---------|----------|----------| | `/` | Platform Homepage | `platform_homepage` | Customizable (default/minimal/modern) | | `/about` | About Us | `about` | `platform/content-page.html` | | `/faq` | FAQ | `faq` | `platform/content-page.html` | | `/contact` | Contact Us | `contact` | `platform/content-page.html` | | `/terms` | Terms of Service | `terms` | `platform/content-page.html` | | `/privacy` | Privacy Policy | `privacy` | `platform/content-page.html` | ### Database Model All platform pages are stored in the `content_pages` table with `store_id = NULL`: ```sql -- Platform homepage INSERT INTO content_pages (store_id, slug, title, template, ...) VALUES (NULL, 'platform_homepage', 'Welcome', 'modern', ...); -- Content pages INSERT INTO content_pages (store_id, slug, title, ...) VALUES (NULL, 'about', 'About Us', ...); ``` ### Navigation System Pages are configured to appear in header/footer navigation using flags: | Field | Purpose | Example | |-------|---------|---------| | `show_in_header` | Display in top navigation | About, FAQ, Contact | | `show_in_footer` | Display in footer links | All pages | | `display_order` | Sort order in menus | 1, 2, 3, ... | --- ## File Structure ``` app/ ├── templates/platform/ │ ├── base.html # Base layout with nav/footer │ ├── homepage-default.html # Default homepage template │ ├── homepage-minimal.html # Minimal/clean template │ ├── homepage-modern.html # Modern template with animations │ └── content-page.html # Generic content page template ├── services/ │ └── content_page_service.py # CMS business logic └── main.py # Platform routes (lines 284-404) scripts/ └── create_platform_pages.py # Seeder script docs/features/ └── platform-homepage.md # This file ``` --- ## Templates ### 1. Homepage Templates Three homepage templates are available: #### **Default Template** (`platform/homepage-default.html`) - **Style:** Professional, feature-rich - **Sections:** Hero, Features, Featured Stores, CTA - **Best for:** Comprehensive platform showcase #### **Minimal Template** (`platform/homepage-minimal.html`) - **Style:** Clean, minimalist - **Sections:** Simple hero, minimal features, simple CTA - **Best for:** Focus on simplicity #### **Modern Template** (`platform/homepage-modern.html`) - **Style:** Trendy, animated, gradient-heavy - **Sections:** Animated hero, feature cards with hover effects, stats - **Best for:** Modern, tech-forward branding ### 2. Content Page Template **Template:** `platform/content-page.html` Used for all content pages (About, FAQ, Contact, etc.) **Features:** - Breadcrumb navigation - Responsive design - Enhanced prose styling for content - Context-aware CTAs (for about/contact pages) - Last updated timestamp - Dark mode support --- ## Usage ### Admin CMS Interface (Recommended) #### Platform Homepage Manager (`/admin/platform-homepage`) The easiest way to manage your platform homepage is through the admin interface: 1. **Login to Admin Panel:** ``` http://localhost:8000/admin/login ``` 2. **Navigate to Platform Homepage:** - Click "Content Management" in the sidebar - Click "Platform Homepage" 3. **Customize Homepage:** - **Template Selection:** Choose between Default, Minimal, or Modern templates with visual previews - **Page Title:** Edit the main heading - **Content:** Add HTML content for the hero section - **SEO Settings:** Set meta description and keywords - **Publishing:** Toggle published status - **Preview:** Click "Preview" button to see live homepage - **Save:** Click "Save Changes" to update **Features:** - ✅ Visual template selector with previews - ✅ Real-time save with success/error feedback - ✅ Character counter for SEO fields - ✅ One-click preview - ✅ Dark mode support #### Content Pages Manager (`/admin/content-pages`) Manage all platform content pages from a single interface: 1. **Navigate to Content Pages:** - Click "Content Management" in the sidebar - Click "Content Pages" 2. **View All Pages:** - **Tabs:** Switch between All Pages, Platform Defaults, or Store Overrides - **Search:** Type to filter by title, slug, or store name - **Table View:** See status, navigation settings, and last updated 3. **Edit Existing Page:** - Click the edit icon (pencil) next to any page - Modify content, SEO, navigation settings - Click "Update Page" to save 4. **Create New Page:** - Click "Create Page" button - Fill in: - Page title and URL slug - Content format (HTML or Markdown) - Content (large textarea) - SEO metadata - Navigation settings (header/footer visibility) - Display order - Click "Create Page" 5. **Delete Page:** - Click the delete icon (trash) next to any page - Confirm deletion **Features:** - ✅ Tabbed interface for easy filtering - ✅ Real-time search - ✅ Status badges (Published/Draft, Platform/Store) - ✅ Navigation badges (Header/Footer) - ✅ Quick edit and delete actions - ✅ Empty state with helpful CTAs ### Creating Platform Pages #### Method 1: Using the Seeder Script ```bash # Create all default platform pages python scripts/seed/create_platform_pages.py ``` This creates: - Platform Homepage (with modern template) - About Us - FAQ - Contact Us - Terms of Service - Privacy Policy #### Method 2: Via API **Create Platform Homepage:** ```bash POST /api/v1/admin/content-pages/platform { "slug": "platform_homepage", "title": "Welcome to Our Marketplace", "content": "

Your custom content...

", "template": "modern", "store_id": null, "is_published": true, "show_in_header": false, "show_in_footer": false } ``` **Create Content Page:** ```bash POST /api/v1/admin/content-pages/platform { "slug": "about", "title": "About Us", "content": "

Our Story

...

", "store_id": null, "is_published": true, "show_in_header": true, "show_in_footer": true, "display_order": 1 } ``` #### Method 3: Programmatically ```python from app.core.database import SessionLocal from app.services.content_page_service import content_page_service db = SessionLocal() # Create homepage homepage = content_page_service.create_page( db, slug="platform_homepage", title="Welcome", content="

Content...

", template="modern", # default, minimal, or modern store_id=None, is_published=True, show_in_header=False, show_in_footer=False ) # Create content page about = content_page_service.create_page( db, slug="about", title="About Us", content="

Our Story

", store_id=None, is_published=True, show_in_header=True, # Show in top nav show_in_footer=True, # Show in footer display_order=1 ) db.close() ``` --- ## Customization ### Changing Homepage Template Update the `template` field in the database: ```sql UPDATE content_pages SET template = 'minimal' -- or 'default', 'modern' WHERE slug = 'platform_homepage' AND store_id IS NULL; ``` Or via API: ```bash PUT /api/v1/admin/content-pages/{id} { "template": "minimal" } ``` ### Customizing Navigation **Add page to header menu:** ```python content_page_service.update_page( db, page_id=page.id, show_in_header=True, display_order=2 # Position in menu ) ``` **Remove page from footer:** ```python content_page_service.update_page( db, page_id=page.id, show_in_footer=False ) ``` ### Updating Page Content ```python content_page_service.update_page( db, page_id=page.id, title="New Title", content="

Updated Content

", meta_description="New SEO description", template="modern" # Change template ) ``` --- ## How It Works ### 1. Request Flow ``` User visits: http://localhost:8000/ ↓ StoreContextMiddleware (no store detected, platform mode) ↓ ContextMiddleware (context = unknown) ↓ Route: platform_homepage() in main.py:284 ↓ Load page from CMS (slug='platform_homepage', store_id=NULL) ↓ Load header/footer navigation pages ↓ Render template: platform/homepage-{template}.html ↓ Response with navigation menu ``` ### 2. CMS Lookup Logic **For Homepage (`/`):** 1. Query: `SELECT * FROM content_pages WHERE slug='platform_homepage' AND store_id IS NULL` 2. If found → Render with selected template (default/minimal/modern) 3. If not found → Render fallback static template **For Content Pages (`/about`, `/faq`, etc.):** 1. Query: `SELECT * FROM content_pages WHERE slug='{slug}' AND store_id IS NULL` 2. If found → Render `platform/content-page.html` 3. If not found → Return 404 **Navigation Loading:** ```python # Header pages (show_in_header=True) header_pages = content_page_service.list_pages_for_store( db, store_id=None, header_only=True ) # Footer pages (show_in_footer=True) footer_pages = content_page_service.list_pages_for_store( db, store_id=None, footer_only=True ) ``` ### 3. Template Rendering **Homepage:** ```python # In main.py:284 if homepage: template_name = homepage.template or "default" # Get from CMS template_path = f"platform/homepage-{template_name}.html" return templates.TemplateResponse(template_path, context) ``` **Content Page:** ```python # In main.py:349 return templates.TemplateResponse( "platform/content-page.html", { "request": request, "page": page, "header_pages": header_pages, "footer_pages": footer_pages } ) ``` --- ## Navigation Menu Example Given these pages in the database: | Slug | Title | show_in_header | show_in_footer | display_order | |------|-------|----------------|----------------|---------------| | `about` | About Us | ✅ | ✅ | 1 | | `faq` | FAQ | ✅ | ✅ | 2 | | `contact` | Contact Us | ✅ | ✅ | 3 | | `terms` | Terms of Service | ❌ | ✅ | 10 | | `privacy` | Privacy Policy | ❌ | ✅ | 11 | **Header Navigation:** ``` Marketplace | About Us | FAQ | Contact Us | 🌙 ``` **Footer Navigation:** ``` Quick Links - About Us - FAQ - Contact Us - Terms of Service - Privacy Policy ``` --- ## SEO Optimization All pages support SEO meta tags: ```python content_page_service.create_page( db, slug="about", title="About Our Platform", meta_description="Learn about our mission to democratize e-commerce...", meta_keywords="about us, mission, vision, values, merchant", # ... ) ``` **Rendered in template:** ```html About Our Platform - Marketplace ``` --- ## Testing ### Manual Testing 1. **Visit homepage:** ``` http://localhost:8000/ ``` Should show platform homepage with selected template. 2. **Visit content pages:** ``` http://localhost:8000/about http://localhost:8000/faq http://localhost:8000/contact http://localhost:8000/terms http://localhost:8000/privacy ``` 3. **Check navigation:** - Header should show: About Us, FAQ, Contact Us - Footer should show all pages 4. **Test dark mode:** - Click moon icon in header - Verify dark mode works on all pages 5. **Test responsive design:** - Resize browser window - Verify mobile menu works - Check layouts on different screen sizes ### API Testing **Get page content:** ```bash GET /api/v1/shop/content-pages/about ``` **Get navigation:** ```bash GET /api/v1/shop/content-pages/navigation ``` --- ## Advanced Features ### Multiple Homepage Templates Create custom homepage templates: 1. Create template file: ``` app/templates/platform/homepage-custom.html ``` 2. Update CMS page: ```python content_page_service.update_page( db, page_id=homepage.id, template="custom" ) ``` 3. Visit homepage → Renders `platform/homepage-custom.html` ### Dynamic Content Loading Homepage templates can load dynamic data: ```jinja2 {# In template #} {% if featured_stores %} {% for store in featured_stores %}
{{ store.name }}
{% endfor %} {% endif %} ``` Pass data in route handler: ```python # In main.py featured_stores = db.query(Store).filter(Store.is_featured==True).all() return templates.TemplateResponse( template_path, { "request": request, "page": homepage, "header_pages": header_pages, "footer_pages": footer_pages, "featured_stores": featured_stores, # Additional data } ) ``` --- ## Troubleshooting ### Homepage shows 404 **Problem:** Platform homepage not rendering **Solutions:** 1. Run seeder script: ```bash python scripts/seed/create_platform_pages.py ``` 2. Verify page exists: ```sql SELECT * FROM content_pages WHERE slug='platform_homepage' AND store_id IS NULL; ``` 3. Check page is published: ```sql UPDATE content_pages SET is_published=true WHERE slug='platform_homepage'; ``` ### Navigation menu is empty **Problem:** No pages showing in header/footer **Solutions:** 1. Check navigation flags: ```sql SELECT slug, title, show_in_header, show_in_footer FROM content_pages WHERE store_id IS NULL; ``` 2. Update flags: ```sql UPDATE content_pages SET show_in_header=true, show_in_footer=true WHERE slug='about' AND store_id IS NULL; ``` ### Content page returns 404 **Problem:** `/about` or other pages not found **Solutions:** 1. Verify slug: ```sql SELECT slug FROM content_pages WHERE store_id IS NULL; ``` 2. Check published status: ```sql UPDATE content_pages SET is_published=true WHERE slug='about'; ``` ### Wrong template loads **Problem:** Homepage uses wrong template **Solution:** ```sql UPDATE content_pages SET template='modern' WHERE slug='platform_homepage' AND store_id IS NULL; ``` --- ## Best Practices 1. **Always set SEO meta tags:** ```python meta_description="Clear 150-160 char description", meta_keywords="relevant, keywords, comma, separated" ``` 2. **Use semantic HTML in content:** ```html

Main Heading

Paragraph text...

``` 3. **Set appropriate display_order:** ```python display_order=1 # First in menu display_order=2 # Second in menu display_order=10 # Legal pages (lower priority) ``` 4. **Use navigation flags wisely:** - `show_in_header`: Only 3-5 main pages - `show_in_footer`: Can include more pages 5. **Keep homepage content concise:** - Use templates for structure - Add key messaging only - Link to detailed content pages --- ## API Reference ### Admin Endpoints ``` POST /api/v1/admin/content-pages/platform # Create platform page GET /api/v1/admin/content-pages/platform # List platform pages GET /api/v1/admin/content-pages/{id} # Get specific page PUT /api/v1/admin/content-pages/{id} # Update page DELETE /api/v1/admin/content-pages/{id} # Delete page ``` ### Shop (Public) Endpoints ``` GET /api/v1/shop/content-pages/navigation # Get nav links GET /api/v1/shop/content-pages/{slug} # Get page content ``` --- ## Related Documentation - [Content Management System](./content-management-system.md) - Full CMS documentation - [CMS Implementation Guide](./cms-implementation-guide.md) - Technical implementation - [Admin Frontend Guide](../frontend/admin/page-templates.md) - Admin UI patterns --- ## Summary The Platform Homepage system provides: ✅ **Customizable homepage** with 3 template options ✅ **Multiple content pages** (About, FAQ, Contact, Terms, Privacy) ✅ **CMS-driven** with full CRUD support ✅ **Dynamic navigation** loaded from database ✅ **SEO-optimized** with meta tags ✅ **Responsive** with dark mode support ✅ **Easy to extend** with custom templates All pages are managed through the existing CMS system, allowing admins to customize content without touching code.