Type Definitions

This page documents the core types used throughout the system. Understanding these types is crucial for working with the platform's data structures.

Playbook Structure

At the highest level, we have Playbooks which contain Phases, which contain Sessions. Here's the hierarchy:

Playbook
                └── Phase
                    └── Session
                        ├── Preparatory Activities
                        ├── Activities
                        └── Output Activities

Playbook

A Playbook is the top-level container that represents a complete workflow or process.

playbook "My Playbook" {
    description: "A complete workflow process"
    purpose: "To demonstrate the playbook structure"
    thumbnail: "path/to/thumbnail.jpg"
    
    phase "Phase 1" {
        description: "First major milestone"
        // ... sessions ...
    }
}
interface Playbook {
    id: number;
    slug: string;
    name: string;
    description?: string;
    purpose?: string;
    thumbnail?: string;
    phases: [Phase, ...Phase[]]; // Must contain at least one phase
}

Phase

A Phase represents a major stage or milestone within a Playbook.

phase "Getting Started" {
    description: "Initial setup and orientation"
    
    session "Kickoff Meeting" {
        description: "Team introduction and project overview"
        // ... activities ...
    }
}
interface Phase {
    id: number;
    name: string;
    description: string;
    sessions: [Session, ...Session[]]; // Must contain at least one session
}

Session

A Session is a concrete meeting or workshop that includes various activities.

session "Design Workshop" {
    description: "Collaborative design session"
    purpose: "Create initial prototype"
    suggestedDuration: 120
    
    beforeSession {
        activity {
            name: "Pre-reading"
            description: "Review design brief"
            type: "information"
            duration: 30
        }
    }
    
    activities {
        activity {
            name: "Brainstorming"
            description: "Generate ideas"
            purpose: "Collect initial concepts"
            duration: 45
            tool {
                name: "Miro"
                description: "Virtual whiteboard"
            }
        }
    }
    
    afterSession {
        activity {
            name: "Summary"
            description: "Document outcomes"
            type: "summary"
            duration: 30
        }
    }
}
interface Session {
    id: number;
    slug: string;
    name: string;
    description: string;
    purpose?: string;
    beforeSession?: PreparatoryActivity[];
    activities: Activity[];
    afterSession?: OutputActivity[];
    suggestedDuration?: number;
    spaces?: SpaceInstance[];
}

Activities

There are three types of activities: Preparatory, Main, and Output activities.

Main Activity

The core activities that take place during a session.

activity {
    name: "Brainstorming Session"
    description: "Generate ideas collaboratively"
    purpose: "Collect initial concepts"
    duration: 45
    tool {
        name: "Miro"
        description: "Virtual whiteboard for collaboration"
    }
}
interface Activity {
    id: number;
    slug: string;
    name: string;
    description?: string;
    purpose?: string;
    tool?: ToolInstance;
    duration: number; // in minutes
}

Preparatory Activity

Activities that participants should complete before the session.

activity {
    name: "Pre-reading Materials"
    description: "Review project background documents"
    type: "information"
    required: true
    format: "document"
    content: "Project brief and requirements"
    duration: 30
}
interface PreparatoryActivity {
    id: number;
    slug: string;
    name: string;
    description?: string;
    type: 'information' | 'feedback' | 'input';
    required: boolean;
    format: 'text' | 'document' | 'image' | 'video' | 'form';
    formType?: 'shortText' | 'longText' | 'imageUpload' | 'videoUpload' |
              'checklist' | 'ranking' | 'poll' | 'vote';
    content?: string;
    url?: string;
    duration: number;
}

Output Activity

Activities that capture results or follow-up actions after the session.

activity {
    name: "Session Summary"
    description: "Document key decisions and next steps"
    type: "summary"
    required: true
    format: "document"
    formType: "actionItems"
    content: "Summary template"
    duration: 30
}
interface OutputActivity {
    id: number;
    slug: string;
    name: string;
    description?: string;
    type: 'feedback' | 'summary' | 'action' | 'reflection';
    required: boolean;
    format: 'text' | 'document' | 'form' | 'checklist';
    formType?: 'shortText' | 'longText' | 'actionItems' | 'notes' |
              'feedback' | 'reflection';
    content?: string;
    url?: string;
    duration: number;
}

Tools and Spaces

Tool

A tool represents a software or platform that can be used in activities.

tool {
    name: "Miro"
    description: "Virtual whiteboard platform for collaboration"
}
interface Tool {
    id: number;
    name: string;
    description?: string;
}

Tool Instance

A specific instance or configuration of a tool for use in an activity.

tool {
    name: "Team Miro Board"
    description: "Project-specific whiteboard for design activities"
    embedUrl: "https://miro.com/app/board/example/"
}
interface ToolInstance {
    id: number;
    name: string;
    description?: string;
    tool: Tool;
    embedUrl?: string;
}

Space

Defines a type of meeting space or environment.

space {
    name: "Virtual Meeting Room"
    description: "Online video conferencing space"
    type: "video-call"
}
interface Space {
    id: number;
    name: string;
    description?: string;
    type: 'video-call' | 'virtual-whiteboard' | 'immersive-vr' | 'in-person';
}

Space Instance

A specific instance of a space configured for a session.

space {
    name: "Project Kickoff Room"
    description: "Main virtual meeting room for the project"
    embedUrl: "https://meet.google.com/example"
    location: "Online" // For in-person spaces, this would be a physical address
}
interface SpaceInstance {
    id: number;
    name: string;
    description?: string;
    space: Space;
    embedUrl?: string;
    location?: string; // For in-person spaces
}