app.thedistance.activity

thedistance.app

Schema Diff

+121 -0

From

CID
bafyreied54mn53i...
Indexed At
2026-04-20 18:27 UTC
View this version

To

CID
bafyreichqq37dzv...
Indexed At
2026-05-30 19:51 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

22 breaking changes, 47 non-breaking changes.

Breaking Changes (22)
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity:body.totalWork", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.visibility", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.uvIndex", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity:body.sourceId", sort: "maxLength", value: "256" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.maxTemperature", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.windBearing", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.avgTemperature", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity:body.weightedAvgPower", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.windGust", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity:body.perceivedExertion", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.humidity", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.dewpoint", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.precipitationType", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.pressure", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity:body.elevationLoss", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.apparentTemperature", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.temperature", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.windSpeed", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.precipitationProbability", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.cloudCover", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.condition", sort: "maxLength", value: "128" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.precipitationIntensity", sort: "maxLength", value: "64" }
Non-Breaking Changes (47)
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.apparentTemperature" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.avgTemperature" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.cloudCover" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.condition" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.dewpoint" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.humidity" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.maxTemperature" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.precipitationIntensity" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.precipitationProbability" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.precipitationType" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.pressure" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.temperature" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.uvIndex" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.visibility" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.windBearing" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.windGust" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.windSpeed" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity:body.elevationLoss" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity:body.perceivedExertion" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity:body.sourceId" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity:body.totalWork" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity:body.weather" }
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity:body.weightedAvgPower" }
  • AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.apparentTemperature", kind: "prop", name: Some("apparentTemperature") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.avgTemperature", kind: "prop", name: Some("avgTemperature") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.cloudCover", kind: "prop", name: Some("cloudCover") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.condition", kind: "prop", name: Some("condition") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.dewpoint", kind: "prop", name: Some("dewpoint") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.humidity", kind: "prop", name: Some("humidity") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.maxTemperature", kind: "prop", name: Some("maxTemperature") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.precipitationIntensity", kind: "prop", name: Some("precipitationIntensity") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.precipitationProbability", kind: "prop", name: Some("precipitationProbability") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.precipitationType", kind: "prop", name: Some("precipitationType") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.pressure", kind: "prop", name: Some("pressure") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.temperature", kind: "prop", name: Some("temperature") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.uvIndex", kind: "prop", name: Some("uvIndex") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.visibility", kind: "prop", name: Some("visibility") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.windBearing", kind: "prop", name: Some("windBearing") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.windGust", kind: "prop", name: Some("windGust") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.windSpeed", kind: "prop", name: Some("windSpeed") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.elevationLoss", kind: "prop", name: Some("elevationLoss") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.perceivedExertion", kind: "prop", name: Some("perceivedExertion") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.sourceId", kind: "prop", name: Some("sourceId") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.totalWork", kind: "prop", name: Some("totalWork") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.weather", kind: "prop", name: Some("weather") }
  • AddedEdge AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.weightedAvgPower", kind: "prop", name: Some("weightedAvgPower") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "app.thedistance.activity#weather" }
  • AddedVertex { vertex_id: "app.thedistance.activity#weather.apparentTemperature" }
  • AddedVertex { vertex_id: "app.thedistance.activity#weather.avgTemperature" }
  • AddedVertex { vertex_id: "app.thedistance.activity#weather.cloudCover" }
  • AddedVertex { vertex_id: "app.thedistance.activity#weather.condition" }
  • AddedVertex { vertex_id: "app.thedistance.activity#weather.dewpoint" }
  • AddedVertex { vertex_id: "app.thedistance.activity#weather.humidity" }
  • AddedVertex { vertex_id: "app.thedistance.activity#weather.maxTemperature" }
  • AddedVertex { vertex_id: "app.thedistance.activity#weather.precipitationIntensity" }
  • AddedVertex { vertex_id: "app.thedistance.activity#weather.precipitationProbability" }
  • AddedVertex { vertex_id: "app.thedistance.activity#weather.precipitationType" }
  • AddedVertex { vertex_id: "app.thedistance.activity#weather.pressure" }
  • AddedVertex { vertex_id: "app.thedistance.activity#weather.temperature" }
  • AddedVertex { vertex_id: "app.thedistance.activity#weather.uvIndex" }
  • AddedVertex { vertex_id: "app.thedistance.activity#weather.visibility" }
  • AddedVertex { vertex_id: "app.thedistance.activity#weather.windBearing" }
  • AddedVertex { vertex_id: "app.thedistance.activity#weather.windGust" }
  • AddedVertex { vertex_id: "app.thedistance.activity#weather.windSpeed" }
  • AddedVertex { vertex_id: "app.thedistance.activity:body.elevationLoss" }
  • AddedVertex { vertex_id: "app.thedistance.activity:body.perceivedExertion" }
  • AddedVertex { vertex_id: "app.thedistance.activity:body.sourceId" }
  • AddedVertex { vertex_id: "app.thedistance.activity:body.totalWork" }
  • AddedVertex { vertex_id: "app.thedistance.activity:body.weather" }
  • AddedVertex { vertex_id: "app.thedistance.activity:body.weightedAvgPower" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.dewpoint", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.maxTemperature", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.windSpeed", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.avgTemperature", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.windBearing", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity:body.sourceId", sort: "maxLength", value: "256" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.cloudCover", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.visibility", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.precipitationType", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity:body.elevationLoss", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.windGust", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.precipitationProbability", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.apparentTemperature", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.humidity", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.condition", sort: "maxLength", value: "128" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.temperature", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity:body.totalWork", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.pressure", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity:body.weightedAvgPower", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity:body.perceivedExertion", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.precipitationIntensity", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.uvIndex", sort: "maxLength", value: "64" }

