diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
new file mode 100644
index 0000000..90fa6d3
--- /dev/null
+++ b/.github/workflows/deploy.yml
@@ -0,0 +1,47 @@
+name: Deploy to GitHub Pages
+
+on:
+ push:
+ branches:
+ - main
+ workflow_dispatch:
+
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+concurrency:
+ group: "pages"
+ cancel-in-progress: false
+
+jobs:
+ deploy:
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: '18'
+ cache: 'npm'
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Setup Pages
+ uses: actions/configure-pages@v4
+
+ - name: Upload artifact
+ uses: actions/upload-pages-artifact@v3
+ with:
+ path: '.'
+
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v4
diff --git a/.gitignore b/.gitignore
index 9a5aced..1d1f97e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -137,3 +137,10 @@ dist
# Vite logs files
vite.config.js.timestamp-*
vite.config.ts.timestamp-*
+
+# Task runner
+.task/
+
+# OS files
+.DS_Store
+Thumbs.db
diff --git a/.nojekyll b/.nojekyll
new file mode 100644
index 0000000..e69de29
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..86793d4
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,339 @@
+# Contributing to Presentations
+
+This repository hosts reveal.js-based presentations for the Codebase Interface organization, deployed at `codebaseinterface.org/presentations/`.
+
+## Quick Workflow Overview
+
+```
+1. Create presentation: task new -- my-presentation
+2. Edit slides: presentations/my-presentation/slides.md
+3. Test locally: task serve
+4. Add to index: index.html (update presentations array)
+5. Commit & push: Git workflow
+6. Auto-deploy: GitHub Actions → GitHub Pages
+7. Live at: codebaseinterface.org/presentations/my-presentation/
+```
+
+## Prerequisites
+
+- [Node.js](https://nodejs.org/) (v14 or higher)
+- [Task](https://taskfile.dev/) - A task runner / build tool
+- Git
+
+### Installing Task
+
+**macOS/Linux:**
+```bash
+sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b /usr/local/bin
+```
+
+**Windows (with Scoop):**
+```bash
+scoop install task
+```
+
+**Or use npm:**
+```bash
+npm install -g @go-task/cli
+```
+
+## Getting Started
+
+1. **Clone the repository:**
+ ```bash
+ git clone https://github.com/codebase-interface/presentations.git
+ cd presentations
+ ```
+
+2. **Install dependencies:**
+ ```bash
+ task install
+ ```
+
+## Creating a New Presentation
+
+### Using the Task Command
+
+The easiest way to create a new presentation is using the `task new` command:
+
+```bash
+task new -- my-presentation-name
+```
+
+This will:
+- Create a new directory under `presentations/my-presentation-name/`
+- Copy the presentation template (HTML and Markdown files)
+- Set up the basic structure with sample slides in Markdown
+- Show you the next steps
+
+**Example:**
+```bash
+task new -- introduction-to-ai
+```
+
+### Manual Creation
+
+If you prefer to create a presentation manually:
+
+1. Create a new directory under `presentations/`:
+ ```bash
+ mkdir -p presentations/my-presentation
+ ```
+
+2. Copy the template:
+ ```bash
+ cp -r templates/presentation/* presentations/my-presentation/
+ ```
+
+3. Edit the `presentations/my-presentation/slides.md` file to add your content in Markdown.
+
+## Editing Your Presentation
+
+Presentations use Markdown format, making them easy to write and maintain!
+
+1. Open `presentations/your-presentation-name/slides.md` in your favorite editor.
+
+2. Use `---` to separate horizontal slides:
+ ```markdown
+ # First Slide
+
+ Content for first slide
+
+ ---
+
+ # Second Slide
+
+ Content for second slide
+ ```
+
+3. Use `--` for vertical slides (sub-slides):
+ ```markdown
+ # Main Topic
+
+ ---
+
+ ## Subtopic 1
+
+ --
+
+ ## Subtopic 2
+
+ --
+
+ ## Subtopic 3
+ ```
+
+4. Format text with Markdown:
+ ```markdown
+ # Heading 1
+ ## Heading 2
+
+ **Bold text**
+ *Italic text*
+ `Inline code`
+
+ - Bullet point 1
+ - Bullet point 2
+
+ 1. Numbered item 1
+ 2. Numbered item 2
+
+ [Link text](https://example.com)
+ ```
+
+5. Add code blocks with syntax highlighting:
+ ```markdown
+ ```javascript
+ function example() {
+ return "Hello World";
+ }
+ ` ``
+ ```
+
+6. Add fragment animations (step-by-step reveals):
+ ```markdown
+ - First item
+ - Second item
+ - Third item
+ ```
+
+7. Add speaker notes:
+ ```markdown
+ This is slide content
+
+ Note:
+ These are speaker notes that only appear in presenter view
+ ```
+
+### Advanced HTML in Markdown
+
+You can also use HTML within your Markdown for more control:
+
+```markdown
+
+Custom styled content
+
+```
+
+## Testing Locally
+
+Start the local development server:
+
+```bash
+task serve
+```
+
+Then open your browser to:
+- Main page: http://localhost:8000/
+- Your presentation: http://localhost:8000/presentations/your-presentation-name/
+
+**Navigation tips:**
+- Use arrow keys to navigate between slides
+- Press `F` for fullscreen
+- Press `S` for speaker notes view
+- Press `ESC` for slide overview
+
+## Available Task Commands
+
+Run `task --list` to see all available commands:
+
+- `task install` - Install dependencies
+- `task new -- ` - Create a new presentation
+- `task serve` - Start local development server
+- `task list` - List all presentations
+- `task clean` - Clean generated files
+- `task help` - Show available commands
+
+## Adding Your Presentation to the Index
+
+After creating a presentation, add it to the main index page so it appears on the homepage:
+
+### Option 1: Using the helper script (Recommended)
+
+1. Run the script to generate the presentations array:
+ ```bash
+ task update-index
+ ```
+
+2. Copy the output and paste it into `index.html`, replacing the existing `presentations` array.
+
+3. Update the descriptions manually to make them more meaningful.
+
+### Option 2: Manual Update
+
+1. Open `index.html` in the root directory
+2. Find the `presentations` array in the JavaScript section
+3. Add your presentation:
+ ```javascript
+ const presentations = [
+ {
+ slug: 'my-presentation',
+ title: 'My Presentation Title',
+ description: 'A brief description of the presentation'
+ }
+ ];
+ ```
+
+## Reveal.js Features
+
+This setup includes the following reveal.js plugins:
+- **Markdown** - Write slides in Markdown (primary method)
+- **Highlight** - Syntax highlighting for code
+- **Notes** - Speaker notes (press `S` during presentation)
+
+### Advanced Features in Markdown
+
+**Backgrounds:**
+
+Add backgrounds using HTML comments:
+```markdown
+
+# Red Background Slide
+
+---
+
+
+# Image Background Slide
+```
+
+**Transitions:**
+```markdown
+
+# This Slide Zooms In
+```
+
+**Custom Classes and Styles:**
+```markdown
+This text is red
+
+Centered content
+```
+
+For more features, see the [reveal.js documentation](https://revealjs.com/).
+
+## Customizing Themes
+
+The template uses the `black` theme by default. You can change it by editing the theme link in your presentation's HTML:
+
+```html
+
+```
+
+Available themes:
+- `black.css` (default) - Dark background
+- `white.css` - Light background
+- `league.css` - Gray background, blue links
+- `beige.css` - Beige background
+- `sky.css` - Blue gradient background
+- `night.css` - Black background, thick headers
+- `serif.css` - Cappuccino background with serif text
+- `simple.css` - White background, black text
+- `solarized.css` - Cream-colored background
+- `moon.css` - Dark blue background
+- `dracula.css` - Dracula color scheme
+- `blood.css` - Dark background, blood red accents
+
+## Deployment
+
+The repository is automatically deployed to GitHub Pages when changes are pushed to the main branch. Your presentation will be available at:
+
+```
+https://codebaseinterface.org/presentations/your-presentation-name/
+```
+
+## Best Practices
+
+1. **Keep it simple** - Focus on key points, avoid text-heavy slides
+2. **Use visuals** - Images, diagrams, and code examples are powerful
+3. **Test locally** - Always preview your presentation before committing
+4. **Consistent naming** - Use lowercase and hyphens for presentation names (e.g., `my-presentation`)
+5. **Organize slides** - Use horizontal slides (`---`) for main topics and vertical slides (`--`) for details
+6. **Add speaker notes** - Use `Note:` prefix in Markdown for presenter guidance
+7. **Write in Markdown** - It's easier to maintain and version control than HTML
+
+## Troubleshooting
+
+### Presentation not showing?
+- Ensure you've run `task install` to install dependencies
+- Check that your presentation directory has both `index.html` and `slides.md` files
+- Verify the reveal.js paths in your HTML are correct (`../../node_modules/reveal.js/...`)
+- Make sure the markdown file path in index.html matches your filename
+
+### Styles not loading?
+- Make sure `node_modules` exists (run `task install`)
+- Check the console for 404 errors
+- Verify the CSS link paths are correct
+
+### Task command not found?
+- Install Task following the instructions in Prerequisites
+- Alternatively, run npm scripts directly: `npm run serve`
+
+## Getting Help
+
+- **Reveal.js Documentation:** https://revealjs.com/
+- **Task Documentation:** https://taskfile.dev/
+- **Issues:** Open an issue in this repository
+
+## License
+
+This project is open source and available under the MIT License.
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..a721d7e
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Codebase Interface
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/PROJECT_SUMMARY.md b/PROJECT_SUMMARY.md
new file mode 100644
index 0000000..bcf9bef
--- /dev/null
+++ b/PROJECT_SUMMARY.md
@@ -0,0 +1,196 @@
+# Project Summary: Reveal.js Presentation System
+
+## What Was Implemented
+
+A complete reveal.js-based presentation system that allows the Codebase Interface organization to create and host unlimited slide decks at `codebaseinterface.org/presentations/{presentation-slug-name}`.
+
+## Key Features
+
+### 1. Task Automation (Taskfile.yml)
+- `task install` - Install dependencies
+- `task new -- ` - Create new presentation from template
+- `task serve` - Start local development server
+- `task list` - List all presentations
+- `task update-index` - Generate index.html array
+- `task clean` - Clean generated files
+
+### 2. Directory Structure
+```
+presentations/
+├── .github/workflows/deploy.yml # GitHub Actions deployment
+├── .nojekyll # Disable Jekyll processing
+├── _config.yml # GitHub Pages config
+├── index.html # Main listing page
+├── presentations/ # Individual presentations
+│ └── getting-started/ # Example presentation
+│ └── index.html
+├── templates/ # Template for new presentations
+│ └── presentation/
+│ └── index.html
+├── scripts/ # Helper scripts
+│ └── update-index.sh # Auto-generate index array
+├── Taskfile.yml # Task automation
+├── package.json # Dependencies
+├── CONTRIBUTING.md # Comprehensive guide
+├── README.md # Quick start guide
+└── LICENSE # MIT License
+```
+
+### 3. Automated Workflow
+
+**Creating a Presentation:**
+```bash
+task new -- my-presentation
+# Creates: presentations/my-presentation/index.html
+```
+
+**Local Development:**
+```bash
+task serve
+# View at: http://localhost:8000/presentations/my-presentation/
+```
+
+**Deployment:**
+- Push to main branch
+- GitHub Actions automatically deploys to GitHub Pages
+- Live at: codebaseinterface.org/presentations/my-presentation/
+
+### 4. Features Included
+
+**Reveal.js Plugins:**
+- Markdown support for slide content
+- Syntax highlighting for code blocks
+- Speaker notes (press 'S' during presentation)
+
+**Navigation:**
+- Arrow keys for slide navigation
+- 'F' for fullscreen
+- 'S' for speaker view
+- 'ESC' for overview
+
+**Customization:**
+- 13 built-in themes (black, white, league, etc.)
+- Fragments for step-by-step reveals
+- Code highlighting with line numbers
+- Custom backgrounds and transitions
+
+### 5. Example Presentation
+
+The `getting-started` presentation demonstrates:
+- Title slides
+- Content slides with lists
+- Vertical slide stacks
+- Code highlighting
+- Fragment animations
+- Speaker notes
+- Navigation tips
+
+## Documentation
+
+### CONTRIBUTING.md (6000+ words)
+Comprehensive guide covering:
+- Prerequisites and installation
+- Creating presentations
+- Editing slides
+- Reveal.js features
+- Theme customization
+- Testing locally
+- Deployment process
+- Best practices
+- Troubleshooting
+
+### README.md
+Quick start guide with:
+- Setup instructions
+- Command reference
+- Feature overview
+- Links to detailed documentation
+
+## Testing Results
+
+✅ All task commands work correctly:
+- `task install` - Dependencies installed successfully
+- `task new` - Creates presentations with proper templating
+- `task serve` - Local server runs on port 8000
+- `task list` - Lists all presentations
+- `task update-index` - Generates JavaScript array for index.html
+
+✅ Local Testing:
+- Main index page loads correctly
+- Presentation page loads with all features
+- Reveal.js assets accessible
+- No 404 errors
+
+✅ Security:
+- CodeQL scan completed: 0 vulnerabilities found
+- No secrets in code
+- Safe dependency versions
+
+## GitHub Pages Configuration
+
+**Files Created:**
+- `.nojekyll` - Disables Jekyll processing
+- `_config.yml` - GitHub Pages configuration
+- `.github/workflows/deploy.yml` - Automated deployment workflow
+
+**Workflow:**
+1. Push to main branch triggers GitHub Actions
+2. Workflow installs Node.js and dependencies
+3. Uploads site as artifact
+4. Deploys to GitHub Pages
+5. Site available at codebaseinterface.org/presentations/
+
+## URL Structure
+
+As requested, presentations are hosted at:
+```
+https://codebaseinterface.org/presentations/{presentation-slug-name}/
+```
+
+Example:
+```
+https://codebaseinterface.org/presentations/getting-started/
+```
+
+## Next Steps for Users
+
+1. **Create a presentation:**
+ ```bash
+ task new -- introduction-to-project
+ ```
+
+2. **Edit the slides:**
+ Open `presentations/introduction-to-project/index.html`
+
+3. **Test locally:**
+ ```bash
+ task serve
+ ```
+
+4. **Add to index:**
+ ```bash
+ task update-index
+ # Copy output to index.html
+ ```
+
+5. **Commit and push:**
+ ```bash
+ git add .
+ git commit -m "Add introduction presentation"
+ git push
+ ```
+
+6. **Automatic deployment:**
+ GitHub Actions deploys to Pages automatically
+
+## Technologies Used
+
+- **Reveal.js 5.0.0** - Presentation framework
+- **Task** - Task automation
+- **http-server** - Local development server
+- **GitHub Actions** - CI/CD
+- **GitHub Pages** - Hosting
+
+## License
+
+MIT License - See LICENSE file for details
diff --git a/QUICK_REFERENCE.md b/QUICK_REFERENCE.md
new file mode 100644
index 0000000..652dc3a
--- /dev/null
+++ b/QUICK_REFERENCE.md
@@ -0,0 +1,136 @@
+# Quick Reference Card
+
+## 🚀 Quick Start (3 Steps)
+```bash
+1. task install # Install dependencies
+2. task new -- my-presentation # Create presentation
+3. task serve # Preview at localhost:8000
+```
+
+## 📋 All Commands
+| Command | What It Does |
+|---------|-------------|
+| `task install` | Install Node.js dependencies |
+| `task new -- ` | Create new presentation from template |
+| `task serve` | Start local dev server (port 8000) |
+| `task list` | List all presentations |
+| `task update-index` | Generate presentations array |
+| `task clean` | Clean generated files |
+
+## 📂 File Locations
+```
+presentations/my-presentation/slides.md ← Edit your slides here (Markdown)
+presentations/my-presentation/index.html ← HTML wrapper (rarely needs editing)
+index.html ← Add to presentations array
+CONTRIBUTING.md ← Full documentation
+```
+
+## ⌨️ Presentation Navigation
+| Key | Action |
+|-----|--------|
+| `→` / `←` | Next/Previous slide |
+| `↑` / `↓` | Up/Down (vertical slides) |
+| `F` | Fullscreen |
+| `S` | Speaker notes view |
+| `ESC` | Slide overview |
+
+## 🎨 Change Theme
+Edit your presentation's HTML:
+```html
+
+
+```
+
+Available: black, white, league, beige, sky, night, serif, simple, solarized, moon, dracula, blood
+
+## 📝 Basic Markdown Slide Structure
+```markdown
+# First Slide
+
+Content for the first slide
+
+---
+
+# Second Slide
+
+Content for the second slide
+
+---
+
+## Vertical Slides
+
+Main topic
+
+--
+
+### Subtopic 1
+
+Use -- for vertical slides
+
+--
+
+### Subtopic 2
+
+Navigate with up/down arrows
+
+---
+
+## Code with Highlighting
+
+```javascript
+function hello() {
+ console.log("Hello!");
+}
+` ``
+
+---
+
+## Step-by-Step Reveal
+
+- First item
+- Second item
+- Third item
+
+---
+
+## Speaker Notes
+
+Slide content here
+
+Note:
+These are speaker notes, press S to view them
+```
+
+## 🌐 URL Structure
+After deployment:
+```
+https://codebaseinterface.org/presentations/my-presentation/
+```
+
+## 🔄 Workflow
+1. **Create:** `task new -- presentation-name`
+2. **Edit:** `presentations/presentation-name/slides.md` (Markdown format)
+3. **Test:** `task serve` → http://localhost:8000
+4. **List:** `task update-index` → copy to index.html
+5. **Deploy:** Push to main branch (auto-deploys via GitHub Actions)
+
+## 💡 Pro Tips
+- Write slides in Markdown for easy editing
+- Use `---` for horizontal slides, `--` for vertical slides
+- Add `` for step-by-step reveals
+- Press `S` during presentation for speaker notes
+- Add speaker notes with `Note:` prefix
+- Test in fullscreen mode (`F` key) before presenting
+
+## 🆘 Need Help?
+- Full guide: See `CONTRIBUTING.md`
+- Reveal.js docs: https://revealjs.com/
+- Issues: GitHub repository issues
+
+## ✅ Checklist for New Presentation
+- [ ] Run `task new -- presentation-name`
+- [ ] Edit slides in `presentations/presentation-name/slides.md` (Markdown)
+- [ ] Test locally with `task serve`
+- [ ] Add entry to `index.html` presentations array
+- [ ] Commit and push to trigger deployment
+- [ ] Verify live at codebaseinterface.org/presentations/presentation-name/
diff --git a/README.md b/README.md
index 44cd203..e1f180f 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,95 @@
-# presentations
-Presentations for the codebase interface initative
+# Presentations
+
+Reveal.js-based presentations for the Codebase Interface organization.
+
+🌐 **Live Site:** [codebaseinterface.org/presentations](https://codebaseinterface.org/presentations)
+
+## Quick Start
+
+### Prerequisites
+- [Node.js](https://nodejs.org/) (v14+)
+- [Task](https://taskfile.dev/) - Install with: `npm install -g @go-task/cli`
+
+### Setup
+```bash
+# Install dependencies
+task install
+
+# Create a new presentation
+task new -- my-presentation-name
+
+# Start local server
+task serve
+```
+
+Your presentation will be available at: `http://localhost:8000/presentations/my-presentation-name/`
+
+## Commands
+
+| Command | Description |
+|---------|-------------|
+| `task install` | Install dependencies |
+| `task new -- ` | Create a new presentation |
+| `task serve` | Start local development server |
+| `task list` | List all presentations |
+| `task update-index` | Generate presentations array for index.html |
+| `task help` | Show all available commands |
+
+## Creating Presentations
+
+Presentations are written in **Markdown** for easy editing!
+
+See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed instructions on:
+- Creating and editing presentations in Markdown
+- Using reveal.js features
+- Adding presentations to the index
+- Deployment
+
+**Quick example:**
+```markdown
+# My Slide Title
+
+Content goes here
+
+---
+
+# Next Slide
+
+More content
+```
+
+## Structure
+
+```
+presentations/
+├── index.html # Main listing page
+├── presentations/ # Individual presentation directories
+│ └── example/
+│ ├── index.html # HTML wrapper
+│ └── slides.md # Presentation slides (Markdown)
+├── templates/ # Templates for new presentations
+│ └── presentation/
+│ ├── index.html # HTML wrapper template
+│ └── slides.md # Markdown slides template
+├── Taskfile.yml # Task automation
+└── package.json # Dependencies
+```
+
+## Features
+
+- 📊 **Multiple Presentations** - Create unlimited slide decks
+- ✍️ **Markdown-Based** - Write slides in Markdown, not HTML
+- 🎨 **Beautiful Themes** - 13 built-in reveal.js themes
+- 💻 **Code Highlighting** - Syntax highlighting for code examples
+- 📱 **Responsive** - Works on desktop, tablet, and mobile
+- 🚀 **Easy Deployment** - Automatic deployment to GitHub Pages
+- 🛠️ **Task Automation** - Simple commands via Taskfile
+
+## Documentation
+
+- [Contributing Guide](CONTRIBUTING.md) - How to create presentations
+- [Reveal.js Docs](https://revealjs.com/) - Learn about reveal.js features
+
+## License
+
+MIT
diff --git a/Taskfile.yml b/Taskfile.yml
new file mode 100644
index 0000000..f2a5d30
--- /dev/null
+++ b/Taskfile.yml
@@ -0,0 +1,75 @@
+version: '3'
+
+vars:
+ PRESENTATIONS_DIR: presentations
+ SERVER_PORT: 8000
+
+tasks:
+ install:
+ desc: Install dependencies
+ cmds:
+ - npm install
+
+ serve:
+ desc: Start local development server
+ cmds:
+ - npm run serve
+
+ new:
+ desc: Create a new presentation (usage - task new -- presentation-slug-name)
+ cmds:
+ - |
+ if [ -z "{{.CLI_ARGS}}" ]; then
+ echo "Error: Please provide a presentation name"
+ echo "Usage: task new -- my-presentation-name"
+ exit 1
+ fi
+ SLUG="{{.CLI_ARGS}}"
+ PRES_DIR="{{.PRESENTATIONS_DIR}}/${SLUG}"
+ if [ -d "${PRES_DIR}" ]; then
+ echo "Error: Presentation '${SLUG}' already exists"
+ exit 1
+ fi
+ mkdir -p "${PRES_DIR}"
+ cp -r templates/presentation/* "${PRES_DIR}/"
+ sed -i "s/PRESENTATION_TITLE/${SLUG}/g" "${PRES_DIR}/index.html"
+ sed -i "s/PRESENTATION_TITLE/${SLUG}/g" "${PRES_DIR}/slides.md"
+ echo "✅ Created new presentation: ${SLUG}"
+ echo "📂 Location: ${PRES_DIR}"
+ echo "🌐 Will be available at: /presentations/${SLUG}/"
+ echo ""
+ echo "Next steps:"
+ echo " 1. Edit ${PRES_DIR}/slides.md to add your slides (Markdown format)"
+ echo " 2. Run 'task serve' to preview locally"
+ echo " 3. View at http://localhost:{{.SERVER_PORT}}/presentations/${SLUG}/"
+
+ list:
+ desc: List all presentations
+ cmds:
+ - |
+ echo "Available presentations:"
+ if [ -d "{{.PRESENTATIONS_DIR}}" ]; then
+ for dir in {{.PRESENTATIONS_DIR}}/*/; do
+ if [ -d "$dir" ]; then
+ name=$(basename "$dir")
+ echo " 📊 ${name} - /presentations/${name}/"
+ fi
+ done
+ else
+ echo " No presentations found"
+ fi
+
+ update-index:
+ desc: Generate presentations array for index.html
+ cmds:
+ - ./scripts/update-index.sh
+
+ clean:
+ desc: Clean generated files
+ cmds:
+ - npm run clean
+
+ help:
+ desc: Show available commands
+ cmds:
+ - task --list
diff --git a/_config.yml b/_config.yml
new file mode 100644
index 0000000..a3e42de
--- /dev/null
+++ b/_config.yml
@@ -0,0 +1,17 @@
+# Jekyll configuration for GitHub Pages
+# This file tells GitHub Pages to serve the site directly without Jekyll processing
+
+# Prevent Jekyll from processing files
+include:
+ - node_modules
+
+# Exclude unnecessary files from the published site
+exclude:
+ - .git
+ - .gitignore
+ - templates
+ - Taskfile.yml
+ - package.json
+ - package-lock.json
+ - README.md
+ - CONTRIBUTING.md
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..74d816f
--- /dev/null
+++ b/index.html
@@ -0,0 +1,177 @@
+
+
+
+
+
+ Presentations - Codebase Interface
+
+
+
+
+
+
+
+
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..e5de4d2
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,655 @@
+{
+ "name": "codebase-interface-presentations",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "codebase-interface-presentations",
+ "version": "1.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "reveal.js": "^5.0.0"
+ },
+ "devDependencies": {
+ "http-server": "^14.1.1"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/async": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/basic-auth": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
+ "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "5.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/corser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz",
+ "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.11",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
+ "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/html-encoding-sniffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
+ "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-encoding": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/http-proxy": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/http-server": {
+ "version": "14.1.1",
+ "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz",
+ "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "basic-auth": "^2.0.1",
+ "chalk": "^4.1.2",
+ "corser": "^2.0.1",
+ "he": "^1.2.0",
+ "html-encoding-sniffer": "^3.0.0",
+ "http-proxy": "^1.18.1",
+ "mime": "^1.6.0",
+ "minimist": "^1.2.6",
+ "opener": "^1.5.1",
+ "portfinder": "^1.0.28",
+ "secure-compare": "3.0.1",
+ "union": "~0.5.0",
+ "url-join": "^4.0.1"
+ },
+ "bin": {
+ "http-server": "bin/http-server"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/opener": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
+ "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
+ "dev": true,
+ "license": "(WTFPL OR MIT)",
+ "bin": {
+ "opener": "bin/opener-bin.js"
+ }
+ },
+ "node_modules/portfinder": {
+ "version": "1.0.38",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.38.tgz",
+ "integrity": "sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "async": "^3.2.6",
+ "debug": "^4.3.6"
+ },
+ "engines": {
+ "node": ">= 10.12"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
+ "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/reveal.js": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/reveal.js/-/reveal.js-5.2.1.tgz",
+ "integrity": "sha512-r7//6mIM5p34hFiDMvYfXgyjXqGRta+/psd9YtytsgRlrpRzFv4RbH76TXd2qD+7ZPZEbpBDhdRhJaFgfQ7zNQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/secure-compare": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz",
+ "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/side-channel": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3",
+ "side-channel-list": "^1.0.0",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-list": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/union": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz",
+ "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==",
+ "dev": true,
+ "dependencies": {
+ "qs": "^6.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/url-join": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
+ "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/whatwg-encoding": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
+ "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "iconv-lite": "0.6.3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..7e61892
--- /dev/null
+++ b/package.json
@@ -0,0 +1,23 @@
+{
+ "name": "codebase-interface-presentations",
+ "version": "1.0.0",
+ "description": "Reveal.js based presentations for codebase interface",
+ "scripts": {
+ "serve": "npx http-server -p 8000 -c-1",
+ "build": "echo 'Build complete - static site ready for deployment'",
+ "clean": "rm -rf dist"
+ },
+ "dependencies": {
+ "reveal.js": "^5.0.0"
+ },
+ "devDependencies": {
+ "http-server": "^14.1.1"
+ },
+ "keywords": [
+ "presentations",
+ "reveal.js",
+ "slides"
+ ],
+ "author": "Codebase Interface",
+ "license": "MIT"
+}
diff --git a/presentations/getting-started/index.html b/presentations/getting-started/index.html
new file mode 100644
index 0000000..bb32311
--- /dev/null
+++ b/presentations/getting-started/index.html
@@ -0,0 +1,41 @@
+
+
+
+
+
+ getting-started - Codebase Interface
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/presentations/getting-started/slides.md b/presentations/getting-started/slides.md
new file mode 100644
index 0000000..9a712b1
--- /dev/null
+++ b/presentations/getting-started/slides.md
@@ -0,0 +1,132 @@
+# Getting Started
+
+### Creating Presentations with Reveal.js
+
+Codebase Interface
+
+---
+
+## Welcome! 👋
+
+This is an example presentation demonstrating the capabilities of our presentation system.
+
+Press the right arrow to continue →
+
+---
+
+## What You'll Learn
+
+- How to create presentations
+- Basic markdown slide features
+- Code highlighting
+- Navigation and controls
+
+---
+
+## Creating a Presentation
+
+Use the Task command to create a new presentation:
+
+```bash
+task new -- my-presentation-name
+```
+
+--
+
+## What Gets Created
+
+- New directory under `presentations/`
+- Pre-configured `index.html`
+- Markdown file `slides.md` for your content
+- Ready-to-use reveal.js setup
+
+--
+
+## Start Developing
+
+Preview your presentation locally:
+
+```bash
+task serve
+```
+
+Then visit: `localhost:8000/presentations/my-presentation-name/`
+
+---
+
+## Markdown Slide Features
+
+Writing slides in Markdown is **easy**!
+
+- Use `---` to separate horizontal slides
+- Use `--` for vertical slides
+- Format text with *italic*, **bold**, or `code`
+- Add [links](https://revealjs.com) easily
+
+---
+
+## Step-by-Step Reveals
+
+First, this appears
+
+Then this
+
+Finally this!
+
+You can use different animations
+
+---
+
+## Code Highlighting
+
+Syntax-highlighted code blocks:
+
+```javascript
+function createPresentation(name) {
+ return `presentations/${name}`;
+}
+
+const myPresentation = createPresentation('demo');
+console.log(myPresentation);
+// Output: presentations/demo
+```
+
+---
+
+## Navigation
+
+| Key | Action |
+|-----|--------|
+| **Arrow Keys** | Navigate between slides |
+| **F** | Fullscreen mode |
+| **S** | Speaker notes view |
+| **ESC** | Slide overview |
+
+Note:
+These are speaker notes! Press 'S' to see them.
+
+---
+
+## Deployment
+
+Push to main branch and GitHub Pages will automatically deploy
+
+Your presentation will be live at:
+
+`codebaseinterface.org/presentations/your-name/`
+
+---
+
+## Resources
+
+- [Reveal.js Documentation](https://revealjs.com/)
+- [View All Presentations](../)
+- [GitHub Repository](https://github.com/codebase-interface/presentations)
+
+---
+
+# Start Creating! 🚀
+
+Run `task new -- your-presentation` to get started
+
+Visit [codebaseinterface.org](https://codebaseinterface.org)
diff --git a/scripts/update-index.sh b/scripts/update-index.sh
new file mode 100755
index 0000000..9a3be13
--- /dev/null
+++ b/scripts/update-index.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+# Script to list presentations for index.html
+# This generates a JSON array that can be copied into index.html
+
+echo "// Copy this array into index.html:"
+echo "const presentations = ["
+
+first=true
+for dir in presentations/*/; do
+ if [ -d "$dir" ]; then
+ name=$(basename "$dir")
+
+ if [ "$first" = true ]; then
+ first=false
+ else
+ echo ","
+ fi
+
+ # Extract title from the presentation's index.html if possible
+ title_file="$dir/index.html"
+ if [ -f "$title_file" ]; then
+ # Try to extract the first h1 tag
+ title=$(grep -m 1 "" "$title_file" | sed 's/.*\(.*\)<\/h1>.*/\1/' | sed 's/^[[:space:]]*//')
+ if [ -z "$title" ]; then
+ # Fallback to name if no h1 found
+ title="$name"
+ fi
+ else
+ title="$name"
+ fi
+
+ echo -n " { slug: '$name', title: '$title', description: 'Add description here' }"
+ fi
+done
+
+echo ""
+echo "];"
+echo ""
+echo "Update index.html with the above array!"
diff --git a/templates/presentation/index.html b/templates/presentation/index.html
new file mode 100644
index 0000000..74352f5
--- /dev/null
+++ b/templates/presentation/index.html
@@ -0,0 +1,41 @@
+
+
+
+
+
+ PRESENTATION_TITLE - Codebase Interface
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/templates/presentation/slides.md b/templates/presentation/slides.md
new file mode 100644
index 0000000..c28a7ca
--- /dev/null
+++ b/templates/presentation/slides.md
@@ -0,0 +1,70 @@
+# PRESENTATION_TITLE
+
+A presentation by Codebase Interface
+
+---
+
+## Welcome
+
+This is a sample slide. Edit this file to create your presentation.
+
+Use `---` to separate slides horizontally.
+
+---
+
+## Vertical Slides
+
+Press down arrow for more
+
+--
+
+## Nested Slide 1
+
+You can create vertical slide stacks
+
+Use `--` to separate slides vertically.
+
+--
+
+## Nested Slide 2
+
+Navigate with arrow keys
+
+---
+
+## Code Examples
+
+```javascript
+function hello() {
+ console.log("Hello, World!");
+}
+```
+
+Code blocks are automatically syntax highlighted!
+
+---
+
+## Lists and Formatting
+
+- **Bold text** with `**text**`
+- *Italic text* with `*text*`
+- `Inline code` with backticks
+- [Links](https://codebaseinterface.org)
+
+---
+
+## Fragment Animations
+
+- Item 1
+- Item 2
+- Item 3
+
+Note:
+These are speaker notes. They won't appear on the slides.
+Press 'S' during the presentation to view them.
+
+---
+
+## Thank You!
+
+Visit [codebaseinterface.org](https://codebaseinterface.org)