Building with HugoBlox

Presentations & Slides

Create beautiful, interactive presentations with Markdown using Reveal.js. No PowerPoint, no vendor lock-in, edit anywhere.

Create stunning presentations using simple Markdown. Present at conferences, teach courses, or share your research with slides that you can edit anywhere, version control with Git, and present with just a browser.

Why Markdown Slides?

๐Ÿ†“ Free Forever

No expensive licenses or subscriptions. Open source and completely free.

๐Ÿ”“ No Vendor Lock-In

Plain Markdown files. Edit in any text editor. Not tied to PowerPoint, Keynote, or Google.

๐Ÿ“ Version Control

Track changes with Git, collaborate with GitHub pull requests, maintain presentation history.

๐ŸŒ Edit Anywhere

Use Ownable CMS, VS Code, Obsidian, or even Notepad. Your slides, your tools.

๐ŸŽจ Professional Design

15+ built-in themes, syntax highlighting for 50+ languages, LaTeX math support.

๐Ÿ”ฎ Future-Proof

Plain text format will never become obsolete. Works today, works in 20 years.


Installation

  1. Install the Reveal.js Plugin

    Add the blox-plugin-reveal module to your site's config/_default/module.yaml:

    config/_default/module.yaml
    imports:
      - path: github.com/HugoBlox/kit/modules/blox-tailwind
      - path: github.com/HugoBlox/kit/modules/blox-plugin-reveal
  2. Initialize Hugo Modules

    Run in your site's root directory:

    hugo mod get -u
    hugo mod tidy

    If you don't have a go.mod file yet, first run:

    hugo mod init github.com/USERNAME/my-site
  3. Verify Installation

    Check that the module appears in your go.mod:

    go.mod
    module github.com/USERNAME/my-site
    
    go 1.19
    
    require (
      github.com/HugoBlox/kit/modules/blox-tailwind v0.X.X
      github.com/HugoBlox/kit/modules/blox-plugin-reveal v0.X.X
    )

Quick Start

  1. Create Your First Slide Deck

    Create a new file at content/slides/my-first-talk/index.md:

    content/slides/my-first-talk/index.md
    ---
    title: "My First Presentation"
    date: 2024-01-15
    type: slides
    
    slides:
      theme: black
      highlight_style: dracula
    ---
    
    # My First Presentation
    ### Your Name ยท Your Organization
    
    ---
    
    ## Overview
    
    - First point
    - Second point
    - Third point
    
    ---
    
    ## Conclusion
    
    Thank you for your attention!
    
    **Questions?**
  2. Preview Your Slides

    Start your Hugo server:

    hugo server

    Visit: http://localhost:1313/slides/my-first-talk/

  3. Present!

    Press F for fullscreen or use the embedded slides in your event pages.


Slide Features

Basic Slide Structure

Slides are separated by --- (horizontal rule):

# First Slide

Content here

---

## Second Slide

More content

---

## Third Slide

And so on...

Code Syntax Highlighting

Display beautiful code blocks with 50+ language support:

```python
def calculate_accuracy(y_true, y_pred):
    correct = sum(1 for true, pred in zip(y_true, y_pred) if true == pred)
    return correct / len(y_true) * 100
```

Supported languages: Python, JavaScript, R, Julia, Go, Rust, C++, Java, and more.

Mathematical Equations

Write LaTeX equations inline or in blocks:

Inline math:

Einstein's famous equation is $E = mc^2$.

Block math:

$$
\nabla \times \vec{E} = -\frac{\partial \vec{B}}{\partial t}
$$

Speaker Notes

Add private notes only visible in presenter view:

## My Slide

Visible content here

Note:
- This is a speaker note (press S to view)
- Only you see these in presenter mode
- Perfect for talking points and reminders

Press S during your presentation to open the presenter console.

Hiding Slides

Hide slides from the presentation while keeping them in your source:

## Visible Slide

This slide will appear in the presentation.

