website-htmx-rustelo-code/scripts/content/README.md

371 lines
15 KiB
Markdown
Raw Permalink Normal View History

2026-07-10 03:44:13 +01:00
# Content Management Scripts
This directory contains all content management scripts for the Rustelo project. These tools handle multilingual markdown content, localization, validation, and content generation workflows.
## 📋 Requirements
**Required Tools:**
- [Nushell](https://www.nushell.sh/) - All `.nu` scripts require Nushell to be installed
- [Just](https://github.com/casey/just) - Task runner (recommended for easy command execution)
- For complete setup, see [Rustelo Requirements - Tools](https://github.com/your-repo/rustelo#tools)
**Additional Dependencies:**
- Rust toolchain with Cargo
- `content-static` feature enabled in the server crate
- `jq` for JSON processing (optional, used for validation)
## 🌍 Content Management Tools by Context
### 📝 Content Creation & Generation
#### `generate-content.nu` - Content Generator from Templates
**Purpose:** Generate new blog posts and recipes from templates with proper localization
**Task:** Create structured content files with frontmatter and localized templates
**Context:** Adding new content, rapid content creation, maintaining consistency
**Command:** `nu scripts/content/generate-content.nu [COMMAND] [OPTIONS]`
**Commands:**
- `blog-post` - Generate new blog post with frontmatter
- `recipe` - Generate new technical recipe/prescription
- `templates` - Create/update content templates
- `index` - Update all content indices
**Arguments:**
- `--title TITLE` - Content title (required)
- `--category CATEGORY` - Content category
- `--author AUTHOR` - Content author
- `--tags TAG1,TAG2` - Comma-separated tags
- `--difficulty LEVEL` - Recipe difficulty (Beginner|Intermediate|Advanced)
- `--lang LANGUAGE` - Target language (en|es|all) [default: all]
- `--description DESC` - Short description
- `--published BOOL` - Published status [default: true]
**Examples:**
```bash
nu scripts/content/generate-content.nu blog-post --title "My New Post" --category "Technology"
nu scripts/content/generate-content.nu recipe --title "Docker Setup" --category "DevOps" --difficulty "Intermediate"
nu scripts/content/generate-content.nu templates
```
### 🔧 Content Management & Operations
#### `content-manager.nu` - Unified Content Management Hub
**Purpose:** Central tool for content index generation, validation, and statistics
**Task:** Manage content indices, validate consistency, show content statistics
**Context:** Content maintenance, index updates, content auditing
**Command:** `nu scripts/content/content-manager.nu [COMMAND] [OPTIONS]`
**Commands:**
- `generate-indices` - Generate JSON indices from markdown frontmatter
- `validate-ids` - Validate ID consistency across languages
- `validate-content` - Validate content structure and fields
- `validate-consistency` - Validate content consistency across languages
- `show-stats` - Show comprehensive content statistics
**Features:**
- **Dynamic Content Discovery** - Reads content types from `content-kinds.toml`
- **Multi-language Support** - Processes English and Spanish content
- **Frontmatter Processing** - Extracts metadata from markdown files
- **Index Generation** - Creates structured JSON indices for web serving
- **Error Reporting** - Detailed validation reports with actionable feedback
**Examples:**
```bash
nu scripts/content/content-manager.nu generate-indices
nu scripts/content/content-manager.nu validate-content
nu scripts/content/content-manager.nu show-stats
```
### 🔍 Content Validation Tools
#### `validate-content.nu` - Content Structure Validator
**Purpose:** Comprehensive validation of content structure and integrity
**Task:** Validate JSON files, required fields, and cross-references
**Context:** Content quality assurance, pre-deployment validation, CI/CD pipelines
**Command:** `nu scripts/content/validate-content.nu [OPTIONS]`
**Validation Checks:**
- **Directory Structure** - Consistent language directories
- **JSON Validity** - Valid index.json and meta.json files
- **Required Fields** - Mandatory frontmatter fields (title, etc.)
- **Content Length** - Warns about very short content
- **Cross-references** - Index entries match actual files
**Features:**
- Validates all content types discovered from `content-kinds.toml`
- Processes English and Spanish content
- Detailed error reporting with fix suggestions
- Statistics on total files validated
#### `validate-content-consistency.nu` - Multi-language Consistency Validator
**Purpose:** Ensure content consistency across all languages
**Task:** Validate language parity, metadata consistency, translation completeness
**Context:** Multi-language content maintenance, translation quality assurance
**Command:** `nu scripts/content/validate-content-consistency.nu [OPTIONS]`
**Consistency Checks:**
- **Language Parity** - Same content IDs exist in all languages
- **Metadata Consistency** - Similar frontmatter structure across languages
- **Translation Completeness** - All content properly translated
- **Index Validation** - Consistent index.json files across languages
#### `validate-id-consistency.nu` - ID Consistency Validator
**Purpose:** Validate ID consistency across languages and files
**Task:** Ensure filename consistency, frontmatter ID fields, and index accuracy
**Context:** Content integrity checks, preventing broken references
**Command:** `nu scripts/content/validate-id-consistency.nu [OPTIONS]`
**ID Validation:**
- **Filename Consistency** - Same files exist across all languages
- **Frontmatter IDs** - ID fields match filenames (or are absent)
- **Index Accuracy** - Index.json entries correspond to actual files
- **Duplicate Detection** - No duplicate IDs in index files
### 🌍 Translation & Localization
#### `sync-translations.nu` - Translation Synchronization Manager
**Purpose:** Manage translation keys and localization files
**Task:** Extract keys, sync translations, validate completeness
**Context:** Internationalization, translation workflow, localization maintenance
**Command:** `nu scripts/content/sync-translations.nu [COMMAND] [OPTIONS]`
**Commands:**
- `extract-keys` - Extract translation keys from content files
- `sync-keys` - Synchronize translation keys across languages
- `validate-translations` - Validate translation completeness
- `generate-missing` - Generate missing translation entries
- `show-stats` - Show translation statistics
- `create-template` - Create translation template for new language
**Arguments:**
- `--lang LANGUAGE` - Target specific language [default: all]
- `--source LANG` - Source language for template [default: en]
- `--output DIR` - Output directory [default: content/locales]
**Features:**
- **Key Extraction** - Finds translation keys in content using multiple patterns
- **Template Generation** - Creates translation templates for new languages
- **Progress Tracking** - Shows completion rates and missing translations
- **Multiple Formats** - Supports both Fluent (.ftl) and JSON formats
**Examples:**
```bash
nu scripts/content/sync-translations.nu extract-keys
nu scripts/content/sync-translations.nu sync-keys --lang es
nu scripts/content/sync-translations.nu create-template --lang fr --source en
```
### 🚀 Quick Start Commands
```bash
# Generate new blog post in both languages
nu scripts/content/generate-content.nu blog-post --title "My New Post" --category "Tech"
# Generate recipe with specific difficulty
nu scripts/content/generate-content.nu recipe --title "Docker Setup" --difficulty "Intermediate"
# Update all content indices
nu scripts/content/content-manager.nu generate-indices
# Validate all content
nu scripts/content/validate-content.nu
# Check content consistency across languages
nu scripts/content/validate-content-consistency.nu
# Validate ID consistency
nu scripts/content/validate-id-consistency.nu
# Show content statistics
nu scripts/content/content-manager.nu show-stats
# Extract and sync translation keys
nu scripts/content/sync-translations.nu extract-keys
nu scripts/content/sync-translations.nu sync-keys
```
## 📁 File Organization
```
scripts/content/
├── README.md # This documentation
├── content-manager.nu # 🔧 Central content management
├── generate-content.nu # 📝 Content generation from templates
├── validate-content.nu # 🔍 Content structure validation
├── validate-content-consistency.nu # 🔍 Multi-language consistency
├── validate-id-consistency.nu # 🔍 ID consistency validation
├── sync-translations.nu # 🌍 Translation synchronization
└── templates/ # 📋 Content templates
├── content-post.json # Blog post template structure
├── content-post.md # Blog post markdown template
├── recipe.json # Recipe template structure
└── recipe.md # Recipe markdown template
```
## 🌐 Supported Languages
Currently supported languages:
- **English (`en`)** - Primary language
- **Spanish (`es`)** - Secondary language
### Adding New Languages
To add support for a new language (e.g., French):
1. **Create content directories:**
```bash
mkdir -p content/blog/fr content/recipes/fr
```
2. **Add language to configuration:**
Update the `languages` array in each script or use environment configuration.
3. **Create localization files:**
```bash
nu scripts/content/sync-translations.nu create-template --lang fr --source en
```
4. **Generate initial indices:**
```bash
nu scripts/content/content-manager.nu generate-indices
```
## 📊 Content Structure
### Source Files (Markdown)
```
content/
├── blog/
│ ├── en/
│ │ ├── index.json # English blog index
│ │ ├── post1.md # English blog posts
│ │ └── post2.md
│ └── es/
│ ├── index.json # Spanish blog index
│ ├── articulo1.md # Spanish blog posts
│ └── articulo2.md
├── recipes/
│ ├── en/
│ │ ├── index.json # English recipe index
│ │ ├── recipe1.md # English recipes
│ │ └── recipe2.md
│ └── es/
│ ├── index.json # Spanish recipe index
│ ├── receta1.md # Spanish recipes
│ └── receta2.md
├── content-kinds.toml # Content type definitions
└── locales/ # Translation files
├── en.json
├── es.json
└── extracted-keys.json
```
### Generated Files (HTML)
```
public/
├── blog/
│ ├── en/
│ │ ├── index.json # Copied from source
│ │ ├── post1.html # Generated HTML
│ │ └── post2.html
│ ├── es/
│ │ ├── index.json # Copied from source
│ │ ├── articulo1.html # Generated HTML
│ │ └── articulo2.html
│ └── index.json # Symlink to en/index.json
├── recipes/
│ └── [similar structure]
└── content-manifest.json # Build metadata and statistics
```
## ⚙️ Configuration
### Environment Variables
- **`SITE_CONTENT_PATH`** - Content root directory [default: `site/content`]
- Used by all scripts for consistent content location
### Content Configuration
- **`content/content-kinds.toml`** - Defines enabled content types
- **`content/locales/`** - Translation files and extracted keys
- **`scripts/content/templates/`** - Content generation templates
## 🔄 Integration with Build System
### Justfile Integration
The content scripts integrate with the project's task runner:
```bash
# Content management commands (updated for Nushell)
just content-generate-indices # Generate all content indices
just content-validate # Validate content structure
just content-consistency # Check multi-language consistency
just content-build # Build all localized content to HTML
# Content generation
just content-new-post # Interactive blog post creation
just content-new-recipe # Interactive recipe creation
```
### Build Pipeline Integration
Content scripts are used in the complete build pipeline:
1. **Content Generation** - Create new content from templates
2. **Validation** - Ensure content integrity and consistency
3. **Index Generation** - Update JSON indices for web serving
4. **Translation Sync** - Manage localization keys
5. **HTML Conversion** - Convert markdown to HTML (via build scripts)
## 🐛 Troubleshooting
### Common Issues
**Content Validation Errors:**
- Ensure `content-static` feature is available in Cargo.toml
- Check that source markdown files exist in correct directories
- Verify frontmatter syntax is valid YAML
**Index Generation Issues:**
- Run `nu scripts/content/content-manager.nu generate-indices` to rebuild
- Check that `content-kinds.toml` properly defines content types
- Ensure markdown files have required frontmatter fields
**Translation Synchronization:**
- Extract keys first: `nu scripts/content/sync-translations.nu extract-keys`
- Check that translation patterns match your content style
- Verify locales directory exists and is writable
**Multi-language Consistency:**
- Use consistent filenames across all languages
- Ensure frontmatter metadata matches across translations
- Run consistency validation after adding new content
### Validation Workflow
```bash
# Complete content validation workflow
nu scripts/content/validate-content.nu # Basic structure
nu scripts/content/validate-id-consistency.nu # ID consistency
nu scripts/content/validate-content-consistency.nu # Multi-language
nu scripts/content/content-manager.nu show-stats # Overview
```
## 🔧 Original Bash Scripts
Original bash scripts are preserved in `scripts/sh/content/` for reference during the transition period. The Nushell versions provide:
- **Enhanced Error Handling** - Structured error reporting with actionable feedback
- **Better Data Processing** - Native JSON/YAML handling without external tools
- **Improved Performance** - Faster processing of large content sets
- **Cross-Platform Compatibility** - Consistent behavior across operating systems
- **Structured Output** - Rich, colored output with progress indicators
## 💡 Best Practices
1. **Always validate** content before building for production
2. **Use templates** for consistent content structure
3. **Maintain ID consistency** across all languages
4. **Regular translation sync** to keep localization up to date
5. **Check content statistics** to monitor content growth
6. **Update indices** after adding or modifying content
The content management system provides a complete workflow for maintaining high-quality, multi-language content with proper validation, consistency checks, and localization support.