Installation

Try Who's OOO locally with Docker, then deploy it to fortrabbit or your own server

The easiest way to run Who's OOO in production is on fortrabbit — a PHP hosting platform purpose-built for Symfony apps. No Docker required.

  1. Create a fortrabbit App — use the minimal stack configuration (€5/month) when selecting components in the app creation wizard
  2. Install the fortrabbit GitHub app on your GitHub account
  3. Connect your GitHub repository to the fortrabbit App — you can select an existing repo or create a new one during app setup
  4. Map your deployment branch (e.g. main) to the fortrabbit environment
  5. Configure your .env variables in the fortrabbit Dashboard
  6. Deploy by pushing to your mapped branch — fortrabbit deploys automatically on each git push, or you can trigger deployments manually through the Dashboard

fortrabbit's GitHub integration handles deployment pipelines with Composer and Node.js, intelligent caching for fast successive deployments, and comprehensive settings for deployment strategy, include/exclude patterns, and source directory configuration. We run our own Who's OOO instance on fortrabbit.

Whichever host you choose, a few steps from the Production Deployment guide apply everywhere:

  • Create the first admin account. Production never loads demo data, so nobody can log in until you create an admin by hand.
  • Run the background worker. Emails, auto-approvals, and scheduled jobs need one messenger:consume scheduler_default scheduler_weekly_digest async process running, and only one. See Background workers.
  • Compile assets after each deploy when you're not using the Docker production image: php bin/console asset-map:compile.

Try it locally with Docker

The quickest way to look around is the development stack. It boots with demo data, so you can log in straight away.

Warning: The development stack is built to be thrown away. Its entrypoint drops the database and reloads demo data every time the container starts. Never use it for real data. For a self-hosted production install, follow Production Deployment.

Prerequisites

Tool Version
Docker 20+
Docker Compose 2+
Git any
just any

You don't need PHP, MySQL, Node, or Composer on your machine. Everything runs inside containers, and just start is a shortcut for docker compose up -d.

Clone and start

git clone https://github.com/igornast/who-is-out-of-office.git
cd who-is-out-of-office
just start

These services start:

Service Port Description
nginx 80 Web server
php — PHP-FPM with Xdebug
worker — Sends emails and runs scheduled jobs (auto-approve, digest, …)
db 3306 MySQL 8.4
mailer 8025 Mailpit, a local email catcher

On first boot the PHP container installs Composer dependencies, waits for the database, runs migrations, and loads demo data. When the container logs show "Starting PHP-FPM", the app is ready.

The development stack only runs with APP_ENV set to dev or test. Anything else, for example APP_ENV=prod left in app/.env.local, stops the PHP container before it touches the database. For production, use the Production Deployment setup instead.

Log in

Open http://localhost/login in your browser. After logging in you land on the dashboard at /app/dashboard.

Login page with email and password fields The login page

The demo data includes an account for every role:

Role Email Password
Admin admin@whoisooo.app 123
Manager manager@whoisooo.app 123
User user@whoisooo.app 123

Warning: These accounts exist only in the development stack. Production never loads demo data, so you create the first admin yourself.

Dashboard overview

What you see on the dashboard depends on your role:

  • Admin — full organization view: leave balance stats, all pending requests, who's out today, upcoming absences, birthdays, and work anniversaries.
  • Manager — same sections, scoped to your direct reports.
  • User — your personal leave balance, who's out today and this week, your upcoming absences, and organization-wide birthdays and work anniversaries.

The sidebar groups pages into sections: My Leave (your requests and the calendar), My Team (for managers and admins), Organization, Settings (admins only), and Account (profile, appearance, security).

Admin dashboard showing stats cards, upcoming absences, birthdays, and work anniversaries The admin dashboard with all sections visible

Local email with Mailpit

The development stack includes Mailpit, a local email catcher. Every email the app sends (invitations, leave request notifications, password resets) is captured here instead of being delivered.

Open http://localhost:8025 to view caught emails.

Tip: No SMTP configuration needed for local development — Mailpit is pre-configured in the Docker setup.