2.2 KiB
2.2 KiB
Template System
What is a Template?
A template defines the type, default structure, and available modules for a Node. Every workspace node is created from a template.
System Templates
Verstak ships with these built-in (system) templates:
| ID | Type | Default Modules | Default Files | Default Folders |
|---|---|---|---|---|
folder.default |
folder | overview, children, activity | — | — |
project.default |
project | overview, notes, files, activity, actions, worklog | Overview.md | Documents, Notes, Files |
client.default |
client | overview, notes, files, activity, actions | Overview.md | Notes, Files |
document.default |
document | overview, files, activity | — | — |
recipe.default |
recipe | overview, notes, files, activity | Overview.md | — |
Template Structure
{
"id": "project.default",
"title": "Проект",
"type": "project",
"enabled": true,
"system": true,
"icon": "project",
"default_modules": ["overview", "notes", "files", "activity", "actions", "worklog"],
"default_files": [
{"path": "Overview.md", "content_template": "project_overview"}
],
"default_folders": ["Documents", "Notes", "Files"],
"allowed_parent_types": ["folder", "root"],
"allowed_child_templates": ["*"]
}
How Templates Drive the UI
- The creation menu is built from enabled templates.
- When you right-click a node, you see "Create inside" → [list of enabled templates].
- Selecting a template creates a Node with that template's type and defaults.
- Disabling a template removes it from the creation menu.
Template Fields
- id — unique identifier
- title — i18n key for display name
- type — technical type (folder, project, client, etc.)
- enabled — whether it appears in the creation menu
- system — whether it's a built-in template
- default_modules — which tabs/modules are available in the node view
- default_files — files to create inside the node folder
- default_folders — subfolders to create inside the node folder
- allowed_parent_types — which node types can be parents of this template
- allowed_child_templates — which templates are allowed as children ("*" = any)