---
<!-- hide -->
## Hidden Slide

This slide won't appear but stays in source for reference.

Perfect for:
- Backup slides in case of questions
- Speaker-only reference material
- Work-in-progress content
- Alternative explanations

---

## Another Visible Slide

Back to normal presentation flow.

Why hide slides?

  • Backup content: Keep extra slides ready without cluttering the main flow
  • Speaker reference: Private notes and detailed information
  • Flexible presentations: Same source for different audiences or time constraints
  • Version control: Keep all content versions in one file

Hidden slides remain in your Markdown source but won't appear during the presentation. Perfect for maintaining comprehensive slide decks while delivering focused presentations.


Branding

Add your organization's logo, title, and footer to every slide with simple configuration.

Quick Setup

Add branding to your slide's front matter:

content/slides/my-talk/index.md
slides:
  # Existing front matter here...

  # Branding configuration
  branding:
    logo:
      filename: "your-logo.svg"    # Must be in assets/media/
      position: "top-right"        # top-left, top-right, bottom-left, bottom-right
      width: "60px"
    title:
      show: true
      text: ""                     # Optional: override page title
      position: "bottom-left"
    author:
      show: true
      position: "bottom-right"
    footer:
      text: "ยฉ 2024 Your Name ยท ICML 2024"
      position: "bottom-center"

Use SVG logos with fill="currentColor" โ€” they automatically adapt to any theme color (white on dark themes, dark on light themes).

Available Options

Logo

Display your institution or conference logo. Place in assets/media/ folder.

Title Overlay

Show presentation title on every slide. Auto-detects from page title or set custom text.

Author

Display author name. Auto-detected from author: or authors: in front matter.

Footer Text

Copyright, conference name, or any persistent text. Supports Markdown links.

Position Options

ElementPositions Available
Logotop-left, top-right, bottom-left, bottom-right
TitleSame as above
AuthorSame as above
FooterSame + bottom-center

Full Configuration Reference

slides:
  branding:
    logo:
      filename: "logo.svg"     # File in assets/media/ (SVG recommended)
      position: "top-right"    # Position on slide
      width: "80px"            # Logo width (height auto-scales)
      margin: "20px"           # Distance from edge (optional)
      alt: "Logo"              # Alt text for accessibility
    
    title:
      show: true               # Enable title overlay
      position: "bottom-left"  # Position on slide
      text: "Short Title"      # Optional: override page title
      margin: "20px"           # Distance from edge (optional)
    
    author:
      show: true               # Enable author overlay
      position: "bottom-right" # Position on slide
      margin: "20px"           # Distance from edge (optional)
    
    footer:
      text: "ยฉ 2024 ยท [Your Lab](https://yourlab.com)"  # Markdown supported
      position: "bottom-center"
      margin: "20px"           # Distance from edge (optional)

Hiding Branding Per-Slide

Sometimes you want a clean slide โ€” title slides, full-screen images, etc.

Add an HTML comment at the start of your slide content:

---

<!-- no-branding -->
# My Title Slide

This slide has no branding elements.

---

## Regular Slide

This slide shows branding normally.

Visibility Control Options

CommentHides
<!-- no-branding -->Everything (logo, title, author, footer)
<!-- no-header -->Logo + Title overlay
<!-- no-footer -->Author + Footer text

The comment must be at the start of the slide content (right after ---).

Site-Wide Defaults

Set default branding for all presentations in your site config:

slides:
  branding:
    logo:
      filename: "university-logo.svg"
      position: "top-right"
      width: "60px"
    footer:
      text: "ยฉ My University"
      position: "bottom-center"

Individual presentations can override these defaults in their front matter.


Advanced Layouts

Dual Column Slides

## Comparison

<div class="r-hstack">

<div>

### Before

- Slow: 2.5s
- Memory: 4GB
- Cost: $100/mo

</div>

<div>

### After

