aboutsummaryrefslogtreecommitdiffstats

SlotFinder

A web-based meeting time finding tool with calendar-based availability selection.

Features

  • Calendar-based day/range selection
  • Hour slot selection for availability
  • Real-time ranking of best meeting times
  • OIDC authentication (Keycloak)
  • Support for guest responses (no login required)
  • Profile picture sync from OAuth provider

Quick Start (Development)

# Start PostgreSQL and Keycloak (preconfigured)
docker compose up -d

# Copy env and run app
cp .env.example .env
uv run python app.py

Open http://localhost:5000 and login with: - Username: admin - Password: admin

Docker Compose Setup

File Purpose
docker-compose.yml Full stack (app + postgres + keycloak)
docker-compose.dev.yml Dev override - disables app container
docker-compose.override.yml Symlink to dev.yml for local debugging

Dev mode (default): Only runs postgres & keycloak, you run the app locally:

ln -sf docker-compose.dev.yml docker-compose.override.yml
docker compose up -d
uv run python app.py

Production mode: Runs everything in containers:

rm -f docker-compose.override.yml
docker compose up -d

Keycloak Admin

  • URL: http://localhost:8080
  • Admin: admin / admin
  • Preconfigured realm: slotfinder

Environment Variables

Variable Default Description
SECRET_KEY dev-secret-key Flask secret key
DATABASE_URL postgresql://slotfinder:slotfinder@localhost/slotfinder PostgreSQL connection
SESSION_COOKIE_SECURE false Require HTTPS for session cookies (set to true in production)
OIDC_CLIENT_ID slotfinder Keycloak client ID
OIDC_CLIENT_SECRET slotfinder-dev-secret Keycloak client secret
OIDC_DISCOVERY_URL http://localhost:8080/realms/slotfinder/.well-known/openid-configuration OIDC discovery endpoint
OIDC_USE_GIVEN_NAME false Store first/last name from OAuth provider

Usage

  1. Login via SSO to create polls
  2. Share poll link with participants
  3. Select available days on the calendar (click or drag)
  4. Select available hours
  5. Submit your availability
  6. View ranked time slots showing who is available