space.opendeck.profile

opendeck.space

Schema Diff

+188 -15

From

CID
bafyreifomkspn7a...
Indexed At
2026-09-23 18:10 UTC
View this version

To

CID
bafyreia4onvnvpi...
Indexed At
2026-10-08 13:09 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

15 breaking changes, 51 non-breaking changes.

Breaking Changes (15)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.secondsStudied", kind: "prop", name: Some("secondsStudied") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.activity", kind: "prop", name: Some("activity") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.updatedAt", kind: "prop", name: Some("updatedAt") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.repetitions", kind: "prop", name: Some("repetitions") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.learned", kind: "prop", name: Some("learned") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.learning", kind: "prop", name: Some("learning") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.activityEnd", kind: "prop", name: Some("activityEnd") }
  • RemovedVertex RemovedVertex { vertex_id: "space.opendeck.profile:body.reminderTime" }
  • RemovedVertex RemovedVertex { vertex_id: "space.opendeck.profile:body.visibleDecks" }
  • RemovedVertex RemovedVertex { vertex_id: "space.opendeck.profile:body.visibleDecks:items" }
  • RemovedEdge RemovedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.reminderTime", kind: "prop", name: Some("reminderTime") }
  • RemovedEdge RemovedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.visibleDecks", kind: "prop", name: Some("visibleDecks") }
  • RemovedEdge RemovedEdge { src: "space.opendeck.profile:body.visibleDecks", tgt: "space.opendeck.profile:body.visibleDecks:items", kind: "items", name: None }
  • ConstraintAdded ConstraintAdded { vertex_id: "space.opendeck.profile:body.reminderDays:items", sort: "maximum", value: "6" }
  • ConstraintAdded ConstraintAdded { vertex_id: "space.opendeck.profile:body.reminderDays:items", sort: "minimum", value: "0" }
