diff --git a/docs/development/database-seeder/DATABASE_SEEDER_DOCUMENTATION.md b/docs/development/database-seeder/DATABASE_SEEDER_DOCUMENTATION.md
index cd93b711..96953ad5 100644
--- a/docs/development/database-seeder/DATABASE_SEEDER_DOCUMENTATION.md
+++ b/docs/development/database-seeder/DATABASE_SEEDER_DOCUMENTATION.md
@@ -22,6 +22,7 @@ I've created a comprehensive database seeder for your Wizamart platform that sig
- ✓ Import jobs
- ✓ Admin settings (platform configuration)
- ✓ Platform alerts (system monitoring)
+- ✓ **CMS Content Pages** (platform defaults: about, contact, FAQ, shipping, returns, privacy, terms)
## Files Created
@@ -352,12 +353,64 @@ source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
```
+## CMS Content Pages
+
+The platform includes a comprehensive CMS (Content Management System) for managing static content pages.
+
+### Creating Default CMS Pages
+
+To create platform-level default content pages (About, Contact, FAQ, Shipping, Returns, Privacy, Terms):
+
+```bash
+make create-cms-defaults
+# or
+python scripts/create_default_content_pages.py
+```
+
+This creates 7 platform default pages that all vendors inherit:
+
+| Slug | Title | Show in Footer | Show in Header |
+|------|-------|----------------|----------------|
+| about | About Us | ✓ | ✓ |
+| contact | Contact Us | ✓ | ✓ |
+| faq | Frequently Asked Questions | ✓ | ✗ |
+| shipping | Shipping Policy | ✓ | ✗ |
+| returns | Return & Refund Policy | ✓ | ✗ |
+| privacy | Privacy Policy | ✓ | ✗ |
+| terms | Terms of Service | ✓ | ✗ |
+
+**Features:**
+- **Platform Defaults**: Created with `vendor_id=NULL`, available to all vendors
+- **Vendor Overrides**: Vendors can create custom versions with the same slug
+- **Automatic Fallback**: System checks vendor override first, falls back to platform default
+- **Navigation**: Pages marked with `show_in_footer` appear in shop footer automatically
+- **Idempotent**: Script skips pages that already exist
+
+**Access URLs:**
+- `/about` - About Us page
+- `/contact` - Contact page
+- `/faq` - FAQ page
+- `/shipping` - Shipping Policy
+- `/returns` - Return Policy
+- `/privacy` - Privacy Policy
+- `/terms` - Terms of Service
+
+### Integration with db-setup
+
+The `make db-setup` command automatically includes CMS defaults:
+
+```bash
+make db-setup
+# Runs: migrate-up → init-prod → create-cms-defaults → seed-demo
+```
+
## Best Practices
1. **Development**: Use `make seed` for full test data
2. **Quick Testing**: Use `make seed-minimal` for fast setup
3. **Fresh Start**: Use `make seed-reset` when testing migrations
-4. **Production**: Never run the seeder in production!
+4. **CMS Pages**: Run `make create-cms-defaults` after migrations
+5. **Production**: Never run the seeder in production!
## Security Notes
diff --git a/docs/features/cms-implementation-guide.md b/docs/features/cms-implementation-guide.md
new file mode 100644
index 00000000..6508b441
--- /dev/null
+++ b/docs/features/cms-implementation-guide.md
@@ -0,0 +1,414 @@
+# CMS Implementation Guide
+
+## Quick Start
+
+This guide shows you how to implement the Content Management System for static pages.
+
+## What Was Implemented
+
+✅ **Database Model**: `models/database/content_page.py`
+✅ **Service Layer**: `app/services/content_page_service.py`
+✅ **Admin API**: `app/api/v1/admin/content_pages.py`
+✅ **Vendor API**: `app/api/v1/vendor/content_pages.py`
+✅ **Shop API**: `app/api/v1/shop/content_pages.py`
+✅ **Documentation**: Full CMS documentation in `docs/features/content-management-system.md`
+
+## Next Steps to Activate
+
+### 1. Create Database Migration
+
+```bash
+# Create Alembic migration
+alembic revision --autogenerate -m "Add content_pages table"
+
+# Review the generated migration in alembic/versions/
+
+# Run migration
+alembic upgrade head
+```
+
+### 2. Add Relationship to Vendor Model
+
+Edit `models/database/vendor.py` and add this relationship:
+
+```python
+# Add this import
+from sqlalchemy.orm import relationship
+
+# Add this relationship to Vendor class
+content_pages = relationship("ContentPage", back_populates="vendor", cascade="all, delete-orphan")
+```
+
+### 3. Register API Routers
+
+Edit the appropriate router files to include the new endpoints:
+
+**Admin Router** (`app/api/v1/admin/__init__.py`):
+```python
+from app.api.v1.admin import content_pages
+
+api_router.include_router(
+ content_pages.router,
+ prefix="/content-pages",
+ tags=["admin-content-pages"]
+)
+```
+
+**Vendor Router** (`app/api/v1/vendor/__init__.py`):
+```python
+from app.api.v1.vendor import content_pages
+
+api_router.include_router(
+ content_pages.router,
+ prefix="/{vendor_code}/content-pages",
+ tags=["vendor-content-pages"]
+)
+```
+
+**Shop Router** (`app/api/v1/shop/__init__.py` or create if doesn't exist):
+```python
+from app.api.v1.shop import content_pages
+
+api_router.include_router(
+ content_pages.router,
+ prefix="/content-pages",
+ tags=["shop-content-pages"]
+)
+```
+
+### 4. Update Shop Routes to Use CMS
+
+Edit `app/routes/shop_pages.py` to add a generic content page handler:
+
+```python
+from app.services.content_page_service import content_page_service
+
+@router.get("/{slug}", response_class=HTMLResponse, include_in_schema=False)
+async def generic_content_page(
+ slug: str,
+ request: Request,
+ db: Session = Depends(get_db)
+):
+ """
+ Generic content page handler.
+ Handles: /about, /faq, /contact, /shipping, /returns, /privacy, /terms, etc.
+ """
+ vendor = getattr(request.state, 'vendor', None)
+ vendor_id = vendor.id if vendor else None
+
+ page = content_page_service.get_page_for_vendor(
+ db,
+ slug=slug,
+ vendor_id=vendor_id,
+ include_unpublished=False
+ )
+
+ if not page:
+ raise HTTPException(status_code=404, detail=f"Page not found: {slug}")
+
+ return templates.TemplateResponse(
+ "shop/content-page.html",
+ get_shop_context(request, page=page)
+ )
+```
+
+### 5. Create Generic Content Page Template
+
+Create `app/templates/shop/content-page.html`:
+
+```jinja2
+{# app/templates/shop/content-page.html #}
+{% extends "shop/base.html" %}
+
+{% block title %}{{ page.title }}{% endblock %}
+
+{% block meta_description %}
+ {{ page.meta_description or page.title }}
+{% endblock %}
+
+{% block content %}
+
+
+ {# Breadcrumbs #}
+
+
+ {# Page Title #}
+
+ {{ page.title }}
+
+
+ {# Content #}
+
+ {{ page.content | safe }}
+
+
+ {# Last updated #}
+ {% if page.updated_at %}
+
+ Last updated: {{ page.updated_at.strftime('%B %d, %Y') }}
+
+ {% endif %}
+
+
+{% endblock %}
+```
+
+### 6. Update Footer to Load Navigation Dynamically
+
+Edit `app/templates/shop/base.html` to load navigation from database.
+
+First, update the context helper to include footer pages:
+
+```python
+# app/routes/shop_pages.py
+
+def get_shop_context(request: Request, **extra_context) -> dict:
+ # ... existing code ...
+
+ # Load footer navigation pages
+ db = next(get_db())
+ try:
+ footer_pages = content_page_service.list_pages_for_vendor(
+ db,
+ vendor_id=vendor.id if vendor else None,
+ include_unpublished=False,
+ footer_only=True
+ )
+ finally:
+ db.close()
+
+ context = {
+ "request": request,
+ "vendor": vendor,
+ "theme": theme,
+ "clean_path": clean_path,
+ "access_method": access_method,
+ "base_url": base_url,
+ "footer_pages": footer_pages, # Add this
+ **extra_context
+ }
+
+ return context
+```
+
+Then update the footer template:
+
+```jinja2
+{# app/templates/shop/base.html - Footer section #}
+
+
+```
+
+### 7. Create Default Platform Pages (Script)
+
+Create `scripts/create_default_content_pages.py`:
+
+```python
+#!/usr/bin/env python3
+"""Create default platform content pages."""
+
+from sqlalchemy.orm import Session
+from app.core.database import SessionLocal
+from app.services.content_page_service import content_page_service
+
+def create_defaults():
+ db: Session = SessionLocal()
+
+ try:
+ # About Us
+ content_page_service.create_page(
+ db,
+ slug="about",
+ title="About Us",
+ content="""
+ Welcome to Our Marketplace
+ We connect quality vendors with customers worldwide.
+ Our mission is to provide a seamless shopping experience...
+ """,
+ is_published=True,
+ show_in_footer=True,
+ display_order=1
+ )
+
+ # Shipping Information
+ content_page_service.create_page(
+ db,
+ slug="shipping",
+ title="Shipping Information",
+ content="""
+ Shipping Policy
+ We offer fast and reliable shipping...
+ """,
+ is_published=True,
+ show_in_footer=True,
+ display_order=2
+ )
+
+ # Returns
+ content_page_service.create_page(
+ db,
+ slug="returns",
+ title="Returns & Refunds",
+ content="""
+ Return Policy
+ 30-day return policy on all items...
+ """,
+ is_published=True,
+ show_in_footer=True,
+ display_order=3
+ )
+
+ # Privacy Policy
+ content_page_service.create_page(
+ db,
+ slug="privacy",
+ title="Privacy Policy",
+ content="""
+ Privacy Policy
+ Your privacy is important to us...
+ """,
+ is_published=True,
+ show_in_footer=True,
+ display_order=4
+ )
+
+ # Terms of Service
+ content_page_service.create_page(
+ db,
+ slug="terms",
+ title="Terms of Service",
+ content="""
+ Terms of Service
+ By using our platform, you agree to...
+ """,
+ is_published=True,
+ show_in_footer=True,
+ display_order=5
+ )
+
+ # Contact
+ content_page_service.create_page(
+ db,
+ slug="contact",
+ title="Contact Us",
+ content="""
+ Get in Touch
+ Have questions? We'd love to hear from you!
+ Email: support@example.com
+ """,
+ is_published=True,
+ show_in_footer=True,
+ display_order=6
+ )
+
+ # FAQ
+ content_page_service.create_page(
+ db,
+ slug="faq",
+ title="Frequently Asked Questions",
+ content="""
+ FAQ
+ How do I place an order?
+ Simply browse our products...
+ """,
+ is_published=True,
+ show_in_footer=True,
+ display_order=7
+ )
+
+ print("✅ Created default content pages successfully")
+
+ except Exception as e:
+ print(f"❌ Error: {e}")
+ db.rollback()
+ finally:
+ db.close()
+
+
+if __name__ == "__main__":
+ create_defaults()
+```
+
+Run it:
+```bash
+python scripts/create_default_content_pages.py
+```
+
+## Testing
+
+### 1. Test Platform Defaults
+
+```bash
+# Create platform default
+curl -X POST http://localhost:8000/api/v1/admin/content-pages/platform \
+ -H "Authorization: Bearer " \
+ -H "Content-Type: application/json" \
+ -d '{
+ "slug": "about",
+ "title": "About Our Marketplace",
+ "content": "About
Platform default content
",
+ "is_published": true,
+ "show_in_footer": true
+ }'
+
+# View in shop
+curl http://localhost:8000/vendor/wizamart/about
+```
+
+### 2. Test Vendor Override
+
+```bash
+# Create vendor override
+curl -X POST http://localhost:8000/api/v1/vendor/wizamart/content-pages/ \
+ -H "Authorization: Bearer " \
+ -H "Content-Type: application/json" \
+ -d '{
+ "slug": "about",
+ "title": "About Wizamart",
+ "content": "About Wizamart
Custom vendor content
",
+ "is_published": true
+ }'
+
+# View in shop (should show vendor content)
+curl http://localhost:8000/vendor/wizamart/about
+```
+
+### 3. Test Fallback
+
+```bash
+# Delete vendor override
+curl -X DELETE http://localhost:8000/api/v1/vendor/wizamart/content-pages/{id} \
+ -H "Authorization: Bearer "
+
+# View in shop (should fall back to platform default)
+curl http://localhost:8000/vendor/wizamart/about
+```
+
+## Summary
+
+You now have a complete CMS system that allows:
+
+1. **Platform admins** to create default content for all vendors
+2. **Vendors** to override specific pages with custom content
+3. **Automatic fallback** to platform defaults when vendor hasn't customized
+4. **Dynamic navigation** loading from database
+5. **SEO optimization** with meta tags
+6. **Draft/Published workflow** for content management
+
+All pages are accessible via their slug: `/about`, `/faq`, `/contact`, etc. with proper vendor context and routing support!
diff --git a/docs/features/content-management-system.md b/docs/features/content-management-system.md
new file mode 100644
index 00000000..ebe7d3c1
--- /dev/null
+++ b/docs/features/content-management-system.md
@@ -0,0 +1,562 @@
+# Content Management System (CMS)
+
+## Overview
+
+The Content Management System allows platform administrators and vendors to manage static content pages like About, FAQ, Contact, Shipping, Returns, Privacy Policy, Terms of Service, etc.
+
+**Key Features:**
+- ✅ Platform-level default content
+- ✅ Vendor-specific overrides
+- ✅ Fallback system (vendor → platform default)
+- ✅ Rich text content (HTML/Markdown)
+- ✅ SEO metadata
+- ✅ Published/Draft status
+- ✅ Navigation management (footer/header)
+- ✅ Display order control
+
+## Architecture
+
+### Two-Tier Content System
+
+```
+┌─────────────────────────────────────────────────────────────┐
+│ CONTENT LOOKUP FLOW │
+└─────────────────────────────────────────────────────────────┘
+
+Request: /about
+
+ 1. Check for vendor-specific override
+ ↓
+ SELECT * FROM content_pages
+ WHERE vendor_id = 123 AND slug = 'about' AND is_published = true
+ ↓
+ Found? ✅ Return vendor content
+ ❌ Continue to step 2
+
+ 2. Check for platform default
+ ↓
+ SELECT * FROM content_pages
+ WHERE vendor_id IS NULL AND slug = 'about' AND is_published = true
+ ↓
+ Found? ✅ Return platform content
+ ❌ Return 404 or default template
+```
+
+### Database Schema
+
+```sql
+CREATE TABLE content_pages (
+ id SERIAL PRIMARY KEY,
+
+ -- Vendor association (NULL = platform default)
+ vendor_id INTEGER REFERENCES vendors(id) ON DELETE CASCADE,
+
+ -- Page identification
+ slug VARCHAR(100) NOT NULL, -- about, faq, contact, shipping, returns
+ title VARCHAR(200) NOT NULL,
+
+ -- Content
+ content TEXT NOT NULL, -- HTML or Markdown
+ content_format VARCHAR(20) DEFAULT 'html', -- html, markdown
+
+ -- SEO
+ meta_description VARCHAR(300),
+ meta_keywords VARCHAR(300),
+
+ -- Publishing
+ is_published BOOLEAN DEFAULT FALSE NOT NULL,
+ published_at TIMESTAMP WITH TIME ZONE,
+
+ -- Navigation
+ display_order INTEGER DEFAULT 0,
+ show_in_footer BOOLEAN DEFAULT TRUE,
+ show_in_header BOOLEAN DEFAULT FALSE,
+
+ -- Timestamps
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
+ updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
+
+ -- Author tracking
+ created_by INTEGER REFERENCES users(id) ON DELETE SET NULL,
+ updated_by INTEGER REFERENCES users(id) ON DELETE SET NULL,
+
+ -- Constraints
+ CONSTRAINT uq_vendor_slug UNIQUE (vendor_id, slug)
+);
+
+CREATE INDEX idx_vendor_published ON content_pages (vendor_id, is_published);
+CREATE INDEX idx_slug_published ON content_pages (slug, is_published);
+```
+
+## Usage
+
+### Platform Administrator Workflow
+
+**1. Create Platform Default Pages**
+
+Platform admins create default content that all vendors inherit:
+
+```bash
+POST /api/v1/admin/content-pages/platform
+{
+ "slug": "about",
+ "title": "About Us",
+ "content": "About Us
We are a marketplace...
",
+ "content_format": "html",
+ "meta_description": "Learn more about our marketplace",
+ "is_published": true,
+ "show_in_footer": true,
+ "display_order": 1
+}
+```
+
+**Common Platform Defaults:**
+- `about` - About Us
+- `contact` - Contact Us
+- `faq` - Frequently Asked Questions
+- `shipping` - Shipping Information
+- `returns` - Return Policy
+- `privacy` - Privacy Policy
+- `terms` - Terms of Service
+- `help` - Help Center
+
+**2. View All Content Pages**
+
+```bash
+GET /api/v1/admin/content-pages/
+GET /api/v1/admin/content-pages/?vendor_id=123 # Filter by vendor
+GET /api/v1/admin/content-pages/platform # Only platform defaults
+```
+
+**3. Update Platform Default**
+
+```bash
+PUT /api/v1/admin/content-pages/1
+{
+ "title": "Updated About Us",
+ "content": "About Our Platform
...",
+ "is_published": true
+}
+```
+
+### Vendor Workflow
+
+**1. View Available Pages**
+
+Vendors see their overrides + platform defaults:
+
+```bash
+GET /api/v1/vendor/{code}/content-pages/
+```
+
+Response:
+```json
+[
+ {
+ "id": 15,
+ "slug": "about",
+ "title": "About Wizamart", // Vendor override
+ "is_vendor_override": true,
+ "is_platform_default": false
+ },
+ {
+ "id": 2,
+ "slug": "shipping",
+ "title": "Shipping Information", // Platform default
+ "is_vendor_override": false,
+ "is_platform_default": true
+ }
+]
+```
+
+**2. Create Vendor Override**
+
+Vendor creates custom "About" page:
+
+```bash
+POST /api/v1/vendor/{code}/content-pages/
+{
+ "slug": "about",
+ "title": "About Wizamart",
+ "content": "About Wizamart
We specialize in...
",
+ "is_published": true
+}
+```
+
+This overrides the platform default for this vendor only.
+
+**3. View Only Vendor Overrides**
+
+```bash
+GET /api/v1/vendor/{code}/content-pages/overrides
+```
+
+Shows what the vendor has customized (excludes platform defaults).
+
+**4. Delete Override (Revert to Platform Default)**
+
+```bash
+DELETE /api/v1/vendor/{code}/content-pages/15
+```
+
+After deletion, platform default will be shown again.
+
+### Shop Frontend (Public)
+
+**1. Get Page Content**
+
+```bash
+GET /api/v1/shop/content-pages/about
+```
+
+Automatically uses vendor context from middleware:
+- Returns vendor override if exists
+- Falls back to platform default
+- Returns 404 if neither exists
+
+**2. Get Navigation Links**
+
+```bash
+GET /api/v1/shop/content-pages/navigation
+```
+
+Returns all published pages for footer/header navigation.
+
+## File Structure
+
+```
+app/
+├── models/database/
+│ └── content_page.py ← Database model
+│
+├── services/
+│ └── content_page_service.py ← Business logic
+│
+├── api/v1/
+│ ├── admin/
+│ │ └── content_pages.py ← Admin API endpoints
+│ ├── vendor/
+│ │ └── content_pages.py ← Vendor API endpoints
+│ └── shop/
+│ └── content_pages.py ← Public API endpoints
+│
+└── templates/shop/
+ ├── about.html ← Content page template
+ ├── faq.html
+ ├── contact.html
+ └── ...
+```
+
+## Template Integration
+
+### Generic Content Page Template
+
+Create a reusable template for all content pages:
+
+```jinja2
+{# app/templates/shop/content-page.html #}
+{% extends "shop/base.html" %}
+
+{% block title %}{{ page.title }}{% endblock %}
+
+{% block meta_description %}
+ {{ page.meta_description or page.title }}
+{% endblock %}
+
+{% block content %}
+
+
+ {# Breadcrumbs #}
+
+
+ {# Page Title #}
+
+ {{ page.title }}
+
+
+ {# Content #}
+
+ {% if page.content_format == 'markdown' %}
+ {{ page.content | markdown }}
+ {% else %}
+ {{ page.content | safe }}
+ {% endif %}
+
+
+ {# Last updated #}
+ {% if page.updated_at %}
+
+ Last updated: {{ page.updated_at }}
+
+ {% endif %}
+
+
+{% endblock %}
+```
+
+### Route Handler
+
+```python
+# app/routes/shop_pages.py
+
+from app.services.content_page_service import content_page_service
+
+@router.get("/{slug}", response_class=HTMLResponse)
+async def content_page(
+ slug: str,
+ request: Request,
+ db: Session = Depends(get_db)
+):
+ """
+ Generic content page handler.
+
+ Loads content from database with vendor override support.
+ """
+ vendor = getattr(request.state, 'vendor', None)
+ vendor_id = vendor.id if vendor else None
+
+ page = content_page_service.get_page_for_vendor(
+ db,
+ slug=slug,
+ vendor_id=vendor_id,
+ include_unpublished=False
+ )
+
+ if not page:
+ raise HTTPException(status_code=404, detail=f"Page not found: {slug}")
+
+ return templates.TemplateResponse(
+ "shop/content-page.html",
+ get_shop_context(request, page=page)
+ )
+```
+
+### Dynamic Footer Navigation
+
+Update footer to load links from database:
+
+```jinja2
+{# app/templates/shop/base.html #}
+
+
+```
+
+## Best Practices
+
+### 1. Content Formatting
+
+**HTML Content:**
+```html
+About Us
+We are a leading marketplace for...
+
+ - Quality products
+ - Fast shipping
+ - Great support
+
+```
+
+**Markdown Content:**
+```markdown
+# About Us
+
+We are a **leading marketplace** for...
+
+- Quality products
+- Fast shipping
+- Great support
+```
+
+### 2. SEO Optimization
+
+Always provide meta descriptions:
+
+```json
+{
+ "meta_description": "Learn about our marketplace, mission, and values. We connect vendors with customers worldwide.",
+ "meta_keywords": "about us, marketplace, e-commerce, mission"
+}
+```
+
+### 3. Draft → Published Workflow
+
+1. Create page with `is_published: false`
+2. Preview using `include_unpublished=true` parameter
+3. Review and edit
+4. Publish with `is_published: true`
+
+### 4. Navigation Management
+
+Use `display_order` to control link ordering:
+
+```python
+# Platform defaults
+"about": display_order=1
+"shipping": display_order=2
+"returns": display_order=3
+"privacy": display_order=4
+"terms": display_order=5
+
+# Result in footer:
+About | Shipping | Returns | Privacy | Terms
+```
+
+### 5. Content Reversion
+
+To revert vendor override back to platform default:
+
+```bash
+# Vendor deletes their custom page
+DELETE /api/v1/vendor/{code}/content-pages/15
+
+# Platform default will now be shown automatically
+```
+
+## Common Page Slugs
+
+Standard slugs to implement:
+
+| Slug | Title | Description | Show in Footer |
+|------|-------|-------------|----------------|
+| `about` | About Us | Company/vendor information | Yes |
+| `contact` | Contact Us | Contact information and form | Yes |
+| `faq` | FAQ | Frequently asked questions | Yes |
+| `shipping` | Shipping Info | Shipping policies and rates | Yes |
+| `returns` | Returns | Return and refund policy | Yes |
+| `privacy` | Privacy Policy | Privacy and data protection | Yes |
+| `terms` | Terms of Service | Terms and conditions | Yes |
+| `help` | Help Center | Support resources | Yes |
+| `size-guide` | Size Guide | Product sizing information | No |
+| `careers` | Careers | Job opportunities | No |
+
+## Security Considerations
+
+1. **HTML Sanitization**: If using HTML format, sanitize user input to prevent XSS
+2. **Authorization**: Vendors can only edit their own pages
+3. **Published Status**: Only published pages visible to public
+4. **Vendor Isolation**: Vendors cannot see/edit other vendor's content
+
+## Migration Strategy
+
+### Initial Setup
+
+1. **Create Platform Defaults**:
+```bash
+python scripts/create_default_content_pages.py
+```
+
+2. **Migrate Existing Static Templates**:
+- Convert existing HTML templates to database content
+- Preserve existing URLs and SEO
+
+3. **Update Routes**:
+- Add generic content page route handler
+- Remove individual route handlers for each page
+
+## Future Enhancements
+
+Possible improvements:
+
+- **Version History**: Track content changes over time
+- **Rich Text Editor**: WYSIWYG editor in admin/vendor panel
+- **Image Management**: Upload and insert images
+- **Templates**: Pre-built page templates for common pages
+- **Localization**: Multi-language content support
+- **Scheduled Publishing**: Publish pages at specific times
+- **Content Approval**: Admin review before vendor pages go live
+
+## API Reference Summary
+
+### Admin Endpoints
+
+```
+GET /api/v1/admin/content-pages/ # List all pages
+GET /api/v1/admin/content-pages/platform # List platform defaults
+POST /api/v1/admin/content-pages/platform # Create platform default
+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
+```
+
+### Vendor Endpoints
+
+```
+GET /api/v1/vendor/{code}/content-pages/ # List all (vendor + platform)
+GET /api/v1/vendor/{code}/content-pages/overrides # List vendor overrides only
+GET /api/v1/vendor/{code}/content-pages/{slug} # Get specific page
+POST /api/v1/vendor/{code}/content-pages/ # Create vendor override
+PUT /api/v1/vendor/{code}/content-pages/{id} # Update vendor page
+DELETE /api/v1/vendor/{code}/content-pages/{id} # Delete vendor page
+```
+
+### Shop (Public) Endpoints
+
+```
+GET /api/v1/shop/content-pages/navigation # Get navigation links
+GET /api/v1/shop/content-pages/{slug} # Get page content
+```
+
+## Example: Complete Workflow
+
+**1. Platform Admin Creates Defaults:**
+```bash
+# Create "About" page
+curl -X POST /api/v1/admin/content-pages/platform \
+ -H "Authorization: Bearer " \
+ -d '{
+ "slug": "about",
+ "title": "About Our Marketplace",
+ "content": "About
Default content...
",
+ "is_published": true
+ }'
+```
+
+**2. All Vendors See Platform Default:**
+- Vendor A visits: `vendor-a.com/about` → Shows platform default
+- Vendor B visits: `vendor-b.com/about` → Shows platform default
+
+**3. Vendor A Creates Override:**
+```bash
+curl -X POST /api/v1/vendor/vendor-a/content-pages/ \
+ -H "Authorization: Bearer " \
+ -d '{
+ "slug": "about",
+ "title": "About Vendor A",
+ "content": "About Vendor A
Custom content...
",
+ "is_published": true
+ }'
+```
+
+**4. Now:**
+- Vendor A visits: `vendor-a.com/about` → Shows Vendor A custom content
+- Vendor B visits: `vendor-b.com/about` → Still shows platform default
+
+**5. Vendor A Reverts to Default:**
+```bash
+curl -X DELETE /api/v1/vendor/vendor-a/content-pages/15 \
+ -H "Authorization: Bearer "
+```
+
+**6. Result:**
+- Vendor A visits: `vendor-a.com/about` → Shows platform default again
diff --git a/docs/getting-started/cms-quick-start.md b/docs/getting-started/cms-quick-start.md
new file mode 100644
index 00000000..6b1397aa
--- /dev/null
+++ b/docs/getting-started/cms-quick-start.md
@@ -0,0 +1,216 @@
+# CMS Quick Start Guide
+
+A quick reference for setting up and using the Content Management System.
+
+## What is the CMS?
+
+The CMS allows you to manage static content pages (About, Contact, FAQ, etc.) with:
+- **Platform defaults** - Base content for all vendors
+- **Vendor overrides** - Custom content per vendor
+- **Automatic fallback** - Vendors inherit platform defaults unless overridden
+
+## Quick Setup
+
+### 1. Create Default Content Pages
+
+After running migrations, create the default CMS pages:
+
+```bash
+make create-cms-defaults
+```
+
+This creates 7 platform default pages:
+- About Us (`/about`)
+- Contact Us (`/contact`)
+- FAQ (`/faq`)
+- Shipping Policy (`/shipping`)
+- Return & Refund Policy (`/returns`)
+- Privacy Policy (`/privacy`)
+- Terms of Service (`/terms`)
+
+### 2. Full Database Setup
+
+For a complete setup including CMS:
+
+```bash
+make db-setup
+# Runs: migrations → admin user → CMS pages → demo data
+```
+
+## Accessing Pages
+
+All CMS pages are accessible on your shop frontend:
+
+```
+# For domain/subdomain access
+https://wizamart.shop/about
+https://fashionhub.store/contact
+
+# For path-based access
+http://localhost:8000/vendor/wizamart/faq
+http://localhost:8000/vendors/fashionhub/shipping
+```
+
+## Managing Content
+
+### Via Admin Panel
+
+1. Log in to admin panel: `/admin/login`
+2. Navigate to **Content Pages** section
+3. Create/edit platform defaults (visible to all vendors)
+
+### Via Vendor Dashboard
+
+1. Log in to vendor dashboard: `/vendor/{code}/login`
+2. Navigate to **Content Pages** section
+3. View platform defaults
+4. Create vendor-specific overrides
+
+### Via API
+
+**Admin - Create Platform Default:**
+```bash
+POST /api/v1/admin/content-pages/platform
+{
+ "slug": "about",
+ "title": "About Us",
+ "content": "...
",
+ "is_published": true,
+ "show_in_footer": true
+}
+```
+
+**Vendor - Create Override:**
+```bash
+POST /api/v1/vendor/{vendor_code}/content-pages
+{
+ "slug": "about",
+ "title": "About Our Store",
+ "content": "Custom content...
",
+ "is_published": true
+}
+```
+
+**Public - Retrieve Page:**
+```bash
+GET /api/v1/shop/content-pages/{slug}
+```
+
+## How the Two-Tier System Works
+
+### Lookup Priority
+
+When a customer visits `/about`:
+
+1. **Check vendor override** - Does this vendor have a custom "about" page?
+2. **Fallback to platform** - If not, use the platform default "about" page
+3. **404 if neither** - Return 404 if no page exists
+
+### Example Scenario
+
+**Platform Default:**
+- Slug: `about`
+- Title: "About Our Platform"
+- Content: Generic platform description
+
+**WizaMart Override:**
+- Slug: `about`
+- Title: "About WizaMart"
+- Content: WizaMart-specific content
+
+**Result:**
+- `wizamart.shop/about` → Shows WizaMart custom version
+- `fashionhub.store/about` → Shows platform default (no override)
+
+## Footer Navigation
+
+Pages marked with `show_in_footer: true` automatically appear in the shop footer:
+
+```html
+
+
+```
+
+## Common Tasks
+
+### Add a New Default Page
+
+```bash
+python -c "
+from app.core.database import SessionLocal
+from app.services.content_page_service import content_page_service
+
+db = SessionLocal()
+content_page_service.create_page(
+ db,
+ slug='careers',
+ title='Careers',
+ content='Join Our Team
...',
+ is_published=True,
+ show_in_footer=True
+)
+db.close()
+"
+```
+
+### Create Vendor Override
+
+Via vendor API or dashboard - vendors can override any platform default by creating a page with the same slug.
+
+### Update Platform Default
+
+Via admin panel or API - updates affect all vendors who haven't created an override.
+
+## Re-running the Script
+
+The script is **idempotent** - safe to run multiple times:
+
+```bash
+make create-cms-defaults
+# Output: "Skipped: About Us (/about) - already exists"
+```
+
+Existing pages are never overwritten.
+
+## Documentation
+
+For complete CMS documentation, see:
+- [CMS Feature Documentation](../features/content-management-system.md)
+- [CMS Implementation Guide](../features/cms-implementation-guide.md)
+- [Database Seeder Guide](../development/database-seeder/DATABASE_SEEDER_DOCUMENTATION.md)
+
+## Troubleshooting
+
+### Pages not showing in footer
+
+Check `show_in_footer` flag:
+```sql
+SELECT slug, title, show_in_footer FROM content_pages WHERE vendor_id IS NULL;
+```
+
+### Vendor override not working
+
+Verify slug matches exactly:
+```sql
+SELECT vendor_id, slug, title FROM content_pages WHERE slug = 'about';
+```
+
+### 404 on content pages
+
+1. Check page is published: `is_published = true`
+2. Verify migration was applied: `make migrate-status`
+3. Run CMS defaults: `make create-cms-defaults`
+
+## Next Steps
+
+- Customize default content via admin panel
+- Create vendor-specific overrides
+- Add new custom pages as needed
+- Update footer navigation preferences
diff --git a/mkdocs.yml b/mkdocs.yml
index f10b7d56..a7c7e5ab 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -20,6 +20,7 @@ nav:
- Overview: getting-started/database-setup.md
- Complete Setup Guide: getting-started/DATABASE_SETUP_GUIDE.md
- Quick Reference: getting-started/DATABASE_QUICK_REFERENCE.md
+ - CMS Quick Start: getting-started/cms-quick-start.md
- Configuration: getting-started/configuration.md
# ============================================
@@ -70,6 +71,7 @@ nav:
# ============================================
- Frontend Development:
- Overview: frontend/overview.md
+ - CDN Fallback Strategy: frontend/cdn-fallback-strategy.md
- Shared Components:
- UI Components: frontend/shared/ui-components.md
- UI Components Quick Reference: frontend/shared/ui-components-quick-reference.md
@@ -130,6 +132,14 @@ nav:
- Environment Variables: deployment/environment.md
- Stripe Integration: deployment/stripe-integration.md
+ # ============================================
+ # FEATURES
+ # ============================================
+ - Features:
+ - Content Management System:
+ - Overview: features/content-management-system.md
+ - Implementation Guide: features/cms-implementation-guide.md
+
# ============================================
# USER GUIDES
# ============================================