Appearance
Time Tracking
Time entries are the atomic unit of VERA. Everything else — budgets, burn rates, financials — flows from the hours logged.
What is a time entry?
A single logged record of work. Every entry has exactly five meaningful fields:
| Field | Description | Example |
|---|---|---|
user_id | Who did the work | Alice (resolved from her Slack ID) |
project_id | What project it's for | Nike Rebrand |
task_id | What type of work | Development |
hours | How many hours | 4.5 (stored as decimal) |
date | When it happened | 2026-03-28 |
notes | Optional context | "Fixed auth bug on login page" |
There's also an id — a permanent sequential number assigned when the entry is created. Use this ID to edit or delete the entry later.
Task is always required
VERA will never log time without a task type. If you don't specify one, VERA will ask.
User: "4 hours on Nike"
VERA: "What type of work? (Development, Design, QA, Project Management, Client Meeting, Admin)"
This is not optional. Tasks are what connect hours to cost categories, envelopes, and billability.
Hours format
Always use hours-and-minutes format in conversation:
- ✅ "4h 30m"
- ✅ "2h"
- ✅ "45m"
- ❌ "4.5 hours"
- ❌ "4.5h"
VERA stores hours as a decimal internally (4.5), but always presents and accepts them as 4h 30m.
Billable vs. non-billable tasks
Each task type has an is_billable flag. Billable tasks generate revenue. Non-billable tasks are tracked for cost purposes only.
Example: "Admin" is typically non-billable. "Development" is typically billable. The billability is set per task type, not per entry.
Project type also affects this: Pro Bono projects have is_billable = false regardless of task type.
Logging for others
By default, Users can only log time for themselves. Managers can log time for people on their assigned projects (e.g. via log_sick_day or log_leave). Owners can log for anyone.
When logging via @mention, VERA uses the Slack user ID from the mention — name-based matching is less reliable and not used.
Editing and deleting entries
Use the entry's id to reference it:
edit_entry— change hours or notes. Owners can edit any entry; Users can only edit their own.delete_entry— permanently removes the entry. Same permission rules.
There is no "soft delete." Deleted entries are gone. VERA will warn you before the deletion.
How entries relate to budgets
Logging time does not deduct from an envelope automatically in a blocking sense — but VERA tracks the relationship:
get_project_statusshows hours logged vs. task budgetsget_estimates_vs_actualscompares allocated hours to actual logged hours- Morning summaries flag people whose logged hours exceed their envelope
The system is transparent, not restrictive. You can always log more than your budget — the alerts tell you when that's happening.
Time entry IDs
Every entry gets a permanent sequential ID assigned at creation. IDs are never reused, even if an entry is deleted. This means:
- You can always reference entry
#42in conversation: "Edit entry 42" - VERA confirms the ID when logging: "Logged 4h on Nike Rebrand (Development) (ID: 42)"
- Historical audit trails are reliable
The person field (deprecated)
The schema includes a person column (column C in 01. Time Entries), but it is deprecated and always written as an empty string. Person is resolved from user_id when needed. Do not rely on this column in reporting formulas — always join via user_id.
Protected time-off projects
Three special projects exist for absence tracking:
- Out of Office — for PTO/vacation
- Sick — for sick days
- Leave — for unpaid or extended leave
Users cannot log directly to these projects. Time is only recorded here through the formal request and approval workflow. See Time Off Requests.
Further reading
- The Problem That Made VERA Necessary — why the gap between work and recording is the root cause of bad time data