Out Of Office, Holiday Manager

Time off, without the back‑and‑forth.

OOOhm is a calm leave tracker for small teams. Ask for days in one sentence, approve them from your inbox, and see who's out at a glance. There's no HR suite attached.

Run it yourself

Request time off

I’m taking PTO (Scheduled Time Off) from Mon, Dec 21 to Wed, Dec 23, full days .

This request takes 3 days. Afterwards you'd have 6 days left for 2026.

PTO for 2026: one square is one day. Filled is taken, striped is this request, empty is left.

Playing a few examples, counted Monday to Friday with US holidays. Change any part of the sentence to try your own.

The tour. A request, an approval and the calendar, recorded in the real app. 46 seconds, no sound.

How it works

Four screens. That’s the whole app for most people.

01

Ask in one sentence.

Pick a type and two dates. OOOhm counts the working days as you go and tells you what you’ll have left, before you send anything.

  • Half days are one choice in the sentence
  • Add a note for your approver if you like
  • Prefer labelled fields? An admin can switch the form
Home

02

Approve with the whole picture.

Every request says who else is off on those days, or that nobody in the team is. Approve or decline in one click, with a reason if you want one. It’s on their dashboard straight away.

  • One approver per person: their manager
  • Needs you, then Settled, so nothing slips
  • Approve straight from the email, too
Approvals

03

Or drag across the days.

On the calendar, press on the first day and let go on the last. Weekends and company holidays are hatched, and they never count against anyone.

  • Thanksgiving week is three days, not five
  • Keyboard and Shift-click work as well
  • Month and year views
Calendar

04

See who’s out, and when.

One list for the month, filtered by team. Your own year on one page. And if you live in your calendar app, subscribe and it stays up to date there.

  • Pending requests are marked, so plans aren’t surprises
  • Feeds for Google Calendar, Apple Calendar and Outlook
Team

Balances

A year of leave you can count on your fingers.

Each person gets a yearly allowance per leave type, and it resets on January 1. Days are counted to one decimal, so a half day is 0.5. Nothing is rounded behind anyone’s back.

What happens to the days nobody took is up to you, per leave type. Carryover is off unless you turn it on.

PTO for 2026

6 days left of 15.

  1. Jan 1 15 days for the year
  2. Mar 12 Sick day
  3. Aug 3–5 Lake house
  4. Nov 16–18 Family trip
  5. Dec 21–23 Asked for 3 days
  6. Dec 21 Approved by Maya
  7. Jan 1, 2027 A new year

For managers

Say yes from wherever the request finds you.

The request email carries everything you need to decide, and an Approve link signed for you alone. It stops working once the request is decided. Every decision, from anywhere, lands in the audit log with your name on it.

From OOOhm

Subject Lena Park asked for Dec 21 to Dec 23

Lena Park asked for PTO (Scheduled Time Off), Mon, Dec 21 to Wed, Dec 23, 2026: 3 days.

“Visiting my parents in Busan”

Aisha Khan is off then too.

Audit log

  1. Lena Park asked for 3 days of PTO
  2. Maya Chen added Christmas Eve as a holiday; 2 requests were recounted
  3. Maya Chen changed Priya Nair’s PTO allowance from 15 to 17

Each row names a person, a person through an import or the email link, their API key, or a system job. Nothing is anonymous.

Quiet by design

A few rules it never breaks.

  1. Invite-only.

    Nobody signs up on their own. An admin invites people, and they sign in with an emailed link, or with Google if you turn it on.

  2. Weekends and holidays never count.

    Set your working days and company holidays once. Add a holiday later and every request on that date is recounted, and the people affected get an email.

  3. Every change is on the record.

    Each decision and each balance change writes an audit row that names who made it. Export a person’s history as CSV before you ever delete them.

  4. One accent, one main action.

    Each screen does one thing. Pick a look for the whole company from nine themes and five layouts, including one with larger text and 48 px targets.

The OOOhm home screen in the Classic theme

Developers

Every change is an event you can build on.

OOOhm writes a domain event in the same transaction as every change, so nothing happens that your other tools can’t hear about. Webhooks are signed and retried; the REST API reads everything else.

Webhooks
HMAC-signed, delivered at least once, with retries and a replay endpoint.
REST API
People, leave types, requests, balances, holidays and events, with keys you can revoke and an OpenAPI spec.
Calendar feeds
Personal and team ICS feeds for Google Calendar, Apple Calendar and Outlook.
Read the API reference
POST https://hooks.example.com/ooohm

    Self-hosting

    Runs where you do. Your data stays in your Postgres.

    ~/ooohm
    
              
    • Docker Compose

      The database, the app, a background worker and a mail catcher, with migrations on start.

      docker compose up
    • Any Postgres 15+, or Vercel

      Your own server, Neon, Supabase or RDS. Pooled connections are detected for you. On Vercel, migrations run as part of the build.

      pnpm db:migrate && pnpm build && pnpm start
    • One machine, no database server

      Embedded Postgres in the same process, for a small team on a small box.

      pnpm start:embedded

    Moving from TimeOff.Management? One command brings over people, leave types, holidays and the whole history, and it only commits when every balance matches. How the import works

    Where it’s at

    Built for our own team first.

    We made OOOhm at Chykalophia because we wanted time off to feel like a two-minute job again. It runs our team first, and it’s ready for yours.

    The code is source-available under the Functional Source License (FSL-1.1-ALv2). Read it, change it and run it for your company. Anything except offering a competing product is fine, and each release becomes Apache 2.0 two years after it ships.

    Does it do payroll, reviews or onboarding?

    No. It tracks time off, and nothing else. It sends events if you want your HR tools to know.

    How many people is it for?

    Small teams: one company per install, departments to group people, and one manager for each person.

    What does a person need to sign in?

    An invite from an admin. Sign-in is a link by email, or Google if you set it up. There are no passwords to forget.

    Can people take half days?

    Yes, the morning or the afternoon of a single day. It counts as 0.5.

    Where is our data?

    In the Postgres database you run it on, or in a folder on the machine in embedded mode. Nothing leaves your server except the emails people expect and the webhooks you add.