The /templates directory contains json-formatted starter kits for new Codecks projects.
A Codecks template is a JSON object with the following structure:
Template
βββ meta (required, object)
β βββ id (required)
β βββ title (required)
β βββ description (required)
β βββ tags (required, array)
β βββ imageUrl (optional, nullable)
βββ tags (optional, array)
βββ spaces (required, array)
βββ Space
βββ name (nullable)
βββ icon (optional)
βββ defaultDeckType (optional)
βββ decks (required, array)
βββ Deck
βββ id (optional)
βββ name (required)
βββ description (optional)
βββ coverFileUrl (optional)
βββ deckType (optional)
βββ preferredOrder (optional)
βββ cards (optional, array)
β βββ Card
β βββ id (optional)
β βββ content (required)
β βββ priority (optional)
β βββ effort (optional)
β βββ tags (optional)
β βββ subCards (optional)
β βββ isDoc (optional)
βββ journey (optional)
βββ steps (array)
βββ JourneyStep
βββ content (required)
βββ targetDeck (nullable)
βββ priority (optional)
βββ effort (optional)
βββ tags (optional)
βββ zoneLabel (optional)
- meta (object, required): Metadata about the template
- id (string, required): Unique identifier for the template (e.g., "cdx/action", "myname/mytemplate")
- title (string, required): The name of your template
- description (string, required): A brief description of what this template is for
- tags (string array, required): Categories for the template (e.g., ["gamedev"], ["marketing"])
- imageUrl (string, optional, nullable): URL to a preview image for the template
- tags (string array, optional): Global tags that can be referenced by cards and journey steps
- spaces (array, required): One or more spaces containing decks
- name (string, nullable): The name of the space
- icon (enum, optional, nullable): Icon for the space
- Valid values:
"default","journey","robot","gdd","tasks","knowledge","qa"
- Valid values:
- decks (array, required): One or more decks in this space
- defaultDeckType (enum, optional): Default type for decks in this space
- Valid values:
"task","hero","doc","mixed"
- Valid values:
- id (string, optional): Unique identifier for the deck such that you can reference it as targetDeck in journey steps
- name (string, required): The name of the deck
- description (string, optional): Description of the deck's purpose
- coverFileUrl (string, optional): URL to a cover image
- deckType (enum, optional): Type of deck
- Valid values:
"task","hero","doc","mixed"
- Valid values:
- cards (array, optional): Pre-populated cards in this deck
- journey (object, optional): A journey with steps that create cards in other decks
- preferredOrder (object, optional): Default sorting configuration for this deck
- id (string, optional): Unique identifier for the card such that you can reference it within the subCards array
- content (string, required): Markdown content for the card
- priority (enum, optional, nullable): Priority level
- Valid values:
"a","b","c"
- Valid values:
- effort (number, optional, nullable): Effort estimate
- tags (string array, optional): Tags assigned to this card (must be defined in template tags)
- subCards (string array, optional): Array of sub-card ids
- isDoc (boolean, optional, nullable): Whether this card is a document
Journey steps create cards in target decks when the journey is activated.
- content (string, required): Markdown content for the card to be created
- targetDeck (string, nullable): The id of the deck where the card will be created (must exist in template)
- priority (enum, optional, nullable): Priority level (
"a","b","c") - effort (number, optional, nullable): Effort estimate
- tags (string array, optional): Tags for the card (must be defined in template tags)
- zoneLabel (string, optional, nullable): Label for the zone grouping
- prop (enum, required): The property to sort by
- Valid values:
"priority","effort","assignee","status","lastEdit","creationDate","tags","tagsPersonal","tagsProject","deck","milestone","sprint","project","changes","upvotes","title","accountSeq","timeTracked","dueDate","heroCard","beastLevel"
- Valid values:
- isReversed (boolean, optional): Whether to reverse the sort order
- secondary (array, optional): Additional sort properties
- mode (enum, optional): Display mode (
"tableView"or"miniCard") - isCompact (boolean, optional): Whether to only have a single swimlane
- hideEmpty (boolean, optional): Whether to hide empty swim lanes
- Tag References: All tags used in cards or journey steps must be defined in the template's
tagsarray - Deck References: Non-null
targetDeckvalues in journey steps must reference existing deck names within the template - Required Fields: All required fields must be present
- No Extra Properties: Templates cannot include properties not defined in the schema
- SubCard References: All
subCardsidentifiers must reference existing cardidvalues within the same deck
{
"meta": {
"id": "example/basic-game",
"title": "Basic Game Project",
"description": "A simple template for small game projects",
"tags": ["gamedev"],
"imageUrl": null
},
"tags": ["art", "code", "design"],
"spaces": [
{
"name": "Development",
"icon": "tasks",
"decks": [
{
"name": "To Do",
"deckType": "task",
"cards": [
{
"content": "Set up project structure",
"priority": "a",
"effort": 2,
"tags": ["code"]
},
{
"content": "Create initial art assets",
"priority": "b",
"effort": 5,
"tags": ["art"]
}
]
},
{
"name": "In Progress",
"deckType": "task"
},
{
"name": "Done",
"deckType": "task"
}
]
}
]
}{
"meta": {
"id": "example/game-dev-pipeline",
"title": "Complete Game Development Pipeline",
"description": "A comprehensive template for professional game development teams with multiple disciplines",
"tags": ["gamedev"],
"imageUrl": null
},
"tags": ["programming", "art", "audio", "design", "qa", "marketing", "urgent", "blocked"],
"spaces": [
{
"name": "Production",
"icon": "tasks",
"defaultDeckType": "task",
"decks": [
{
"id": "1-backlog",
"name": "Backlog",
"description": "All upcoming tasks and features",
"deckType": "task",
"preferredOrder": {
"prop": "priority",
"isReversed": false,
"secondary": [
{
"prop": "effort",
"isReversed": false
}
]
},
"cards": [
{
"content": "# Implement player movement\n\nCreate basic WASD movement with collision detection",
"priority": "a",
"effort": 5,
"tags": ["programming"]
},
{
"content": "# Design main character\n\nConcept art and 3D model for protagonist",
"priority": "a",
"effort": 8,
"tags": ["art", "design"]
},
{
"content": "Compose main theme",
"priority": "b",
"effort": 13,
"tags": ["audio"]
}
]
},
{
"id": "2-sprint",
"name": "Sprint",
"description": "Current sprint tasks",
"deckType": "task",
"preferredOrder": {
"prop": "assignee"
}
},
{
"name": "Review",
"description": "Tasks awaiting review or testing",
"deckType": "task"
},
{
"name": "Done",
"deckType": "task",
"preferredOrder": {
"prop": "lastEdit",
"isReversed": true
}
}
]
},
{
"name": "Documentation",
"icon": "knowledge",
"decks": [
{
"name": "Game Design Docs",
"deckType": "doc",
"cards": [
{
"content": "# Core Gameplay Loop\n\nDescribe the main gameplay mechanics here...",
"isDoc": true,
"tags": ["design"]
},
{
"content": "# Technical Architecture\n\n## Engine\n- Unity 2023.1\n\n## Patterns\n- ECS for gameplay\n- MVC for UI",
"isDoc": true,
"tags": ["programming"]
}
]
},
{
"name": "Art Bible",
"deckType": "doc",
"cards": [
{
"content": "# Visual Style\n\n## Color Palette\n- Primary: #FF6B35\n- Secondary: #004E89\n\n## Art Direction\nLow-poly with hand-painted textures",
"isDoc": true,
"tags": ["art", "design"]
}
]
}
]
},
{
"name": "Onboarding",
"icon": "journey",
"decks": [
{
"name": "Getting Started",
"description": "Journey to set up a new team member",
"deckType": "hero",
"journey": {
"steps": [
{
"content": "# Complete development environment setup\n\nInstall Unity, Git, and required SDKs. See Technical Architecture doc for versions.",
"targetDeck": "2-sprint",
"priority": "a",
"effort": 3,
"tags": ["programming"]
},
{
"content": "# Read all design documentation\n\nReview Core Gameplay Loop and Visual Style Guide",
"targetDeck": "2-sprint",
"priority": "a",
"effort": 2,
"tags": ["design"]
},
{
"content": "# Set up art pipeline\n\nConfigure Blender, Substance Painter, and export settings",
"targetDeck": "2-sprint",
"priority": "a",
"effort": 3,
"tags": ["art"]
},
{
"content": "# First task: Create test level\n\nBuild a simple test level to familiarize yourself with the tools",
"targetDeck": "1-backlog",
"priority": "b",
"effort": 5,
"tags": ["design", "programming"]
}
]
}
}
]
}
]
}- Missing the
metaobject or any of its required fields (id,title,description,tags) - Using tags in cards/steps that aren't defined in the template
tagsarray - Referencing non-existent deck names in journey
targetDeckfields - Missing required fields like
content(for cards and journey steps),name(for decks) - Using invalid enum values for
priority,deckType,icon, etc. - Adding custom properties not defined in the schema
- Using
titlefield on cards (usecontentinstead) - Referencing invalid card IDs in
subCardsarrays
- Create a pull request adding your files to
templates/[YOUR-HANDLE]/*.json - This repository has built-in validation checks