- Fast: 0.3s โœ…
- Memory: 512MB โœ…
- Cost: $15/mo โœ…

</div>

</div>
## Code + Explanation

<div style="display: flex; gap: 2rem;">

<div style="flex: 2;">

\`\`\`python
class Transformer:
    def __init__(self):
        self.layers = []
\`\`\`

</div>

<div style="flex: 1;">

### Key Points

- Multi-head attention
- Feed forward network
- Residual connections

</div>

</div>
## Results

<div style="display: flex; gap: 2rem; align-items: center;">

<div style="flex: 1;">

![Research Diagram](diagram.png)

</div>

<div style="flex: 1;">

### Findings

- 95% accuracy
- 10x faster
- 50% cost reduction

</div>

</div>

Important: Always add blank lines before and after Markdown content inside HTML <div> tags, or it won't render!

Vertical Slide Navigation

Create hierarchical slides by navigating down for details:

## Main Topic

Overview content here

Press **โ†“** for details

---

{{< slide id="detail-1" >}}

### Detail Level 1

More information

---

{{< slide id="detail-2" >}}

### Detail Level 2

Even more detail

Press **โ†’** to continue

Vertical navigation (โ†“ โ†‘) is perfect for optional deep-dives. Viewers can skip details or explore further based on interest.


Visual Customization

Themes

Choose from 15+ built-in themes:

slides:
  theme: black  # black, white, league, sky, beige, simple, serif, blood, night, moon, solarized
  • black (default) - Clean dark background
  • night - Dark blue/purple
  • blood - Dark red accent
  • league - Gray with orange
  • white - Clean white background
  • simple - Minimal white
  • beige - Warm beige
  • sky - Light blue gradient
  • solarized - Solarized color scheme
  • moon - Purple/blue gradient
  • serif - Serif font styling

Code Highlighting Themes

slides:
  highlight_style: dracula  # dracula, monokai, github, etc.

Custom Backgrounds

Add color, image, or video backgrounds to individual slides:

{{< slide background-color="#1e3a8a" >}}

## Blue Background

This slide has a custom blue background!

---

{{< slide background-image="background.jpg" >}}

## Image Background

Content over image

---

{{< slide background-video="video.mp4" >}}

## Video Background

Dynamic background!

Interactive Features

Fragment Animations

Reveal content progressively (on click/keypress):

## Step-by-Step

{{< fragment >}}First appears{{< /fragment >}}

{{< fragment >}}Then this{{< /fragment >}}

{{< fragment >}}Finally this{{< /fragment >}}

{{< fragment class="highlight-red" >}}Highlighted!{{< /fragment >}}

Media Embedding

## Demo Video

{{< youtube dQw4w9WgXcQ >}}
## Recorded Demo

{{< video src="demo.mp4" controls="yes" >}}
## Podcast Excerpt

{{< audio src="interview.mp3" >}}
## Bilibili Video

{{< bilibili id="BV1WV4y1r7DF" >}}

Mermaid Diagrams

Create flowcharts, sequence diagrams, and more from text:

# Enable in frontmatter:
slides:
  diagram: true

Then use Mermaid syntax:

## Research Workflow

```mermaid
graph LR
    A[Question] --> B{Hypothesis}
    B -->|Valid| C[Experiment]
    B -->|Invalid| D[Revise]
    C --> E[Analyze]
    E --> F{Significant?}
    F -->|Yes| G[Publish]
    F -->|No| D
