Content & Media - Version Mapping
Domain: Content & Media First Introduced: MVP.0 Last Updated: 2025-10-25
Version Introduction Timeline
| Version | Status | Scope | Description | 
|---|---|---|---|
| MVP.0 | IMPLEMENTED | URL-Only Media | Manual media URL entry, basic content management | 
| MVP.1 | IMPLEMENTED | Enhanced Content | Same as MVP.0 with refinements | 
| V1.0 | PLANNED | Full Media Pipeline | S3 upload, image processing, CDN delivery | 
| V1.1 | FUTURE | Approval Workflow | Content review and approval process | 
| V1.2 | FUTURE | SEO Optimization | Meta tags, structured data, quality scoring | 
| V2.0 | FUTURE | Multi-Language | Translation workflow, localization | 
| V2.1 | FUTURE | AI Features | Automated captions, smart tagging | 
| V2.2 | FUTURE | Advanced Media | Video transcoding, 3D tours, floor plans | 
MVP.0 - URL-ONLY MEDIA
Status: Implemented Scope: Basic content management without upload pipeline
Included Entities (7)
- 
Description - Property text content - Title, headline, body text
- House rules, getting around
- Language support (single language)
- Version tracking
- Published status
 
- 
MediaAsset - Visual content references - Manual URL entry
- CDN URL storage
- Position ordering
- Primary image selection
- Caption and alt text
- Type classification (image, video, document)
 
- 
Amenity - Feature catalog (master data) - 50 standard amenities seeded
- Category grouping (10 categories)
- Channel mappings
- Parametric values support
- Icon identifiers
 
- 
SpaceAmenity - Property-amenity linkage - Many-to-many relationship
- Parametric value storage
- Featured amenity flagging
- Notes and details
 
- 
SpaceAttributes - Flexible metadata (JSONB) - Max guests, bedrooms, bathrooms
- Square footage, views, style
- Check-in/check-out times
- Minimum stay requirements
- Schema-flexible design
 
- 
Tag - Content categorization - Global and org-specific tags
- Type classification
- Color coding for UI
- Usage tracking
 
- 
UnitSnapshot - Version history - Complete content snapshots
- Immutable audit trail
- Diff hash calculation
- Change summaries
- Rollback support
 