Non-Breaking Changes (51)
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.activity" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.activity:items" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.activityEnd" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.firstStudiedOn" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.lastStudiedAt" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.learned" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.learning" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.repetitions" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.retention" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.secondsStudied" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.updatedAt" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.breakReminders" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.creditStyle" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.newCardsPerDay" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.publicStats" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.reminderHour" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.shortTermIntervals" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.showCredits" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.showFollowsOnProfile" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.showMotivation" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.showStats" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.showTier" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.studyDays" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.studyDays:items" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.studyDaysEnd" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.studyTier" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.studyTierAt" }
  • AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.tierStyle" }
  • AddedEdge AddedEdge { src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.firstStudiedOn", kind: "prop", name: Some("firstStudiedOn") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.lastStudiedAt", kind: "prop", name: Some("lastStudiedAt") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.retention", kind: "prop", name: Some("retention") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile#publicStats.activity", tgt: "space.opendeck.profile#publicStats.activity:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.breakReminders", kind: "prop", name: Some("breakReminders") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.creditStyle", kind: "prop", name: Some("creditStyle") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.newCardsPerDay", kind: "prop", name: Some("newCardsPerDay") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.publicStats", kind: "prop", name: Some("publicStats") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.reminderHour", kind: "prop", name: Some("reminderHour") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.shortTermIntervals", kind: "prop", name: Some("shortTermIntervals") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.showCredits", kind: "prop", name: Some("showCredits") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.showFollowsOnProfile", kind: "prop", name: Some("showFollowsOnProfile") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.showMotivation", kind: "prop", name: Some("showMotivation") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.showStats", kind: "prop", name: Some("showStats") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.showTier", kind: "prop", name: Some("showTier") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.studyDays", kind: "prop", name: Some("studyDays") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.studyDaysEnd", kind: "prop", name: Some("studyDaysEnd") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.studyTier", kind: "prop", name: Some("studyTier") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.studyTierAt", kind: "prop", name: Some("studyTierAt") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.tierStyle", kind: "prop", name: Some("tierStyle") }
  • AddedEdge AddedEdge { src: "space.opendeck.profile:body.publicStats", tgt: "space.opendeck.profile#publicStats", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "space.opendeck.profile:body.studyDays", tgt: "space.opendeck.profile:body.studyDays:items", kind: "items", name: None }

Migration Guidance

Removed Elements

  • RemovedVertex { vertex_id: "space.opendeck.profile:body.reminderTime" }
  • RemovedVertex { vertex_id: "space.opendeck.profile:body.visibleDecks" }
  • RemovedVertex { vertex_id: "space.opendeck.profile:body.visibleDecks:items" }

Added Elements

  • AddedVertex { vertex_id: "space.opendeck.profile#publicStats" }
  • AddedVertex { vertex_id: "space.opendeck.profile#publicStats.activity" }
  • AddedVertex { vertex_id: "space.opendeck.profile#publicStats.activity:items" }
  • AddedVertex { vertex_id: "space.opendeck.profile#publicStats.activityEnd" }
  • AddedVertex { vertex_id: "space.opendeck.profile#publicStats.firstStudiedOn" }
  • AddedVertex { vertex_id: "space.opendeck.profile#publicStats.lastStudiedAt" }
  • AddedVertex { vertex_id: "space.opendeck.profile#publicStats.learned" }
  • AddedVertex { vertex_id: "space.opendeck.profile#publicStats.learning" }
  • AddedVertex { vertex_id: "space.opendeck.profile#publicStats.repetitions" }
  • AddedVertex { vertex_id: "space.opendeck.profile#publicStats.retention" }
  • AddedVertex { vertex_id: "space.opendeck.profile#publicStats.secondsStudied" }
  • AddedVertex { vertex_id: "space.opendeck.profile#publicStats.updatedAt" }
  • AddedVertex { vertex_id: "space.opendeck.profile:body.breakReminders" }
  • AddedVertex { vertex_id: "space.opendeck.profile:body.creditStyle" }
  • AddedVertex { vertex_id: "space.opendeck.profile:body.newCardsPerDay" }
  • AddedVertex { vertex_id: "space.opendeck.profile:body.publicStats" }
  • AddedVertex { vertex_id: "space.opendeck.profile:body.reminderHour" }
  • AddedVertex { vertex_id: "space.opendeck.profile:body.shortTermIntervals" }
  • AddedVertex { vertex_id: "space.opendeck.profile:body.showCredits" }
  • AddedVertex { vertex_id: "space.opendeck.profile:body.showFollowsOnProfile" }
  • AddedVertex { vertex_id: "space.opendeck.profile:body.showMotivation" }
  • AddedVertex { vertex_id: "space.opendeck.profile:body.showStats" }
  • AddedVertex { vertex_id: "space.opendeck.profile:body.showTier" }
  • AddedVertex { vertex_id: "space.opendeck.profile:body.studyDays" }
  • AddedVertex { vertex_id: "space.opendeck.profile:body.studyDays:items" }
  • AddedVertex { vertex_id: "space.opendeck.profile:body.studyDaysEnd" }
  • AddedVertex { vertex_id: "space.opendeck.profile:body.studyTier" }
  • AddedVertex { vertex_id: "space.opendeck.profile:body.studyTierAt" }
  • AddedVertex { vertex_id: "space.opendeck.profile:body.tierStyle" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "space.opendeck.profile:body.reminderDays:items", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "space.opendeck.profile:body.reminderDays:items", sort: "maximum", value: "6" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.secondsStudied", kind: "prop", name: Some("secondsStudied") }
  • Breaking: RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.activity", kind: "prop", name: Some("activity") }
  • Breaking: RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.updatedAt", kind: "prop", name: Some("updatedAt") }
  • Breaking: RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.repetitions", kind: "prop", name: Some("repetitions") }
  • Breaking: RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.learned", kind: "prop", name: Some("learned") }
  • Breaking: RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.learning", kind: "prop", name: Some("learning") }
  • Breaking: RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.activityEnd", kind: "prop", name: Some("activityEnd") }
  • Breaking: RemovedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.reminderTime", kind: "prop", name: Some("reminderTime") }
  • Breaking: RemovedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.visibleDecks", kind: "prop", name: Some("visibleDecks") }
  • Breaking: RemovedEdge { src: "space.opendeck.profile:body.visibleDecks", tgt: "space.opendeck.profile:body.visibleDecks:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.firstStudiedOn", kind: "prop", name: Some("firstStudiedOn") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.lastStudiedAt", kind: "prop", name: Some("lastStudiedAt") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.retention", kind: "prop", name: Some("retention") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile#publicStats.activity", tgt: "space.opendeck.profile#publicStats.activity:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.breakReminders", kind: "prop", name: Some("breakReminders") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.creditStyle", kind: "prop", name: Some("creditStyle") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.newCardsPerDay", kind: "prop", name: Some("newCardsPerDay") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.publicStats", kind: "prop", name: Some("publicStats") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.reminderHour", kind: "prop", name: Some("reminderHour") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.shortTermIntervals", kind: "prop", name: Some("shortTermIntervals") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.showCredits", kind: "prop", name: Some("showCredits") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.showFollowsOnProfile", kind: "prop", name: Some("showFollowsOnProfile") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.showMotivation", kind: "prop", name: Some("showMotivation") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.showStats", kind: "prop", name: Some("showStats") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.showTier", kind: "prop", name: Some("showTier") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.studyDays", kind: "prop", name: Some("studyDays") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.studyDaysEnd", kind: "prop", name: Some("studyDaysEnd") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.studyTier", kind: "prop", name: Some("studyTier") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.studyTierAt", kind: "prop", name: Some("studyTierAt") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.tierStyle", kind: "prop", name: Some("tierStyle") }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile:body.publicStats", tgt: "space.opendeck.profile#publicStats", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "space.opendeck.profile:body.studyDays", tgt: "space.opendeck.profile:body.studyDays:items", kind: "items", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "main": {
5 5
      "description": "OpenDeck profile and synced preferences.",
6 6
      "key": "literal:self",
7 7
      "record": {
8 8
        "properties": {
9 9
          "accentColor": {
10 10
            "description": "Hex accent color, e.g. #3b82f6.",
11 11
            "maxGraphemes": 9,
12 12
            "maxLength": 90,
13 13
            "type": "string"
14 14
          },
15 15
          "bio": {
16 16
            "maxGraphemes": 2000,
17 17
            "maxLength": 20000,
18 18
            "type": "string"
19 19
          },
20 +
          "breakReminders": {
21 +
            "description": "Suggest breaks after long study sessions or days; absent means on.",
22 +
            "type": "boolean"
23 +
          },
24 +
          "creditStyle": {
25 +
            "description": "How shown credit roles look: theme styles the whole profile, badges only lists them; absent means theme.",
26 +
            "enum": [
27 +
              "theme",
28 +
              "badges"
29 +
            ],
30 +
            "type": "string"
31 +
          },
20 32
          "defaultVisibility": {
21 33
            "enum": [
22 34
              "public",
23 35
              "private"
24 36
            ],
25 37
            "type": "string"
26 38
          },
39 +
          "newCardsPerDay": {
40 +
            "description": "How many new cards to introduce per deck each day; absent means no limit.",
41 +
            "maximum": 1000,
42 +
            "minimum": 1,
43 +
            "type": "integer"
44 +
          },
45 +
          "publicStats": {
46 +
            "description": "Summary of your study stats without deck or card details; only present while showStats is everyone.",
47 +
            "ref": "space.opendeck.profile#publicStats",
48 +
            "type": "ref"
49 +
          },
27 50
          "reminderDays": {
28 -
            "description": "Weekdays 0-6 (Sun-Sat).",
51 +
            "description": "Weekdays 0-6 (Sun-Sat); absent means Monday to Friday.",
29 52
            "items": {
53 +
              "maximum": 6,
54 +
              "minimum": 0,
30 55
              "type": "integer"
31 56
            },
32 57
            "maxLength": 7,
33 58
            "type": "array"
34 59
          },
35 60
          "reminderEnabled": {
36 61
            "type": "boolean"
37 62
          },
38 -
          "reminderTime": {
39 -
            "description": "Local reminder time, HH:MM.",
40 -
            "maxGraphemes": 5,
41 -
            "maxLength": 50,
63 +
          "reminderHour": {
64 +
            "description": "Local hour (0-23) of the study reminder; absent means 19.",
65 +
            "maximum": 23,
66 +
            "minimum": 0,
67 +
            "type": "integer"
68 +
          },
69 +
          "shortTermIntervals": {
70 +
            "description": "Default short-term intervals preset; absent means auto.",
71 +
            "enum": [
72 +
              "auto",
73 +
              "quick",
74 +
              "balanced",
75 +
              "relaxed",
76 +
              "spaced"
77 +
            ],
42 78
            "type": "string"
43 79
          },
44 80
          "showActivityOnProfile": {
45 81
            "type": "boolean"
46 82
          },
83 +
          "showCredits": {
84 +
            "description": "Who sees your OpenDeck credit roles on your profile; absent means everyone.",
85 +
            "enum": [
86 +
              "nobody",
87 +
              "me",
88 +
              "everyone"
89 +
            ],
90 +
            "type": "string"
91 +
          },
47 92
          "showDecksOnProfile": {
48 93
            "type": "boolean"
49 94
          },
95 +
          "showFollowsOnProfile": {
96 +
            "type": "boolean"
97 +
          },
98 +
          "showMotivation": {
99 +
            "description": "Who sees tier progress boxes: nobody hides them, me shows them on the home, study and profile pages, everyone also shows the profile box to visitors (only while showTier is everyone); absent means me.",
100 +
            "enum": [
101 +
              "nobody",
102 +
              "me",
103 +
              "everyone"
104 +
            ],
105 +
            "type": "string"
106 +
          },
50 107
          "showProgressOnProfile": {
51 108
            "type": "boolean"
52 109
          },
110 +
          "showStats": {
111 +
            "description": "Who sees your study stats on your profile; absent means me.",
112 +
            "enum": [
113 +
              "nobody",
114 +
              "me",
115 +
              "everyone"
116 +
            ],
117 +
            "type": "string"
118 +
          },
119 +
          "showTier": {
120 +
            "description": "Who sees your study tier on your profile, and with everyone also in battles; absent means me.",
121 +
            "enum": [
122 +
              "nobody",
123 +
              "me",
124 +
              "everyone"
125 +
            ],
126 +
            "type": "string"
127 +
          },
128 +
          "studyDays": {
129 +
            "description": "Study sessions per day (capped at 3) for the 84 days up to studyDaysEnd, oldest first; only present while the motivation box is public.",
130 +
            "items": {
131 +
              "maximum": 3,
132 +
              "minimum": 0,
133 +
              "type": "integer"
134 +
            },
135 +
            "maxLength": 84,
136 +
            "type": "array"
137 +
          },
138 +
          "studyDaysEnd": {
139 +
            "description": "Local date (YYYY-MM-DD) of the last entry in studyDays.",
140 +
            "maxGraphemes": 10,
141 +
            "maxLength": 100,
142 +
            "type": "string"
143 +
          },
144 +
          "studyTier": {
145 +
            "description": "Study tier from the days studied in the last four weeks; only present while it is shown publicly.",
146 +
            "enum": [
147 +
              "bronze",
148 +
              "silver",
149 +
              "gold",
150 +
              "platinum",
151 +
              "diamond",
152 +
              "champion",
153 +
              "grandChampion",
154 +
              "supernova"
155 +
            ],
156 +
            "type": "string"
157 +
          },
158 +
          "studyTierAt": {
159 +
            "description": "When studyTier was last computed.",
160 +
            "format": "datetime",
161 +
            "type": "string"
162 +
          },
163 +
          "tierStyle": {
164 +
            "description": "How a shown tier looks: theme styles the whole profile, badge only adds a badge; absent means theme.",
165 +
            "enum": [
166 +
              "theme",
167 +
              "badge"
168 +
            ],
169 +
            "type": "string"
170 +
          },
53 171
          "uiLanguage": {
54 172
            "description": "BCP-47 language tag for the OpenDeck interface.",
55 173
            "maxGraphemes": 20,
56 174
            "maxLength": 200,
57 175
            "type": "string"
58 176
          },
59 177
          "updatedAt": {
60 178
            "format": "datetime",
61 179
            "type": "string"
62 -
          },
63 -
          "visibleDecks": {
64 -
            "items": {
65 -
              "format": "at-uri",
66 -
              "maxGraphemes": 1000,
67 -
              "maxLength": 10000,
68 -
              "type": "string"
69 -
            },
70 -
            "maxLength": 100,
71 -
            "type": "array"
72 180
          }
73 181
        },
74 182
        "type": "object"
75 183
      },
76 184
      "type": "record"
185 +
    },
186 +
    "publicStats": {
187 +
      "properties": {
188 +
        "activity": {
189 +
          "description": "Repetitions per day for the days up to activityEnd, oldest first.",
190 +
          "items": {
191 +
            "minimum": 0,
192 +
            "type": "integer"
193 +
          },
194 +
          "maxLength": 371,
195 +
          "type": "array"
196 +
        },
197 +
        "activityEnd": {
198 +
          "description": "Local date (YYYY-MM-DD) of the last entry in activity.",
199 +
          "maxGraphemes": 10,
200 +
          "maxLength": 100,
201 +
          "type": "string"
202 +
        },
203 +
        "firstStudiedOn": {
204 +
          "description": "Local date (YYYY-MM-DD) of the first study day.",
205 +
          "maxGraphemes": 10,
206 +
          "maxLength": 100,
207 +
          "type": "string"
208 +
        },
209 +
        "lastStudiedAt": {
210 +
          "format": "datetime",
211 +
          "type": "string"
212 +
        },
213 +
        "learned": {
214 +
          "description": "Cards in review.",
215 +
          "type": "integer"
216 +
        },
217 +
        "learning": {
218 +
          "description": "Cards in learning or relearning.",
219 +
          "type": "integer"
220 +
        },
221 +
        "repetitions": {
222 +
          "description": "All ratings ever given.",
223 +
          "type": "integer"
224 +
        },
225 +
        "retention": {
226 +
          "description": "Percent of ratings in the last 30 days that were not again.",
227 +
          "maximum": 100,
228 +
          "minimum": 0,
229 +
          "type": "integer"
230 +
        },
231 +
        "secondsStudied": {
232 +
          "description": "Active study time in the last 365 days.",
233 +
          "type": "integer"
234 +
        },
235 +
        "updatedAt": {
236 +
          "format": "datetime",
237 +
          "type": "string"
238 +
        }
239 +
      },
240 +
      "required": [
241 +
        "learned",
242 +
        "learning",
243 +
        "repetitions",
244 +
        "secondsStudied",
245 +
        "activity",
246 +
        "activityEnd",
247 +
        "updatedAt"
248 +
      ],
249 +
      "type": "object"
77 250
    }
78 251
  },
79 252
  "id": "space.opendeck.profile",
80 253
  "lexicon": 1
81 254
}

Compare Other Versions

Lexicon Garden

@