```

Presenter Features

Keyboard Shortcuts

KeyAction
โ†’ โ†Navigate slides (horizontal)
โ†“ โ†‘Navigate substeps (vertical)
SpaceNext slide
SOpen speaker notes
FFullscreen mode
ESCExit fullscreen / Overview mode
OOverview mode (see all slides)
/Search slides
?Show keyboard help

Presenter View

Press S to open a separate presenter window showing:

  • Current slide
  • Next slide preview
  • Speaker notes
  • Elapsed time
  • Slide progress

Open presenter view on your laptop while mirroring the main presentation to the projector!


Linking Slides to Events

Associate slide decks with conference talks or events:

  1. Create Your Slides

    content/slides/neurips-2024/index.md

  2. Create Your Event

    content/events/neurips-talk/index.md:

    ---
    title: "My Conference Talk"
    event: "NeurIPS 2024"
    date: "2024-12-10T14:00:00Z"
    
    # Link to your slides folder name
    slides: "neurips-2024"
    ---
    
    Talk details and abstract here...
  3. Result

    • Slides automatically embed on the event page
    • Fullscreen toggle button (top-right)
    • Link to open slides in new tab
    • All event metadata displayed

New in blox-tailwind: Event pages now embed slides directly instead of showing a featured image! Viewers can preview and go fullscreen without leaving the page.


Configuration

Full Configuration Options

content/slides/example/index.md
---
title: "My Presentation"
date: 2024-01-15
type: slides

# Slide settings
slides:
  # Theme (black, white, league, sky, beige, simple, serif, blood, night, moon, solarized)
  theme: black
  
  # Code highlighting theme
  highlight_style: dracula
  
  # Enable Mermaid diagrams
  diagram: true
  
  # Reveal.js options
  reveal_options:
    controls: true              # Show navigation controls
    progress: true              # Show progress bar
    slideNumber: true           # Show slide numbers
    hash: true                  # URL reflects slide position
    history: true               # Browser history per slide
    keyboard: true              # Keyboard shortcuts
    overview: true              # Overview mode (ESC)
    center: true                # Vertically center slides
    touch: true                 # Touch navigation
    loop: false                 # Loop presentation
    rtl: false                  # Right-to-left
    shuffle: false              # Randomize slide order
    fragments: true             # Fragment animations
    fragmentInURL: false        # Fragment state in URL
    help: true                  # Show help overlay (?)
    showNotes: false            # Show speaker notes to all
    autoPlayMedia: null         # Auto-play media (null|true|false)
    preloadIframes: null        # Preload iframes (null|true|false)
    autoSlide: 0                # Auto-advance delay (0=off)
    autoSlideStoppable: true    # Stop auto-slide on interaction
    mouseWheel: false           # Mouse wheel navigation
    hideInactiveCursor: true    # Hide cursor when inactive
    hideCursorTime: 5000        # Cursor hide delay (ms)
    menu_enabled: true          # Enable slide menu plugin
---

# Your slides content here

Minimal Configuration

Most options have sensible defaults:

---
title: "My Talk"
type: slides

slides:
  theme: black
---

Advanced Features

Tables for Data

Present research results and benchmarks:

## Benchmark Results

| Model | Accuracy | Latency | Memory |
|-------|----------|---------|--------|
| GPT-3 | 87.3% | 450ms | 4GB |
| GPT-4 | 92.1% | 890ms | 8GB |
| **Ours** | **95.8%** | **320ms** | **2GB** |

Citations & Blockquotes

## Related Work

> "The best way to predict the future is to invent it."  
> โ€” Alan Kay

Recent research by Chen et al. (2024) demonstrates significant improvements[^1].

[^1]: Chen, S. et al. (2024). *Advances in AI*. Nature.

Multiple Code Blocks

## Implementation

**Training:**
\`\`\`python
model = Transformer(d_model=512)
optimizer = Adam(model.parameters(), lr=1e-4)
\`\`\`

**Inference:**
\`\`\`python
output = model.generate(prompt, max_tokens=100)
\`\`\`

Editing Options

Ownable CMS (Visual Editor)

Features:

  • Visual Markdown editor with live preview
  • Side-by-side editing
  • Real-time rendering
  • No installation needed

Code Editors

VS Code

Install Markdown extensions for syntax highlighting and preview.

Obsidian

Note-taking app with excellent Markdown support and callout compatibility.

Typora

Minimal distraction Markdown editor with WYSIWYG mode.

Any Text Editor

Notepad, Vim, Emacs โ€” anything works with Markdown!


Use Cases

For Academics & Researchers

Conference Presentations

Present at NeurIPS, ACL, ICML with slides you can share on GitHub for reproducibility.

Group Meetings

Version control your lab meeting slides. Track changes over time.

Thesis Defense

Professional slides with citations, equations, and diagrams.

Grant Proposals

Presentation slides that match your written proposal (both in Markdown).

Benefits:

  • โœ… Version control with Git (track every revision)
  • โœ… Collaborate via GitHub pull requests
  • โœ… Embed code, math, and diagrams
  • โœ… Share source files for reproducibility
  • โœ… No "formatting broke when I opened it" moments

For Educators

Course Lectures

Create a slide deck for each lecture. Students can fork and study from source.

Tutorial Workshops

Live coding demonstrations with syntax highlighting.

Student Presentations

Students submit slides via pull requests. Review and provide feedback via comments.

Benefits:

  • โœ… Reusable content across semesters
  • โœ… Students learn Git and Markdown
  • โœ… Collaborative slide development
  • โœ… Open educational resources (OER)

Comparison: PowerPoint vs Google Slides vs HugoBlox

FeaturePowerPointGoogle SlidesHugoBlox
Cost$159.99/yearFree*Free Forever
FormatBinary (.pptx)ProprietaryPlain Markdown
Offline Editingโœ… Yesโš ๏ธ Limitedโœ… Fully Offline
Version ControlโŒ DifficultโŒ Very Limitedโœ… Git Native
Platform Lock-inโš ๏ธ Microsoftโš ๏ธ Googleโœ… None
Code Highlightingโš ๏ธ Basicโš ๏ธ Limitedโœ… 50+ Languages
Math Equationsโš ๏ธ Clunkyโš ๏ธ Basicโœ… Full LaTeX
PortabilityโŒ PoorโŒ Cloud Onlyโœ… Works Anywhere
Edit AnywhereโŒ App Requiredโš ๏ธ Internet Requiredโœ… Any Text Editor
Future-ProofโŒ Format Changesโš ๏ธ API Changesโœ… Plain Text Forever
Collaborationโš ๏ธ Complexโœ… Goodโœ… Git-based

HugoBlox wins on freedom, portability, version control, and long-term sustainability.


Tips & Best Practices

Content Organization

index.md # Main slides
diagram.png # Images in bundle
data.csv # Data files
index.md
index.md
index.md # Links to slides/conference-2024

Slide Design Tips

One Idea Per Slide

Don't cram multiple concepts. Split into separate slides.

Use Visual Hierarchy

Headers (##), bold (text), and fragments guide attention.

Consistent Spacing

Use gap: 2rem consistently across dual-column layouts.

Test Speaker Notes

Always test presenter view (S key) before presenting.

Keep It Simple

Markdown's simplicity is a feature, not a limitation.

Version Control

Commit slides to Git, tag releases for different versions.

Performance Tips

  1. Optimize images - Use WebP format, reasonable dimensions
  2. Lazy load media - Videos and heavy content load as needed
  3. Limit animations - Too many fragments can slow rendering
  4. Test on target device - Preview on laptop you'll present with

Troubleshooting

Slides Don't Render

Check:

  1. Module installed: hugo mod graph | grep reveal
  2. Frontmatter has type: slides
  3. Slides parameter configured in frontmatter
  4. Browser console for JavaScript errors

Markdown Not Rendering Inside HTML

Problem:

<div>
### This won't work
</div>

Solution:

<div>

### This works!

</div>

Always add blank lines before and after Markdown inside HTML tags.

Code Block Not Highlighting

Check:

  1. Triple backticks syntax correct
  2. Language specified: ```python
  3. Highlight theme exists in assets/css/libs/chroma/
  4. No conflicting CSS

