app.thedistance.activity

thedistance.app

Schema Diff

+5 -0

From

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

To

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

Compatibility Analysis

Breaking Changes Detected

1 breaking change, 2 non-breaking changes.

Breaking Changes (1)
  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity:body.sourceId", sort: "maxLength", value: "256" }
Non-Breaking Changes (2)
  • AddedVertex AddedVertex { vertex_id: "app.thedistance.activity:body.sourceId" }
  • AddedEdge AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.sourceId", kind: "prop", name: Some("sourceId") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "app.thedistance.activity:body.sourceId" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity:body.sourceId", sort: "maxLength", value: "256" }

Additional Notes

  • Non-breaking: AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.sourceId", kind: "prop", name: Some("sourceId") }
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 50
          "avgPower": {
51 51
            "type": "integer",
52 52
            "minimum": 0,
53 53
            "description": "Average power output in watts."
54 54
          },
55 55
          "avgSpeed": {
56 56
            "type": "string",
57 57
            "maxLength": 64,
58 58
            "description": "Average speed in meters per second. String-encoded decimal number."
59 59
          },
60 60
          "calories": {
61 61
            "type": "integer",
62 62
            "minimum": 0,
63 63
            "description": "Estimated calories burned."
64 64
          },
65 65
          "distance": {
66 66
            "type": "string",
67 67
            "maxLength": 64,
68 68
            "description": "Total distance in meters. String-encoded decimal number, e.g. '51214.6'."
69 69
          },
70 70
          "maxPower": {
71 71
            "type": "integer",
72 72
            "minimum": 0,
73 73
            "description": "Maximum power output in watts."
74 74
          },
75 75
          "maxSpeed": {
76 76
            "type": "string",
77 77
            "maxLength": 64,
78 78
            "description": "Maximum speed in meters per second. String-encoded decimal number."
79 79
          },
80 80
          "polyline": {
81 81
            "type": "string",
82 82
            "maxLength": 20000,
83 83
            "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 84
          },
85 +
          "sourceId": {
86 +
            "type": "string",
87 +
            "maxLength": 256,
88 +
            "description": "Identifier for this activity in the source system, e.g. a Strava activity ID."
89 +
          },
85 90
          "createdAt": {
86 91
            "type": "string",
87 92
            "format": "datetime",
88 93
            "description": "Timestamp of when this record was created."
89 94
          },
90 95
          "sportType": {
91 96
            "type": "string",
92 97
            "maxLength": 128,
93 98
            "description": "The type of activity.",
94 99
            "knownValues": [
95 100
              "ride"
96 101
            ]
97 102
          },
98 103
          "startedAt": {
99 104
            "type": "string",
100 105
            "format": "datetime",
101 106
            "description": "When the activity started."
102 107
          },
103 108
          "avgCadence": {
104 109
            "type": "integer",
105 110
            "minimum": 0,
106 111
            "description": "Average cadence in revolutions per minute."
107 112
          },
108 113
          "maxCadence": {
109 114
            "type": "integer",
110 115
            "minimum": 0,
111 116
            "description": "Maximum cadence in revolutions per minute."
112 117
          },
113 118
          "movingTime": {
114 119
            "type": "integer",
115 120
            "minimum": 0,
116 121
            "description": "Time spent in motion in seconds."
117 122
          },
118 123
          "description": {
119 124
            "type": "string",
120 125
            "maxLength": 3000,
121 126
            "description": "User-provided description of the activity."
122 127
          },
123 128
          "elapsedTime": {
124 129
            "type": "integer",
125 130
            "minimum": 0,
126 131
            "description": "Total elapsed time in seconds, including stopped time."
127 132
          },
128 133
          "avgHeartRate": {
129 134
            "type": "integer",
130 135
            "minimum": 0,
131 136
            "description": "Average heart rate in beats per minute."
132 137
          },
133 138
          "maxHeartRate": {
134 139
            "type": "integer",
135 140
            "minimum": 0,
136 141
            "description": "Maximum heart rate in beats per minute."
137 142
          },
138 143
          "elevationGain": {
139 144
            "type": "string",
140 145
            "maxLength": 64,
141 146
            "description": "Total elevation gain in meters. String-encoded decimal number."
142 147
          }
143 148
        }
144 149
      },
145 150
      "description": "A recorded physical activity such as a bike ride."
146 151
    },
147 152
    "image": {
148 153
      "type": "object",
149 154
      "required": [
150 155
        "image"
151 156
      ],
152 157
      "properties": {
153 158
        "alt": {
154 159
          "type": "string",
155 160
          "maxLength": 3000,
156 161
          "description": "Alt text for the image."
157 162
        },
158 163
        "image": {
159 164
          "type": "blob",
160 165
          "accept": [
161 166
            "image/jpeg",
162 167
            "image/png",
163 168
            "image/webp"
164 169
          ],
165 170
          "maxSize": 10000000
166 171
        },
167 172
        "aspectRatio": {
168 173
          "ref": "#aspectRatio",
169 174
          "type": "ref"
170 175
        }
171 176
      }
172 177
    },
173 178
    "aspectRatio": {
174 179
      "type": "object",
175 180
      "required": [
176 181
        "width",
177 182
        "height"
178 183
      ],
179 184
      "properties": {
180 185
        "width": {
181 186
          "type": "integer",
182 187
          "minimum": 1
183 188
        },
184 189
        "height": {
185 190
          "type": "integer",
186 191
          "minimum": 1
187 192
        }
188 193
      },
189 194
      "description": "Width and height of the image, used for layout before the image loads."
190 195
    }
191 196
  },
192 197
  "$type": "com.atproto.lexicon.schema",
193 198
  "lexicon": 1
194 199
}

Compare Other Versions

Lexicon Garden

@