Skip to content

B3ND3L/presento

Repository files navigation

Presento Logo

License: MIT Platform Python uv

Presento is an open-source web application under the MIT license that lets you create, edit, and present slides directly from your browser.

Slide rendering is powered by reveal.js, while the backend is built with FastAPI (Python). Presentations are persisted in a MongoDB database.


Features

  • 📝 Create and edit presentations through a WYSIWYG web interface
  • 🎨 Choose your reveal.js theme and transition
  • 👁️ Full-screen slide viewer
  • 🔒 Optional password protection per presentation
  • 🔑 Access an existing presentation by its ID (+ password if required)
  • 📤 Export a presentation to JSON and import it back
  • 🌍 Internationalization (English & French)
  • 🗑️ Delete presentations
  • 💾 Persistent storage via MongoDB

Tech Stack

Layer Technology
Backend Python 3.14+, FastAPI, Uvicorn
Templating Jinja2
Internationalization Babel / gettext
Presentation reveal.js
Database MongoDB
Containerization Docker Compose
Python environment uv

Prerequisites

With Docker Compose (recommended)

  • Docker
  • docker compose plugin

With uv (local)

  • Python 3.14+
  • uv installed
  • A running MongoDB instance (e.g. mongodb://localhost:27017)

Running the project

🐳 With Docker Compose (recommended)

The compose.yml file starts the entire stack — the Presento application and its MongoDB database — using the prebuilt image ghcr.io/b3nd3l/presento. A single command brings everything up:

docker compose up -d

The application is available at http://localhost:8000.

To rebuild the image locally instead of pulling it, run docker compose up -d --build.


🐍 Locally with uv only

Make sure a MongoDB instance is running locally on port 27017. You can override the connection string with the MONGO_URI environment variable (default: mongodb://localhost:27017).

# 1. Install dependencies
uv sync

# 2. Compile the translation catalogs
uv run pybabel compile -d translations

# 3. Start the server
uv run uvicorn src.main:app --reload

The application is available at http://localhost:8000.


Configuration

Setting Where Description
MONGO_URI Environment var MongoDB connection string
trusted_hosts config.toml Hosts trusted by the proxy-headers middleware

Internationalization

Presento ships with English and French translations (managed with Babel/gettext).

# Extract translatable strings into the .pot catalog
uv run pybabel extract -F babel.cfg -o translations/messages.pot .

# Update the existing language catalogs
uv run pybabel update -i translations/messages.pot -d translations

# Compile the catalogs (required before running)
uv run pybabel compile -d translations

The active language can be switched at runtime from the UI (/set-lang/{lang}) and falls back to the browser's Accept-Language header.


Project structure

presento/
├── compose.yml                # Docker Compose (Presento + MongoDB)
├── Dockerfile                 # Production image (Gunicorn + Uvicorn workers)
├── config.toml                # Application configuration (trusted hosts)
├── babel.cfg                  # Babel extraction config
├── pyproject.toml             # Python dependencies (uv)
├── src/
│   ├── main.py                # FastAPI application (routes & JSON API)
│   ├── models.py              # MongoDB access, models & password helpers
│   ├── config.py              # TOML configuration loader
│   ├── translator.py          # gettext translation wrapper
│   ├── languageMiddleware.py  # Per-request language selection
│   ├── assets/                # Static files (CSS, JS, logo, favicon)
│   └── templates/             # Jinja2 templates (index, edit, view)
├── translations/              # i18n catalogs (en, fr)
└── doc-assets/
    └── presento.png

License

This project is distributed under the MIT license.
See the LICENSE file for details.

The source code is available at github.com/B3ND3L/presento.

About

No description, website, or topics provided.

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors