im-overdue

im-overdue

Docker app from cooki3's Repository

Overview

Personal time account with calendar evidence imports, working-time entries, leave tracking and reports. Single-user password login; all application data stays in a local SQLite database. No external service credentials or automatic time tracking. Configure the exact browser-facing app URL and a private password before starting.

I'm Overdue owl

I'm Overdue

Your work. Your time. A clearer week.

CI checks on main License: MIT Node.js 24 or newer

Public container on GHCR Docker: AMD64 and ARM64 English and Deutsch Buy Me a Coffee

English · Deutsch

Quick links
🚀 Get started · 👀 Take a look · ✨ Features · 📅 How it works · 🔧 Run & maintain · 📚 Documentation · ☕ Support

A busy week can be hard to piece together. I'm Overdue gives your work a clearer home: a personal time account on your own machine or server, with your activities, recorded hours and balance in one place.

Compare activity from your calendar, Slack and GitHub exports with the working time you record yourself. Import normalized JSON/CSV files from your own exporters; the app does not connect to those services’ APIs. No cloud service, service credentials or automatic tracking.

Screenshots

The week calendar with imported evidence beside recorded working time

The real app with synthetic example data. Imported activities help you remember; you record working time yourself.

Features

  • 📅 See your week clearly. Week and month calendars, precise time entry and reusable templates.
  • ⚖️ Keep your balance. An opening balance, editable payouts and corrections, with confirmed, open and future amounts kept separate.
  • 🌿 Plan absences. Combine vacation, time off in lieu and sickness; dated German state holiday rules and individual exceptions respect your working-time target.
  • 🔌 Bring your evidence. Named data sources with JSON/CSV assignment, previews and import history.
  • 📄 Take your records with you. Printable timesheets with an optional account section, separate account CSV and SQLite backups.
  • Choose your language. English by default, with English / Deutsch on the login page and in settings.
  • Host it yourself. One Docker container for the UI, API and SQLite; AMD64 and ARM64 supported.

Start with Docker

The public image ghcr.io/ill-yes/im-overdue:latest includes the app and its database engine. Docker selects the matching AMD64 or ARM64 image.

You will need: Docker Engine or Docker Desktop with Compose v2, and curl. For remote access, prepare an HTTPS reverse proxy; see the Docker and Unraid guide.

1. Download the configuration

Create a new installation folder and download its two configuration files:

mkdir im-overdue &&
cd im-overdue &&
curl -fsSL https://raw.githubusercontent.com/ill-yes/im-overdue/main/compose.yaml -o compose.yaml &&
curl -fsSL https://raw.githubusercontent.com/ill-yes/im-overdue/main/.env.example -o .env &&
chmod 600 .env

2. Set your address and password

Edit .env and fill in both required values:

  • IM_OVERDUE_ORIGIN: Your exact browser address, e.g. http://192.168.1.20:4317 or https://time.example.net, without a path or trailing slash.
  • IM_OVERDUE_PASSWORD: A unique password of 12–256 characters; put it in single quotes to preserve $ and # literally.

3. Start and sign in

Run these commands in the installation folder:

docker compose pull
docker compose up -d --no-build

Open the configured address and sign in. Data is stored in ./appdata, separate from local development data. Use HTTPS through your reverse proxy for remote access; HTTP sends your password and data without encryption.

Choose an image version · Set up Unraid · Update an installation · Back up and restore

Start locally

Requires Node.js 24 or newer and npm:

npm ci
npm run dev

Open http://127.0.0.1:4317. The default local mode listens only on loopback and does not require a password. For a production build, run npm run build followed by npm start. See development for configuration and tests.

First steps

  1. Check your time zone, weekly target and working days in settings. If applicable, add your German state under Public holidays and review local exceptions.
  2. Set an opening date and balance under Time account → Hours account if you want a running account. Zero is a valid starting balance.
  3. Record your first work block and any Absences in the calendar. You can start without importing anything.
  4. Review and close completed weeks, then export a timesheet when needed.

Optional: bring your evidence. Create named data sources, analyze an activity file, assign its source types and review the preview before saving. Activities help you remember; they never create working time automatically.

Follow the working-day guide for the detailed steps, including quick entry, breaks and precise times.

Documentation

Start with what you want to do:

The documentation home brings these paths together, with quick links to help you find a solution when you need one.

License

I'm Overdue is licensed under the MIT License, including its source code, templates and metadata. See NOTICE for third-party license information and contributing for contribution terms.

Support I'm Overdue

Found a bug, have an idea, or want to help improve the app? Head to GitHub Issues, or read the contribution guide. Please report security issues privately as described in the security policy.

If I'm Overdue makes your week a little easier, you can buy me a coffee. Support is entirely optional. Thank you for spending some of your time here.

Buy Me a Coffee

Requirements

A dedicated appdata directory containing only im-overdue.sqlite and its SQLite WAL/SHM files. Root initializes only these paths, then the app runs as PUID/PGID. HTTP is unencrypted; use HTTPS at a reverse proxy for remote access. When using HTTPS, also set the advanced WebUI field to the same configured app URL. See the deployment guide.

Categories

Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/ill-yes/im-overdue:latest
Last Updated2026-11-11
First Seen2026-11-11

Runtime arguments

Web UI
http://[IP]:[PORT:4317]/
Network
bridge
Shell
sh
Privileged
false

Template configuration

WebUI PortPorttcp

HTTP port. Include the published host port in App URL.

Target
4317
Default
4317
AppdataPathrw

Dedicated directory for this app only. Do not map the appdata parent. Files get private permissions and PUID/PGID ownership.

Target
/data
Default
/mnt/user/appdata/im-overdue
App URLVariable

Required exact browser address, e.g. http://192.168.1.20:4317 or https://time.example.net. No path or trailing slash. HTTPS requires the reverse proxy to preserve Host and the advanced WebUI field to match.

Target
IM_OVERDUE_ORIGIN
PasswordVariable

Required unique password: 12-256 characters, at most 1024 UTF-8 bytes. Change here and restart to replace it and invalidate all sessions. Stored in Unraid's container configuration.

Target
IM_OVERDUE_PASSWORD
Trusted proxiesVariable

Optional comma-separated IPs or CIDR ranges of your reverse proxy, e.g. 172.16.0.0/12. Its X-Forwarded-For header then identifies each browser for the login limit. Leave empty without a proxy.

Target
IM_OVERDUE_TRUSTED_PROXIES
PUIDVariable

Non-root numeric user ID after initialization; Unraid nobody is 99.

Default
99
PGIDVariable

Non-root numeric group ID after initialization; Unraid users is 100.

Default
100