Initial commit
This commit is contained in:
12
.claude-plugin/plugin.json
Normal file
12
.claude-plugin/plugin.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name": "content",
|
||||||
|
"description": "Tools for bootstrapping content creation such as blog posts and conference talks",
|
||||||
|
"version": "0.1.1",
|
||||||
|
"author": {
|
||||||
|
"name": "Nick Nisi",
|
||||||
|
"email": "nick@nisi.org"
|
||||||
|
},
|
||||||
|
"skills": [
|
||||||
|
"./skills"
|
||||||
|
]
|
||||||
|
}
|
||||||
3
README.md
Normal file
3
README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# content
|
||||||
|
|
||||||
|
Tools for bootstrapping content creation such as blog posts and conference talks
|
||||||
65
plugin.lock.json
Normal file
65
plugin.lock.json
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
"$schema": "internal://schemas/plugin.lock.v1.json",
|
||||||
|
"pluginId": "gh:nicknisi/claude-plugins:plugins/content",
|
||||||
|
"normalized": {
|
||||||
|
"repo": null,
|
||||||
|
"ref": "refs/tags/v20251128.0",
|
||||||
|
"commit": "d3d74f41d087878557b65b70b966930af4d6234f",
|
||||||
|
"treeHash": "a9aaa56580f1ee9984ce1c255c7dc3b937b86b2ed4aae9e03c9562db27368683",
|
||||||
|
"generatedAt": "2025-11-28T10:27:21.695204Z",
|
||||||
|
"toolVersion": "publish_plugins.py@0.2.0"
|
||||||
|
},
|
||||||
|
"origin": {
|
||||||
|
"remote": "git@github.com:zhongweili/42plugin-data.git",
|
||||||
|
"branch": "master",
|
||||||
|
"commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390",
|
||||||
|
"repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data"
|
||||||
|
},
|
||||||
|
"manifest": {
|
||||||
|
"name": "content",
|
||||||
|
"description": "Tools for bootstrapping content creation such as blog posts and conference talks",
|
||||||
|
"version": "0.1.1"
|
||||||
|
},
|
||||||
|
"content": {
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"path": "README.md",
|
||||||
|
"sha256": "05b5daac3bc18befbac48a012ba6402e5908788f938429fb348651cea584627a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": ".claude-plugin/plugin.json",
|
||||||
|
"sha256": "455194384ca50a0831f99ba634ec423fad8212065b8c07b1823dcdb11afdf231"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/blog-post-writer/SKILL.md",
|
||||||
|
"sha256": "3fef324ef7dd23f7450ef18d4ab4e28605a8a564f969afc8c61edbea41af6c9d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/blog-post-writer/references/voice-tone.md",
|
||||||
|
"sha256": "96f2ea2109e519b5852275961a71be112ae8fe89b918d5e055b23ba5cf4be614"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/blog-post-writer/references/story-circle.md",
|
||||||
|
"sha256": "144f21373c999a040d1d9e20eea0f2589f1b75b441d587ec001abfa6e9c7cb0c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/conference-talk-builder/SKILL.md",
|
||||||
|
"sha256": "0b2da01c5d75eded0d32f63f1fe1a6fb427d0bf737096c844d0306a4a3efeda7"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/conference-talk-builder/references/ia-presenter-syntax.md",
|
||||||
|
"sha256": "94f2b535339b15de784fed44fea370470821ba3eaa67d9a47cf17eaa588505f8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/conference-talk-builder/references/story-circle.md",
|
||||||
|
"sha256": "144f21373c999a040d1d9e20eea0f2589f1b75b441d587ec001abfa6e9c7cb0c"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dirSha256": "a9aaa56580f1ee9984ce1c255c7dc3b937b86b2ed4aae9e03c9562db27368683"
|
||||||
|
},
|
||||||
|
"security": {
|
||||||
|
"scannedAt": null,
|
||||||
|
"scannerVersion": null,
|
||||||
|
"flags": []
|
||||||
|
}
|
||||||
|
}
|
||||||
212
skills/blog-post-writer/SKILL.md
Normal file
212
skills/blog-post-writer/SKILL.md
Normal file
@@ -0,0 +1,212 @@
|
|||||||
|
---
|
||||||
|
name: blog-post-writer
|
||||||
|
description: Transform brain dumps into polished blog posts in Nick Nisi's voice. Use when the user wants to write a blog post with scattered ideas, talking points, and conclusions that need organization into a cohesive narrative with Nick's conversational, authentic, and thoughtful tone.
|
||||||
|
---
|
||||||
|
|
||||||
|
# Nick Nisi Blog Writer
|
||||||
|
|
||||||
|
Transform unstructured brain dumps into polished blog posts that sound like Nick Nisi.
|
||||||
|
|
||||||
|
## Process
|
||||||
|
|
||||||
|
### 1. Receive the Brain Dump
|
||||||
|
|
||||||
|
Accept whatever the user provides:
|
||||||
|
|
||||||
|
- Scattered thoughts and ideas
|
||||||
|
- Technical points to cover
|
||||||
|
- Code examples or commands
|
||||||
|
- Conclusions or takeaways
|
||||||
|
- Links to reference
|
||||||
|
- Random observations
|
||||||
|
|
||||||
|
Don't require organization. The mess is the input.
|
||||||
|
|
||||||
|
### 2. Read Voice and Tone
|
||||||
|
|
||||||
|
Load `references/voice-tone.md` to understand Nick's writing style.
|
||||||
|
|
||||||
|
Key characteristics:
|
||||||
|
|
||||||
|
- Conversational yet substantive
|
||||||
|
- Vulnerable and authentic
|
||||||
|
- Journey-based narrative
|
||||||
|
- Mix of short and long sentences
|
||||||
|
- Specific examples and real details
|
||||||
|
- Self-aware humor
|
||||||
|
|
||||||
|
### 3. Check for Story Potential
|
||||||
|
|
||||||
|
Read `references/story-circle.md` to understand the narrative framework.
|
||||||
|
|
||||||
|
Determine if the content fits a story structure:
|
||||||
|
|
||||||
|
- Is there a journey from one understanding to another?
|
||||||
|
- Can you identify a problem and resolution?
|
||||||
|
- Does it follow: comfort → disruption → return changed?
|
||||||
|
|
||||||
|
Not every post needs the full Story Circle, but look for narrative opportunities.
|
||||||
|
|
||||||
|
### 4. Organize Content
|
||||||
|
|
||||||
|
Structure the material into sections:
|
||||||
|
|
||||||
|
**Common structures:**
|
||||||
|
|
||||||
|
- Problem/experience → Journey → Results → Lessons
|
||||||
|
- Setup → Challenge → Discovery → Application
|
||||||
|
- Philosophy → How-to → Reflection
|
||||||
|
- Current state → Past → Learning → Future
|
||||||
|
|
||||||
|
Choose the structure that fits the content.
|
||||||
|
|
||||||
|
### 5. Write in Nick's Voice
|
||||||
|
|
||||||
|
Apply voice characteristics:
|
||||||
|
|
||||||
|
**Opening:**
|
||||||
|
|
||||||
|
- Hook with current position or recent event
|
||||||
|
- Set up tension or question
|
||||||
|
- Be direct and honest
|
||||||
|
|
||||||
|
**Body:**
|
||||||
|
|
||||||
|
- Vary paragraph length
|
||||||
|
- Use short paragraphs for emphasis
|
||||||
|
- Include specific details (tool names, commands, numbers)
|
||||||
|
- Show vulnerability where appropriate
|
||||||
|
- Use inline code formatting naturally
|
||||||
|
- Break up text with headers
|
||||||
|
|
||||||
|
**Technical content:**
|
||||||
|
|
||||||
|
- Assume reader knowledge but explain when needed
|
||||||
|
- Show actual commands and examples
|
||||||
|
- Be honest about limitations
|
||||||
|
- Use casual tool references
|
||||||
|
|
||||||
|
**Tone modulation:**
|
||||||
|
|
||||||
|
- Technical sections: clear, instructional
|
||||||
|
- Personal sections: vulnerable, reflective
|
||||||
|
- Be conversational throughout
|
||||||
|
|
||||||
|
**Ending:**
|
||||||
|
|
||||||
|
- Tie back to opening
|
||||||
|
- Forward-looking perspective
|
||||||
|
- Actionable advice
|
||||||
|
- Optimistic or thought-provoking
|
||||||
|
|
||||||
|
### 6. Review and Refine
|
||||||
|
|
||||||
|
Check the post:
|
||||||
|
|
||||||
|
- Does it sound conversational?
|
||||||
|
- Is there a clear narrative arc?
|
||||||
|
- Are technical details specific and accurate?
|
||||||
|
- Does it show vulnerability appropriately?
|
||||||
|
- Are paragraphs varied in length?
|
||||||
|
- Is humor self-aware, not forced?
|
||||||
|
- Does it end with momentum?
|
||||||
|
|
||||||
|
Show the post to the user for feedback and iterate.
|
||||||
|
|
||||||
|
## Voice Guidelines
|
||||||
|
|
||||||
|
### Do:
|
||||||
|
|
||||||
|
- Write like talking to a peer over coffee
|
||||||
|
- Admit uncertainty or being wrong
|
||||||
|
- Use specific examples with details
|
||||||
|
- Vary sentence and paragraph length
|
||||||
|
- Include inline code naturally
|
||||||
|
- Show the journey, not just the destination
|
||||||
|
- Use humor sparingly and self-aware
|
||||||
|
- End with forward momentum
|
||||||
|
|
||||||
|
### Don't:
|
||||||
|
|
||||||
|
- Use corporate or marketing speak
|
||||||
|
- Pretend to have all answers
|
||||||
|
- Be preachy or condescending
|
||||||
|
- Over-explain basic concepts
|
||||||
|
- Force humor or emojis
|
||||||
|
- Hide mistakes or uncertainty
|
||||||
|
- Write without specific examples
|
||||||
|
|
||||||
|
## Example Patterns
|
||||||
|
|
||||||
|
### Opening hooks:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
"AI is going to replace developers."
|
||||||
|
|
||||||
|
I must have heard that phrase a hundred times in the last year.
|
||||||
|
```
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
I've been thinking a lot about how we use AI in our daily work.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Emphasis through structure:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
Then something clicked.
|
||||||
|
|
||||||
|
I watched it use rg to search through codebases, just like I would.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Vulnerability:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
I won't lie – joining Meta was intimidating.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Technical details:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
I watched it use `rg` to search through codebases, just like I would.
|
||||||
|
It ran `npm test` to verify its changes weren't breaking anything.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Conclusions:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
You're not being replaced; you're being amplified.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Bundled Resources
|
||||||
|
|
||||||
|
### References
|
||||||
|
|
||||||
|
- `references/voice-tone.md` - Complete voice and tone guide. Read this first to capture Nick's style.
|
||||||
|
- `references/story-circle.md` - Story Circle narrative framework. Check if content fits a story structure.
|
||||||
|
|
||||||
|
## Workflow Example
|
||||||
|
|
||||||
|
User provides brain dump:
|
||||||
|
|
||||||
|
```
|
||||||
|
thoughts on using cursor vs claude code
|
||||||
|
- cursor is in IDE, feels familiar
|
||||||
|
- but claude code is in terminal, my natural environment
|
||||||
|
- tried cursor first, felt weird leaving vim
|
||||||
|
- claude code met me where I was
|
||||||
|
- not about which is better, about workflow fit
|
||||||
|
- some devs love IDE integration
|
||||||
|
- I need terminal access
|
||||||
|
- conclusion: use what fits YOUR workflow
|
||||||
|
```
|
||||||
|
|
||||||
|
Process:
|
||||||
|
|
||||||
|
1. Read voice-tone.md
|
||||||
|
2. Check story-circle.md - yes, there's a journey here
|
||||||
|
3. Identify structure: Current tools → Trying Cursor → Finding Claude Code → Realization
|
||||||
|
4. Write opening hook about tool debates
|
||||||
|
5. Show vulnerability about trying new things
|
||||||
|
6. Include specific terminal commands naturally
|
||||||
|
7. Conclude with "meet yourself where you are" message
|
||||||
|
8. Review for conversational tone and specific details
|
||||||
107
skills/blog-post-writer/references/story-circle.md
Normal file
107
skills/blog-post-writer/references/story-circle.md
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
# Tech Talk Story Circle Framework
|
||||||
|
|
||||||
|
The Story Circle is an eight-step framework adapted from Dan Harmon's storytelling technique. It structures tech talks to create engaging narratives.
|
||||||
|
|
||||||
|
## The Eight Steps
|
||||||
|
|
||||||
|
### 1. Introduction (You)
|
||||||
|
|
||||||
|
**Top half - Order**
|
||||||
|
|
||||||
|
Introduce yourself and the current status quo of your project.
|
||||||
|
|
||||||
|
- Set the scene with the existing workflow or technology stack
|
||||||
|
- Establish the baseline before disruption
|
||||||
|
- Make the audience understand the familiar ground
|
||||||
|
|
||||||
|
### 2. Problem Statement (Need)
|
||||||
|
|
||||||
|
**Top half - Order**
|
||||||
|
|
||||||
|
Identify and explain the problem you're trying to solve.
|
||||||
|
|
||||||
|
- Clearly articulate what's not working
|
||||||
|
- Help the audience feel the pain point
|
||||||
|
- Create the motivation for change
|
||||||
|
|
||||||
|
### 3. Exploration (Go)
|
||||||
|
|
||||||
|
**Crossing to bottom half - Chaos**
|
||||||
|
|
||||||
|
Describe the steps taken to address the problem.
|
||||||
|
|
||||||
|
- What did you try?
|
||||||
|
- What worked?
|
||||||
|
- What didn't work?
|
||||||
|
- Show the journey into the unknown
|
||||||
|
|
||||||
|
### 4. Experimentation (Search)
|
||||||
|
|
||||||
|
**Bottom half - Chaos**
|
||||||
|
|
||||||
|
Detail the process of digging into the actual problem.
|
||||||
|
|
||||||
|
- What did you learn?
|
||||||
|
- What experiments did you run?
|
||||||
|
- What discoveries did you make?
|
||||||
|
- Share the messy middle of problem-solving
|
||||||
|
|
||||||
|
### 5. Solution (Find)
|
||||||
|
|
||||||
|
**Bottom half - Chaos**
|
||||||
|
|
||||||
|
Explain how you found the solution or made progress.
|
||||||
|
|
||||||
|
- Present the breakthrough moment
|
||||||
|
- Show what finally clicked
|
||||||
|
- Explain the technical approach that worked
|
||||||
|
|
||||||
|
### 6. Challenges (Take)
|
||||||
|
|
||||||
|
**Bottom half - Chaos**
|
||||||
|
|
||||||
|
Discuss the actual implementation of the project.
|
||||||
|
|
||||||
|
- Emphasize the disruption to the status quo
|
||||||
|
- Share the difficulties and tradeoffs
|
||||||
|
- Be honest about the cost of change
|
||||||
|
|
||||||
|
### 7. Apply Knowledge (Return)
|
||||||
|
|
||||||
|
**Crossing to top half - Order**
|
||||||
|
|
||||||
|
Describe the results and how the solution was integrated.
|
||||||
|
|
||||||
|
- Show how you brought the solution back to your project
|
||||||
|
- Demonstrate the practical application
|
||||||
|
- Return to the familiar with new tools
|
||||||
|
|
||||||
|
### 8. Results & Insights (Change)
|
||||||
|
|
||||||
|
**Top half - Order**
|
||||||
|
|
||||||
|
Conclude with lessons learned and how things changed.
|
||||||
|
|
||||||
|
- Share metrics or outcomes
|
||||||
|
- Explain what changed in your workflow or perspective
|
||||||
|
- Leave the audience with actionable insights
|
||||||
|
|
||||||
|
## Structure Notes
|
||||||
|
|
||||||
|
**Top half (steps 1, 2, 7, 8)**: Represents established practices and order
|
||||||
|
**Bottom half (steps 3, 4, 5, 6)**: Represents disruption and experimentation
|
||||||
|
|
||||||
|
The character (you) starts in the top half, enters the bottom half to experiment and disrupt, then returns to the top half with new knowledge, changing the status quo.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
From "Unleashing the TypeScript Compiler":
|
||||||
|
|
||||||
|
1. Status quo of a TypeScript/React project using Material-UI
|
||||||
|
2. Challenges faced with the project
|
||||||
|
3. Solutions tried to work around issues
|
||||||
|
4. Exploring the TypeScript compiler and codemods
|
||||||
|
5. Using new knowledge to solve problems
|
||||||
|
6. Challenges implementing the solution for every scenario
|
||||||
|
7. Applying knowledge to the project
|
||||||
|
8. Results and changed team perspective on codemods
|
||||||
170
skills/blog-post-writer/references/voice-tone.md
Normal file
170
skills/blog-post-writer/references/voice-tone.md
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
# Nick Nisi's Voice and Tone
|
||||||
|
|
||||||
|
Captured from analyzing posts at nicknisi.com
|
||||||
|
|
||||||
|
## Core Writing Characteristics
|
||||||
|
|
||||||
|
### Voice
|
||||||
|
|
||||||
|
Personal, authentic, conversational yet thoughtful. Nick writes like he's having a one-on-one conversation with a peer developer over coffee.
|
||||||
|
|
||||||
|
### Vulnerability
|
||||||
|
|
||||||
|
Nick isn't afraid to admit uncertainty, fear, or being wrong. He shares his journey from skepticism to understanding.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- "I was wrong, but not in the way I feared."
|
||||||
|
- "I won't lie – joining Meta was intimidating."
|
||||||
|
- "That night in my hotel room, I couldn't sleep."
|
||||||
|
- "Looking at my interviewers' backgrounds... it was hard not to feel like an outsider."
|
||||||
|
|
||||||
|
### Narrative Structure
|
||||||
|
|
||||||
|
Posts often follow a journey: initial position → experience/challenge → realization → new understanding. He builds tension and resolves it.
|
||||||
|
|
||||||
|
### Sentence Style
|
||||||
|
|
||||||
|
- Mix of short punchy sentences and longer explanatory ones
|
||||||
|
- Uses fragments for emphasis
|
||||||
|
- Varies paragraph length for rhythm
|
||||||
|
- Short paragraphs for key moments: "🤯" stands alone, "That changed everything." gets its own paragraph
|
||||||
|
|
||||||
|
### Specific Phrases and Patterns
|
||||||
|
|
||||||
|
**Opening hooks:**
|
||||||
|
|
||||||
|
- Sets up expectations then challenges them
|
||||||
|
- Often starts with current position or recent event
|
||||||
|
- "I've been thinking a lot about..."
|
||||||
|
- "Want to dive in? [Links]" (practical calls to action upfront)
|
||||||
|
|
||||||
|
**Transitions:**
|
||||||
|
|
||||||
|
- "Here's what I've learned..."
|
||||||
|
- "The strange part?"
|
||||||
|
- "Let's talk about..."
|
||||||
|
- "But beneath the apprehension..."
|
||||||
|
|
||||||
|
**Emphasis techniques:**
|
||||||
|
|
||||||
|
- Single-line paragraphs for impact
|
||||||
|
- Emojis used sparingly but effectively (🤯, 😂)
|
||||||
|
- Italics for internal thoughts or emphasis
|
||||||
|
- Bold for key concepts
|
||||||
|
|
||||||
|
**Metaphors and analogies:**
|
||||||
|
|
||||||
|
- Technical concepts explained through relatable comparisons
|
||||||
|
- "Like cooking with your eyes closed"
|
||||||
|
- "The developers who insist on writing every line by hand are like accountants refusing to use spreadsheets"
|
||||||
|
- "It was a pair programmer who spoke fluent bash"
|
||||||
|
|
||||||
|
### Technical Writing Style
|
||||||
|
|
||||||
|
**Code and tools:**
|
||||||
|
|
||||||
|
- Mentions specific tools naturally (vim, tmux, rg, npm)
|
||||||
|
- Shows actual commands and code when relevant
|
||||||
|
- Explains technical decisions without over-explaining
|
||||||
|
- Assumes reader has technical knowledge but explains when needed
|
||||||
|
|
||||||
|
**Examples:**
|
||||||
|
|
||||||
|
- Inline code formatting: `CLAUDE.md`, `git`, `npm test`
|
||||||
|
- Commands shown naturally in prose
|
||||||
|
- Tool names used casually: "I watched it use rg to search through codebases"
|
||||||
|
|
||||||
|
### Honesty About Limitations
|
||||||
|
|
||||||
|
Nick admits when things aren't perfect:
|
||||||
|
|
||||||
|
- "The PRs it generated weren't perfect. But they worked. Somewhat."
|
||||||
|
- "Would I ship our vibe-coded GitHub Action to production? No way."
|
||||||
|
- "Not perfect, not production-ready, but working."
|
||||||
|
|
||||||
|
### Self-Awareness and Humor
|
||||||
|
|
||||||
|
Light self-deprecation and humor:
|
||||||
|
|
||||||
|
- "(except maybe 'Why doesn't Nick use VS Code?' 😉)"
|
||||||
|
- "One of my favorite memories? Getting texts from friends asking why my face kept showing up in their Instagram feeds."
|
||||||
|
- "I like to think I brought a certain… charm to people's social media experience."
|
||||||
|
- Acknowledging his tooling preferences with humor
|
||||||
|
|
||||||
|
### Structure Patterns
|
||||||
|
|
||||||
|
**Sections often use:**
|
||||||
|
|
||||||
|
- Clear headers that are descriptive
|
||||||
|
- Lists with explanations
|
||||||
|
- Tables when comparing options
|
||||||
|
- Code examples with context
|
||||||
|
- Pull quotes or emphasized text
|
||||||
|
|
||||||
|
**Common section patterns:**
|
||||||
|
|
||||||
|
- The Setup/Problem → The Journey → The Results → Lessons Learned
|
||||||
|
- Philosophy sections: "Here's what I've learned..."
|
||||||
|
- How-to sections with practical steps
|
||||||
|
- Reflection sections: "Looking back..."
|
||||||
|
|
||||||
|
### Conclusions
|
||||||
|
|
||||||
|
Endings often:
|
||||||
|
|
||||||
|
- Tie back to opening tension or question
|
||||||
|
- Offer forward-looking perspective
|
||||||
|
- Include actionable advice
|
||||||
|
- End on optimistic or thought-provoking note
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- "The party isn't over – we're just changing the runtime!"
|
||||||
|
- "That week, I learned to code with my eyes wide shut. The strange part? I've never seen more clearly where we're headed."
|
||||||
|
- "You're not being replaced; you're being amplified."
|
||||||
|
|
||||||
|
### Authenticity Markers
|
||||||
|
|
||||||
|
**Real examples:**
|
||||||
|
|
||||||
|
- Specific projects and PRs with links
|
||||||
|
- Actual teammates mentioned by name
|
||||||
|
- Real events (MCP Night, onsite meetings)
|
||||||
|
- Concrete details (5,000 lines of TypeScript, two hours, 600 developers)
|
||||||
|
|
||||||
|
**Acknowledges help:**
|
||||||
|
|
||||||
|
- "Thanks to John Christopher for reviewing this post."
|
||||||
|
- Credits teammates and collaborators
|
||||||
|
|
||||||
|
### Tone Shifts
|
||||||
|
|
||||||
|
Nick modulates tone based on content:
|
||||||
|
|
||||||
|
- **Technical tutorials**: Clear, instructional, still conversational
|
||||||
|
- **Personal reflections**: Vulnerable, thoughtful
|
||||||
|
- **Tool reviews**: Enthusiastic but honest
|
||||||
|
- **Career stories**: Reflective, self-aware
|
||||||
|
|
||||||
|
### What to Avoid
|
||||||
|
|
||||||
|
- Corporate speak or marketing language
|
||||||
|
- Overly formal academic tone
|
||||||
|
- Pretending to have all the answers
|
||||||
|
- Dismissing reader concerns
|
||||||
|
- Being preachy or condescending
|
||||||
|
- Hiding uncertainty or mistakes
|
||||||
|
|
||||||
|
### Key Principles
|
||||||
|
|
||||||
|
1. Be conversational but substantive
|
||||||
|
2. Share the journey, not just the destination
|
||||||
|
3. Admit when you're uncertain or learning
|
||||||
|
4. Use specific details and real examples
|
||||||
|
5. Balance technical depth with accessibility
|
||||||
|
6. End with forward momentum
|
||||||
|
7. Write for a peer, not a student
|
||||||
|
8. Show vulnerability builds credibility
|
||||||
|
9. Humor works when it's self-aware
|
||||||
|
10. Practical value matters
|
||||||
113
skills/conference-talk-builder/SKILL.md
Normal file
113
skills/conference-talk-builder/SKILL.md
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
---
|
||||||
|
name: conference-talk-builder
|
||||||
|
description: Create conference talk outlines and iA Presenter markdown slides using the Story Circle narrative framework. Use when the user wants to structure a tech talk, create presentation slides, or needs help organizing talk ideas into a story-driven format.
|
||||||
|
---
|
||||||
|
|
||||||
|
# Conference Talk Builder
|
||||||
|
|
||||||
|
This skill helps create compelling conference talk outlines and iA Presenter markdown slides using the Story Circle narrative framework.
|
||||||
|
|
||||||
|
## Process
|
||||||
|
|
||||||
|
Follow these steps in order when building a conference talk:
|
||||||
|
|
||||||
|
### 1. Gather Information
|
||||||
|
|
||||||
|
Ask the user for:
|
||||||
|
|
||||||
|
- Talk title and topic
|
||||||
|
- Target audience and their expected knowledge level
|
||||||
|
- Main points they want to cover
|
||||||
|
- Brain dump of everything they know about the topic
|
||||||
|
- Problem they're solving or story they're telling
|
||||||
|
- Any constraints (time limit, specific technologies, etc.)
|
||||||
|
|
||||||
|
### 2. Read the Story Circle Framework
|
||||||
|
|
||||||
|
Load `references/story-circle.md` to understand the eight-step narrative structure.
|
||||||
|
|
||||||
|
The framework maps tech talks to:
|
||||||
|
|
||||||
|
- Top half: Established practices and order
|
||||||
|
- Bottom half: Disruption and experimentation
|
||||||
|
|
||||||
|
### 3. Create the Outline
|
||||||
|
|
||||||
|
Structure the talk using the eight Story Circle steps:
|
||||||
|
|
||||||
|
1. Introduction - Current status quo
|
||||||
|
2. Problem Statement - What needs solving
|
||||||
|
3. Exploration - Initial attempts
|
||||||
|
4. Experimentation - Deep investigation
|
||||||
|
5. Solution - The breakthrough
|
||||||
|
6. Challenges - Implementation difficulties
|
||||||
|
7. Apply Knowledge - Integration into project
|
||||||
|
8. Results & Insights - Lessons learned
|
||||||
|
|
||||||
|
Map the user's content to these steps. Show this outline to the user and refine based on feedback.
|
||||||
|
|
||||||
|
### 4. Generate iA Presenter Slides
|
||||||
|
|
||||||
|
Read `references/ia-presenter-syntax.md` for markdown formatting rules.
|
||||||
|
|
||||||
|
Create slides that:
|
||||||
|
|
||||||
|
- Use `---` to separate slides
|
||||||
|
- Add tabs (`⇥`) before content that should be visible on slides
|
||||||
|
- Leave speaker notes without tabs (spoken text only)
|
||||||
|
- Include comments with `//` for reminders
|
||||||
|
- Format code blocks with proper syntax highlighting
|
||||||
|
- Keep slides focused on one concept each
|
||||||
|
|
||||||
|
Structure the slide deck:
|
||||||
|
|
||||||
|
- Title slide
|
||||||
|
- Introduction slide with your photo/bio
|
||||||
|
- One or more slides per Story Circle step
|
||||||
|
- Code examples broken across multiple slides for readability
|
||||||
|
- Closing slide with contact info and resources
|
||||||
|
|
||||||
|
### 5. Refine and Iterate
|
||||||
|
|
||||||
|
After showing the slides:
|
||||||
|
|
||||||
|
- Ask if sections need expansion or compression
|
||||||
|
- Check if code examples need better formatting
|
||||||
|
- Verify the story flow makes sense
|
||||||
|
- Adjust based on user feedback
|
||||||
|
|
||||||
|
## Key Principles
|
||||||
|
|
||||||
|
**Tell a Story**: You don't need to be an expert. Focus on how you approached a problem and solved it.
|
||||||
|
|
||||||
|
**Keep It Readable**: Break code across slides. Use syntax highlighting. Test on bad projectors (consider light themes).
|
||||||
|
|
||||||
|
**Engage the Audience**: Use humor where appropriate. Ask questions. Make eye contact.
|
||||||
|
|
||||||
|
**Make Follow-up Easy**: Include a memorable URL or QR code on the final slide linking to resources.
|
||||||
|
|
||||||
|
## Bundled Resources
|
||||||
|
|
||||||
|
### References
|
||||||
|
|
||||||
|
- `references/story-circle.md` - Eight-step Story Circle framework with examples. Read this first to understand the narrative structure.
|
||||||
|
- `references/ia-presenter-syntax.md` - Complete iA Presenter markdown syntax reference. Read this when generating slides.
|
||||||
|
|
||||||
|
## Example Workflow
|
||||||
|
|
||||||
|
User: "I want to create a talk about migrating from JavaScript to TypeScript"
|
||||||
|
|
||||||
|
1. Gather their experience, main points, and target audience
|
||||||
|
2. Read `story-circle.md`
|
||||||
|
3. Map their content:
|
||||||
|
- Introduction: Current JS codebase
|
||||||
|
- Problem: Type safety issues and bugs
|
||||||
|
- Exploration: Research into TypeScript
|
||||||
|
- Experimentation: Pilot conversion on one module
|
||||||
|
- Solution: Incremental migration strategy
|
||||||
|
- Challenges: Third-party library types
|
||||||
|
- Apply Knowledge: Full codebase migration
|
||||||
|
- Results: 40% reduction in runtime errors
|
||||||
|
4. Read `ia-presenter-syntax.md`
|
||||||
|
5. Generate markdown slides with proper formatting
|
||||||
|
6. Iterate based on feedback
|
||||||
269
skills/conference-talk-builder/references/ia-presenter-syntax.md
Normal file
269
skills/conference-talk-builder/references/ia-presenter-syntax.md
Normal file
@@ -0,0 +1,269 @@
|
|||||||
|
# iA Presenter Markdown Syntax
|
||||||
|
|
||||||
|
Quick reference for creating slides in iA Presenter.
|
||||||
|
|
||||||
|
## CRITICAL: Tabbing Rules
|
||||||
|
|
||||||
|
**MUST be tabbed to appear on slides:**
|
||||||
|
|
||||||
|
- Regular paragraphs
|
||||||
|
- Lists (bullets, numbered, tasks)
|
||||||
|
- Block quotes
|
||||||
|
- Definition lists
|
||||||
|
- Tables
|
||||||
|
- Images
|
||||||
|
|
||||||
|
**NO TAB needed (appear on slides automatically):**
|
||||||
|
|
||||||
|
- Headers (`#`, `##`, `###`, etc.)
|
||||||
|
- Horizontal rules (`---`)
|
||||||
|
- Fenced code blocks (` ``` `)
|
||||||
|
- Math blocks (`$$`)
|
||||||
|
|
||||||
|
**Never appears on slides:**
|
||||||
|
|
||||||
|
- Comments (`//`)
|
||||||
|
|
||||||
|
## Slide Structure
|
||||||
|
|
||||||
|
### Create New Slides
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
Use horizontal rules to split slides. No tab needed.
|
||||||
|
|
||||||
|
### Headings
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Heading 1
|
||||||
|
|
||||||
|
## Heading 2
|
||||||
|
|
||||||
|
### Heading 3
|
||||||
|
```
|
||||||
|
|
||||||
|
Headers appear on slides automatically. No tab needed.
|
||||||
|
|
||||||
|
## Text on Slides
|
||||||
|
|
||||||
|
Regular paragraphs MUST be tabbed to appear on slides:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
⇥This text will appear on the slide.
|
||||||
|
⇥
|
||||||
|
⇥This is another paragraph on the slide.
|
||||||
|
```
|
||||||
|
|
||||||
|
Without tabs, text is spoken only (speaker notes):
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
This text is only for the speaker to read.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Text Formatting
|
||||||
|
|
||||||
|
Inside tabbed paragraphs:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
⇥**bold text**
|
||||||
|
⇥*italic text*
|
||||||
|
⇥~~strikethrough~~
|
||||||
|
⇥==highlighted text==
|
||||||
|
```
|
||||||
|
|
||||||
|
Superscript and subscript:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
⇥100m^2
|
||||||
|
⇥y^(a+b)^
|
||||||
|
⇥x~z
|
||||||
|
```
|
||||||
|
|
||||||
|
## Lists
|
||||||
|
|
||||||
|
Lists MUST be tabbed to appear on slides:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
⇥- Item one
|
||||||
|
⇥- Item two
|
||||||
|
⇥- Item three
|
||||||
|
```
|
||||||
|
|
||||||
|
Numbered lists:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
⇥1. First item
|
||||||
|
⇥2. Second item
|
||||||
|
⇥3. Third item
|
||||||
|
```
|
||||||
|
|
||||||
|
Task lists:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
⇥- [ ] Unchecked task
|
||||||
|
⇥- [x] Completed task
|
||||||
|
```
|
||||||
|
|
||||||
|
Nested lists:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
⇥- Main item
|
||||||
|
⇥ - Nested item
|
||||||
|
⇥ - Another nested item
|
||||||
|
```
|
||||||
|
|
||||||
|
## Block Quotes
|
||||||
|
|
||||||
|
Block quotes MUST be tabbed:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
⇥> This quote appears on the slide
|
||||||
|
```
|
||||||
|
|
||||||
|
## Definition Lists
|
||||||
|
|
||||||
|
Definition lists MUST be tabbed:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
⇥Term
|
||||||
|
⇥: Definition of the term
|
||||||
|
⇥: Another definition
|
||||||
|
```
|
||||||
|
|
||||||
|
## Code
|
||||||
|
|
||||||
|
### Inline Code
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
⇥Use `keyword` for inline code within a paragraph
|
||||||
|
```
|
||||||
|
|
||||||
|
### Code Blocks
|
||||||
|
|
||||||
|
Fenced code blocks appear on slides automatically. NO TAB needed:
|
||||||
|
|
||||||
|
````markdown
|
||||||
|
```typescript
|
||||||
|
function hello() {
|
||||||
|
console.log('Hello');
|
||||||
|
}
|
||||||
|
```
|
||||||
|
````
|
||||||
|
|
||||||
|
Language tags are optional but recommended for syntax highlighting.
|
||||||
|
|
||||||
|
## Images
|
||||||
|
|
||||||
|
Images MUST be tabbed and added to Media Manager first:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
⇥
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: Encode spaces as `%20`. Omit leading slash.
|
||||||
|
|
||||||
|
## Tables
|
||||||
|
|
||||||
|
Tables MUST be tabbed:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
⇥| Name | Price | Tax |
|
||||||
|
⇥|:--|--:|--:|
|
||||||
|
⇥| Widget | 10$ | 1$ |
|
||||||
|
⇥| Gift | 0$ ||
|
||||||
|
```
|
||||||
|
|
||||||
|
Alignment:
|
||||||
|
|
||||||
|
- Left: `:--`
|
||||||
|
- Right: `--:`
|
||||||
|
- Center: `:-:`
|
||||||
|
|
||||||
|
## Math
|
||||||
|
|
||||||
|
Math blocks appear on slides automatically. NO TAB needed:
|
||||||
|
|
||||||
|
Inline math (needs surrounding text tabbed):
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
⇥An example of math $x+y^2$ within text.
|
||||||
|
```
|
||||||
|
|
||||||
|
Block math:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
$$
|
||||||
|
\displaystyle \frac{1}{x}
|
||||||
|
$$
|
||||||
|
```
|
||||||
|
|
||||||
|
## Comments
|
||||||
|
|
||||||
|
Comments are only visible in the editor:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
// This is a speaker note or reminder
|
||||||
|
```
|
||||||
|
|
||||||
|
## Links and Footnotes
|
||||||
|
|
||||||
|
Links within tabbed content:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
⇥Visit [this site](https://example.com) for more info.
|
||||||
|
```
|
||||||
|
|
||||||
|
Footnotes:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
⇥Text with footnote[^1].
|
||||||
|
[^1]: Footnote content.
|
||||||
|
```
|
||||||
|
|
||||||
|
Citations:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
⇥Statement with source[p. 23][#Doe:2006].
|
||||||
|
[#Doe:2006]: Author. _Title_. Publisher, Year.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Complete Slide Example
|
||||||
|
|
||||||
|
````markdown
|
||||||
|
# Slide Title
|
||||||
|
|
||||||
|
// This is a speaker note - not visible on slide
|
||||||
|
|
||||||
|
⇥This paragraph appears on the slide because it's tabbed.
|
||||||
|
|
||||||
|
⇥Key points:
|
||||||
|
⇥- First point
|
||||||
|
⇥- Second point
|
||||||
|
⇥- Third point
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// Code blocks don't need tabs
|
||||||
|
function example() {
|
||||||
|
return 'This appears on slide automatically';
|
||||||
|
}
|
||||||
|
```
|
||||||
|
````
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Next Slide
|
||||||
|
|
||||||
|
⇥More content here...
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Best Practices
|
||||||
|
|
||||||
|
1. Tab all regular content (paragraphs, lists, quotes, tables, images)
|
||||||
|
2. Don't tab headers, code blocks, or math blocks
|
||||||
|
3. Use comments for speaker notes
|
||||||
|
4. Break complex code across multiple slides
|
||||||
|
5. Test that all visible content is properly tabbed
|
||||||
|
```
|
||||||
107
skills/conference-talk-builder/references/story-circle.md
Normal file
107
skills/conference-talk-builder/references/story-circle.md
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
# Tech Talk Story Circle Framework
|
||||||
|
|
||||||
|
The Story Circle is an eight-step framework adapted from Dan Harmon's storytelling technique. It structures tech talks to create engaging narratives.
|
||||||
|
|
||||||
|
## The Eight Steps
|
||||||
|
|
||||||
|
### 1. Introduction (You)
|
||||||
|
|
||||||
|
**Top half - Order**
|
||||||
|
|
||||||
|
Introduce yourself and the current status quo of your project.
|
||||||
|
|
||||||
|
- Set the scene with the existing workflow or technology stack
|
||||||
|
- Establish the baseline before disruption
|
||||||
|
- Make the audience understand the familiar ground
|
||||||
|
|
||||||
|
### 2. Problem Statement (Need)
|
||||||
|
|
||||||
|
**Top half - Order**
|
||||||
|
|
||||||
|
Identify and explain the problem you're trying to solve.
|
||||||
|
|
||||||
|
- Clearly articulate what's not working
|
||||||
|
- Help the audience feel the pain point
|
||||||
|
- Create the motivation for change
|
||||||
|
|
||||||
|
### 3. Exploration (Go)
|
||||||
|
|
||||||
|
**Crossing to bottom half - Chaos**
|
||||||
|
|
||||||
|
Describe the steps taken to address the problem.
|
||||||
|
|
||||||
|
- What did you try?
|
||||||
|
- What worked?
|
||||||
|
- What didn't work?
|
||||||
|
- Show the journey into the unknown
|
||||||
|
|
||||||
|
### 4. Experimentation (Search)
|
||||||
|
|
||||||
|
**Bottom half - Chaos**
|
||||||
|
|
||||||
|
Detail the process of digging into the actual problem.
|
||||||
|
|
||||||
|
- What did you learn?
|
||||||
|
- What experiments did you run?
|
||||||
|
- What discoveries did you make?
|
||||||
|
- Share the messy middle of problem-solving
|
||||||
|
|
||||||
|
### 5. Solution (Find)
|
||||||
|
|
||||||
|
**Bottom half - Chaos**
|
||||||
|
|
||||||
|
Explain how you found the solution or made progress.
|
||||||
|
|
||||||
|
- Present the breakthrough moment
|
||||||
|
- Show what finally clicked
|
||||||
|
- Explain the technical approach that worked
|
||||||
|
|
||||||
|
### 6. Challenges (Take)
|
||||||
|
|
||||||
|
**Bottom half - Chaos**
|
||||||
|
|
||||||
|
Discuss the actual implementation of the project.
|
||||||
|
|
||||||
|
- Emphasize the disruption to the status quo
|
||||||
|
- Share the difficulties and tradeoffs
|
||||||
|
- Be honest about the cost of change
|
||||||
|
|
||||||
|
### 7. Apply Knowledge (Return)
|
||||||
|
|
||||||
|
**Crossing to top half - Order**
|
||||||
|
|
||||||
|
Describe the results and how the solution was integrated.
|
||||||
|
|
||||||
|
- Show how you brought the solution back to your project
|
||||||
|
- Demonstrate the practical application
|
||||||
|
- Return to the familiar with new tools
|
||||||
|
|
||||||
|
### 8. Results & Insights (Change)
|
||||||
|
|
||||||
|
**Top half - Order**
|
||||||
|
|
||||||
|
Conclude with lessons learned and how things changed.
|
||||||
|
|
||||||
|
- Share metrics or outcomes
|
||||||
|
- Explain what changed in your workflow or perspective
|
||||||
|
- Leave the audience with actionable insights
|
||||||
|
|
||||||
|
## Structure Notes
|
||||||
|
|
||||||
|
**Top half (steps 1, 2, 7, 8)**: Represents established practices and order
|
||||||
|
**Bottom half (steps 3, 4, 5, 6)**: Represents disruption and experimentation
|
||||||
|
|
||||||
|
The character (you) starts in the top half, enters the bottom half to experiment and disrupt, then returns to the top half with new knowledge, changing the status quo.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
From "Unleashing the TypeScript Compiler":
|
||||||
|
|
||||||
|
1. Status quo of a TypeScript/React project using Material-UI
|
||||||
|
2. Challenges faced with the project
|
||||||
|
3. Solutions tried to work around issues
|
||||||
|
4. Exploring the TypeScript compiler and codemods
|
||||||
|
5. Using new knowledge to solve problems
|
||||||
|
6. Challenges implementing the solution for every scenario
|
||||||
|
7. Applying knowledge to the project
|
||||||
|
8. Results and changed team perspective on codemods
|
||||||
Reference in New Issue
Block a user