to.atpota.poe.overlay

atpota.to

Schema Diff

+37 -5

From

CID
bafyreifbjigmw2j...
Indexed At
2026-10-22 13:30 UTC
View this version

To

CID
bafyreiaeiiwlg5l...
Indexed At
2026-10-22 15:50 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

1 breaking change, 4 non-breaking changes.

Breaking Changes (1)
  • ConstraintTightened ConstraintTightened { vertex_id: "to.atpota.poe.overlay#widget.kind", sort: "knownValues", old_value: "[\"card\",\"strip\",\"badge\",\"apps\",\"forecast\",\"pulse\",\"moon\",\"mark\",\"loader\"]", new_value: "[\"card\",\"strip\",\"badge\",\"apps\",\"forecast\",\"pulse\",\"moon\",\"mark\",\"loader\",\"tid\",\"flushes\",\"status\",\"music\",\"chat\"]" }
Non-Breaking Changes (4)
  • AddedVertex AddedVertex { vertex_id: "to.atpota.poe.overlay#widget.style" }
  • AddedVertex AddedVertex { vertex_id: "to.atpota.poe.overlay:body.name" }
  • AddedEdge AddedEdge { src: "to.atpota.poe.overlay#widget", tgt: "to.atpota.poe.overlay#widget.style", kind: "prop", name: Some("style") }
  • AddedEdge AddedEdge { src: "to.atpota.poe.overlay:body", tgt: "to.atpota.poe.overlay:body.name", kind: "prop", name: Some("name") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "to.atpota.poe.overlay#widget.style" }
  • AddedVertex { vertex_id: "to.atpota.poe.overlay:body.name" }

Constraint Changes

  • ConstraintTightened ConstraintTightened { vertex_id: "to.atpota.poe.overlay#widget.kind", sort: "knownValues", old_value: "[\"card\",\"strip\",\"badge\",\"apps\",\"forecast\",\"pulse\",\"moon\",\"mark\",\"loader\"]", new_value: "[\"card\",\"strip\",\"badge\",\"apps\",\"forecast\",\"pulse\",\"moon\",\"mark\",\"loader\",\"tid\",\"flushes\",\"status\",\"music\",\"chat\"]" }

Additional Notes

  • Non-breaking: AddedEdge { src: "to.atpota.poe.overlay#widget", tgt: "to.atpota.poe.overlay#widget.style", kind: "prop", name: Some("style") }
  • Non-breaking: AddedEdge { src: "to.atpota.poe.overlay:body", tgt: "to.atpota.poe.overlay:body.name", kind: "prop", name: Some("name") }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "main": {
5 -
      "key": "literal:self",
5 +
      "key": "any",
6 6
      "record": {
7 7
        "properties": {
8 8
          "alerts": {
9 9
            "description": "Poe says weather alerts (storms, apps blowing in).",
10 10
            "type": "boolean"
11 11
          },
12 12
          "chat": {
13 13
            "description": "Poe says hello to chatters and answers chat commands.",
14 14
            "type": "boolean"
15 15
          },
16 16
          "createdAt": {
17 17
            "format": "datetime",
18 18
            "type": "string"
19 19
          },
20 20
          "follows": {
21 21
            "description": "Poe thanks new followers.",
22 22
            "type": "boolean"
23 23
          },
24 24
          "ignore": {
25 25
            "description": "Accounts Poe never greets, thanks or answers (bots).",
26 26
            "items": {
27 27
              "format": "at-identifier",
28 28
              "type": "string"
29 29
            },
30 30
            "maxLength": 50,
31 31
            "type": "array"
32 32
          },
33 +
          "name": {
34 +
            "description": "What the streamer calls this layout, on the setup page only.",
35 +
            "maxGraphemes": 40,
36 +
            "maxLength": 400,
37 +
            "type": "string"
38 +
          },
33 39
          "nap": {
34 40
            "description": "Minutes of quiet before Poe naps; 0 never.",
35 41
            "maximum": 240,
36 42
            "minimum": 0,
37 43
            "type": "integer"
38 44
          },
39 45
          "poe": {
40 46
            "ref": "#poe",
41 47
            "type": "ref"
42 48
          },
43 49
          "theme": {
44 50
            "knownValues": [
45 51
              "light",
46 52
              "dark"
47 53
            ],
48 54
            "type": "string"
49 55
          },
50 56
          "updatedAt": {
51 57
            "format": "datetime",
52 58
            "type": "string"
53 59
          },
54 60
          "visitors": {
55 61
            "description": "Now and then a butterfly, bird, snail, worm or moth visits Poe.",
56 62
            "type": "boolean"
57 63
          },
58 64
          "volume": {
59 65
            "description": "How loud Poe's noises are; 0 is silent.",
60 66
            "maximum": 100,
61 67
            "minimum": 0,
62 68
            "type": "integer"
63 69
          },
64 70
          "widgets": {
65 -
            "description": "The weather widgets on screen, each kind at most once.",
71 +
            "description": "The widgets on screen, each kind at most once.",
66 72
            "items": {
67 73
              "ref": "#widget",
68 74
              "type": "ref"
69 75
            },
70 -
            "maxLength": 12,
76 +
            "maxLength": 16,
71 77
            "type": "array"
72 78
          }
73 79
        },
74 80
        "required": [
75 81
          "poe",
76 82
          "widgets",
77 83
          "createdAt",
78 84
          "updatedAt"
79 85
        ],
80 86
        "type": "object"
81 87
      },
82 88
      "type": "record"
83 89
    },
