WorkestraDocs
PlatformTime Tracking

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.

Time settings layout

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).

SettingDefaultEffect
Week start dayMonday (1)Drives the timesheet grid columns; 06 (Sunday=0)
Rounding minutes0 (no rounding)Granularity to round timer-stopped entries to (5, 6, 15, 30)
Rounding strategyNearestnearest / up / down
Default billablefalseWhether new entries default to billable
Require descriptionfalseForces non-empty description on every entry
Allow future entriesfalseIf false, refuses entries with log_date > today
Auto-submit day-of-weekunset(Pro) If set, the cron auto-submits last week's drafts on this day
Default hourly rate0Fallback when no override matches
Default currencyUSDCurrency stamped when no override matches
Default weekly hours40Utilization denominator when People isn't subscribed
Runaway timer hours12Free: notify-only when a timer runs past this. (Pro) Auto-stop when runaway_timer_hours_auto_stop is on.
Idle minutes10Threshold (minutes of inactivity) before the idle prompt opens while a timer is running. See Timer → Idle detection.
Pomodoro focus minutes25Length of a focus session in Pomodoro mode.
Pomodoro break minutes5Length of a short break (between focus sessions).
Pomodoro long break minutes15Length of a long break (after every 4th focus).
Onboarding dismissed atunsetSet 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_id or project_id
  • Effective date range must be valid (fromto if 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:

  1. Go to Teams → Roles
  2. Edit (or create) a role
  3. Check the time:approve permission
  4. 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.test event
  • 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:

PermissionDefault roleEffect
time:readmemberView own entries
time:read_allmanager / adminView team entries
time:writememberLog time, edit own entries
time:approvemanager / adminApprove / reject timesheets and entries
time:settingsadminEdit workspace defaults
time:invoicefinance / adminUse 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:

TableWhat's in it
time_entriesEvery entry (timer + manual + imported + API). Has cost_rate + locked_at columns.
timesheetsPer-week containers, one per (user, period_start). Has current_approver_user_id for chain progress.
time_tracking_settingsOne row per workspace, the General-tab settings.
time_rate_overridesThe rate-overrides matrix (bill + cost rate columns).
time_approval_routes(Pro) Multi-level approval routes per scope.
time_entry_activitiesPer-entry activity feed (status changes, hour edits, billable toggles).
time_calendar_importsGhost-block events from connected calendars + their conversion state.
time_goalsPer-user / per-project hour targets.
time_webhooksConfigured outbound webhooks.
time_webhook_deliveriesDelivery attempts log.

All workspace-scoped via RLS.


Next steps

  • Timer — try the core flow once settings are configured
  • Approvals — assign the time:approve permission to managers