Images & Media
Making your content visual with images, videos, and other media assets.
Where to Put Images
All images go in the static/
directory:
static/
├── images/ # General images
│ ├── screenshots/ # UI screenshots
│ ├── diagrams/ # Architecture diagrams
│ └── icons/ # Small icons and graphics
├── videos/ # Video files (if needed)
└── docs/ # Documentation-specific assets
└── guide-name/ # Images for specific guides
Adding Images
Basic Image

Image with Caption

*How our system connects everything together*
Responsive Image
For images that should scale on mobile:
<img src="/images/screenshot.png" alt="Dashboard view" style="max-width: 100%; height: auto;">
Image Optimization
Before Adding Images:
- Resize appropriately: 1200px wide max for screenshots
- Compress: Use tools like TinyPNG or ImageOptim
- Choose right format:
.png
for screenshots with text.jpg
for photos.svg
for icons and simple graphics.webp
for best compression (if browser support is OK)
Naming Convention
Use descriptive names:
✅ dashboard-main-view.png
✅ login-process-diagram.svg
❌ screenshot1.png
❌ image.jpg
Screenshots
Taking Good Screenshots
- Clean desktop: Hide personal stuff from screenshots
- Consistent browser: Use same browser for all UI screenshots
- Highlight important parts: Use arrows or boxes to show what matters
- High DPI: Take screenshots on retina/high-DPI screens when possible
Annotating Screenshots
Use tools like:
- macOS: Built-in screenshot markup
- CleanShot X: Great for annotations
- Figma: For creating diagrams and mockups
Videos
Embedding YouTube
<div class="youtube-wrapper" data-youtube-id="dQw4w9WgXcQ">
<div class="youtube-placeholder" onclick="loadYouTubeVideo(this, 'dQw4w9WgXcQ')">
<img src="https://img.youtube.com/vi/dQw4w9WgXcQ/maxresdefault.jpg"
alt="YouTube video thumbnail"
loading="lazy"
onerror="this.src='https://img.youtube.com/vi/dQw4w9WgXcQ/hqdefault.jpg'">
<button class="youtube-play-button" aria-label="Play video">
<svg viewBox="0 0 68 48" style="width: 68px; height: 48px;">
<path d="M66.52,7.74c-0.78-2.93-2.49-5.41-5.42-6.19C55.79,.13,34,0,34,0S12.21,.13,6.9,1.55 C3.97,2.33,2.27,4.81,1.48,7.74C0.06,13.05,0,24,0,24s0.06,10.95,1.48,16.26c0.78,2.93,2.49,5.41,5.42,6.19 C12.21,47.87,34,48,34,48s21.79-0.13,27.1-1.55c2.93-0.78,4.64-3.26,5.42-6.19C67.94,34.95,68,24,68,24S67.94,13.05,66.52,7.74z" fill="#f00"></path>
<path d="M 45,24 27,14 27,34" fill="#fff"></path>
</svg>
</button>
</div>
</div>
<style>
.youtube-wrapper {
position: relative;
padding-bottom: 56.25%; /* 16:9 aspect ratio */
height: 0;
overflow: hidden;
max-width: 100%;
min-width: 400px;
margin: 0;
border-radius: 12px;
background: #000;
isolation: isolate;
}
.youtube-placeholder {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
}
.youtube-placeholder img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 12px;
}
.youtube-play-button {
position: relative;
z-index: 1;
background: transparent;
border: none;
cursor: pointer;
transition: transform 0.2s ease;
}
.youtube-play-button:hover {
transform: scale(1.1);
}
.youtube-wrapper iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: 0;
border-radius: 12px;
clip-path: inset(0 round 12px);
}
</style>
<script>
function loadYouTubeVideo(element, videoId) {
const wrapper = element.parentElement;
const iframe = document.createElement('iframe');
iframe.src = `https://www.youtube-nocookie.com/embed/${videoId}?rel=0&autoplay=1`;
iframe.title = 'YouTube video player';
iframe.frameBorder = '0';
iframe.allow = 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share';
iframe.allowFullscreen = true;
// Replace placeholder with iframe
wrapper.innerHTML = '';
wrapper.appendChild(iframe);
}
</script>
This creates a responsive embed that works on all screen sizes.
Local Video Files
Put in static/videos/
and embed:
<video controls style="max-width: 100%;">
<source src="/videos/demo.mp4" type="video/mp4">
Your browser doesn't support video.
</video>
Icons & Graphics
Using Existing Icons
Check what's already in static/images/icons/
before adding new ones.
Creating Consistent Graphics
- Colors: Use MeetBall brand colors
- Style: Keep consistent with existing graphics
- Size: Standard icon sizes (16px, 24px, 32px, 64px)
Diagrams
Mermaid (Preferred)
Use Mermaid for flow charts and diagrams:
```mermaid
graph TD
A[User submits] --> B[Process request]
B --> C{Valid?}
C -->|Yes| D[Save to database]
C -->|No| E[Show error]
```
Image Diagrams
For complex diagrams, create in:
- Figma: For UI mockups and flows
- Draw.io: For technical diagrams
- Excalidraw: For sketchy, informal diagrams
Save as .svg
when possible for crisp scaling.
File Size Guidelines
- Screenshots: Under 500KB each
- Diagrams: Under 200KB
- Icons: Under 50KB
- Videos: Under 10MB (prefer YouTube embeds)
Accessibility
Always include alt text:

Make it descriptive for screen readers!
Testing Images
Before committing:
- Test locally: Run
zola serve
and check images load - Check mobile: Resize browser window to see how images scale
- Verify paths: Make sure image paths are correct (start with
/
)
Common Issues
Image Not Showing?
- Check the path starts with
/
(like/images/pic.png
) - Make sure image is in
static/
directory - Check file name spelling and case sensitivity
Image Too Big on Mobile?
Add CSS:
<img src="/images/big-screenshot.png" alt="Description" style="max-width: 100%; height: auto;">
Remember: Good visuals make docs way more helpful! 📸