Settings
Workspace defaults — week start, rounding, runaway-timer threshold, auto-submit, default rate, currency, and rate overrides.
Settings
Path: /time/settings. The page uses the standard ModuleSettingsLayout with sub-tabs.
Screenshot needed — /time/settings General tab with the workspace defaults form
General
Single form, persisted in the time_tracking_settings table (one row per workspace, lazy-created on first read).
| Setting | Default | Effect |
|---|---|---|
| Week start day | Monday (1) | Drives the timesheet grid columns; 0–6 (Sunday=0) |
| Rounding minutes | 0 (no rounding) | Granularity to round timer-stopped entries to (5, 6, 15, 30) |
| Rounding strategy | Nearest | nearest / up / down |
| Default billable | false | Whether new entries default to billable |
| Require description | false | Forces non-empty description on every entry |
| Allow future entries | false | If false, refuses entries with log_date > today |
| Auto-submit day-of-week | unset | (Pro) If set, the cron auto-submits last week's drafts on this day |
| Default hourly rate | 0 | Fallback when no override matches |
| Default currency | USD | Currency stamped when no override matches |
| Default weekly hours | 40 | Utilization denominator when People isn't subscribed |
| Runaway timer hours | 12 | Free: notify-only when a timer runs past this. (Pro) Auto-stop when runaway_timer_hours_auto_stop is on. |
| Idle minutes | 10 | Threshold (minutes of inactivity) before the idle prompt opens while a timer is running. See Timer → Idle detection. |
| Pomodoro focus minutes | 25 | Length of a focus session in Pomodoro mode. |
| Pomodoro break minutes | 5 | Length of a short break (between focus sessions). |
| Pomodoro long break minutes | 15 | Length of a long break (after every 4th focus). |
| Onboarding dismissed at | unset | Set automatically when the user dismisses the onboarding checklist on /time (auto-set when ≥80% complete). |
The runaway-timer threshold is per-workspace, not per-user. If your team has occasional 14-hour deploy days, raise it before the cron starts auto-stopping legitimate sessions.
Rates
Pro — requires Finance subscription.
The rate-overrides table. See Rates & Billing for full priority logic.
UI:
- Add row → pick user / project / both, set rate / currency / effective dates
- Edit row inline
- Delete row (soft confirm)
Constraints:
- Must set at least one of
user_idorproject_id - Effective date range must be valid (
from≤toif both set)
Approvers
(Pro) Multi-level approval routes — the heart of the Time Pro approval flow. See Approvals for routing semantics.
UI on /time/settings/approvers shows every route grouped by scope (user / team / project / workspace). Each row:
- Scope (e.g. "Team: Engineering")
- Levels (1, 2, 3, …) with the approver + optional fallback per level
- Edit / delete buttons
The free tier still uses the simpler model: anyone with time:approve permission can approve any submitted timesheet. To grant approval rights:
- Go to Teams → Roles
- Edit (or create) a role
- Check the
time:approvepermission - Assign the role to the relevant users
Workspace admins automatically have time:approve regardless of role.
Integrations
Three sub-tabs: Native integrations, Browser extensions, Webhooks.
Native integrations
External calendars (Google / Outlook / iCal) connect from here. See Calendar Import for the full flow. Disconnect with one click.
Browser extensions
Direct download buttons for Chrome and Firefox + a list of supported apps the extension injects into. See Browser Extension.
Webhooks
The webhooks UI. See Integrations for full event list and delivery semantics.
Per webhook row:
- Name — friendly label
- URL — endpoint to receive POSTs
- Secret — generated once (visible in a one-time dialog after save), used for HMAC signing
- Events — multi-select from the available event list
- Enabled toggle
- Test button — fires a synthetic
webhook.testevent - Delivery log — last 50 attempts with status, response code, response body
Don't roll your own outbound webhooks elsewhere — the factory handles HMAC, retries, dead-letter queuing, and the daily delivery cron. Hitting it manually defeats those guarantees.
Permissions
Time-tracking-specific permissions:
| Permission | Default role | Effect |
|---|---|---|
time:read | member | View own entries |
time:read_all | manager / admin | View team entries |
time:write | member | Log time, edit own entries |
time:approve | manager / admin | Approve / reject timesheets and entries |
time:settings | admin | Edit workspace defaults |
time:invoice | finance / admin | Use the invoice bridge |
Configure these on the Teams → Roles page.
Database tables (advanced — for admins / devs)
If you ever need to inspect the underlying data, the time module owns these tables:
| Table | What's in it |
|---|---|
time_entries | Every entry (timer + manual + imported + API). Has cost_rate + locked_at columns. |
timesheets | Per-week containers, one per (user, period_start). Has current_approver_user_id for chain progress. |
time_tracking_settings | One row per workspace, the General-tab settings. |
time_rate_overrides | The rate-overrides matrix (bill + cost rate columns). |
time_approval_routes | (Pro) Multi-level approval routes per scope. |
time_entry_activities | Per-entry activity feed (status changes, hour edits, billable toggles). |
time_calendar_imports | Ghost-block events from connected calendars + their conversion state. |
time_goals | Per-user / per-project hour targets. |
time_webhooks | Configured outbound webhooks. |
time_webhook_deliveries | Delivery attempts log. |
All workspace-scoped via RLS.