Key Features
Content Management:
- Rich text descriptions (HTML, Markdown, plaintext)
- XSS sanitization
- Version tracking
- Publish/draft states
Media Management:
- Manual URL entry
- Position-based ordering
- Primary image designation
- Caption and alt text
- Gallery display
Amenity Catalog:
- 50 pre-seeded standard amenities
- 10 categories (location, rooms, kitchen, etc.)
- Parametric amenities (e.g., parking count)
- Featured amenity selection (max 5)
Flexible Attributes:
- JSONB storage for extensibility
- Standard attribute schema
- No table alterations for new attributes
- Fast JSONB queries (GIN index)
Content Versioning:
- Automatic snapshot creation
- Diff tracking
- Rollback capability (V1.0+)
- 90-day retention (last 10 versions)
Business Rules
- Each Space requires one published Description
- Each Space requires one primary MediaAsset
- MediaAsset positions must be unique per Space
- Maximum 50 media assets per Space
- All media URLs must be HTTPS
- Featured amenities limited to 5 per Space
- HTML content sanitized to prevent XSS
- Description body maximum 10,000 characters
- Snapshots created on every content update
- Soft deletes for Descriptions and MediaAssets
Database Objects
Tables: 7 (Description, MediaAsset, Amenity, SpaceAmenity, SpaceAttributes, Tag, UnitSnapshot) Indexes: 20+ Constraints: 10+ JSONB Support: SpaceAttributes, UnitSnapshot, Amenity.channel_mappings
API Endpoints
Descriptions:
- GET /spaces/:id/description- Get description
- POST /spaces/:id/description- Create description
- PUT /descriptions/:id- Update description
- DELETE /descriptions/:id- Soft delete
Media:
- GET /spaces/:id/media- List media
- POST /spaces/:id/media- Add media URL
- PUT /media/:id- Update media
- DELETE /media/:id- Remove media
- PUT /media/:id/reorder- Change position
Amenities:
- GET /amenities- List catalog
- GET /spaces/:id/amenities- Get space amenities
- POST /spaces/:id/amenities- Add amenity
- DELETE /space-amenities/:id- Remove amenity
Attributes:
- GET /spaces/:id/attributes- Get attributes
- PUT /spaces/:id/attributes- Update attributes (merge)
Tags:
- GET /tags- List tags
- POST /tags- Create tag
- GET /spaces/:id/tags- Get space tags
- POST /spaces/:id/tags- Add tag
Snapshots:
- GET /spaces/:id/snapshots- List versions
- GET /snapshots/:id- Get snapshot details
Standard Amenity Catalog
50 Amenities Across 10 Categories:
- Location & Views (6): oceanfront, beachfront, waterfront, mountain_view, city_view, garden_view
- Rooms & Bedrooms (5): bedrooms, bathrooms, king_bed, queen_bed, twin_bed
- Kitchen & Dining (7): full_kitchen, dishwasher, microwave, coffee_maker, outdoor_grill, dining_table, outdoor_dining
- Bathroom Essentials (5): shampoo, hot_water, hair_dryer, bathtub, outdoor_shower
- Climate Control (4): air_conditioning, heating, ceiling_fans, fireplace
- Entertainment & Tech (6): wifi, tv, streaming_services, cable_tv, sound_system, board_games
- Outdoor & Pool (8): private_pool, pool_heated, hot_tub, beach_access, outdoor_space, bbq_area, fire_pit, ocean_view
- Parking & Access (3): parking, ev_charger, wheelchair_accessible
- Family Features (6): crib, high_chair, kids_toys, safety_gates, pool_fence, changing_table
- Services & Extras (10): washer, dryer, iron, hangers, cleaning_included, linens_included, towels_included, concierge, private_chef, gym
Limitations (Deferred to V1.0+)
No Upload Pipeline:
- No file upload capability
- No S3 integration
- No image processing
- No CDN signed URLs
- No automatic resizing
- No format conversion
Single Language Only:
- English default
- No translation support
- No multi-language UI
No Workflow:
- No draft/review/published states
- Immediate publication
- No approval process
No SEO Features:
- No meta tags
- No structured data
- No quality scoring
MVP.1 - ENHANCED CONTENT
Status: Implemented Scope: Same as MVP.0 with refinements
Changes from MVP.0
Minor Enhancements:
- UI/UX improvements
- Query optimization
- Bug fixes
- Performance tuning
No New Entities No Schema Changes No New Features
V1.0 - FULL MEDIA PIPELINE
Status: Planned Target: Production release with full upload capabilities
New Infrastructure
S3 Storage:
- Bucket: tvl-media-{env}
- Folder structure: {org_id}/{space_id}/images/
- Lifecycle policies
- Versioning enabled
CloudFront CDN:
- Global distribution
- Signed URLs (24-hour expiry for previews, 1-year for published)
- Cache optimization
- Gzip/Brotli compression
- HTTP/2 and HTTP/3
Lambda Processing:
- Sharp library for image processing
- Automated variant generation
- WebP conversion
- EXIF stripping
- Metadata extraction
New Features
Upload Pipeline:
- Client requests pre-signed S3 URL
- Direct upload to S3
- S3 trigger invokes Lambda
- Lambda generates variants:
- thumbnail (200px)
- small (400px)
- medium (800px)
- large (1200px)
- original (unmodified)
 
