Skip to content

Components

All the components that make up Polanner

Schedules

A schedule is a list of activities. It is either personal or automatic. The purpose of this distinction is to have the personal schedule copy over data from automatic schedules, and let the user correct them, while preserving the source's automatic schedule

Personal Schedule

Each user has one personal schedule, their actual life schedule.

Automatic Schedule

Each source has a automatic schedule, which is uneditable, and automatically generated by the device.

For example a Garmin account would have a automatic schedule composed of the activities that Garmin tracked, for example biking, running, sleeping, etc.

Activities

An activity is the basic building block of a schedule. It has the basic information, start, end, and a source in automatic schedules. It also has a activity type, for example Running, Biking, Sleeping, etc, and data related to that type.

Example activity:

json
{
    "startDate": "2025-01-01T12:00:00.000Z",
    "endDate": "2025-01-01T13:00:00.000Z",
    "source": Source.Account.Strava,
    "activityType": ActivityType.Running,
    "activityTypeData": { // Determined by the ActivityType
        "distance": 5.73,
        "duration": 1260,
        "averageHeartrate": 143.3
    }
}

Activity Type

An activity type is a type of activity, with a category (used to group activities for statistics), and a data schema. The data schema is very flexible and powerful, used to track custom information

Example activity type:

json
{
    "name": "Running",
    "color": "yellow1",
    "category": Category.PhysicalActivity,
    "dataSchema": {
        "distance": Number,
        "duration": Number,
        "averageHeartrate": Number
    },
}

Sources

A source is a source of data. There are two types of sources, a device or a account. All sources have metadata, activities (and from those activities a automatic schedule). Additionally, each device also has a stream.

Example source (device):

json
{
    "name": "Desktop Computer",
    "activities":
    [
        {
            "startDate": "2025-01-01T12:00:00.000Z",
            "endDate": "2025-01-01T13:00:00.000Z",
            "source": Source.Device."Desktop Computer",
            "activityType": ActivityType.Coding,
            "activityTypeData": {
                "project": "polanner",
                "language": "javascript",
                "editor": "visual-studio-code",
            }
        }
    ],
    "streams": [
        {
            "name": "DisplayPort-1",
            "type": "monitor",
            "metadata": {
                "x": 0,
                "y": 0,
                "height": 1080,
                "width": 1920
            }
        },
        {
            "name": "DisplayPort-2",
            "type": "monitor",
            "metadata": {
                "x": 1920,
                "y": 0,
                "height": 1080,
                "width": 1920
            }
        }
    ],
    "metadata": {
        "lastSeen": "2025-01-01T12:00:00.000Z"
    }
}

Device

A device is a subset of a source, with a additional streams property. It is a physical computer.

A stream is a recording of a display (ex. monitor), video (ex. camera), or audio (ex. microphone) source. It is used to automatically record your device sources, for security and archival reasons. It may be disabled.

Supported devices:

  • Windows
  • MacOS
  • Linux

Planned:

  • Android
  • iOS

Account

An account is a subset of a source. It is a account linked from a 3rd party source.

Supported accounts:

  • Garmin
  • Strava