Additional Notes

  • Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.apparentTemperature", kind: "prop", name: Some("apparentTemperature") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.avgTemperature", kind: "prop", name: Some("avgTemperature") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.cloudCover", kind: "prop", name: Some("cloudCover") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.condition", kind: "prop", name: Some("condition") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.dewpoint", kind: "prop", name: Some("dewpoint") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.humidity", kind: "prop", name: Some("humidity") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.maxTemperature", kind: "prop", name: Some("maxTemperature") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.precipitationIntensity", kind: "prop", name: Some("precipitationIntensity") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.precipitationProbability", kind: "prop", name: Some("precipitationProbability") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.precipitationType", kind: "prop", name: Some("precipitationType") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.pressure", kind: "prop", name: Some("pressure") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.temperature", kind: "prop", name: Some("temperature") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.uvIndex", kind: "prop", name: Some("uvIndex") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.visibility", kind: "prop", name: Some("visibility") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.windBearing", kind: "prop", name: Some("windBearing") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.windGust", kind: "prop", name: Some("windGust") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.windSpeed", kind: "prop", name: Some("windSpeed") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.elevationLoss", kind: "prop", name: Some("elevationLoss") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.perceivedExertion", kind: "prop", name: Some("perceivedExertion") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.sourceId", kind: "prop", name: Some("sourceId") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.totalWork", kind: "prop", name: Some("totalWork") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.weather", kind: "prop", name: Some("weather") }
  • Non-breaking: AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.weightedAvgPower", kind: "prop", name: Some("weightedAvgPower") }