Speaker Notes Not Showing

Press S to open presenter console in a new window. Make sure pop-ups aren't blocked.


Examples & Templates

Download Example Presentations

File Structure

content/slides/my-talk/index.md
---
title: "My Amazing Talk"
date: 2024-06-15
type: slides

slides:
  theme: black
  highlight_style: dracula
  diagram: true
  reveal_options:
    controls: true
    progress: true
    slideNumber: true
---

# Title Slide
### Your Name

---

## Agenda

- Introduction
- Methods
- Results
- Conclusion

---

# Thank You!

Questions?

Advanced Topics

Custom Slide Attributes

Use the slide shortcode for advanced customization:

{{< slide id="custom" class="my-class" data-background-color="#ff0000" >}}

## Custom Slide

This slide has:
- Custom ID for linking
- Custom CSS class
- Red background

Auto-Slide Timing

Auto-advance slides (useful for kiosks):

slides:
  reveal_options:
    autoSlide: 5000  # Auto-advance every 5 seconds
    loop: true       # Loop back to start

PDF Export

Export slides to PDF:

  1. Open slides in browser
  2. Add ?print-pdf to URL: localhost:1313/slides/my-talk/?print-pdf
  3. Print to PDF (Ctrl+P / Cmd+P)
  4. Save as PDF file

