This repository contains presentation slides for talks given by Asad Ullah Khalid, built using reveal.js - an open source HTML presentation framework.
Senior Frontend Developer at Mercedes-Benz.io, Berlin, Germany with 7+ years of experience. Frontend focused with fullstack JS/TS expertise.
Connect with me:
- 🌐 Website: asadullahkhalid.com
- 💼 LinkedIn: asadkhalid305
- 💻 GitHub: asadullah305
- 📅 Book a session: Topmate
npm installnpm run devThis starts a development server at http://localhost:8000 by default.
You can override host/port with gulp flags:
npx gulp serve --host 0.0.0.0 --port 3000npm run buildThis regenerates data/slides.json and builds production assets in dist/.
npm run build-talksUse this before deployment to regenerate talk metadata and static output.
npm run deployNote: Configure your deployment settings as needed based on your hosting provider.
PDF export is dynamic and works for any talk folder under talks/.
This project uses Decktape for slide-to-PDF export.
npm install -g decktapeVerify installation:
decktape --versionDecktape exports from the local reveal.js URL, so start the server first:
npm run devDefault server URL is http://localhost:8000.
Pass the talk folder name as the argument:
npm run generate:pdf your-talk-folder-nameExample:
npm run generate:pdf a-practical-guide-to-building-agentic-systemsYou can also use the npm separator form:
npm run generate:pdf -- a-practical-guide-to-building-agentic-systemsThe PDF is always created inside the same talk folder with this naming pattern:
talks/<talk-folder-name>/<talk-folder-name>.pdf
Example output:
talks/a-practical-guide-to-building-agentic-systems/a-practical-guide-to-building-agentic-systems.pdf
The script validates all required conditions before export:
- Talk folder exists under
talks/ talks/<name>/index.htmlexists- Local server is reachable at
http://localhost:8000 decktapeis available in PATH
If talk name is invalid, it prints available talk folders.
decktape is not available in PATH- Install globally:
npm install -g decktape - Open a new terminal after install
- Install globally:
Local server is not reachable at http://localhost:8000- Start server with
npm run dev
- Start server with
- Address already in use (
EADDRINUSE)- Another server is already running on port 8000; reuse it or stop it and restart
Each talk lives in its own subfolder under talks/.
Current pattern supports either local content per talk or shared content (for reuse):
talks/
shared/
intro.md ← reusable intro deck section
assets/ ← reusable images/memes/media
your-talk-name/
index.html ← required entry point
hook.md ← required title/cover section
slides.md ← required main content
intro.md ← optional local intro (if not using shared)
assets/ ← talk-specific assets (optional)
- Create a new folder
talks/your-talk-name/ - Copy
index.htmlfrom an existing talk and update the<title>tag - Add
hook.mdandslides.md - Choose intro strategy:
- Local intro:
data-markdown="intro.md" - Shared intro:
data-markdown="../shared/intro.md"
- Local intro:
- Use assets from either:
- Local:
./assets/... - Shared:
../shared/assets/...
- Local:
- Run
npm run extract(ornpm run dev/npm run build) to regeneratedata/slides.json
data/slides.json is generated automatically by scripts/extractSlideData.js.
This project uses 6 powerful plugins to enhance presentations:
Syntax highlighting for code blocks with line numbers.
<pre><code data-line-numbers="1-3|4-6">
function example() {
console.log("Hello");
}
</code></pre>Features:
- Automatic syntax highlighting
- Line numbers:
data-line-numbers - Highlight ranges:
data-line-numbers="1,3-5"
Write slides in Markdown instead of HTML.
<section
data-markdown="slides.md"
data-separator="^\n---\n$"
data-separator-vertical="^\n--\n$"
></section>Separators:
---= New horizontal slide--= New vertical slide
Displays speaker notes in a separate window.
In Markdown:
## Slide Title
Slide content here
Note:
These are speaker notes visible only to the presenterUsage:
- Start dev server:
npm run dev - Open:
http://localhost:8000/talks/your-talk-name/index.html - Press
Skey to open speaker notes window
http://localhost:8000 (not file://)
Features:
- Current/next slide preview
- Timer
- Notes display
Render mathematical equations using KaTeX.
Inline math:
Einstein's equation: $E = mc^2$Block math:
$$
\frac{d}{dx}\left( \int_{0}^{x} f(u)\,du\right)=f(x)
$$Zoom into slide elements for detail.
Usage:
- Mac/Windows:
Alt + Clickon any element - Linux:
Ctrl + Clickon any element - Exit: Press
ESCor click again
Works with: Images, GIFs, diagrams, code blocks
Visual feedback:
- Zoom cursor (🔍) appears on hover
- Subtle glow effect on images
- Smooth 2x zoom animation
Search text across all slides.
Usage:
- Shortcut:
Ctrl + Shift + F(works on Mac & Windows) - Or click search icon (top right)
- Type search term and press Enter
- Navigate with ↑↓ arrows
Ctrl (not Cmd) on Mac to avoid browser conflicts
Features:
- Searches all slides
- Highlights matches
- Auto-navigation to results
All plugins are already configured in this project. For new talks, include:
<!-- Load plugins -->
<script src="../dist/reveal.js"></script>
<script src="../plugin/markdown/markdown.js"></script>
<script src="../plugin/highlight/highlight.js"></script>
<script src="../plugin/notes/notes.js"></script>
<script src="../plugin/math/math.js"></script>
<script src="../plugin/zoom/zoom.js"></script>
<script src="../plugin/search/search.js"></script>
<!-- Initialize -->
<script>
Reveal.initialize({
plugins: [
RevealMarkdown,
RevealHighlight,
RevealNotes,
RevealMath.KaTeX,
RevealZoom,
RevealSearch,
],
});
</script>- Highlight + Markdown: Code blocks in markdown auto-highlight
- Notes + Markdown: Use
Note:keyword for speaker notes - Math + Markdown: Math syntax works in markdown slides
- Zoom: Great for showing diagram/code details during talks
- Search: Useful during Q&A to quickly find slides
Stylesheets are organized in css/ directory:
Main Files:
reveal.scss→ compiled todist/reveal.css(for presentations)landing.scss→ compiled todist/landing.css(for landing page)
Shared Modules: (prefixed with _)
_variables.scss- Global colors, theme settings_animations.scss- Keyframe animations_reveal-customizations.scss- Custom utilities, corner glow effects
Subdirectories:
print/- Print and PDF export stylestalks/- Talk-specific custom stylestheme/- Reveal.js themes (black, white, etc.)
Build CSS:
npm run build # Build all assets
gulp css # Build CSS onlyCustomize:
- Colors/effects → Edit
css/_variables.scss - Utilities → Edit
css/_reveal-customizations.scss - Talk styles → Create file in
css/talks/
reveal.js is an open source HTML presentation framework. For more information, visit revealjs.com.