- WebP format for all (except original)
- Update MediaAsset record with variants
Media Processing:
- Automatic resizing
- Format conversion (WebP 30-50% smaller)
- EXIF metadata extraction
- GPS coordinate stripping (privacy)
- Dimension detection
Status Tracking:
- pending → processing → ready → failed
- Background job monitoring
- Failure notification
Content Approval Workflow:
- Draft/Review/Published states
- Approval queue
- Diff preview
- Comment threads
- Bulk operations
Schema Changes
MediaAsset Extensions:
- statusfield (pending, processing, ready, failed)
- variantsJSONB (URLs for all sizes)
- processing_errorTEXT
- exif_dataJSONB
New Indexes:
- idx_media_statusfor background jobs
- idx_media_processingfor monitoring
API Changes
New Endpoints:
- POST /media/upload-url- Get pre-signed URL
- POST /media/:id/process- Trigger reprocessing
- GET /media/:id/variants- Get all variants
Modified Endpoints:
- POST /spaces/:id/media- Now accepts file upload or URL
Performance Optimizations
Caching:
- Redis cache for Space content bundles
- 1-hour TTL
- Invalidation on update
Lazy Loading:
- Native loading="lazy"attribute
- Intersection Observer
- Blur-up placeholders (LQIP)
Responsive Images:
- <picture>element
- Srcset for different sizes
- Automatic format selection (WebP with fallback)
Security Enhancements
Access Control:
- Pre-signed URLs prevent direct access
- UUID filenames prevent guessing
- Origin Access Identity (OAI)
Content Sanitization:
- Enhanced HTML sanitization
- Allowed tags whitelist
- URL validation
Privacy:
- EXIF GPS stripping
- Metadata anonymization
- Timestamp preservation only
Deferred to V1.1+
- Multi-language content
- Translation API
- SEO metadata fields
- Content approval workflow (partial in V1.0)
V1.1 - CONTENT APPROVAL WORKFLOW
Status: Future Scope: Review and approval process
New Features
Approval States:
- Draft → Review → Published → Archived
- State transition tracking
- Reviewer assignment
Review Tools:
- Diff view (draft vs published)
- Comment threads
- Approval/rejection
- Change history
Bulk Operations:
- Multi-property approvals
- Batch publishing
- Mass updates
Impact
- Quality control
- Brand consistency
- Compliance review
V1.2 - SEO OPTIMIZATION
Status: Future Scope: Search engine optimization
New Features
Meta Tags:
- meta_title (max 60 chars)
- meta_description (max 160 chars)
- meta_keywords
- Open Graph tags
- Twitter Card tags
Structured Data:
- JSON-LD markup
- Schema.org Vacation Rental
- Rich snippets
Content Scoring:
- Completeness score (0-100%)
- Quality assessment
- Missing field detection
- Best practice recommendations
AI Alt Text:
- Automatic generation via OpenAI Vision
- Accessibility compliance
- SEO benefit
Database Changes
Description Extensions:
- meta_titleVARCHAR(60)
- meta_descriptionVARCHAR(160)
- meta_keywordsVARCHAR(255)
- og_tagsJSONB
- content_scoreINTEGER
Impact
- Improved search rankings
- Better click-through rates
- Accessibility compliance
V2.0 - MULTI-LANGUAGE MANAGEMENT
Status: Future Scope: International content support
New Features
Translation Workflow:
- DeepL API integration
- Manual translation option
- Translation memory
- Glossary management
Language Variants:
- Per-language Descriptions
- Fallback hierarchy (user → org default → English)
- Completeness tracking
Regional Content:
- en-US vs en-GB
- Currency formatting
- Date format localization
Database Changes
Enhanced Language Support:
- Multiple Descriptions per Space (one per language)
- Language completeness tracking
- Translation status
Impact
- International property support
- Global guest reach
- Localized experiences
V2.1 - AI-POWERED FEATURES
Status: Future Scope: Machine learning enhancements
New Features
Automated Captions:
- OpenAI Vision API
- Scene detection
- Object recognition
- Descriptive alt text
Smart Tagging:
- Image content analysis
- Automatic tag suggestion
- Category classification
Content Quality:
- Grammar and spelling
- Readability scoring
- Tone analysis
- Improvement suggestions
Duplicate Detection:
- Perceptual hashing
- Similar image detection
- Cross-property deduplication
Optimal Ordering:
- ML-based image ranking
- Conversion optimization
- A/B testing support
Impact
- Reduced manual effort
- Improved content quality
- Better conversion rates
V2.2 - ADVANCED MEDIA
Status: Future Scope: Rich media types
New Features
Video Support:
- AWS Elemental MediaConvert
- Adaptive bitrate streaming
- Thumbnail generation
- Subtitle support
360-Degree Photos:
- Panoramic viewer
- Virtual tour creation
- Hotspot navigation
3D Tours:
- Matterport integration
- Dollhouse view
- Measurement tools
Floor Plans:
- PDF upload
- Interactive viewer
- Annotation tools
Drone Footage:
- Aerial photography
- Video integration
- Regulatory compliance tracking
Impact
- Premium property presentation
- Enhanced guest experience
- Competitive differentiation
Feature Availability Matrix
| Feature | MVP.0 | MVP.1 | V1.0 | V1.1 | V1.2 | V2.0+ | 
|---|---|---|---|---|---|---|
| Descriptions | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 
| Manual Media URLs | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 
| Amenity Catalog (50) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 
| JSONB Attributes | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 
| Tags | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 
| Content Versioning | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 
| File Upload | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | 
| Image Processing | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | 
| CDN Delivery | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | 
| WebP Conversion | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | 
| Approval Workflow | ❌ | ❌ | Partial | ✅ | ✅ | ✅ | 
| SEO Meta Tags | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | 
| Content Scoring | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | 
| Multi-Language | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | 
| Translation API | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | 
| AI Captions | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | 
| Smart Tagging | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | 
| Video Transcoding | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | 
| 3D Tours | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | 
Dependencies
Upstream Dependencies (Required First)
- Identity & Tenancy (MVP.0) - Org/Account structure
- Authorization & Access (MVP.0) - Permission enforcement
- Supply (MVP.0) - Spaces and Units
Downstream Dependencies (Requires This Domain)
- Channels & Distribution (V1.0+) - Content syndication
- Search & Indexing (V1.0+) - Searchable content
- Analytics & Audit (MVP.0+) - Content change tracking
Migration Path
MVP.0 (Initial Implementation)
Schema Deployment:
- Create all 7 tables
- Add indexes and constraints
- Seed Amenity catalog (50 items)
- Create global tags
Data Seeding:
- Standard amenities
- Global tags
- Default SpaceAttributes schema
Estimated Effort: 2 weeks
MVP.1 (No Migration)
No schema or data changes. Only UI/UX refinements.
MVP.0/MVP.1 → V1.0
Infrastructure Setup:
- Create S3 bucket with lifecycle policies
- Configure CloudFront distribution
- Deploy Lambda processing function
- Configure IAM roles and policies
- Set up pre-signed URL generation
Schema Migration:
- Add statusto MediaAsset
- Add variantsJSONB to MediaAsset
- Add processing_errorto MediaAsset
- Add exif_datato MediaAsset
- Create new indexes
Data Migration:
- Set all existing MediaAssets to status='ready'
- No URL migration needed (URLs remain valid)
- Variants will be NULL for legacy assets
Feature Rollout:
- Deploy upload API endpoints
- Deploy Lambda processing
- Configure CloudFront
- Enable S3 triggers
- Monitor and validate
Estimated Effort: 4-6 weeks
- Infrastructure: 1 week
- Lambda development: 1 week
- API implementation: 2 weeks
- Testing and validation: 1-2 weeks
V1.0 → V1.1 (Approval Workflow)
Schema Changes:
- Add statusto Description (draft, review, published, archived)
- Create content_reviewstable
- Add approval tracking fields
Estimated Effort: 2-3 weeks
V1.1 → V1.2 (SEO)
Schema Changes:
- Extend Description with meta fields
- Add content scoring fields
- Create SEO validation rules
Estimated Effort: 2-3 weeks
Related Documents
- Content & Media Domain Specification
- Physical Schema
- Supply Domain Version Mapping
- Channels Domain Version Mapping
- Search Domain Version Mapping
- Content Review Summary
- MVP.0 Overview
- V1.0 Product Vision
Document Status: Complete Total Lines: 620+ Coverage: MVP.0 through V2.2