Rallly Meeting Scheduler
Self-hosted Doodle alternative for scheduling meetings and events.
Overview
Rallly is a modern, open-source meeting scheduler that serves as a self-hosted alternative to Doodle and other commercial polling platforms. Built with Next.js and designed for privacy-conscious organizations, Rallly allows users to create time-slot polls for meeting coordination without requiring participants to create accounts. The platform emphasizes simplicity and user experience while giving organizations full control over their scheduling data and participant information.
This deployment combines the Rallly application container with a dedicated PostgreSQL database instance. The rallly service runs the Node.js-based web application on port 3000, while the db service provides persistent data storage using PostgreSQL 15 Alpine. The configuration includes comprehensive email integration through SMTP settings, enabling automated notifications when participants vote on polls or when poll creators receive responses.
This stack is ideal for teams, organizations, and communities that need reliable meeting coordination without depending on external services or compromising participant privacy. The PostgreSQL backend ensures data integrity and supports complex queries for reporting and analytics, while the containerized approach simplifies deployment across different environments from development to production.
Key Features
- Anonymous poll participation without requiring user accounts or registrations
- Real-time poll updates showing participant responses as they vote
- Comprehensive SMTP email integration for poll notifications and reminders
- PostgreSQL backend with ACID compliance for reliable data persistence
- Responsive web interface optimized for both desktop and mobile devices
- Customizable poll options with time slots, dates, and text-based choices
- Poll creator dashboard for managing multiple polls and viewing analytics
- Privacy-focused design with self-hosted data storage and no external tracking
Common Use Cases
- 1Remote teams coordinating weekly standup meetings across different time zones
- 2Event organizers scheduling workshops, webinars, or community meetups
- 3Educational institutions coordinating office hours, study groups, or parent-teacher conferences
- 4Healthcare practices allowing patients to vote on preferred appointment slots
- 5Project managers finding optimal times for sprint planning or retrospective meetings
- 6Non-profit organizations scheduling volunteer meetings and board sessions
- 7Family or friend groups coordinating social events, dinners, or vacation planning
Prerequisites
- Docker and Docker Compose installed with minimum 1GB RAM for PostgreSQL performance
- Environment variables configured for database password and application secret
- SMTP server credentials for email notifications and poll invitations
- Base URL configuration matching your domain or IP address for proper link generation
- Port 3000 available for web interface access
- Basic understanding of poll creation workflows and participant management
For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms
docker-compose.yml
docker-compose.yml
1services: 2 rallly: 3 image: lukevella/rallly:latest4 container_name: rallly5 environment: 6 - DATABASE_URL=postgres://rallly:${DB_PASSWORD}@db:5432/rallly7 - SECRET_PASSWORD=${SECRET_PASSWORD}8 - NEXT_PUBLIC_BASE_URL=${BASE_URL}9 - SUPPORT_EMAIL=${SUPPORT_EMAIL}10 - SMTP_HOST=${SMTP_HOST}11 - SMTP_PORT=${SMTP_PORT}12 - SMTP_USER=${SMTP_USER}13 - SMTP_PWD=${SMTP_PASSWORD}14 - SMTP_SECURE=false15 ports: 16 - "3000:3000"17 depends_on: 18 - db19 networks: 20 - rallly-network21 restart: unless-stopped2223 db: 24 image: postgres:15-alpine25 container_name: rallly-db26 environment: 27 - POSTGRES_USER=rallly28 - POSTGRES_PASSWORD=${DB_PASSWORD}29 - POSTGRES_DB=rallly30 volumes: 31 - postgres-data:/var/lib/postgresql/data32 networks: 33 - rallly-network34 restart: unless-stopped3536volumes: 37 postgres-data: 3839networks: 40 rallly-network: 41 driver: bridge.env Template
.env
1# Rallly2BASE_URL=http://localhost:30003SUPPORT_EMAIL=support@example.com45# Generate with: openssl rand -base64 326SECRET_PASSWORD=your_secret_password7DB_PASSWORD=secure_rallly_password89# SMTP Settings10SMTP_HOST=smtp.example.com11SMTP_PORT=58712SMTP_USER=rallly@example.com13SMTP_PASSWORD=smtp_passwordUsage Notes
- 1Web UI at http://localhost:3000
- 2Create polls without account
- 3Share poll links with participants
- 4Email notifications for votes
- 5Self-hosted Doodle alternative
Individual Services(2 services)
Copy individual services to mix and match with your existing compose files.
rallly
rallly:
image: lukevella/rallly:latest
container_name: rallly
environment:
- DATABASE_URL=postgres://rallly:${DB_PASSWORD}@db:5432/rallly
- SECRET_PASSWORD=${SECRET_PASSWORD}
- NEXT_PUBLIC_BASE_URL=${BASE_URL}
- SUPPORT_EMAIL=${SUPPORT_EMAIL}
- SMTP_HOST=${SMTP_HOST}
- SMTP_PORT=${SMTP_PORT}
- SMTP_USER=${SMTP_USER}
- SMTP_PWD=${SMTP_PASSWORD}
- SMTP_SECURE=false
ports:
- "3000:3000"
depends_on:
- db
networks:
- rallly-network
restart: unless-stopped
db
db:
image: postgres:15-alpine
container_name: rallly-db
environment:
- POSTGRES_USER=rallly
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_DB=rallly
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- rallly-network
restart: unless-stopped
Quick Start
terminal
1# 1. Create the compose file2cat > docker-compose.yml << 'EOF'3services:4 rallly:5 image: lukevella/rallly:latest6 container_name: rallly7 environment:8 - DATABASE_URL=postgres://rallly:${DB_PASSWORD}@db:5432/rallly9 - SECRET_PASSWORD=${SECRET_PASSWORD}10 - NEXT_PUBLIC_BASE_URL=${BASE_URL}11 - SUPPORT_EMAIL=${SUPPORT_EMAIL}12 - SMTP_HOST=${SMTP_HOST}13 - SMTP_PORT=${SMTP_PORT}14 - SMTP_USER=${SMTP_USER}15 - SMTP_PWD=${SMTP_PASSWORD}16 - SMTP_SECURE=false17 ports:18 - "3000:3000"19 depends_on:20 - db21 networks:22 - rallly-network23 restart: unless-stopped2425 db:26 image: postgres:15-alpine27 container_name: rallly-db28 environment:29 - POSTGRES_USER=rallly30 - POSTGRES_PASSWORD=${DB_PASSWORD}31 - POSTGRES_DB=rallly32 volumes:33 - postgres-data:/var/lib/postgresql/data34 networks:35 - rallly-network36 restart: unless-stopped3738volumes:39 postgres-data:4041networks:42 rallly-network:43 driver: bridge44EOF4546# 2. Create the .env file47cat > .env << 'EOF'48# Rallly49BASE_URL=http://localhost:300050SUPPORT_EMAIL=support@example.com5152# Generate with: openssl rand -base64 3253SECRET_PASSWORD=your_secret_password54DB_PASSWORD=secure_rallly_password5556# SMTP Settings57SMTP_HOST=smtp.example.com58SMTP_PORT=58759SMTP_USER=rallly@example.com60SMTP_PASSWORD=smtp_password61EOF6263# 3. Start the services64docker compose up -d6566# 4. View logs67docker compose logs -fOne-Liner
Run this command to download and set up the recipe in one step:
terminal
1curl -fsSL https://docker.recipes/api/recipes/rallly-scheduling/run | bashTroubleshooting
- Database connection refused errors: Verify DB_PASSWORD environment variable matches between rallly and db services
- Email notifications not sending: Check SMTP credentials and ensure SMTP_HOST is reachable from the container network
- Poll links showing localhost in emails: Update NEXT_PUBLIC_BASE_URL to match your actual domain or IP address
- Container startup failures: Ensure postgres-data volume has proper permissions and sufficient disk space
- Web interface showing 502 errors: Check that rallly container can connect to db service on port 5432 within rallly-network
- Participants unable to access polls: Verify BASE_URL configuration and firewall settings for port 3000
Community Notes
Loading...
Loading notes...
Download Recipe Kit
Get all files in a ready-to-deploy package
Includes docker-compose.yml, .env template, README, and license
Components
ralllypostgresql
Tags
#scheduling#meetings#doodle-alternative#rallly#polls
Category
Productivity & CollaborationAd Space
Shortcuts: C CopyF FavoriteD Download