Use Chrome or Chromium for best PDF export results.

Sharing & Embedding

Share presentation URL:

https://yoursite.com/slides/my-talk/

Embed in another site:

<iframe src="https://yoursite.com/slides/my-talk/" 
        width="960" height="540" frameborder="0">
</iframe>

Migration from Other Tools

From PowerPoint/Keynote

  1. Export to Markdown - Use Pandoc or copy content manually
  2. Extract images - Save to slide bundle folder
  3. Simplify - Embrace Markdown's simplicity (less is more)
  4. Test - Preview and refine formatting

From Google Slides

  1. Download as PPTX - Then follow PowerPoint steps
  2. Copy text content - Paste into Markdown
  3. Upload media - Add to page bundle
  4. Rebuild - Often cleaner to start fresh with Markdown

From LaTeX Beamer

Good news! You already think in text-based slides:

  1. Convert structure - \frame โ†’ --- delimiter
  2. Math works - LaTeX equations work directly: $$...$$
  3. Code works - Better than Beamer's verbatim
  4. Simpler syntax - Markdown is easier than LaTeX

Resources

Documentation

Community

Examples in the Wild

Thousands of researchers worldwide use HugoBlox slides at:

  • ๐ŸŽ“ Stanford, MIT, Harvard, Oxford, Cambridge
  • ๐Ÿข Google Research, Meta AI, Microsoft Research
  • ๐Ÿ”ฌ CERN, NASA, Max Planck Institutes
  • ๐ŸŒ Universities and research labs globally

FAQ

Can I use custom fonts?

Yes! Add custom CSS:

assets/css/reveal_custom.css
.reveal {
  font-family: 'Your Font', sans-serif;
}

Then load the font via Google Fonts or self-host.

Can I use animations and transitions?

Yes! Reveal.js supports slide transitions and custom animations:

slides:
  reveal_options:
    transition: 'slide'  # none, fade, slide, convex, concave, zoom
How do I present offline?

Hugo generates static HTML. Just:

  1. Build your site: hugo
  2. Open public/slides/my-talk/index.html in browser
  3. Works completely offline (no internet needed)
Can I password protect slides?

Use Netlify's password protection or host behind authentication. Slides are static HTML.

Can I change themes mid-presentation?

Not dynamically, but you can create multiple versions with different themes and switch between them.

Does it work on mobile?

Yes! Slides are responsive. Touch gestures work for navigation. Best on tablets or larger screens.


Next Steps


Ready to create presentations that you truly own? Start with Markdown slides today โ€” no account required, no lock-in, edit anywhere. True presentation freedom.

Was this page helpful?

From the makers of

ยฉ 2026 Lore Labs.

On this page