Content Guidelines by Post Type
Core Consistency Rules
Style Consistency Principle
If you choose to deviate from the recommended style guidelines below, maintain that deviation consistently throughout the entire piece. Mixing styles within a single post creates jarring reader experiences.
Examples of acceptable consistent deviations:
- Using “we” throughout an entire post (but never mixing “we” and “I”)
- Writing in third person for a specific piece (but maintaining it throughout)
- Using formal academic tone for technical content (but not switching to conversational mid-post)
- Adopting a specific narrative voice for storytelling posts
Inconsistency Warnings
AI assistants and editors should flag these inconsistencies:
- ❌ Switching between “I” and “we” within the same post
- ❌ Mixing formal and conversational tones randomly
- ❌ Starting personal then becoming impersonal
- ❌ Inconsistent use of headers, bullet styles, or formatting
- ❌ Switching between metaphorical frameworks mid-post
- ❌ Changing target audience assumptions (expert → beginner → expert)
The goal: Readers should feel like they’re having one coherent conversation, not multiple conversations stitched together.
Universal Writing Style (All Content)
Voice and Perspective
- Always use “I” for personal perspective, never “we”
- Direct and concise - avoid flowery language where it obscures meaning
- Personal but pragmatic tone
- Conversational vulnerability - write like you’re having coffee with a thoughtful friend who shares real struggles
- Vulnerable but authoritative - show uncertainty alongside expertise
- Systems thinking approach - naturally build frameworks and structured approaches
- Metaphorical thinking - use consistent metaphors (dragons, mountains, rivers) to explain complex concepts
Language Patterns
- Questions to engage readers and introduce new sections
- Concrete examples over abstract concepts
- “Here’s what I learned” rather than “You should do this”
- Strategic use of rich metaphors when they enhance understanding
- Self-deprecating humor with phrases like “completely aspirational” and acknowledgment of personal flaws
- Vulnerability as strength - openly discussing fears, failures, and contradictions
- Research integration - heavy citing of books, studies, and external sources
- Avoid marketing speak and buzzwords - no “revolutionary,” “game-changing,” or corporate jargon
Structure Elements
- Extensive use of headers for easy scanning
- Bullet points to chunk information
- Table of contents for longer pieces (auto-generated via vim-markdown-toc)
- Heavy cross-referencing using `<div
style=”margin-bottom: 0.5rem”
class=”summary-link body-only”
href=””
</div> ` for internal linking
- Progressive disclosure - start with simple concepts, then drill deeper
- Iterative development - posts evolve over time with update notes
- Framework building - most posts end with practical application methods
Engagement Techniques
- Rhetorical questions as section breaks
- Direct reader address (“I bet you don’t either”)
- Dialog format for internal conflicts and decision-making (real and imagined conversations)
- Real-time authenticity - admit uncertainty and show work in progress
- Meta-commentary on your own writing and thinking process
- Personal anecdotes as teaching tools - stories that illustrate broader principles
- Pre-mortem/scenario planning - regular use of “what if” thinking
Content Type Guidelines
1. Book Summaries/Reviews
Purpose: Process learning and share insights from books that shaped your thinking
Structure:
- Always include book cover image and Amazon affiliate link
- Use chapter-by-chapter breakdown for systematic books
- Include “Why this book matters” section
- End with “How this applies to you” practical takeaways
Voice: Analytical teacher - “Here’s what I learned and how you can apply it”
Key Elements:
- Heavy use of structured outlines and bullet points
- Personal application examples throughout
- Quote key passages that resonated
- Connect to your existing frameworks and other books
Length: 300-600 lines typically
Tags: book-notes
, plus relevant topic tags
2. Personal Philosophy/Identity Posts
Purpose: Work through fundamental life questions while creating frameworks others can use
Structure:
- Start with personal stakes - why this matters to you
- Use creative metaphors consistently throughout (dragons, circles, etc.)
- Include both emotional and logical analysis
- Create memorable frameworks with clear components
Voice: Vulnerable philosopher - “Here’s how I think about life”
Key Elements:
- Dialog format for internal conflicts (“Dragon:” conversations)
- Extensive personal anecdotes as proof points
- Alert boxes for important caveats
- Visual elements (images, diagrams) to break up text
- Cross-references to related life frameworks
Length: 400-1000+ lines for major pieces
Tags: how igor ticks
, plus relevant topics
3. Professional/Management Content
Purpose: Share hard-won workplace wisdom and practical frameworks
Structure:
- Start with the problem/challenge
- Provide systematic framework or approach
- Include specific workplace examples
- Link to deeper reference materials
- Include “what doesn’t work” sections
Voice: Experienced practitioner - “Here’s what works in practice”
Key Elements:
- Tactical advice with concrete steps
- War stories from actual management experience
- References to “Igor’s book of…“ deeper materials
- Quantified examples where possible
- Team scenarios and people stories
Length: 150-300 lines typically
Tags: manager
, software engineering
, emotional intelligence
4. Reference/Framework Content
Purpose: Create comprehensive, living documents for personal and public use
Structure:
- Comprehensive table of contents
- Clear section headers for easy navigation
- “Quick reference” sections for immediate use
- Update logs showing evolution over time
Voice: Systematic organizer - “Here’s a complete framework”
Key Elements:
- Heavy cross-linking between related concepts
- Actionable sections with specific steps
- Examples and scenarios for each major point
- Regular updates with new insights
- Multiple entry points for different use cases
Length: 500-1000+ lines for comprehensive guides
Tags: framework
, reference
, plus topic-specific tags
5. Major Life Decision Documentation
Purpose: Work through significant choices while creating reusable decision-making frameworks
Structure:
- Establish stakes and timeline
- Map out all considerations systematically
- Use creative metaphors to explore emotional aspects
- Document decision-making process in real-time
- Include uncertainty and evolution of thinking
Voice: Thoughtful decision-maker - “Here’s how I’m working through this”
Key Elements:
- Real-time processing with timestamps
- Both rational and emotional analysis
- Creative frameworks (dragons, councils, etc.)
- Progress tracking and milestone documentation
- Honest uncertainty and course corrections
Length: 700+ lines for major decisions
Tags: decision-making
, plus relevant life area tags
6. Practical Hobby/Lifestyle Posts
Purpose: Share what works in daily life - products, approaches, systems
Structure:
- Problem or need statement
- Solution overview
- Specific recommendations with reasoning
- Personal experience and results
- Alternative options and trade-offs
Voice: Helpful enthusiast - “Here’s what works for me”
Key Elements:
- Product links and specific model numbers
- Personal experience with timeline
- Comparison with alternatives
- Practical setup tips
- Cost/benefit analysis
Length: 50-200 lines typically
Tags: toys
, biking
, health
, plus specific categories
7. Journal/Exploration Content
Purpose: Think through emerging topics and capture evolving insights
Structure:
- Date-based entries showing progression
- Stream-of-consciousness exploration
- Questions and uncertainties
- Links to related reading/research
- Periodic synthesis and pattern identification
Voice: Curious explorer - “Here’s what I’m figuring out”
Key Elements:
- Experimental thinking without predetermined conclusions
- Question collections and research notes
- Pattern recognition across different inputs
- Regular synthesis attempts
- Links to external sources and influences
Length: Variable, grows over time
Tags: exploration
, journal
, plus topic tags
8. Personal Narrative/Story Posts
Purpose: Use personal stories and experiences as teaching tools to illustrate broader principles
Structure:
- Set scene with personal context
- Develop story with specific details and dialogue
- Extract universal principles or lessons
- Connect to broader frameworks or life philosophy
- Invite reader reflection or application
Voice: Reflective storyteller - “Here’s what this experience taught me”
Key Elements:
- AI conversations with Tony (life coach) showing real-time processing
- Family adventures and moments that illustrate larger principles
- Life transition narratives about major changes and decisions
- Identity conflict stories (bike vs car, work vs family, etc.)
- Dialogue format showing internal or external conversations
- Specific sensory details that make stories vivid and memorable
Length: 200-800 lines typically
Tags: story
, narrative
, plus relevant life area tags
Content Development Workflow
1. Start with Purpose
- Personal processing - What am I trying to figure out?
- Public value - How can this help others?
- Framework building - What systematic approach am I developing?
2. Choose Content Type
- Match your purpose to the appropriate content type above
- Consider hybrid approaches for complex topics
- Plan for potential evolution (exploration → framework → published advice)
3. Apply Type-Specific Guidelines
- Use the voice and structure patterns for your chosen type
- Include all key elements relevant to that content type
- Follow the suggested length guidelines
4. Cross-Link and Connect
- Reference related content throughout
- Build connections between different frameworks
- Update existing content with new insights
5. Tag and Organize
- Use consistent tagging system
- Include type-specific tags plus topic tags
- Consider searchability and future discovery
Special Considerations
Dual-Purpose Content
Most substantial content should serve both personal processing AND public teaching. This is your superpower - turning personal work into valuable public content.
Living Documents
Many pieces should be treated as living documents that get updated over time with new insights, examples, and refinements.
Authentic Vulnerability
Your willingness to show uncertainty, mistakes, and work-in-progress thinking is what makes the content uniquely valuable. Maintain this across all content types.
Framework Thinking
You naturally build systematic approaches to complex topics. Lean into this strength by making frameworks explicit and reusable.
Meta-Awareness
Your ability to comment on your own thinking process adds depth and authenticity. Include this meta-commentary where it serves the content.
Technical Implementation Guide
Alert Boxes
Use alert boxes to highlight important information, warnings, or construction notices:
Syntax:
<div class="alert alert-info" role="alert">Your message here</div>
<div class="alert alert-warning" role="alert">Warning or caution message</div>
<div class="alert alert-danger" role="alert">Work in progress notice</div>
Common use cases:
- Construction/work-in-progress notices
- Important caveats or disclaimers
- Cross-references to related content
- Privilege acknowledgments
Example:
<div class="alert alert-warning" role="alert">🚧 Construction Zone 🚧 This post is in heavy progress! 🔨 Check back later for updates ⏳</div>
URL Redirects
Set up redirects for shorter, memorable URLs using both redirect_from
and alias
:
Syntax:
redirect_from:
- /shortname
- /abbreviation
alias:
- /shortname
- /abbreviation
Example:
redirect_from:
- /7habits
- /7h
alias:
- /7habits
- /7h
Book Links and Amazon Affiliate Integration
Use the Amazon include for book references with ASIN numbers:
Syntax:
<div class="amazon-products" style="margin: 20px 0">
<div
class="amazon-product"
style="
display: inline-block;
margin: 10px;
vertical-align: top;
max-width: 200px;
"
>
<a
href="https://www.amazon.com/dp/ASIN_NUMBER?tag=ighe-20"
target="_blank"
rel="noopener"
class="amazon-link"
data-asin="ASIN_NUMBER"
style="text-decoration: none; color: inherit"
>
<img
src="https://images-na.ssl-images-amazon.com/images/P/ASIN_NUMBER.01._SCLZZZZZZZ__SL160_.jpg"
alt="View on Amazon"
class="amazon-image"
style="
max-width: 120px;
height: auto;
border: 1px solid #ddd;
padding: 5px;
display: block;
"
/>
<span
class="amazon-text-fallback"
style="
display: none;
padding: 10px 20px;
background-color: #ff9900;
color: white;
text-decoration: none;
border-radius: 4px;
font-weight: bold;
text-align: center;
margin-top: 10px;
"
>View on Amazon →</span
>
</a>
</div>
</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
// Check all Amazon images once they've had a chance to load
setTimeout(function () {
document.querySelectorAll(".amazon-image").forEach(function (img) {
// If image failed to load or is too small (1x1 pixel), show text fallback
if (!img.complete || img.naturalWidth <= 1 || img.naturalHeight <= 1) {
img.style.display = "none";
var fallback = img.nextElementSibling;
if (fallback && fallback.classList.contains("amazon-text-fallback")) {
fallback.style.display = "block";
}
}
});
}, 2000); // Wait 2 seconds for images to load
});
</script>
<div class="amazon-products" style="margin: 20px 0">
<div
class="amazon-product"
style="
display: inline-block;
margin: 10px;
vertical-align: top;
max-width: 200px;
"
>
<a
href="https://www.amazon.com/dp/ASIN1?tag=ighe-20"
target="_blank"
rel="noopener"
class="amazon-link"
data-asin="ASIN1"
style="text-decoration: none; color: inherit"
>
<img
src="https://images-na.ssl-images-amazon.com/images/P/ASIN1.01._SCLZZZZZZZ__SL160_.jpg"
alt="View on Amazon"
class="amazon-image"
style="
max-width: 120px;
height: auto;
border: 1px solid #ddd;
padding: 5px;
display: block;
"
/>
<span
class="amazon-text-fallback"
style="
display: none;
padding: 10px 20px;
background-color: #ff9900;
color: white;
text-decoration: none;
border-radius: 4px;
font-weight: bold;
text-align: center;
margin-top: 10px;
"
>View on Amazon →</span
>
</a>
</div>
<div
class="amazon-product"
style="
display: inline-block;
margin: 10px;
vertical-align: top;
max-width: 200px;
"
>
<a
href="https://www.amazon.com/dp/ASIN2?tag=ighe-20"
target="_blank"
rel="noopener"
class="amazon-link"
data-asin="ASIN2"
style="text-decoration: none; color: inherit"
>
<img
src="https://images-na.ssl-images-amazon.com/images/P/ASIN2.01._SCLZZZZZZZ__SL160_.jpg"
alt="View on Amazon"
class="amazon-image"
style="
max-width: 120px;
height: auto;
border: 1px solid #ddd;
padding: 5px;
display: block;
"
/>
<span
class="amazon-text-fallback"
style="
display: none;
padding: 10px 20px;
background-color: #ff9900;
color: white;
text-decoration: none;
border-radius: 4px;
font-weight: bold;
text-align: center;
margin-top: 10px;
"
>View on Amazon →</span
>
</a>
</div>
<div
class="amazon-product"
style="
display: inline-block;
margin: 10px;
vertical-align: top;
max-width: 200px;
"
>
<a
href="https://www.amazon.com/dp/ASIN3?tag=ighe-20"
target="_blank"
rel="noopener"
class="amazon-link"
data-asin="ASIN3"
style="text-decoration: none; color: inherit"
>
<img
src="https://images-na.ssl-images-amazon.com/images/P/ASIN3.01._SCLZZZZZZZ__SL160_.jpg"
alt="View on Amazon"
class="amazon-image"
style="
max-width: 120px;
height: auto;
border: 1px solid #ddd;
padding: 5px;
display: block;
"
/>
<span
class="amazon-text-fallback"
style="
display: none;
padding: 10px 20px;
background-color: #ff9900;
color: white;
text-decoration: none;
border-radius: 4px;
font-weight: bold;
text-align: center;
margin-top: 10px;
"
>View on Amazon →</span
>
</a>
</div>
</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
// Check all Amazon images once they've had a chance to load
setTimeout(function () {
document.querySelectorAll(".amazon-image").forEach(function (img) {
// If image failed to load or is too small (1x1 pixel), show text fallback
if (!img.complete || img.naturalWidth <= 1 || img.naturalHeight <= 1) {
img.style.display = "none";
var fallback = img.nextElementSibling;
if (fallback && fallback.classList.contains("amazon-text-fallback")) {
fallback.style.display = "block";
}
}
});
}, 2000); // Wait 2 seconds for images to load
});
</script>
Examples:
<div class="amazon-products" style="margin: 20px 0">
<div
class="amazon-product"
style="
display: inline-block;
margin: 10px;
vertical-align: top;
max-width: 200px;
"
>
<a
href="https://www.amazon.com/dp/0071499938?tag=ighe-20"
target="_blank"
rel="noopener"
class="amazon-link"
data-asin="0071499938"
style="text-decoration: none; color: inherit"
>
<img
src="https://images-na.ssl-images-amazon.com/images/P/0071499938.01._SCLZZZZZZZ__SL160_.jpg"
alt="Product 0071499938"
class="amazon-image"
style="
max-width: 160px;
height: auto;
border: 1px solid #ddd;
padding: 5px;
display: block;
margin: 0 auto;
"
/>
<div style="margin-top: 10px; font-size: 14px; line-height: 1.4">
<div style="font-weight: bold; margin-bottom: 5px">
Product 0071499938
</div>
</div>
<span
class="amazon-text-fallback"
style="
display: none;
padding: 10px 20px;
background-color: #ff9900;
color: white;
text-decoration: none;
border-radius: 4px;
font-weight: bold;
text-align: center;
margin-top: 10px;
"
>View on Amazon →</span
>
</a>
</div>
</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
// Check all Amazon images once they've had a chance to load
setTimeout(function () {
document.querySelectorAll(".amazon-image").forEach(function (img) {
// If image failed to load or is too small (1x1 pixel), show text fallback
if (!img.complete || img.naturalWidth <= 1 || img.naturalHeight <= 1) {
img.style.display = "none";
var fallback = img.nextElementSibling;
if (fallback && fallback.classList.contains("amazon-text-fallback")) {
fallback.style.display = "block";
}
}
});
}, 2000); // Wait 2 seconds for images to load
});
</script>
<div class="amazon-products" style="margin: 20px 0">
<div
class="amazon-product"
style="
display: inline-block;
margin: 10px;
vertical-align: top;
max-width: 200px;
"
>
<a
href="https://www.amazon.com/dp/B07LDSPRYM?tag=ighe-20"
target="_blank"
rel="noopener"
class="amazon-link"
data-asin="B07LDSPRYM"
style="text-decoration: none; color: inherit"
>
<img
src="https://images-na.ssl-images-amazon.com/images/P/B07LDSPRYM.01._SCLZZZZZZZ__SL160_.jpg"
alt="View on Amazon"
class="amazon-image"
style="
max-width: 120px;
height: auto;
border: 1px solid #ddd;
padding: 5px;
display: block;
"
/>
<span
class="amazon-text-fallback"
style="
display: none;
padding: 10px 20px;
background-color: #ff9900;
color: white;
text-decoration: none;
border-radius: 4px;
font-weight: bold;
text-align: center;
margin-top: 10px;
"
>View on Amazon →</span
>
</a>
</div>
<div
class="amazon-product"
style="
display: inline-block;
margin: 10px;
vertical-align: top;
max-width: 200px;
"
>
<a
href="https://www.amazon.com/dp/B00506CSDQ?tag=ighe-20"
target="_blank"
rel="noopener"
class="amazon-link"
data-asin="B00506CSDQ"
style="text-decoration: none; color: inherit"
>
<img
src="https://images-na.ssl-images-amazon.com/images/P/B00506CSDQ.01._SCLZZZZZZZ__SL160_.jpg"
alt="View on Amazon"
class="amazon-image"
style="
max-width: 120px;
height: auto;
border: 1px solid #ddd;
padding: 5px;
display: block;
"
/>
<span
class="amazon-text-fallback"
style="
display: none;
padding: 10px 20px;
background-color: #ff9900;
color: white;
text-decoration: none;
border-radius: 4px;
font-weight: bold;
text-align: center;
margin-top: 10px;
"
>View on Amazon →</span
>
</a>
</div>
<div
class="amazon-product"
style="
display: inline-block;
margin: 10px;
vertical-align: top;
max-width: 200px;
"
>
<a
href="https://www.amazon.com/dp/B07C66Z4M4?tag=ighe-20"
target="_blank"
rel="noopener"
class="amazon-link"
data-asin="B07C66Z4M4"
style="text-decoration: none; color: inherit"
>
<img
src="https://images-na.ssl-images-amazon.com/images/P/B07C66Z4M4.01._SCLZZZZZZZ__SL160_.jpg"
alt="View on Amazon"
class="amazon-image"
style="
max-width: 120px;
height: auto;
border: 1px solid #ddd;
padding: 5px;
display: block;
"
/>
<span
class="amazon-text-fallback"
style="
display: none;
padding: 10px 20px;
background-color: #ff9900;
color: white;
text-decoration: none;
border-radius: 4px;
font-weight: bold;
text-align: center;
margin-top: 10px;
"
>View on Amazon →</span
>
</a>
</div>
</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
// Check all Amazon images once they've had a chance to load
setTimeout(function () {
document.querySelectorAll(".amazon-image").forEach(function (img) {
// If image failed to load or is too small (1x1 pixel), show text fallback
if (!img.complete || img.naturalWidth <= 1 || img.naturalHeight <= 1) {
img.style.display = "none";
var fallback = img.nextElementSibling;
if (fallback && fallback.classList.contains("amazon-text-fallback")) {
fallback.style.display = "block";
}
}
});
}, 2000); // Wait 2 seconds for images to load
});
</script>
How it works:
- ASINs are looked up in
_data/asins.json
for title, image, and description - Automatically includes affiliate tag (
ighe-20
) - Falls back to generic Amazon image if product data not available
- Supports multiple books separated by semicolons
- Images are styled consistently with fallback text if images fail to load
Best practices:
- Use ASIN numbers (found in Amazon URLs) rather than direct links
- Group related books together in single include
- Place near relevant text sections
- ASIN data is managed automatically via scripts in
/scripts/
directory
Images
Use the custom image includes for consistent formatting:
Right-floating images:
<img src="https://github.com/idvorkin/blob/raw/master/blog/image-name.webp" class="float-right-img" alt="" />
Standard images:

