app.thedistance.activity

thedistance.app

Schema Diff

+116 -0

From

CID
bafyreiazfmrunst...
Indexed At
2026-05-30 19:15 UTC
View this version

To

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

Compatibility Analysis

Breaking Changes Detected

21 breaking changes, 45 non-breaking changes.

Breaking Changes (21)
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity:body.weightedAvgPower", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.pressure", 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.totalWork", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.apparentTemperature", 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.windBearing", 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.avgTemperature", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.precipitationIntensity", 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.temperature", 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.precipitationProbability", 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.cloudCover", 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.maxTemperature", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.condition", sort: "maxLength", value: "128" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity:body.elevationLoss", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.uvIndex", sort: "maxLength", value: "64" }
Non-Breaking Changes (45)
  • 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.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.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.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.precipitationIntensity", 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.uvIndex", 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.humidity", 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.condition", sort: "maxLength", value: "128" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.maxTemperature", 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.windBearing", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity:body.totalWork", 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.windSpeed", 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.apparentTemperature", 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.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:body.weightedAvgPower", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.pressure", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity#weather.dewpoint", 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.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
          },
85 90
          "sourceId": {
86 91
            "type": "string",
87 92
            "maxLength": 256,
88 93
            "description": "Identifier for this activity in the source system, e.g. a Strava activity ID."
89 94
          },
90 95
          "createdAt": {
91 96
            "type": "string",
92 97
            "format": "datetime",
93 98
            "description": "Timestamp of when this record was created."
94 99
          },
95 100
          "sportType": {
96 101
            "type": "string",
97 102
            "maxLength": 128,
98 103
            "description": "The type of activity.",
99 104
            "knownValues": [
100 105
              "ride"
101 106
            ]
102 107
          },
103 108
          "startedAt": {
104 109
            "type": "string",
105 110
            "format": "datetime",
106 111
            "description": "When the activity started."
107 112
          },
113 +
          "totalWork": {
114 +
            "type": "integer",
115 +
            "minimum": 0,
116 +
            "description": "Total mechanical work in kilojoules."
117 +
          },
108 118
          "avgCadence": {
109 119
            "type": "integer",
110 120
            "minimum": 0,
111 121
            "description": "Average cadence in revolutions per minute."
112 122
          },
113 123
          "maxCadence": {
114 124
            "type": "integer",
115 125
            "minimum": 0,
116 126
            "description": "Maximum cadence in revolutions per minute."
117 127
          },
118 128
          "movingTime": {
119 129
            "type": "integer",
120 130
            "minimum": 0,
121 131
            "description": "Time spent in motion in seconds."
122 132
          },
123 133
          "description": {
124 134
            "type": "string",
125 135
            "maxLength": 3000,
126 136
            "description": "User-provided description of the activity."
127 137
          },
128 138
          "elapsedTime": {
129 139
            "type": "integer",
130 140
            "minimum": 0,
131 141
            "description": "Total elapsed time in seconds, including stopped time."
132 142
          },
133 143
          "avgHeartRate": {
134 144
            "type": "integer",
135 145
            "minimum": 0,
136 146
            "description": "Average heart rate in beats per minute."
137 147
          },
138 148
          "maxHeartRate": {
139 149
            "type": "integer",
140 150
            "minimum": 0,
141 151
            "description": "Maximum heart rate in beats per minute."
142 152
          },
143 153
          "elevationGain": {
144 154
            "type": "string",
145 155
            "maxLength": 64,
146 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."
147 172
          }
148 173
        }
149 174
      },
150 175
      "description": "A recorded physical activity such as a bike ride."
151 176
    },
152 177
    "image": {
153 178
      "type": "object",
154 179
      "required": [
155 180
        "image"
156 181
      ],
157 182
      "properties": {
158 183
        "alt": {
159 184
          "type": "string",
160 185
          "maxLength": 3000,
161 186
          "description": "Alt text for the image."
162 187
        },
163 188
        "image": {
164 189
          "type": "blob",
165 190
          "accept": [
166 191
            "image/jpeg",
167 192
            "image/png",
168 193
            "image/webp"
169 194
          ],
170 195
          "maxSize": 10000000
171 196
        },
172 197
        "aspectRatio": {
173 198
          "ref": "#aspectRatio",
174 199
          "type": "ref"
175 200
        }
176 201
      }
177 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 +
    },
178 294
    "aspectRatio": {
179 295
      "type": "object",
180 296
      "required": [
181 297
        "width",
182 298
        "height"
183 299
      ],
184 300
      "properties": {
185 301
        "width": {
186 302
          "type": "integer",
187 303
          "minimum": 1
188 304
        },
189 305
        "height": {
190 306
          "type": "integer",
191 307
          "minimum": 1
192 308
        }
193 309
      },
194 310
      "description": "Width and height of the image, used for layout before the image loads."
195 311
    }
196 312
  },
197 313
  "$type": "com.atproto.lexicon.schema",
198 314
  "lexicon": 1
199 315
}

Compare Other Versions

Lexicon Garden

@