skills/technical-tutorials/SKILL.md
When the user wants to create step-by-step technical tutorials, quickstarts, or code walkthroughs. Trigger phrases include "tutorial," "quickstart," "getting started guide," "walkthrough," "step by step," "how to guide," "hands-on guide," or "code tutorial."
npx skillsauth add jonathimer/devmarketing-skills technical-tutorialsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill helps you create step-by-step tutorials that actually work. Covers prerequisite handling, progressive complexity, troubleshooting sections, and creating those satisfying "it works!" moments.
Load your audience context first. Read .agents/developer-audience-context.md to understand:
If the context file doesn't exist, run the developer-audience-context skill first.
| Type | Length | Purpose | Example | |------|--------|---------|---------| | Quickstart | 5-10 min | First success ASAP | "Make your first API call" | | Tutorial | 20-45 min | Learn a concept deeply | "Build a REST API with Node.js" | | Workshop | 1-3 hours | Comprehensive project | "Build a full-stack app" | | Code walkthrough | Varies | Explain existing code | "Understanding our SDK architecture" |
1. Title & Meta
- What you'll build
- Time estimate
- Prerequisites
2. Overview
- What you'll learn
- Final result preview
3. Prerequisites Check
- Environment setup
- Verification commands
4. The Build (Progressive Steps)
- Step 1: Simplest foundation
- Step 2: Add one concept
- Step 3: Add complexity
- [Checkpoint: "It works!" moment]
- Step 4: Continue building
- ...
- [Final checkpoint]
5. What You Built
- Recap
- Complete code
6. Troubleshooting
- Common errors
- Debugging tips
7. Next Steps
- Where to go from here
- Related tutorials
Be explicit. Don't make developers guess what they need.
## Prerequisites
Before starting, make sure you have:
| Requirement | Version | Check Command |
|-------------|---------|---------------|
| Node.js | 18+ | `node --version` |
| npm | 9+ | `npm --version` |
| Git | Any | `git --version` |
You should also be comfortable with:
- Basic JavaScript (variables, functions, async/await)
- Command line basics (cd, mkdir, running commands)
- REST API concepts (HTTP methods, JSON)
**New to any of these?** Check out [link to prerequisite tutorial].
Make setup foolproof:
## Setting Up Your Environment
### 1. Create Project Directory
\`\`\`bash
mkdir my-awesome-project
cd my-awesome-project
\`\`\`
### 2. Initialize the Project
\`\`\`bash
npm init -y
\`\`\`
You should see output like:
\`\`\`json
{
"name": "my-awesome-project",
"version": "1.0.0",
...
}
\`\`\`
### 3. Install Dependencies
\`\`\`bash
npm install express dotenv
\`\`\`
### 4. Verify Installation
\`\`\`bash
node -e "require('express'); console.log('Express installed!')"
\`\`\`
Expected output: `Express installed!`
Build up in understandable layers:
| Layer | What It Does | Example | |-------|--------------|---------| | 1. Skeleton | Minimum viable code that runs | "Hello World" server | | 2. Core feature | Primary functionality | Add one API endpoint | | 3. Real data | Replace hardcoded values | Connect to database | | 4. Error handling | Production-ready patterns | Add try/catch, validation | | 5. Polish | Nice-to-haves | Logging, config, tests |
Wrong approach (overwhelming):
// Here's the complete file with everything
const express = require('express');
const { Pool } = require('pg');
const helmet = require('helmet');
const rateLimit = require('express-rate-limit');
const winston = require('winston');
// ... 200 more lines
Right approach (progressive):
Step 1: Basic server
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
Step 2: Add your first route
// Add this below your existing route
app.get('/api/users', (req, res) => {
res.json([{ id: 1, name: 'Jane' }]);
});
Every code block must pass these tests:
| Test | How to Verify |
|------|---------------|
| Runs standalone | Copy into new file, execute, it works |
| Imports included | All require/import statements present |
| No undefined variables | No references to code from other steps without showing it |
| Environment agnostic | Works on Mac/Linux/Windows |
| Comments explain why | Not what (code shows what), but why |
File context is critical:
// server.js - Add this to your existing file
const rateLimit = require('express-rate-limit');
// Add this BEFORE your routes
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100 // limit each IP to 100 requests per window
});
app.use(limiter);
Show file structure:
my-project/
├── src/
│ ├── index.js ← You're editing this
│ ├── routes/
│ │ └── users.js
│ └── db/
│ └── connection.js
├── package.json
└── .env
Highlight changes in context:
// src/index.js
const express = require('express');
const app = express();
// ✅ ADD THIS: Import your new route
const userRoutes = require('./routes/users');
// ✅ ADD THIS: Use the route
app.use('/api/users', userRoutes);
app.listen(3000);
Every 3-5 steps, give developers a win:
## Checkpoint: Test Your API
Let's make sure everything works before continuing.
**Start your server:**
\`\`\`bash
node server.js
\`\`\`
**In a new terminal, test the endpoint:**
\`\`\`bash
curl http://localhost:3000/api/users
\`\`\`
**You should see:**
\`\`\`json
[{"id": 1, "name": "Jane"}]
\`\`\`
🎉 **It works!** Your API is returning data.
If you don't see this output, check the [Troubleshooting](#troubleshooting) section.
When possible, show what success looks like:
| Output Type | How to Show | |-------------|-------------| | Terminal output | Code block with expected text | | Browser result | Screenshot or description | | API response | Formatted JSON | | Logs | Code block with log output |
## Troubleshooting
### "Error: Cannot find module 'express'"
**Cause:** Dependencies weren't installed.
**Fix:**
\`\`\`bash
npm install
\`\`\`
---
### "EADDRINUSE: address already in use :::3000"
**Cause:** Another process is using port 3000.
**Fix (macOS/Linux):**
\`\`\`bash
# Find the process
lsof -i :3000
# Kill it (replace PID with actual number)
kill -9 PID
\`\`\`
**Or use a different port:**
\`\`\`javascript
app.listen(process.env.PORT || 3001);
\`\`\`
---
### "SyntaxError: Unexpected token"
**Cause:** Likely a typo or missing bracket.
**Debug steps:**
1. Check the line number in the error
2. Look for missing `,`, `}`, or `)`
3. Verify all strings are closed with matching quotes
Add warnings before common pitfalls:
⚠️ **Windows users:** Use `set` instead of `export`:
\`\`\`bash
# macOS/Linux
export API_KEY=your_key
# Windows Command Prompt
set API_KEY=your_key
# Windows PowerShell
$env:API_KEY="your_key"
\`\`\`
# [Product] Quickstart: [What You'll Do] in 5 Minutes
Get [specific outcome] in under 5 minutes.
## Prerequisites
- [Requirement 1]
- [Requirement 2]
## Step 1: Install
\`\`\`bash
npm install your-package
\`\`\`
## Step 2: Configure
Create a `.env` file:
\`\`\`
API_KEY=your_key_here
\`\`\`
## Step 3: Write Code
Create `index.js`:
\`\`\`javascript
// Complete, working code
\`\`\`
## Step 4: Run It
\`\`\`bash
node index.js
\`\`\`
Expected output:
\`\`\`
[Output here]
\`\`\`
## 🎉 You Did It!
You just [accomplished thing].
**Next steps:**
- [Link to full tutorial]
- [Link to API docs]
- [Link to examples repo]
# Build a [Thing] with [Technology]
Learn how to [outcome] by building [specific project].
| | |
|---|---|
| **Time** | 30 minutes |
| **Level** | Intermediate |
| **Prerequisites** | Node.js 18+, basic JavaScript |
## What You'll Build
[Screenshot or diagram of final result]
By the end, you'll have:
- ✅ [Capability 1]
- ✅ [Capability 2]
- ✅ [Capability 3]
## Prerequisites
### Required Software
| Tool | Version | Verify |
|------|---------|--------|
| Node.js | 18+ | `node -v` |
### Required Knowledge
- [Concept 1] — [link to learn]
- [Concept 2] — [link to learn]
## Step 1: Project Setup
[Setup instructions with verification]
**Checkpoint:** You should see `[expected output]`.
## Step 2: [First Feature]
[Instructions]
**Checkpoint:** Test with `[command]`.
## Step 3: [Second Feature]
[Instructions]
## Step 4: [Third Feature]
[Instructions]
**Checkpoint:** Your app should now [do thing].
## Complete Code
Here's everything together:
\`\`\`javascript
// Full final code
\`\`\`
## Troubleshooting
### [Common Error 1]
[Solution]
### [Common Error 2]
[Solution]
## What You Learned
- [Key concept 1]
- [Key concept 2]
- [Key concept 3]
## Next Steps
- **Go deeper:** [Link to advanced tutorial]
- **Explore:** [Link to related feature]
- **Get help:** [Link to Discord/community]
Before publishing, verify:
.env pattern| Tool | Use Case | |------|----------| | Octolens | Find common questions and errors developers encounter. Monitor Stack Overflow and GitHub issues for troubleshooting content. | | Replit/CodeSandbox | Embed runnable examples | | Carbon/Ray.so | Beautiful code screenshots | | Excalidraw | Architecture diagrams | | Terminalizer | Record terminal sessions | | Loom | Quick video supplements |
developer-audience-context — Understand skill level and environmentdevrel-content — General technical writing principlesdeveloper-onboarding — Optimize time to first successdeveloper-seo — Get tutorials found via searchdevelopment
When the user wants to create developer YouTube content, technical screencasts, or video tutorials. Trigger phrases include "YouTube," "developer video," "screencast," "video tutorial," "live coding," "YouTube for developers," "tech YouTube," or "YouTube thumbnails."
development
When the user wants to build a developer following on Twitter/X, write technical threads, or understand what works for dev audiences on X. Trigger phrases include "Twitter," "X," "developer Twitter," "tech Twitter," "technical threads," "building dev following," or "Twitter for developers."
development
Design pricing models that developers understand, accept, and can predict. Trigger phrases: usage-based pricing, API pricing, metered billing, developer pricing, pricing page, cost calculator, pay as you go, pricing transparency, competitive pricing, developer billing
tools
Design SDKs that developers love to use—APIs that feel native, error messages that guide, and experiences that reduce friction. This skill covers creating SDKs that drive adoption through exceptional developer experience rather than aggressive marketing. Trigger phrases: "SDK design", "developer experience", "API design", "SDK DX", "error messages", "type safety", "IDE integration", "SDK versioning", "migration guides", "client library design", "making SDKs feel native", "SDK best practices"