Generate a new content post for the site. Argument: optional free-text context about the post (e.g., /new-post I just started using Cursor IDE).
Step 1 — Gather context
If $ARGUMENTS is provided, use it as the initial context. Otherwise, ask the user to describe what they want to write about.
Ask clarifying questions as needed to fill in the required frontmatter fields for the post type. Keep it conversational — don't dump a long form. Ask 1-3 questions at a time.
Step 2 — Identify post type
Based on the context, determine which content type fits best:
| Type |
When to use |
| journey |
A career event, life milestone, learning moment, or job transition |
| project |
A completed or ongoing project with technical decisions and outcomes. Academic publications and research papers also go here — frame them as the underlying research project. |
| tool |
A tool, software, or technology the user wants to review or recommend |
| blog |
A freeform article, essay, tutorial, or opinion piece that doesn't fit the structured project or journey format |
Present your best guess to the user and confirm before proceeding. Use AskUserQuestion with the four types as options.
Step 3 — Gather remaining details
Read src/content.config.ts to confirm the exact schema for the chosen post type. Then ask the user for any required fields you don't already have from Step 1. For optional fields, use sensible defaults or ask only if the information would meaningfully improve the post.
Required fields by type
Journey:
date — when this happened (YYYY-MM-DD)
title — short descriptive title
type — milestone, learning, or transition
description — 1-3 sentence summary
Project:
title, role, year, outcomeSummary, overview, problem
updatedDate — set to today's date (YYYY-MM-DD). This is used by the front page Latest Updates feed for sorting; without it, projects default to January 1st of their year.
constraints — array of constraints faced
approach — how the problem was solved
keyDecisions — array of {decision, reasoning, alternatives?}
techStack — technologies used
impact — {metrics?, qualitative}
learnings — array of takeaways
Tool:
name, description, date, best_for
Blog:
title — post title
description — 1-2 sentence summary shown in listings and meta tags
publishDate — publication date (YYYY-MM-DD)
tags — optional array of topic tags
Step 4 — Generate the file
- Filename: Create a URL-friendly slug from the title/name (lowercase, hyphens, no special characters). Use
.mdx extension.
- Location: Place the file in the correct content directory:
- Journey →
src/content/journey/
- Project →
src/content/projects/
- Tool →
src/content/tools/
- Blog →
src/content/blog/
- Frontmatter: Write valid YAML frontmatter matching the Zod schema exactly. Set
draft: true by default so the user can review before publishing.
- Body content: For journey, project, and blog posts, write substantive MDX body content based on the context provided. For blog posts specifically, write the full article — use headings, paragraphs, and lists as appropriate. For tools, leave the body empty (frontmatter only) unless the user requests otherwise.
Step 5 — Validate
Run bun run build to verify the new file passes schema validation. If it fails, read the error, fix the frontmatter, and retry.
Guidelines
- Match the tone and style of existing content in the collection — read 1-2 existing files for reference before writing.
- Keep descriptions concise and authentic. Avoid marketing language.
- Use ISO 8601 dates (YYYY-MM-DD).
- For projects, the
keyDecisions format is critical: each must have decision and reasoning, with optional alternatives array.
- Always set
draft: true so the user can review. Mention this in your final message.
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: new-post3description: Generate a new content post (journey, project, tool, or blog). Interactively gathers context, identifies the best post type, and creates an MDX file with valid frontmatter in the correct content folder. Use when this capability is needed.4---56Generate a new content post for the site. Argument: optional free-text context about the post (e.g., `/new-post I just started using Cursor IDE`).78## Step 1 — Gather context910If `$ARGUMENTS` is provided, use it as the initial context. Otherwise, ask the user to describe what they want to write about.1112Ask clarifying questions as needed to fill in the required frontmatter fields for the post type. Keep it conversational — don't dump a long form. Ask 1-3 questions at a time.1314## Step 2 — Identify post type1516Based on the context, determine which content type fits best:1718| Type | When to use |19|------|-------------|20| **journey** | A career event, life milestone, learning moment, or job transition |21| **project** | A completed or ongoing project with technical decisions and outcomes. Academic publications and research papers also go here — frame them as the underlying research project. |22| **tool** | A tool, software, or technology the user wants to review or recommend |23| **blog** | A freeform article, essay, tutorial, or opinion piece that doesn't fit the structured project or journey format |2425Present your best guess to the user and confirm before proceeding. Use `AskUserQuestion` with the four types as options.2627## Step 3 — Gather remaining details2829Read `src/content.config.ts` to confirm the exact schema for the chosen post type. Then ask the user for any required fields you don't already have from Step 1. For optional fields, use sensible defaults or ask only if the information would meaningfully improve the post.3031### Required fields by type3233**Journey:**34- `date` — when this happened (YYYY-MM-DD)35- `title` — short descriptive title36- `type` — milestone, learning, or transition37- `description` — 1-3 sentence summary3839**Project:**40- `title`, `role`, `year`, `outcomeSummary`, `overview`, `problem`41- `updatedDate` — set to today's date (YYYY-MM-DD). This is used by the front page Latest Updates feed for sorting; without it, projects default to January 1st of their `year`.42- `constraints` — array of constraints faced43- `approach` — how the problem was solved44- `keyDecisions` — array of {decision, reasoning, alternatives?}45- `techStack` — technologies used46- `impact` — {metrics?, qualitative}47- `learnings` — array of takeaways4849**Tool:**50- `name`, `description`, `date`, `best_for`5152**Blog:**53- `title` — post title54- `description` — 1-2 sentence summary shown in listings and meta tags55- `publishDate` — publication date (YYYY-MM-DD)56- `tags` — optional array of topic tags5758## Step 4 — Generate the file59601. **Filename**: Create a URL-friendly slug from the title/name (lowercase, hyphens, no special characters). Use `.mdx` extension.612. **Location**: Place the file in the correct content directory:62 - Journey → `src/content/journey/`63 - Project → `src/content/projects/`64 - Tool → `src/content/tools/`65 - Blog → `src/content/blog/`663. **Frontmatter**: Write valid YAML frontmatter matching the Zod schema exactly. Set `draft: true` by default so the user can review before publishing.674. **Body content**: For journey, project, and blog posts, write substantive MDX body content based on the context provided. For blog posts specifically, write the full article — use headings, paragraphs, and lists as appropriate. For tools, leave the body empty (frontmatter only) unless the user requests otherwise.6869## Step 5 — Validate7071Run `bun run build` to verify the new file passes schema validation. If it fails, read the error, fix the frontmatter, and retry.7273## Guidelines7475- Match the tone and style of existing content in the collection — read 1-2 existing files for reference before writing.76- Keep descriptions concise and authentic. Avoid marketing language.77- Use ISO 8601 dates (YYYY-MM-DD).78- For projects, the `keyDecisions` format is critical: each must have `decision` and `reasoning`, with optional `alternatives` array.79- Always set `draft: true` so the user can review. Mention this in your final message.8081---82> Converted and distributed by [TomeVault](https://tomevault.io/claim/jasonlo) — claim your Tome and manage your conversions.83<!-- tomevault:4.0:skill_md:2026-04-15 -->