1 1
{
2 2
  "id": "app.thedistance.activity",
3 3
  "defs": {
4 4
    "main": {
5 5
      "key": "tid",
6 6
      "type": "record",
7 7
      "record": {
8 8
        "type": "object",
9 9
        "required": [
10 10
          "sportType",
11 11
          "startedAt",
12 12
          "elapsedTime",
13 13
          "movingTime",
14 14
          "distance",
15 15
          "createdAt"
16 16
        ],
17 17
        "properties": {
18 18
          "title": {
19 19
            "type": "string",
20 20
            "maxLength": 300,
21 21
            "description": "User-provided name for the activity."
22 22
          },
23 23
          "device": {
24 24
            "type": "string",
25 25
            "maxLength": 300,
26 26
            "description": "Name of the device that recorded the activity."
27 27
          },
28 28
          "images": {
29 29
            "type": "array",
30 30
            "items": {
31 31
              "ref": "#image",
32 32
              "type": "ref"
33 33
            },
34 34
            "maxLength": 8,
35 35
            "description": "Photos from the activity."
36 36
          },
37 37
          "source": {
38 38
            "type": "string",
39 39
            "maxLength": 128,
40 40
            "description": "Where the activity data was imported from.",
41 41
            "knownValues": [
42 42
              "garmin",
43 43
              "strava",
44 44
              "wahoo",
45 45
              "manual",
46 46
              "fit-file",
47 47
              "gpx-file"
48 48
            ]
49 49
          },
50 +
          "weather": {
51 +
            "ref": "#weather",
52 +
            "type": "ref",
53 +
            "description": "Weather conditions during the activity."
54 +
          },
50 55
          "avgPower": {
51 56
            "type": "integer",
52 57
            "minimum": 0,
53 58
            "description": "Average power output in watts."
54 59
          },
55 60
          "avgSpeed": {
56 61
            "type": "string",
57 62
            "maxLength": 64,
58 63
            "description": "Average speed in meters per second. String-encoded decimal number."
59 64
          },
60 65
          "calories": {
61 66
            "type": "integer",
62 67
            "minimum": 0,
63 68
            "description": "Estimated calories burned."
64 69
          },
65 70
          "distance": {
66 71
            "type": "string",
67 72
            "maxLength": 64,
68 73
            "description": "Total distance in meters. String-encoded decimal number, e.g. '51214.6'."
69 74
          },
70 75
          "maxPower": {
71 76
            "type": "integer",
72 77
            "minimum": 0,
73 78
            "description": "Maximum power output in watts."
74 79
          },
75 80
          "maxSpeed": {
76 81
            "type": "string",
77 82
            "maxLength": 64,
78 83
            "description": "Maximum speed in meters per second. String-encoded decimal number."
79 84
          },
80 85
          "polyline": {
81 86
            "type": "string",
82 87
            "maxLength": 20000,
83 88
            "description": "Encoded polyline string representing a simplified, privacy-trimmed route for map display. Uses Google's encoded polyline algorithm format. Ingestion services should simplify polylines to fit within the 20,000 byte limit. This limit may be revisited if it proves insufficient."
84 89
          },
90 +
          "sourceId": {
91 +
            "type": "string",
92 +
            "maxLength": 256,
93 +
            "description": "Identifier for this activity in the source system, e.g. a Strava activity ID."
94 +
          },
85 95
          "createdAt": {
86 96
            "type": "string",
87 97
            "format": "datetime",
88 98
            "description": "Timestamp of when this record was created."
89 99
          },
90 100
          "sportType": {
91 101
            "type": "string",
92 102
            "maxLength": 128,
93 103
            "description": "The type of activity.",
94 104
            "knownValues": [
95 105
              "ride"
96 106
            ]
97 107
          },
98 108
          "startedAt": {
99 109
            "type": "string",
100 110
            "format": "datetime",
101 111
            "description": "When the activity started."
102 112
          },
113 +
          "totalWork": {
114 +
            "type": "integer",
115 +
            "minimum": 0,
116 +
            "description": "Total mechanical work in kilojoules."
117 +
          },
103 118
          "avgCadence": {
104 119
            "type": "integer",
105 120
            "minimum": 0,
106 121
            "description": "Average cadence in revolutions per minute."
107 122
          },
108 123
          "maxCadence": {
109 124
            "type": "integer",
110 125
            "minimum": 0,
111 126
            "description": "Maximum cadence in revolutions per minute."
112 127
          },
113 128
          "movingTime": {
114 129
            "type": "integer",
115 130
            "minimum": 0,
116 131
            "description": "Time spent in motion in seconds."
117 132
          },
118 133
          "description": {
119 134
            "type": "string",
120 135
            "maxLength": 3000,
121 136
            "description": "User-provided description of the activity."
122 137
          },
123 138
          "elapsedTime": {
124 139
            "type": "integer",
125 140
            "minimum": 0,
126 141
            "description": "Total elapsed time in seconds, including stopped time."
127 142
          },
128 143
          "avgHeartRate": {
129 144
            "type": "integer",
130 145
            "minimum": 0,
131 146
            "description": "Average heart rate in beats per minute."
132 147
          },
133 148
          "maxHeartRate": {
134 149
            "type": "integer",
135 150
            "minimum": 0,
136 151
            "description": "Maximum heart rate in beats per minute."
137 152
          },
138 153
          "elevationGain": {
139 154
            "type": "string",
140 155
            "maxLength": 64,
141 156
            "description": "Total elevation gain in meters. String-encoded decimal number."
157 +
          },
158 +
          "elevationLoss": {
159 +
            "type": "string",
160 +
            "maxLength": 64,
161 +
            "description": "Total elevation loss in meters. String-encoded decimal number."
162 +
          },
163 +
          "weightedAvgPower": {
164 +
            "type": "integer",
165 +
            "minimum": 0,
166 +
            "description": "Normalized/weighted average power in watts."
167 +
          },
168 +
          "perceivedExertion": {
169 +
            "type": "integer",
170 +
            "minimum": 0,
171 +
            "description": "Rate of perceived exertion (RPE), typically 1-10."
142 172
          }
143 173
        }
144 174
      },
145 175
      "description": "A recorded physical activity such as a bike ride."
146 176
    },
147 177
    "image": {
148 178
      "type": "object",
149 179
      "required": [
150 180
        "image"
151 181
      ],
152 182
      "properties": {
153 183
        "alt": {
154 184
          "type": "string",
155 185
          "maxLength": 3000,
156 186
          "description": "Alt text for the image."
157 187
        },
158 188
        "image": {
159 189
          "type": "blob",
160 190
          "accept": [
161 191
            "image/jpeg",
162 192
            "image/png",
163 193
            "image/webp"
164 194
          ],
165 195
          "maxSize": 10000000
166 196
        },
167 197
        "aspectRatio": {
168 198
          "ref": "#aspectRatio",
169 199
          "type": "ref"
170 200
        }
171 201
      }
172 202
    },
203 +
    "weather": {
204 +
      "type": "object",
205 +
      "properties": {
206 +
        "uvIndex": {
207 +
          "type": "string",
208 +
          "maxLength": 64,
209 +
          "description": "UV index. String-encoded decimal."
210 +
        },
211 +
        "dewpoint": {
212 +
          "type": "string",
213 +
          "maxLength": 64,
214 +
          "description": "Dewpoint in degrees Celsius. String-encoded decimal."
215 +
        },
216 +
        "humidity": {
217 +
          "type": "string",
218 +
          "maxLength": 64,
219 +
          "description": "Relative humidity as a percentage. String-encoded decimal."
220 +
        },
221 +
        "pressure": {
222 +
          "type": "string",
223 +
          "maxLength": 64,
224 +
          "description": "Atmospheric pressure in hPa/mbar. String-encoded decimal."
225 +
        },
226 +
        "windGust": {
227 +
          "type": "string",
228 +
          "maxLength": 64,
229 +
          "description": "Wind gust speed in meters per second. String-encoded decimal."
230 +
        },
231 +
        "condition": {
232 +
          "type": "string",
233 +
          "maxLength": 128,
234 +
          "description": "General weather condition, e.g. 'Clear', 'Cloudy', 'Rain'."
235 +
        },
236 +
        "windSpeed": {
237 +
          "type": "string",
238 +
          "maxLength": 64,
239 +
          "description": "Wind speed in meters per second. String-encoded decimal."
240 +
        },
241 +
        "cloudCover": {
242 +
          "type": "string",
243 +
          "maxLength": 64,
244 +
          "description": "Cloud cover as a percentage. String-encoded decimal."
245 +
        },
246 +
        "visibility": {
247 +
          "type": "string",
248 +
          "maxLength": 64,
249 +
          "description": "Visibility distance in kilometers. String-encoded decimal."
250 +
        },
251 +
        "temperature": {
252 +
          "type": "string",
253 +
          "maxLength": 64,
254 +
          "description": "Air temperature in degrees Celsius. String-encoded decimal."
255 +
        },
256 +
        "windBearing": {
257 +
          "type": "string",
258 +
          "maxLength": 64,
259 +
          "description": "Wind direction in degrees (0-360). String-encoded decimal."
260 +
        },
261 +
        "avgTemperature": {
262 +
          "type": "string",
263 +
          "maxLength": 64,
264 +
          "description": "Average device-measured temperature in degrees Celsius. String-encoded decimal."
265 +
        },
266 +
        "maxTemperature": {
267 +
          "type": "string",
268 +
          "maxLength": 64,
269 +
          "description": "Maximum device-measured temperature in degrees Celsius. String-encoded decimal."
270 +
        },
271 +
        "precipitationType": {
272 +
          "type": "string",
273 +
          "maxLength": 64,
274 +
          "description": "Type of precipitation, e.g. 'rain', 'snow', 'sleet'."
275 +
        },
276 +
        "apparentTemperature": {
277 +
          "type": "string",
278 +
          "maxLength": 64,
279 +
          "description": "Feels-like temperature in degrees Celsius. String-encoded decimal."
280 +
        },
281 +
        "precipitationIntensity": {
282 +
          "type": "string",
283 +
          "maxLength": 64,
284 +
          "description": "Precipitation intensity in mm/hr. String-encoded decimal."
285 +
        },
286 +
        "precipitationProbability": {
287 +
          "type": "string",
288 +
          "maxLength": 64,
289 +
          "description": "Precipitation probability as a percentage. String-encoded decimal."
290 +
        }
291 +
      },
292 +
      "description": "Weather conditions observed during the activity."
293 +
    },
173 294
    "aspectRatio": {
174 295
      "type": "object",
175 296
      "required": [
176 297
        "width",
177 298
        "height"
178 299
      ],
179 300
      "properties": {
180 301
        "width": {
181 302
          "type": "integer",
182 303
          "minimum": 1
183 304
        },
184 305
        "height": {
185 306
          "type": "integer",
186 307
          "minimum": 1
187 308
        }
188 309
      },
189 310
      "description": "Width and height of the image, used for layout before the image loads."
190 311
    }
191 312
  },
192 313
  "$type": "com.atproto.lexicon.schema",
193 314
  "lexicon": 1
194 315
}

Compare Other Versions

Lexicon Garden

@