Back to templates

Project Tracker

engineering

Manage projects, tasks, and milestones with status tracking.

Collections

Projects

High-level projects and initiatives

Schema Fields

name:stringstatus:stringowner:stringstart_date:stringtarget_date:stringdescription:string

Tasks

Individual work items

Schema Fields

title:stringstatus:stringpriority:stringassignee:stringdue_date:stringestimate_hours:number

Milestones

Key project milestones and deadlines

Schema Fields

name:stringdue_date:stringstatus:stringdescription:string

Relationships

tasks
belongs_to
projectsTask belongs to project
tasks
blocks
tasksTask blocks another task
projects
has_milestone
milestonesProject has milestone

Example Queries

Query this template's data using the SQL endpoint.

Task breakdown by status

Count tasks grouped by status to see workload distribution.

SELECT
  data.status.:String as status,
  count() as task_count
FROM records FINAL
WHERE workspace_id = {workspace_id:String}
  AND collection = 'tasks'
  AND deleted = false
GROUP BY status
ORDER BY task_count DESC

Workload by assignee

See how many open tasks each person has and their total estimated hours.

SELECT
  data.assignee.:String as assignee,
  count() as open_tasks,
  sum(CAST(data.estimate_hours, 'Float64')) as total_hours
FROM records FINAL
WHERE workspace_id = {workspace_id:String}
  AND collection = 'tasks'
  AND deleted = false
  AND data.status.:String IN ('todo', 'in_progress', 'review')
GROUP BY assignee
ORDER BY total_hours DESC

Overdue tasks

Find tasks past their due date that are not yet done.

SELECT
  data.title.:String as title,
  data.priority.:String as priority,
  data.assignee.:String as assignee,
  data.due_date.:String as due_date
FROM records FINAL
WHERE workspace_id = {workspace_id:String}
  AND collection = 'tasks'
  AND deleted = false
  AND data.status.:String != 'done'
  AND CAST(data.due_date.:String, 'Date') < today()
ORDER BY due_date ASC

Project status overview

List all projects with their status and timeline.

SELECT
  data.name.:String as project,
  data.status.:String as status,
  data.owner.:String as owner,
  data.start_date.:String as start_date,
  data.target_date.:String as target_date
FROM records FINAL
WHERE workspace_id = {workspace_id:String}
  AND collection = 'projects'
  AND deleted = false
ORDER BY data.target_date.:String ASC

Quick Start

Create the collections using the Rekor CLI:

rekor collections upsert projects --workspace my-tracker --schema @projects.json

Full Schema (JSON)

Copy the complete template definition:

{
  "collections": [
    {
      "id": "projects",
      "name": "Projects",
      "description": "High-level projects and initiatives",
      "icon": "folder",
      "color": "#3b82f6",
      "json_schema": {
        "type": "object",
        "required": [
          "name",
          "status"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "planning",
              "active",
              "paused",
              "completed",
              "cancelled"
            ]
          },
          "owner": {
            "type": "string"
          },
          "start_date": {
            "type": "string",
            "format": "date"
          },
          "target_date": {
            "type": "string",
            "format": "date"
          },
          "description": {
            "type": "string"
          }
        }
      }
    },
    {
      "id": "tasks",
      "name": "Tasks",
      "description": "Individual work items",
      "icon": "check-square",
      "color": "#22c55e",
      "json_schema": {
        "type": "object",
        "required": [
          "title",
          "status"
        ],
        "properties": {
          "title": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "todo",
              "in_progress",
              "review",
              "done"
            ]
          },
          "priority": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "critical"
            ]
          },
          "assignee": {
            "type": "string"
          },
          "due_date": {
            "type": "string",
            "format": "date"
          },
          "estimate_hours": {
            "type": "number"
          }
        }
      }
    },
    {
      "id": "milestones",
      "name": "Milestones",
      "description": "Key project milestones and deadlines",
      "icon": "flag",
      "color": "#f59e0b",
      "json_schema": {
        "type": "object",
        "required": [
          "name",
          "due_date"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "due_date": {
            "type": "string",
            "format": "date"
          },
          "status": {
            "type": "string",
            "enum": [
              "upcoming",
              "reached",
              "missed"
            ]
          },
          "description": {
            "type": "string"
          }
        }
      }
    }
  ],
  "relationships": [
    {
      "type": "belongs_to",
      "source": "tasks",
      "target": "projects",
      "description": "Task belongs to project"
    },
    {
      "type": "blocks",
      "source": "tasks",
      "target": "tasks",
      "description": "Task blocks another task"
    },
    {
      "type": "has_milestone",
      "source": "projects",
      "target": "milestones",
      "description": "Project has milestone"
    }
  ]
}