Complete workflow examples for common tasks.


Create and Publish Blog Post

# 1. Create markdown file
cat > services/content/blog/my-post.md << 'EOF'
---
title: "My Article"
description: "Brief description for SEO"
author: "Author Name"
slug: "my-article"
keywords: "keyword1, keyword2"
kind: "article"
image: "/files/images/blog/featured.webp"
public: true
tags: ["topic"]
published_at: "2026-01-28"
updated_at: "2026-01-28"
---

# My Article

Content here...
EOF
{ "command": "infra jobs run content_publish" }
{ "command": "core content verify my-article --source blog" }

Add Custom CSS

# 1. Create CSS file
cat > storage/files/css/custom.css << 'EOF'
.my-component {
  color: var(--text-primary);
  padding: 1rem;
}
EOF

# 2. Register in extension.rs (add to required_assets)
# AssetDefinition::css(storage_css.join("custom.css"), "css/custom.css"),
{ "command": "infra jobs run copy_extension_assets" }

Reference in template: <link rel="stylesheet" href="/css/custom.css">


Add Custom JavaScript

# 1. Create JS file
cat > storage/files/js/custom.js << 'EOF'
document.addEventListener('DOMContentLoaded', () => {
  console.log('Custom JS loaded');
});
EOF

# 2. Register in extension.rs (add to required_assets)
# AssetDefinition::js(storage_js.join("custom.js"), "js/custom.js"),
{ "command": "infra jobs run copy_extension_assets" }

Reference in template: <script src="/js/custom.js" defer></script>


Update Homepage

Edit services/web/config/homepage.yaml for homepage data, then:

{ "command": "infra jobs run content_publish" }

Quick Content Refresh (No Prerender)

For quick content updates without full prerendering:

{ "command": "infra jobs run publish_pipeline" }

Quick Reference

Recipe Key Command
Full publish infra jobs run content_publish
Quick publish (no prerender) infra jobs run publish_pipeline
Add CSS/JS infra jobs run copy_extension_assets
Ingest content only infra jobs run blog_content_ingestion
Index images infra jobs run file_ingestion