Claper logo

Claper

The ultimate tool to interact with your audience

Alternative to: slido, mentimeter, ahaslides

Claper screenshot

Claper turns presentations into an interactive experience: presenters get real-time audience feedback through live polls and reactions, while participants actively engage during meetings and events. It runs as a self-hosted web app alongside a PostgreSQL database via Docker Compose.

Claper Docker Compose example

Self-host Claper on your own server, homelab, or VPS starting from this Docker Compose example. It runs Claper in Docker containers using the official postgres:15, ghcr.io/claperco/claper:latest images, with persistent volumes and automatic restarts preconfigured. Review the environment variables and adjust them to your setup, save the file as compose.yml (or docker-compose.yml), and start the stack with docker compose up -d.

services:
  db:
    image: postgres:15
    environment:
      # Internal Postgres credentials (database is only reachable inside the compose network)
      POSTGRES_USER: "claper"
      POSTGRES_PASSWORD: "claper"
      POSTGRES_DB: "claper"
    volumes:
      - db_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD", "pg_isready", "-q", "-d", "claper", "-U", "claper"]
      retries: 3
      timeout: 5s
    restart: unless-stopped

  app:
    image: ghcr.io/claperco/claper:latest
    depends_on:
      db:
        condition: service_healthy
    environment:
      # Public URL Claper is served from (used for links and cookies)
      BASE_URL: "http://localhost:4000"
      # Connection string to the bundled Postgres
      DATABASE_URL: "postgres://claper:claper@db:5432/claper"
      # Signing secret for sessions and cookies. Generate with: mix phx.gen.secret
      # Change this before exposing Claper — a known value lets anyone forge an admin session.
      SECRET_KEY_BASE: "Xk7pQvR2mNbW9sZ4cT6yH1jL3dF8gA0eU5oI2rP4wB6nM8vC0xK7qS9tD1fG3hJ5"
      # Store uploaded files on the local disk (in the uploads volume)
      PRESENTATION_STORAGE: "local"
      PRESENTATION_STORAGE_DIR: "/app/uploads"
      # Mail delivery: local writes to the container log; use smtp or postmark for real delivery
      MAIL_TRANSPORT: "local"
      # From address and display name for outgoing mail
      MAIL_FROM: "noreply@claper.co"
      MAIL_FROM_NAME: "Claper"
    volumes:
      - uploads:/app/uploads
    healthcheck:
      test: ["CMD-SHELL", "curl --fail http://localhost:4000 || exit 1"]
      retries: 3
      start_period: 20s
      timeout: 5s
    restart: unless-stopped

volumes:
  db_data:
  uploads:

Prefer a managed setup? WinterFlow installs, configures, and updates Claper for you using this same Docker Compose configuration.