app.placita.place

placita.app

Schema Diff

+8 -3

From

CID
bafyreign73spk6l...
Indexed At
2026-10-13 19:20 UTC
View this version

To

CID
bafyreiaedh4ruj6...
Indexed At
2026-10-13 21:51 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 2 non-breaking changes.

Non-Breaking Changes (2)
  • AddedVertex AddedVertex { vertex_id: "app.placita.place#osmDetails.editedAt" }
  • AddedEdge AddedEdge { src: "app.placita.place#osmDetails", tgt: "app.placita.place#osmDetails.editedAt", kind: "prop", name: Some("editedAt") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "app.placita.place#osmDetails.editedAt" }

Additional Notes

  • Non-breaking: AddedEdge { src: "app.placita.place#osmDetails", tgt: "app.placita.place#osmDetails.editedAt", kind: "prop", name: Some("editedAt") }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "main": {
5 5
      "description": "A place saved by a user. The primary entity of Placita: one record per place, stored in the user's own repository.",
6 6
      "key": "tid",
7 7
      "record": {
8 8
        "properties": {
9 9
          "category": {
10 10
            "description": "Place type from Placita's fixed list, for example restaurant, cafe or museum. Missing or unknown means generic.",
11 11
            "knownValues": [
12 12
              "generic",
13 13
              "restaurant",
14 14
              "fastfood",
15 15
              "cafe",
16 16
              "bar",
17 17
              "beer",
18 18
              "wine",
19 19
              "nightclub",
20 20
              "bakery",
21 21
              "grocery",
22 22
              "clothing",
23 23
              "shopping",
24 24
              "lodging",
25 25
              "campsite",
26 26
              "museum",
27 27
              "attraction",
28 28
              "viewpoint",
29 29
              "worship",
30 30
              "park",
31 31
              "playground",
32 32
              "sports",
33 33
              "swimming",
34 34
              "zoo",
35 35
              "cinema",
36 36
              "theatre",
37 37
              "library",
38 38
              "school",
39 39
              "college",
40 40
              "hospital",
41 41
              "pharmacy",
42 42
              "doctor",
43 43
              "dentist",
44 44
              "bank",
45 45
              "atm",
46 46
              "post",
47 47
              "police",
48 48
              "fuel",
49 49
              "parking",
50 50
              "bus",
51 51
              "rail",
52 52
              "airport",
53 53
              "ferry"
54 54
            ],
55 55
            "maxLength": 32,
56 56
            "type": "string"
57 57
          },
58 58
          "createdAt": {
59 59
            "description": "When the place was saved.",
60 60
            "format": "datetime",
61 61
            "type": "string"
62 62
          },
63 63
          "location": {
64 64
            "description": "Where the place is. Normally community.lexicon.location.geo: coordinates as strings, with the street address in its name field when known.",
65 65
            "refs": [
66 66
              "community.lexicon.location.geo",
67 67
              "community.lexicon.location.address"
68 68
            ],
69 69
            "type": "union"
70 70
          },
71 71
          "name": {
72 72
            "description": "Name of the place as the user saved it.",
73 73
            "maxGraphemes": 100,
74 74
            "maxLength": 300,
75 75
            "type": "string"
76 76
          },
77 77
          "note": {
78 78
            "description": "The user's own note about the place.",
79 79
            "maxGraphemes": 1000,
80 80
            "maxLength": 3000,
81 81
            "type": "string"
82 82
          },
83 83
          "noteTitle": {
84 84
            "description": "Optional short title for the note.",
85 85
            "maxGraphemes": 100,
86 86
            "maxLength": 100,
87 87
            "type": "string"
88 88
          },
89 89
          "openingHours": {
90 90
            "description": "Opening hours in OpenStreetMap opening_hours syntax, for example Mo-Su 09:00-18:00.",
91 91
            "maxLength": 512,
92 92
            "type": "string"
93 93
          },
94 94
          "osm": {
95 -
            "description": "Details copied from OpenStreetMap when the place was linked. Only set together with osmType and osmId. A copy made at a point in time: it is not kept up to date.",
95 +
            "description": "Details in OpenStreetMap's own words (structured address, tags). Copied from OpenStreetMap when the place is linked (see checkedAt), and editable by the person (see editedAt). May also hold details typed for a place with no link. A copy made at a point in time: it is not kept up to date.",
96 96
            "ref": "#osmDetails",
97 97
            "type": "ref"
98 98
          },
99 99
          "osmId": {
100 100
            "description": "ID of the linked OpenStreetMap feature as a decimal string. Used together with osmType.",
101 101
            "maxLength": 32,
102 102
            "type": "string"
103 103
          },
104 104
          "osmType": {
105 105
            "description": "Type of the linked OpenStreetMap feature. Set only when the user confirmed the match. Used together with osmId.",
106 106
            "knownValues": [
107 107
              "node",
108 108
              "way",
109 109
              "relation"
110 110
            ],
111 111
            "type": "string"
112 112
          },
113 113
          "phone": {
114 114
            "description": "The place's phone number, as entered or taken from OpenStreetMap.",
115 115
            "maxLength": 64,
116 116
            "type": "string"
117 117
          },
118 118
          "photo": {
119 119
            "accept": [
120 120
              "image/png",
121 121
              "image/jpeg",
122 122
              "image/webp"
123 123
            ],
124 124
            "description": "Legacy single photo. Only older records have it. New records use photos.",
125 125
            "maxSize": 2000000,
126 126
            "type": "blob"
127 127
          },
128 128
          "photos": {
129 129
            "description": "Photos the user uploaded for this place. Up to 4.",
130 130
            "items": {
131 131
              "accept": [
132 132
                "image/png",
133 133
                "image/jpeg",
134 134
                "image/webp"
135 135
              ],
136 136
              "maxSize": 2000000,
137 137
              "type": "blob"
138 138
            },
139 139
            "maxItems": 4,
140 140
            "type": "array"
141 141
          },
142 142
          "rating": {
143 143
            "description": "The user's own rating of the place, from 1 (poor) to 5 (excellent). Only set when status is been. Absent means not rated.",
144 144
            "maximum": 5,
145 145
            "minimum": 1,
146 146
            "type": "integer"
147 147
          },
148 148
          "source": {
149 149
            "description": "Where the place came from: a map or review link the user pasted, an OpenStreetMap search result, or manual entry.",
150 150
            "knownValues": [
151 151
              "google",
152 152
              "foursquare",
153 153
              "osm",
154 154
              "apple",
155 155
              "tripadvisor",
156 156
              "manual"
157 157
            ],
158 158
            "type": "string"
159 159
          },
160 160
          "sourcePhotoAuthor": {
161 161
            "description": "Creator or credit text returned by Wikimedia Commons for sourcePhotoUrl.",
162 162
            "maxLength": 500,
163 163
            "type": "string"
164 164
          },
165 165
          "sourcePhotoLicense": {
166 166
            "description": "License of sourcePhotoUrl, e.g. CC BY-SA 4.0. Attribution duty applies when shown.",
167 167
            "maxLength": 64,
168 168
            "type": "string"
169 169
          },
170 170
          "sourcePhotoLicenseUrl": {
171 171
            "description": "License details URL returned by Wikimedia Commons.",
172 172
            "maxLength": 2048,
173 173
            "type": "string"
174 174
          },
175 175
          "sourcePhotoPageUrl": {
176 176
            "description": "Source file page URL for attribution and reuse details.",
177 177
            "maxLength": 2048,
178 178
            "type": "string"
179 179
          },
180 180
          "sourcePhotoSourceName": {
181 181
            "description": "Origin label for the source photo suggestion.",
182 182
            "maxLength": 128,
183 183
            "type": "string"
184 184
          },
185 185
          "sourcePhotoUrl": {
186 186
            "description": "URL of a free-licensed photo found for this place (Wikimedia Commons, OSM image tag, Wikidata P18). Not a blob - it is a reference to an external image, with attribution.",
187 187
            "maxLength": 2048,
188 188
            "type": "string"
189 189
          },
190 190
          "sourceUrl": {
191 191
            "description": "The link the place was created from, when there was one.",
192 192
            "maxLength": 2048,
193 193
            "type": "string"
194 194
          },
195 195
          "status": {
196 196
            "default": "want",
197 197
            "description": "want means the user wants to go there. been means the user has been there.",
198 198
            "knownValues": [
199 199
              "want",
200 200
              "been"
201 201
            ],
202 202
            "type": "string"
203 203
          },
204 204
          "tags": {
205 205
            "description": "The user's tags for this place, as strong references to app.placita.tag records.",
206 206
            "items": {
207 207
              "ref": "com.atproto.repo.strongRef",
208 208
              "type": "ref"
209 209
            },
210 210
            "maxLength": 50,
211 211
            "type": "array"
212 212
          },
213 213
          "visibility": {
214 214
            "default": "hidden",
215 215
            "description": "Whether Placita shows this place in public discovery. This is a display hint only: every record in an AT Protocol repository can be read by anyone, including hidden ones.",
216 216
            "knownValues": [
217 217
              "hidden",
218 218
              "public"
219 219
            ],
220 220
            "type": "string"
221 221
          },
222 222
          "website": {
223 223
            "description": "The place's website.",
224 224
            "maxLength": 2048,
225 225
            "type": "string"
226 226
          }
227 227
        },
228 228
        "required": [
229 229
          "name",
230 230
          "status",
231 231
          "visibility",
232 232
          "location",
233 233
          "createdAt"
234 234
        ],
235 235
        "type": "object"
236 236
      },
237 237
      "type": "record"
238 238
    },
