com.atmosphereaccount.registry.profile

atmosphereaccount.com

Schema Diff

+18 -0

From

CID
bafyreierxfh5hkd...
Indexed At
2026-04-27 04:16 UTC
View this version

To

CID
bafyreibtgmip7dr...
Indexed At
2026-04-30 01:53 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 4 non-breaking changes.

Non-Breaking Changes (4)
  • AddedVertex AddedVertex { vertex_id: "com.atmosphereaccount.registry.profile:body.banner" }
  • AddedVertex AddedVertex { vertex_id: "com.atmosphereaccount.registry.profile:body.iconBw" }
  • AddedEdge AddedEdge { src: "com.atmosphereaccount.registry.profile:body", tgt: "com.atmosphereaccount.registry.profile:body.banner", kind: "prop", name: Some("banner") }
  • AddedEdge AddedEdge { src: "com.atmosphereaccount.registry.profile:body", tgt: "com.atmosphereaccount.registry.profile:body.iconBw", kind: "prop", name: Some("iconBw") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "com.atmosphereaccount.registry.profile:body.banner" }
  • AddedVertex { vertex_id: "com.atmosphereaccount.registry.profile:body.iconBw" }

Additional Notes

  • Non-breaking: AddedEdge { src: "com.atmosphereaccount.registry.profile:body", tgt: "com.atmosphereaccount.registry.profile:body.banner", kind: "prop", name: Some("banner") }
  • Non-breaking: AddedEdge { src: "com.atmosphereaccount.registry.profile:body", tgt: "com.atmosphereaccount.registry.profile:body.iconBw", kind: "prop", name: Some("iconBw") }
