Skip to content

Project Type Editor

The Project Type Editor is a dedicated page (not a dialog) that controls both type-level metadata and the ordered work-item-type schema used by downstream projects and tasks. Open it from the Project Types list by clicking + New Project Type or the pencil icon on any existing type.

Open Projects from the sidebar, navigate to Settings → Project Types, then click + New Project Type (creates a new type) or the pencil icon on an existing card (edits that type). Write-level permission on projects.project_types is required to save.

Project type editor page

FieldRequiredNotes
NameYesMax 100 characters. Auto-generates the Key when Key has not been manually edited.
KeyYesSlug-format; max 60 characters. Auto-derived from Name on create. Locked after the type is saved (cannot be changed on edit).
DescriptionNoFree-text; displayed on the type card in the catalog.
IconNoOpens the IconPicker overlay — search and select from the Lucide icon catalog.
ColorNoA combined color-swatch input and hex text field (#RRGGBB). Both controls stay in sync.

A live preview strip appears below the fields once a name or icon is set, showing the icon chip and key exactly as they appear in project cards.

On the New Type route only, a Start from template button appears in the type metadata card. Clicking it opens the Template Picker dialog, which lists predefined project-type templates (e.g., Software Development, Marketing Campaign). Selecting a template fills all metadata fields and pre-populates the work-item schema rows in one step. You can then modify any field before saving.

Template bootstrap is not available in edit mode to avoid overwriting existing data.

The lower section of the page manages the ordered list of work-item types (WITs) for this project type. The editor is responsive: on desktop it renders as a scrollable table; on mobile it renders as stacked cards. Both layouts share the same fields and drag behavior.

FieldRequiredNotes
NameYesDisplay name for this work-item type. Auto-generates Key when Key is blank.
KeyYesSlug-format; must be unique across active (non-deleted) rows in this type. Locked for existing WITs in edit mode.
IconNoOpens the IconPicker; defaults to CheckSquare.
ColorNoColor swatch + hex text field; defaults to #3b82f6.
Hierarchy levelNo1, 2, or 3 — controls nesting depth within a project.
Allow childrenNoToggle; when off, this WIT cannot contain child work items.

Click + Add row (below the table on desktop, or the dashed-border button on mobile) to append a blank work-item type row. Fill in at least Name and Key before saving.

Each row has a grip handle (six-dot icon) on its left edge. To reorder:

  • Desktop / pointer device — Click and hold the grip, then drag the row up or down. A ghost card follows the cursor. Release to drop.
  • Mobile / touch — Touch and hold the grip for 200 ms to activate drag, then drag. A distance tolerance of 5 px prevents accidental drags.
  • Keyboard — Focus the grip and use arrow keys (dnd-kit keyboard sensor).

Sort order is determined by the row’s position in the list at save time. Position changes are applied locally and persist when you click Save.

In edit mode, removing a row marks it as deleted (struck-through, dimmed) rather than removing it from the UI immediately. This allows you to undo a removal before saving. Click the Restore button (circular-arrow icon) to un-delete a row. Deleted rows are excluded from the saved payload.

In create mode, removing a row permanently removes it from the local form.

Validation runs on field blur and on submit.

RuleBehavior
Name required (type)Save button disabled while Name is empty
Key required (type)Save button disabled while Key is empty
Name required (WIT row)Row name error shown; Save blocked
Key required (WIT row)Row key error shown; Save blocked
Key unique (WIT rows)Duplicate key across active rows shows “Key already in use”; Save blocked
Color formatColor must be a valid 6-digit hex (#RRGGBB); invalid value shows inline error
  • Save — Creates a new type (/projects/types/new) or updates the existing type (/projects/types/:id/edit). Only active (non-deleted) WIT rows are included in the saved payload, renumbered to a normalized sort order. After save, the editor navigates back to the Project Types list and invalidates module queries.
  • Cancel — If the form has unsaved changes, a browser confirmation dialog asks whether to leave. Confirming navigates back to the Project Types list without saving.
ActionRequired Permission
Open editor (read-only view not supported)Write (projects.project_types)
Save new typeWrite (projects.project_types)
Save editsWrite (projects.project_types)
Delete a typeAdmin (projects.project_types) — done from the Project Types list

Superusers bypass permission checks.