Initial commit
This commit is contained in:
182
commands/new-post.md
Normal file
182
commands/new-post.md
Normal file
@@ -0,0 +1,182 @@
|
||||
# Create New Astro Blog Post
|
||||
|
||||
This command guides you through creating a new blog post for an Astro site with proper frontmatter, content structure, and collection compliance.
|
||||
|
||||
## Instructions
|
||||
|
||||
Follow these steps to create a new blog post:
|
||||
|
||||
### 1. Gather Information
|
||||
|
||||
Ask the user for the following details (if not already provided):
|
||||
- Post title
|
||||
- Post description (for SEO)
|
||||
- Author name
|
||||
- Tags (comma-separated or array)
|
||||
- Whether to create a draft or published post
|
||||
- Target collection (default: 'blog')
|
||||
|
||||
### 2. Check Collection Schema
|
||||
|
||||
Before creating the post:
|
||||
|
||||
1. Look for the content collection configuration:
|
||||
- Check `src/content/config.ts`
|
||||
- Or check `src/content.config.ts`
|
||||
|
||||
2. Review the schema for the target collection (usually 'blog')
|
||||
|
||||
3. Note all required and optional fields
|
||||
|
||||
4. Identify the data types for each field
|
||||
|
||||
### 3. Generate Slug
|
||||
|
||||
Create a URL-friendly slug from the title:
|
||||
- Convert to lowercase
|
||||
- Replace spaces with hyphens
|
||||
- Remove special characters
|
||||
- Example: "My First Post!" → "my-first-post"
|
||||
|
||||
### 4. Determine File Location
|
||||
|
||||
Based on the project structure:
|
||||
- Collection-based: `src/content/blog/[slug].md`
|
||||
- Page-based: `src/pages/blog/[slug].md`
|
||||
|
||||
Check existing posts to determine the correct location.
|
||||
|
||||
### 5. Create Frontmatter
|
||||
|
||||
Build frontmatter matching the schema. Common fields:
|
||||
|
||||
```yaml
|
||||
---
|
||||
title: 'Post Title Here'
|
||||
description: 'SEO-friendly description'
|
||||
pubDate: 2024-01-15
|
||||
author: 'Author Name'
|
||||
tags: ['astro', 'blogging', 'tutorial']
|
||||
draft: false
|
||||
image:
|
||||
url: './images/cover.jpg'
|
||||
alt: 'Image description'
|
||||
---
|
||||
```
|
||||
|
||||
Adapt based on the actual schema found in step 2.
|
||||
|
||||
### 6. Create Starter Content
|
||||
|
||||
Add initial markdown content:
|
||||
|
||||
```markdown
|
||||
# Introduction
|
||||
|
||||
Start writing your post here...
|
||||
|
||||
## Main Section
|
||||
|
||||
Content goes here.
|
||||
|
||||
## Conclusion
|
||||
|
||||
Wrap up your thoughts.
|
||||
```
|
||||
|
||||
### 7. Handle Images (Optional)
|
||||
|
||||
If the user wants to include images:
|
||||
|
||||
1. Create an `images/` directory next to the post (if it doesn't exist)
|
||||
2. Note the image paths in frontmatter
|
||||
3. Provide guidance on image placement
|
||||
|
||||
### 8. Write the File
|
||||
|
||||
Create the file with:
|
||||
- Complete frontmatter
|
||||
- Starter content structure
|
||||
- Proper formatting
|
||||
|
||||
### 9. Validate
|
||||
|
||||
After creating the file:
|
||||
|
||||
1. Check that all required schema fields are present
|
||||
2. Verify the file path is correct
|
||||
3. Ensure frontmatter is valid YAML
|
||||
4. Confirm dates are in correct format
|
||||
|
||||
### 10. Next Steps
|
||||
|
||||
Inform the user:
|
||||
- File location
|
||||
- How to add images (if applicable)
|
||||
- How to preview: `npm run dev`
|
||||
- How to build: `npm run build`
|
||||
|
||||
## Example Output
|
||||
|
||||
**For a collection-based blog:**
|
||||
|
||||
File: `src/content/blog/getting-started-with-astro.md`
|
||||
|
||||
```markdown
|
||||
---
|
||||
title: 'Getting Started with Astro'
|
||||
description: 'Learn the basics of building fast websites with Astro'
|
||||
pubDate: 2024-01-15
|
||||
author: 'John Doe'
|
||||
tags: ['astro', 'tutorial', 'getting-started']
|
||||
draft: false
|
||||
---
|
||||
|
||||
# Introduction
|
||||
|
||||
Welcome to this comprehensive guide on getting started with Astro!
|
||||
|
||||
## What is Astro?
|
||||
|
||||
Astro is a modern web framework...
|
||||
|
||||
## Setting Up Your First Project
|
||||
|
||||
Let's walk through the setup process...
|
||||
|
||||
## Conclusion
|
||||
|
||||
You've learned the basics of Astro. Happy building!
|
||||
```
|
||||
|
||||
## Definition of Done
|
||||
|
||||
- [ ] User requirements gathered (title, description, etc.)
|
||||
- [ ] Collection schema reviewed and understood
|
||||
- [ ] Slug generated from title
|
||||
- [ ] Correct file location determined
|
||||
- [ ] Frontmatter created matching schema
|
||||
- [ ] All required fields included
|
||||
- [ ] Dates in ISO format (YYYY-MM-DD)
|
||||
- [ ] Starter content added
|
||||
- [ ] File created successfully
|
||||
- [ ] Validation passed (schema compliance)
|
||||
- [ ] User informed of next steps
|
||||
|
||||
## Important Notes
|
||||
|
||||
- Always check the existing collection schema before creating frontmatter
|
||||
- Use ISO date format: `2024-01-15` or `2024-01-15T10:00:00Z`
|
||||
- Ensure tags are arrays: `['tag1', 'tag2']` not `'tag1, tag2'`
|
||||
- Use proper YAML syntax (quoted strings, correct indentation)
|
||||
- Don't include `layout` field for content collection posts
|
||||
- Do include `layout` field for page-based posts
|
||||
|
||||
## Error Prevention
|
||||
|
||||
- Verify collection name exists in config
|
||||
- Check all required fields are present
|
||||
- Validate date format
|
||||
- Ensure proper YAML syntax
|
||||
- Don't mix collection and page patterns
|
||||
- Test with `npm run dev` after creation
|
||||
Reference in New Issue
Block a user