From Outline to Draft
Converting outlines into full drafts is where content takes shape. This lesson covers techniques for generating high-quality first drafts from structured outlines.
The Outline-to-Draft Challenge
An outline provides structure, but drafting requires:
- Expanding bullet points into paragraphs
- Creating smooth transitions
- Maintaining consistent voice
- Integrating research naturally
- Hitting word count targets
Section-by-Section Generation
Why Not Generate All at Once?
Generating long content in one prompt often leads to:
- Declining quality toward the end
- Inconsistent depth across sections
- Lost details from the outline
- Context window issues
Section Generation Pattern
Loading Prompt Playground...
Maintaining Continuity
Pass context between section generations:
async function generateDraftSections(outline, research) {
const sections = [];
let previousSummary = '';
for (const section of outline.sections) {
const draft = await generateSection({
section,
research: filterRelevantResearch(research, section),
previousContext: previousSummary,
nextSection: getNextSection(outline, section),
overallTone: outline.tone,
wordTarget: section.wordCount
});
sections.push(draft);
// Create summary for continuity
previousSummary = await summarizeSection(draft, 50);
}
return sections;
}
Transition Generation
Creating Smooth Connections
Loading Prompt Playground...
Transition Patterns
const transitionPatterns = {
contrast: "While [previous topic] addresses X, [next topic] tackles the equally important challenge of Y...",
building: "Building on this foundation of [previous], let's explore how [next] takes things further...",
consequence: "The implications of [previous] naturally lead us to consider [next]...",
question: "But what happens when [previous situation]? This is where [next topic] becomes crucial...",
example: "We've seen [previous concept] in theory. Now let's look at [next] in practice..."
};
Integrating Research
Natural Citation Integration
Loading Prompt Playground...
Quote Integration
const quoteIntegrationPrompt = `
Integrate this expert quote into the paragraph naturally.
QUOTE: "${quote.text}" - ${quote.speaker}, ${quote.role}
PARAGRAPH CONTEXT: ${context}
INTEGRATION RULES:
1. Don't start the paragraph with the quote
2. Provide context before the quote
3. Comment on or expand the quote afterward
4. Make it feel like a natural part of the argument
`;
Draft Assembly
Combining Sections
async function assembleDraft(sections, outline) {
let draft = '';
// Add title
draft += `# ${outline.title}\n\n`;
// Add each section with proper formatting
for (let i = 0; i < sections.length; i++) {
const section = sections[i];
// Add section heading
if (section.heading) {
draft += `## ${section.heading}\n\n`;
}
// Add section content
draft += section.content + '\n\n';
// Add transition if not last section
if (i < sections.length - 1 && section.transition) {
draft += section.transition + '\n\n';
}
}
return draft;
}
Post-Assembly Checks
async function postAssemblyReview(draft, outline) {
return {
wordCount: countWords(draft),
targetDifference: countWords(draft) - outline.totalWordTarget,
sectionsCovered: checkSectionsCovered(draft, outline),
researchIncluded: checkResearchIncluded(draft, outline.research),
ctaPresent: checkCTAPresent(draft, outline.cta)
};
}
Exercise: Generate a Draft Section
Loading Prompt Playground...
Key Takeaways
- Generate drafts section-by-section for better quality
- Pass context between sections for continuity
- Create explicit transitions between sections
- Integrate research naturally, not as lists
- Assemble sections with proper formatting
- Run post-assembly checks to verify completeness
- Track word counts at section and total levels
Next, we'll cover editing and review chains for polishing content.

