Sign inSign up

duccioo/spitonslides

By duccioo

•Updated 8 months ago

šŸŽØ MacPaint-style presentation annotator with drawing tools

Image
0

1.4K

duccioo/spitonslides repository overview

⁠SpitOnSlides šŸŽØ

A modern presentation annotator with drawing tools. Upload your slides, annotate them, and export as PDF.

Docker GitHub Actions License

⁠✨ Features

  • šŸ“Ž Upload PPTX/PDF - Converts presentations to high-res images
  • āœļø Drawing Tools - Pencil, Brush, Eraser, Paint Bucket, Selection
  • šŸŽØ Pattern System - Multiple fill patterns for artistic effects
  • šŸ’¾ Save & Load Projects - Keep your work and continue later
  • šŸ“„ Export to PDF - Composites drawings on top of original slides
  • ā†©ļø Undo/Redo - Full history support

ā šŸš€ Quick Start

# Pull and run with a single command
docker run -d -p 80:80 --name spitonslides duccioo/spitonslides:latest

# Open in browser
open http://localhost
⁠Using Docker Compose
# Clone the repo
git clone https://github.com/duccioo/SpitOnSlides.git
cd SpitOnSlides

# Start with Docker Compose
docker-compose up --build

# Open in browser
open http://localhost:5173
⁠Using Portainer
  1. In Portainer, go to Stacks → Add Stack
  2. Name it spitonslides
  3. Use the Web editor tab and paste the contents of docker-compose.portainer.yml
  4. Click Deploy the stack

ā šŸ› ļø Tech Stack

LayerTechnology
FrontendReact 18, Vite, HTML5 Canvas
BackendPython 3.11, FastAPI
ConversionLibreOffice, Poppler (pdf2image)
Image ProcessingPillow, img2pdf
ContainerDocker, GitHub Actions
FontsInstrument Serif, Inter

ā šŸ“ Project Structure

SpitOnSlides/
ā”œā”€ā”€ .github/
│   └── workflows/
│       └── docker-publish.yml   # GitHub Actions CI/CD
ā”œā”€ā”€ docker-compose.yml           # Development compose
ā”œā”€ā”€ docker-compose.portainer.yml # Production/Portainer compose
ā”œā”€ā”€ Dockerfile                   # Multi-stage production build
ā”œā”€ā”€ backend/
│   ā”œā”€ā”€ main.py                  # FastAPI entry
│   └── routes/
│       ā”œā”€ā”€ upload.py            # File upload & conversion
│       ā”œā”€ā”€ export.py            # PDF export
│       └── projects.py          # Project save/load
└── frontend/
    └── src/
        ā”œā”€ā”€ App.jsx              # Main application
        ā”œā”€ā”€ components/
        │   ā”œā”€ā”€ Toolbar.jsx      # Drawing tools (emoji icons)
        │   ā”œā”€ā”€ Canvas.jsx       # Drawing canvas
        │   ā”œā”€ā”€ SlideNav.jsx     # Navigation bar
        │   └── PatternPicker.jsx
        └── styles/
            └── macpaint.css     # Modern design system

ā šŸ”Œ API Endpoints

MethodEndpointDescription
POST/api/uploadUpload PPTX/PDF
GET/api/sessions/{id}Get slide info
POST/api/exportExport annotated PDF
GET/api/projectsList saved projects
POST/api/projectsSave a project
GET/api/projects/{id}Load a project
DELETE/api/projects/{id}Delete a project
GET/slides/{id}/{file}Serve slide images
GET/healthHealth check

ā šŸŽØ Drawing Tools

ToolEmojiDescription
Pencilāœļø1px black stroke
BrushšŸ–ŒļøVariable size with pattern
Eraser🧽Reveals slide underneath
Bucket🪣Flood fill with pattern
Selection⬜Move/delete drawn pixels
ClearšŸ—‘ļøClear all drawings
Undoā†©ļøUndo last action
Redoā†ŖļøRedo undone action

ā šŸ”„ GitHub Actions

The project includes automatic Docker Hub deployment:

  1. Set up secrets in your GitHub repository:

    • DOCKERHUB_USERNAME: Your Docker Hub username
    • DOCKERHUB_TOKEN: Docker Hub access token
  2. Push to main or create a version tag (e.g., v1.0.0)

  3. The image will be automatically built and pushed to Docker Hub

ā šŸ–„ļø Development

# Backend only
cd backend
pip install -r requirements.txt
uvicorn main:app --reload

# Frontend only
cd frontend
npm install
npm run dev

ā šŸ“„ License

MIT License - feel free to use this project for personal or commercial purposes.

Tag summary

Content type

Image

Digest

sha256:2c5293be6…

Size

296.9 MB

Last updated

8 months ago

docker pull duccioo/spitonslides