Small right-floating images (25% width):
<img
src="https://github.com/idvorkin/blob/raw/master/blog/image-name.webp"
class="img-fluid float-end w-25"
/>
Image best practices:
- Use WebP format for efficiency
- Store images in the GitHub blob:
https://github.com/idvorkin/blob/raw/master/blog/filename.webp
- Reference using relative paths in includes:
blog/filename.webp
- Place floating images near relevant text sections
Cross-References and Internal Linking
Use the summarize-page include for rich internal linking:
Syntax:
<div
style="margin-bottom: 0.5rem"
class="summary-link body-only"
href="/page-name"
>
<a href="/page-name"> Loading (/page-name) </a>
</div>
How it works:
- Automatically pulls title and description from the linked page
- Creates a styled summary box with proper attribution
- Uses data from
back-links.json
for consistent metadata - Provides rich preview of the linked content
When to use:
- Referencing related comprehensive posts
- Building connections between related frameworks
- Providing deeper dive options
- Creating content clusters around themes
- Cross-linking between book summaries and related life posts
Examples:
<div
style="margin-bottom: 0.5rem"
class="summary-link body-only"
href="/7habits"
>
<a href="/7habits"> Loading (/7habits) </a>
</div>
<div
style="margin-bottom: 0.5rem"
class="summary-link body-only"
href="/death"
>
<a href="/death"> Loading (/death) </a>
</div>
<div
style="margin-bottom: 0.5rem"
class="summary-link body-only"
href="/gap-year"
>
<a href="/gap-year"> Loading (/gap-year) </a>
</div>
Jekyll Front Matter Essentials
Include these key elements in post front matter:
---
title: "Your Post Title"
layout: post
permalink: /url-slug
imagefeature: https://github.com/idvorkin/blob/raw/master/blog/image.webp
tags:
- relevant-tag
- category-tag
redirect_from:
- /short-url
alias:
- /short-url
---
IMPORTANT IMPLEMENTATION RULE: Always use these technical elements consistently. Alert boxes for important notices, redirects for memorable URLs, affiliate links for books, proper image includes for formatting, and summarize-page includes for internal references.