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.
Accessing the Page
Section titled “Accessing the Page”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.

Type-Level Fields
Section titled “Type-Level Fields”| Field | Required | Notes |
|---|---|---|
| Name | Yes | Max 100 characters. Auto-generates the Key when Key has not been manually edited. |
| Key | Yes | Slug-format; max 60 characters. Auto-derived from Name on create. Locked after the type is saved (cannot be changed on edit). |
| Description | No | Free-text; displayed on the type card in the catalog. |
| Icon | No | Opens the IconPicker overlay — search and select from the Lucide icon catalog. |
| Color | No | A 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.
Template Bootstrap
Section titled “Template Bootstrap”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.
Work-Item Type Schema Editor
Section titled “Work-Item Type Schema Editor”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.
Columns / Fields per Row
Section titled “Columns / Fields per Row”| Field | Required | Notes |
|---|---|---|
| Name | Yes | Display name for this work-item type. Auto-generates Key when Key is blank. |
| Key | Yes | Slug-format; must be unique across active (non-deleted) rows in this type. Locked for existing WITs in edit mode. |
| Icon | No | Opens the IconPicker; defaults to CheckSquare. |
| Color | No | Color swatch + hex text field; defaults to #3b82f6. |
| Hierarchy level | No | 1, 2, or 3 — controls nesting depth within a project. |
| Allow children | No | Toggle; when off, this WIT cannot contain child work items. |
Adding Rows
Section titled “Adding Rows”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.
Drag-to-Reorder
Section titled “Drag-to-Reorder”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.
Soft-Delete and Restore (Edit Mode)
Section titled “Soft-Delete and Restore (Edit Mode)”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 Rules
Section titled “Validation Rules”Validation runs on field blur and on submit.
| Rule | Behavior |
|---|---|
| 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 format | Color must be a valid 6-digit hex (#RRGGBB); invalid value shows inline error |
Save and Cancel
Section titled “Save and Cancel”- 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.
Permissions
Section titled “Permissions”| Action | Required Permission |
|---|---|
| Open editor (read-only view not supported) | Write (projects.project_types) |
| Save new type | Write (projects.project_types) |
| Save edits | Write (projects.project_types) |
| Delete a type | Admin (projects.project_types) — done from the Project Types list |
Superusers bypass permission checks.
Related Pages
Section titled “Related Pages”- Project Types — Return to the catalog after saving
- Projects List — Use a project type when creating a project