1 1
{
2 2
  "id": "com.atmosphereaccount.registry.profile",
3 3
  "defs": {
4 4
    "main": {
5 5
      "key": "literal:self",
6 6
      "type": "record",
7 7
      "record": {
8 8
        "type": "object",
9 9
        "required": [
10 10
          "name",
11 11
          "createdAt"
12 12
        ],
13 13
        "properties": {
14 14
          "icon": {
15 15
            "type": "blob",
16 16
            "accept": [
17 17
              "image/svg+xml"
18 18
            ],
19 19
            "maxSize": 200000,
20 20
            "description": "Optional vector icon (SVG) intended for developers building badges, app showcases, sign-in flows, etc. Not displayed on the public Explore profile. Sanitised on upload (script tags, event handlers, foreignObject and javascript:/data: hrefs are stripped)."
21 21
          },
22 22
          "name": {
23 23
            "type": "string",
24 24
            "maxLength": 60,
25 25
            "minLength": 1,
26 26
            "description": "Display name for the user or project.",
27 27
            "maxGraphemes": 60
28 28
          },
29 29
          "links": {
30 30
            "type": "array",
31 31
            "items": {
32 32
              "ref": "#linkEntry",
33 33
              "type": "ref"
34 34
            },
35 35
            "maxLength": 12,
36 36
            "description": "Outbound buttons shown on the public profile after the Web / iOS / Android app links. Atmosphere links (kind = bsky / tangled / supper) derive their URL from the project's current handle by default; a `url` override is allowed for tangled / supper when the canonical destination differs from the handle. Custom link kinds (kind = website / other) always carry their `url`; new records no longer emit website entries."
37 37
          },
38 38
          "avatar": {
39 39
            "type": "blob",
40 40
            "accept": [
41 41
              "image/png",
42 42
              "image/jpeg",
43 43
              "image/webp"
44 44
            ],
45 45
            "maxSize": 1000000,
46 46
            "description": "Project icon. Recommended 512x512 square."
47 47
          },
48 +
          "banner": {
49 +
            "type": "blob",
50 +
            "accept": [
51 +
              "image/png",
52 +
              "image/jpeg",
53 +
              "image/webp"
54 +
            ],
55 +
            "maxSize": 3000000,
56 +
            "description": "Optional project banner image. Rendered at the top of the project page and used as the OpenGraph / Twitter card preview when the page is shared. Recommended 1200x630 (1.91:1 OG ratio)."
57 +
          },
58 +
          "iconBw": {
59 +
            "type": "blob",
60 +
            "accept": [
61 +
              "image/svg+xml"
62 +
            ],
63 +
            "maxSize": 200000,
64 +
            "description": "Optional black & white companion to `icon`. Same audience and sanitisation rules — published alongside the color mark for monochrome contexts (light/dark badges, sign-in chrome, print)."
65 +
          },
48 66
          "iosLink": {
49 67
            "type": "string",
50 68
            "format": "uri",
51 69
            "maxLength": 512,
52 70
            "description": "Optional App Store URL for projects with an iOS app. Rendered as an iOS button on the public profile when present."
53 71
          },
54 72
          "mainLink": {
55 73
            "type": "string",
56 74
            "format": "uri",
57 75
            "maxLength": 512,
58 76
            "description": "Primary web destination for the project (the actual web app, service, or website). Rendered as the Web button inside the public profile card when present. Optional when an iOS or Android destination is provided."
59 77
          },
60 78
          "createdAt": {
61 79
            "type": "string",
62 80
            "format": "datetime",
63 81
            "maxLength": 64
64 82
          },
65 83
          "categories": {
66 84
            "type": "array",
67 85
            "items": {
68 86
              "type": "string",
69 87
              "maxLength": 32,
70 88
              "knownValues": [
71 89
                "app",
72 90
                "accountProvider",
73 91
                "moderator",
74 92
                "infrastructure",
75 93
                "developerTool"
76 94
              ]
77 95
            },
78 96
            "maxLength": 4,
79 97
            "minLength": 1,
80 98
            "description": "All categories that apply to the project. A project can be both an app and an account provider, etc. The first item is treated as the primary category for sort/grouping. New values can be added to knownValues over time without breaking existing records."
81 99
          },
82 100
          "androidLink": {
83 101
            "type": "string",
84 102
            "format": "uri",
85 103
            "maxLength": 512,
86 104
            "description": "Optional Google Play or Android distribution URL for projects with an Android app. Rendered as an Android button on the public profile when present."
87 105
          },
88 106
          "description": {
89 107
            "type": "string",
90 108
            "maxLength": 500,
91 109
            "description": "Optional short description for a project or bio for a user profile.",
92 110
            "maxGraphemes": 500
93 111
          },
94 112
          "profileType": {
95 113
            "type": "string",
96 114
            "maxLength": 16,
97 115
            "description": "Distinguishes project profiles from user profiles. Omitted means project for backwards compatibility with existing records.",
98 116
            "knownValues": [
99 117
              "project",
100 118
              "user"
101 119
            ]
102 120
          },
103 121
          "screenshots": {
104 122
            "type": "array",
105 123
            "items": {
106 124
              "ref": "#screenshotEntry",
107 125
              "type": "ref"
108 126
            },
109 127
            "maxLength": 4,
110 128
            "description": "Optional screenshots for the project. Up to 4 PNG, JPEG, or WebP images."
111 129
          },
112 130
          "subcategories": {
113 131
            "type": "array",
114 132
            "items": {
115 133
              "type": "string",
116 134
              "maxLength": 32
117 135
            },
118 136
            "maxLength": 10,
119 137
            "description": "Open-ended subcategory tags. For apps: microblog, photo, video, blogging, music, events, clients, tools, social, reading, productivity, research, science, reviews, gaming, community, food, location, liveStreaming, niche, content, art."
120 138
          }
121 139
        }
122 140
      },
123 141
      "description": "A user or project profile in the Atmosphere registry. Created by the account owner on their PDS; one record per account. Reviews, ratings, moderation, and other social data live in sibling com.atmosphereaccount.registry.* records."
124 142
    },
125 143
    "linkEntry": {
126 144
      "type": "object",
127 145
      "required": [
128 146
        "kind"
129 147
      ],
130 148
      "properties": {
131 149
        "url": {
132 150
          "type": "string",
133 151
          "format": "uri",
134 152
          "maxLength": 512,
135 153
          "description": "Optional for atmosphere kinds (bsky derives URL from clientId+handle; tangled/supper default to the canonical handle URL but accept an override). Required for `website` and `other`."
136 154
        },
137 155
        "kind": {
138 156
          "type": "string",
139 157
          "maxLength": 32,
140 158
          "description": "Link kind. Drives the icon/label and how `url` / `clientId` are resolved at render time. New atmosphere services can be added to knownValues without breaking older records.",
141 159
          "knownValues": [
142 160
            "bsky",
143 161
            "tangled",
144 162
            "supper",
145 163
            "website",
146 164
            "other"
147 165
          ]
148 166
        },
149 167
        "label": {
150 168
          "type": "string",
151 169
          "maxLength": 64,
152 170
          "description": "Required when kind=\"other\". Used as the visible button title for custom links."
153 171
        },
154 172
        "clientId": {
155 173
          "type": "string",
156 174
          "maxLength": 64,
157 175
          "description": "Required when kind=\"bsky\". Picks which Bluesky-compatible web client should host the link (bluesky, blacksky, deer, …)."
158 176
        }
159 177
      }
160 178
    },
161 179
    "screenshotEntry": {
162 180
      "type": "object",
163 181
      "required": [
164 182
        "image"
165 183
      ],
166 184
      "properties": {
167 185
        "image": {
168 186
          "type": "blob",
169 187
          "accept": [
170 188
            "image/png",
171 189
            "image/jpeg",
172 190
            "image/webp"
173 191
          ],
174 192
          "maxSize": 5000000,
175 193
          "description": "Screenshot image. Up to 5MB."
176 194
        }
177 195
      }
178 196
    }
179 197
  },
180 198
  "$type": "com.atproto.lexicon.schema",
181 199
  "lexicon": 1
182 200
}

Compare Other Versions

Lexicon Garden

@