Create branded reveal.js slide presentations with OpenHands styling. Generates self-contained HTML decks with warm beige/amber/dark-brown palette, flowcharts, diagram components, and PDF export.
Create branded reveal.js slide presentations with OpenHands styling. Generates self-contained HTML decks with warm beige/amber/dark-brown palette, flowcharts, diagram components, and PDF export.
triggers
["create slides","make a presentation","slide deck","presentation","slides"]
OpenHands Slides
Create polished reveal.js slide decks with OpenHands branding. Produces a single self-contained HTML file that can be served locally, opened in a browser, or exported to PDF.
Quick Start
Create index.html using the template below
Serve it: python3 -m http.server 12000
Customize slides using the component library
Branding & Palette
Use exactly these CSS variables — do not introduce extra colors:
Variable
Hex
Usage
--oh-bg
#F9F0D9
Warm beige slide background
--oh-dark
#22150D
Headings, primary boxes
--oh-brown
#3D2B1F
Secondary boxes, body text
--oh-amber
#FFAB40
Highlights, badges, accents
--oh-amber-light
#FFD59E
Label text on dark backgrounds
--oh-gray
#595959
Muted text, arrows, subtitles
--oh-light
#EEEEEE
Light cards, secondary backgrounds
Logo: Use the OpenHands color logo (openhands_logo_color_forwhite.png) — yellow hands on transparent background, designed for light backgrounds. Do not apply CSS filters. The logo should be placed:
Title slide: top-left at height: 44px
Content slides: bottom-left footer at height: 22px; opacity: 0.35
End slide: centered at height: 52px
If no logo file is available, omit the <img> tags rather than using a placeholder.
Full HTML Template
Copy this template and modify the slide sections. It includes the complete CSS theme and all reusable component classes.
<divclass="criteria-grid"><divclass="criteria-card"style="background:var(--oh-light);"><divclass="icon">📊</div><div><divclass="label">Title</div><divclass="desc">Description text</div></div></div><!-- repeat for each card --></div>
This produces one page per slide with backgrounds and emojis intact.
Downloadable Zip
Bundle the presentation for sharing:
import zipfile, os
with zipfile.ZipFile('presentation.zip', 'w', zipfile.ZIP_DEFLATED) as zf:
zf.write('index.html')
zf.write('presentation.pdf')
for f in os.listdir('assets'):
zf.write(os.path.join('assets', f))
Design Guidelines
Minimal palette: Stay within the 4 core colors (dark, brown, amber, beige) plus gray and light neutrals. Do not add new accent colors.
Left-aligned text: Body content is left-aligned; only end slides and diagram elements are centered.
Consistent slide structure: Every content slide gets data-background-color="#F9F0D9" and class="content-slide".
Footer on every content slide: Add the logo footer to all slides except title and end.
No transitions: Use transition: 'none' for a clean, professional feel.
Font: Inter only — loaded from Google Fonts CDN.
--oh-amber
#FFAB40
--oh-amber-light
#FFD59E
--oh-light
#EEEEEE
.reveal
font-family
'Inter'
font-size
28px
color
var
.reveal
.slides
text-align
.reveal
.slides
section
padding
40px
60px
box-sizing
height
100%
.reveal
h1
.reveal
h2
.reveal
h3
font-family
'Inter'
font-weight
700
color
var
text-transform
letter-spacing
0.02em
.reveal
h1
font-size
2.4em
line-height
1.1
.reveal
h2
font-size
1.6em
margin-bottom
0.6em
.reveal
h3
font-size
1.2em
color
var
font-weight
600
.reveal
p
line-height
1.6
color
var
/* ── Title slide ── */
.title-slide
display
!important
flex-direction
justify-content
align-items
.title-slide
.logo
height
44px
margin-bottom
40px
.title-slide
h1
margin-bottom
16px
max-width
80%
.title-slide
.subtitle
font-size
1.1em
color
var
font-weight
400
max-width
70%
line-height
1.5
.title-slide
.meta
margin-top
40px
font-size
0.75em
color
var
font-weight
500
/* ── Content slide ── */
.content-slide
display
!important
flex-direction
justify-content
padding-top
50px
!important
.content-slide
.slide-header
display
align-items
gap
14px
margin-bottom
10px
.content-slide
.slide-header
.step-badge
background
var
color
var
border-radius
8px
padding
4px
12px
font-size
0.65em
font-weight
700
text-transform
letter-spacing
0.05em
white-space
/* ── Pipeline (horizontal numbered steps) ── */
.pipeline
display
align-items
justify-content
gap
0
margin
30px
0
flex-wrap
.pipeline
.step
background
var
color
#fff
border-radius
12px
padding
16px
18px
text-align
font-size
0.65em
font-weight
600
line-height
1.3
min-width
120px
max-width
140px
.pipeline
.step
.num
display
background
var
color
var
border-radius
50%
width
24px
height
24px
line-height
24px
font-size
0.85em
font-weight
700
margin-bottom
6px
.pipeline
.arrow
font-size
1.4em
color
var
margin
0
4px
flex-shrink
0
/* ── Flowchart (vertical flow with colored boxes) ── */