Skip to content

Projects & Types

Every piece of work in VERA lives inside a project. A project has a type, a client, and a budget. The type determines how VERA calculates revenue.


Project types

VERA supports five project types. The type must always be specified when creating a project — VERA will never assume a default.

Retainer

The client pays a fixed monthly fee for a set number of hours.

  • Budget: annual hours (e.g. 480 h/yr = 40 h/month)
  • Revenue: fixed monthly fee (not calculated per-entry)
  • Billing model: burn rate — VERA tracks monthly pace and flags over/underspend
  • Work gate: no hard stop; burn rate alerts warn when pacing over budget
  • Use case: ongoing agency relationships with a monthly scope

"Create project Nike Ongoing as Retainer with 480 hours per year"

See Retainers for burn rate details.


T&M (Time & Materials)

Bill as you go. Revenue is calculated from logged hours.

  • Budget: total project hours
  • Revenue: hours_logged × billing_rate
  • Billing model: per-entry accrual
  • Work gate: stop work when hours_budget is exhausted
  • Use case: open-scope work where effort is unpredictable

"Create project Nike Campaign as T&M"


Fixed Price

A flat contract for a defined scope. Revenue accrues as work is completed.

  • Budget: total project hours (the effort estimate)
  • Contract value: the agreed price in dollars
  • Revenue: (hours_logged ÷ hours_budget) × contract_value — capped at 100%
  • Billing model: percentage-of-completion
  • Work gate: stop work when hours_budget is exhausted
  • Use case: scoped deliverables with a negotiated price

"Create project Nike Rebrand as Fixed Price for $50,000 with 200 hour budget"


Pro Bono

Free work. Hours are tracked but no revenue is recognised.

  • Budget: total project hours (optional)
  • Revenue: always $0
  • Billing model: none
  • Use case: charity work, community projects, internal initiatives

"Create project Community Website as Pro Bono"


Agile

Sprint-based work. The parent project is a container; each sprint is its own Fixed-Price-style billing unit.

  • Parent project: no contract value or budget — it's just a named container
  • Sprints: each sprint has its own contract_value and hours_budget
  • Revenue per sprint: (hours_logged ÷ hours_budget) × contract_value when status = active
  • Sprint statuses: planned = $0 revenue | active = revenue accrues
  • Work gate: stop work when the sprint's hours_budget is exhausted; raise a new sprint for additional scope
  • Use case: iterative delivery where each sprint is separately contracted

"Create project Acme App as Agile" → then offer Sprint 1

See Agile & Sprints.


Project fields

FieldDescriptionWho sets it
nameProject name, unique per tenantOwner
clientThe client this project belongs toOwner
typeOne of the five types aboveOwner
budget_hoursTotal hours cap (or monthly for Retainer)Owner via set_project_budget
contract_valueDollar amount (Fixed Price & Agile sprints)Owner
billing_rateHourly rate billed to clientOwner (in Projects Master)
is_billableWhether hours generate revenueAuto: false for Pro Bono, true otherwise
alert_threshold% budget used before warning fires (default 80%)Owner/Manager
deadlineTarget delivery dateOwner via set_project_deadline
pm_user_idAssigned project managerOwner via assign_pm
project_categoryclient, internal, pto, sick, leave, time_offAuto-set
statusactive or inactiveOwner

Project category vs. type

These are two separate fields:

  • Type (T&M, Fixed Price, etc.) governs billing and revenue recognition
  • Category (client, internal, time_off, etc.) governs how VERA treats the project in reports and queries

Internal projects (training, admin, hiring) should use the "Internal" client and project_category = "internal". They still have a type (usually T&M or Pro Bono) for tracking purposes.

Protected projects (Out of Office, Sick, Leave) are auto-created with special categories and cannot be deleted.


The two-tier budget model

There are two completely separate budget concepts. Do not confuse them.

Tier 1 — Project total: budget_hours in the Projects sheet. This is the sold or contracted hours for the whole project. Set by Owner only via set_project_budget. Think of it as the pie.

Tier 2 — Envelopes: rows in the Budgets sheet (07. Budgets). This is how Managers slice the pie — each team member gets a per-person envelope. The sum of all envelopes should not exceed Tier 1.

A Manager asking "how do I set the budget?" wants to distribute hours to their team (Tier 2). The overall budget is set by the Owner (Tier 1) and is not the Manager's to change.

See Envelopes for the full picture.


Project lifecycle

Created → Budget set → PM assigned → Tasks enabled → Envelopes created

                               Team logs time → Alerts fire if approaching budget

                                    Completed / Inactive

No formal state machine enforces this flow — VERA relies on the configured status field and the business rules in its system prompt.


Clients

Every project belongs to a client. If a client doesn't exist yet, VERA creates it automatically when a project is created.

Internal or overhead work belongs to the built-in "Internal" client. VERA creates "Internal" automatically when the first internal project is provisioned.

Financial rollups are client-aware: get_client_summary aggregates hours, budget, and spend across all of a client's projects.

Further reading

VERA by talktalkmake