84 90
    "poe": {
85 91
      "properties": {
86 92
        "scale": {
87 93
          "description": "Percent of its usual size.",
88 94
          "maximum": 200,
89 95
          "minimum": 50,
90 96
          "type": "integer"
91 97
        },
92 98
        "show": {
93 99
          "type": "boolean"
94 100
        },
95 101
        "side": {
96 102
          "description": "Which bottom corner Poe sits in; it faces into the screen.",
97 103
          "knownValues": [
98 104
            "left",
99 105
            "right"
100 106
          ],
101 107
          "type": "string"
102 108
        }
103 109
      },
104 110
      "required": [
105 111
        "show",
106 112
        "side",
107 113
        "scale"
108 114
      ],
109 115
      "type": "object"
110 116
    },
111 117
    "widget": {
112 118
      "properties": {
113 119
        "kind": {
120 +
          "description": "The atmosphere's weather (card to pulse), Anisota's moon, mark and loader, the time as a TID, the streamer's flushes (im.flushing.right.now), status and vitals (is.dame.now, is.dame.state) and teal.fm music, or their stream.place chat.",
114 121
          "knownValues": [
115 122
            "card",
116 123
            "strip",
117 124
            "badge",
118 125
            "apps",
119 126
            "forecast",
120 127
            "pulse",
121 128
            "moon",
122 129
            "mark",
123 -
            "loader"
130 +
            "loader",
131 +
            "tid",
132 +
            "flushes",
133 +
            "status",
134 +
            "music",
135 +
            "chat"
124 136
          ],
125 137
          "type": "string"
126 138
        },
127 139
        "scale": {
128 140
          "description": "Percent of its usual size.",
129 141
          "maximum": 200,
130 142
          "minimum": 50,
131 143
          "type": "integer"
132 144
        },
133 145
        "slot": {
134 146
          "description": "Where on screen. Widgets in the same slot stack.",
135 147
          "knownValues": [
136 148
            "top-left",
137 149
            "top-center",
138 150
            "top-right",
139 151
            "bottom-left",
140 152
            "bottom-center",
141 153
            "bottom-right"
142 154
          ],
143 155
          "type": "string"
156 +
        },
157 +
        "style": {
158 +
          "description": "How the widget looks, for the kinds with more than one way: tid (ticking, mini), flushes (count, stats, latest), status (both, status, vitals), music (now, history, stats, mini), chat (corner, side, pop). Absent or unknown is the kind's first.",
159 +
          "knownValues": [
160 +
            "ticking",
161 +
            "mini",
162 +
            "count",
163 +
            "stats",
164 +
            "latest",
165 +
            "both",
166 +
            "status",
167 +
            "vitals",
168 +
            "now",
169 +
            "history",
170 +
            "corner",
171 +
            "side",
172 +
            "pop"
173 +
          ],
174 +
          "maxLength": 32,
175 +
          "type": "string"
144 176
        }
145 177
      },
146 178
      "required": [
147 179
        "kind",
148 180
        "slot",
149 181
        "scale"
150 182
      ],
151 183
      "type": "object"
152 184
    }
153 185
  },
154 -
  "description": "How you've set up Poe's stream overlay (atpota.to/overlay): which weather widgets show, where and how big, which side Poe sits on, and what it reacts to. One record per account, at the record key \"self\". The overlay reads it from your repo and follows changes live, so a stream's overlay changes as soon as you save.",
186 +
  "description": "How you've set up Poe's stream overlay (atpota.to/overlay): which weather widgets show, where and how big, which side Poe sits on, and what it reacts to. One record per layout: \"self\" is the main one (atpota.to/overlay?streamer=<handle>), and any others are at their own record key, their id in the URL (&layout=<id>; lowercase letters, digits and dashes). The overlay reads it from your repo and follows changes live, so a stream's overlay changes as soon as you save.",
155 187
  "id": "to.atpota.poe.overlay",
156 188
  "lexicon": 1
157 189
}

Compare Other Versions

Lexicon Garden

@