239 239
    "osmAddress": {
240 240
      "description": "A structured address, as OpenStreetMap returns it. Every part is optional.",
241 241
      "properties": {
242 242
        "city": {
243 243
          "description": "City, town or village.",
244 244
          "maxLength": 200,
245 245
          "type": "string"
246 246
        },
247 247
        "country": {
248 248
          "description": "Country name.",
249 249
          "maxLength": 200,
250 250
          "type": "string"
251 251
        },
252 252
        "countryCode": {
253 253
          "description": "Two-letter ISO 3166-1 country code, upper case.",
254 254
          "maxLength": 2,
255 255
          "minLength": 2,
256 256
          "type": "string"
257 257
        },
258 258
        "houseNumber": {
259 259
          "description": "House or building number.",
260 260
          "maxLength": 32,
261 261
          "type": "string"
262 262
        },
263 263
        "postcode": {
264 264
          "description": "Postal code.",
265 265
          "maxLength": 32,
266 266
          "type": "string"
267 267
        },
268 268
        "state": {
269 269
          "description": "Region or state.",
270 270
          "maxLength": 200,
271 271
          "type": "string"
272 272
        },
273 273
        "street": {
274 274
          "description": "Street or road name.",
275 275
          "maxLength": 200,
276 276
          "type": "string"
277 277
        },
278 278
        "suburb": {
279 279
          "description": "Neighbourhood, quarter or suburb.",
280 280
          "maxLength": 200,
281 281
          "type": "string"
282 282
        }
283 283
      },
284 284
      "type": "object"
285 285
    },
286 286
    "osmDetails": {
287 -
      "description": "A copy of what OpenStreetMap knew about the linked feature at checkedAt. Data (c) OpenStreetMap contributors, available under the Open Database Licence (ODbL). Treat the values as suggestions: they can be wrong or out of date, and the user's own fields always win.",
287 +
      "description": "Address and tags in OpenStreetMap's vocabulary: a copy of what OpenStreetMap knew about the linked feature at checkedAt, and/or what the person typed (editedAt). Data copied from OpenStreetMap is (c) OpenStreetMap contributors, available under the Open Database Licence (ODbL). Treat the values as suggestions: they can be wrong or out of date, and the user's own fields always win.",
288 288
      "properties": {
289 289
        "address": {
290 290
          "description": "The structured address OpenStreetMap has for the feature.",
291 291
          "ref": "#osmAddress",
292 292
          "type": "ref"
293 293
        },
294 294
        "checkedAt": {
295 -
          "description": "When the details were copied from OpenStreetMap.",
295 +
          "description": "When the details were copied from OpenStreetMap. Absent for details that were only typed.",
296 +
          "format": "datetime",
297 +
          "type": "string"
298 +
        },
299 +
        "editedAt": {
300 +
          "description": "When the person last changed these details by hand, or typed them. Details with no checkedAt were never copied from OpenStreetMap.",
296 301
          "format": "datetime",
297 302
          "type": "string"
298 303
        },
299 304
        "tags": {
300 305
          "description": "Raw OpenStreetMap tags (key and value) of the feature, such as cuisine, wheelchair or wikidata. Tags already stored in other fields (name, website, phone, opening hours) and OpenStreetMap-internal tags (source, note, fixme) are left out. At most 60.",
301 306
          "items": {
302 307
            "ref": "#osmTag",
303 308
            "type": "ref"
304 309
          },
305 310
          "maxLength": 60,
306 311
          "type": "array"
307 312
        }
308 313
      },
309 314
      "type": "object"
310 315
    },
311 316
    "osmTag": {
312 317
      "description": "One OpenStreetMap tag.",
313 318
      "properties": {
314 319
        "key": {
315 320
          "description": "The tag key, for example cuisine.",
316 321
          "maxLength": 64,
317 322
          "type": "string"
318 323
        },
319 324
        "value": {
320 325
          "description": "The tag value, for example italian;pizza. Values over 255 characters are not stored.",
321 326
          "maxGraphemes": 255,
322 327
          "maxLength": 1024,
323 328
          "type": "string"
324 329
        }
325 330
      },
326 331
      "required": [
327 332
        "key",
328 333
        "value"
329 334
      ],
330 335
      "type": "object"
331 336
    }
332 337
  },
333 338
  "id": "app.placita.place",
334 339
  "lexicon": 1
335 340
}

Compare Other Versions

Lexicon Garden

@