diff --git a/lexicons/ai/syui/card.json b/lexicons/ai/syui/card.json
new file mode 100644
index 0000000..b809cca
--- /dev/null
+++ b/lexicons/ai/syui/card.json
@@ -0,0 +1,56 @@
+{
+	"lexicon": 1,
+	"id": "ai.syui.card",
+	"defs": {
+		"main": {
+			"type": "record",
+			"description": "Record containing a cards box.",
+			"key": "tid",
+			"record": {
+				"type": "object",
+				"required": ["verify", "createdAt"],
+				"properties": {
+					"id":{
+						"type": "integer",
+						"minimum": 0,
+						"maximum": 14,
+						"default": 0
+					},
+					"cp":{
+						"type": "integer",
+						"minimum": 1,
+						"maximum": 5000,
+						"default": 1
+					},
+					"rank":{
+						"type": "integer",
+						"minimum": 0,
+						"maximum": 7,
+						"default": 0
+					},
+					"rare": {
+						"type": "string",
+						"enum": ["normal", "super", "ultra", "yui", "ai"],
+						"default": "normal"
+					},
+					"author": {
+						"type": "string",
+						"format": "uri",
+						"description": "https://verify...",
+						"default": "https://yui.syui.ai"
+					},
+					"verify": {
+						"type": "string",
+						"format": "at-uri",
+						"description": "at://verify..."
+					},
+					"createdAt": {
+						"type": "string",
+						"format": "datetime",
+						"description": "Client-declared timestamp when this post was originally created."
+					}
+				}
+			}
+		}
+	}
+}
diff --git a/lexicons/ai/syui/card/verify.json b/lexicons/ai/syui/card/verify.json
new file mode 100644
index 0000000..8568d62
--- /dev/null
+++ b/lexicons/ai/syui/card/verify.json
@@ -0,0 +1,62 @@
+{
+  "lexicon": 1,
+  "id": "ai.syui.card.verify",
+  "defs": {
+    "main": {
+      "type": "record",
+      "description": "Record containing a card verify.",
+      "key": "tid",
+      "record": {
+        "type": "object",
+        "required": ["handle", "did", "createdAt"],
+        "properties": {
+									"id":{
+										"type": "integer",
+										"minimum": 0,
+										"maximum": 14,
+										"default": 0
+									},
+									"cp":{
+										"type": "integer",
+										"minimum": 1,
+										"maximum": 10000,
+										"default": 1
+									},
+									"rank":{
+										"type": "integer",
+										"minimum": 0,
+										"maximum": 7,
+										"default": 0
+									},
+									"rare": {
+										"type": "string",
+										"enum": ["normal", "super", "ultra", "yui", "ai"],
+										"default": "normal"
+									},
+									"handle": {
+										"type": "string",
+										"maxLength": 32,
+										"maxGraphemes": 32
+									},
+									"did": {
+										"type": "string"
+									},
+									"embed": {
+										"type": "union",
+										"refs": [
+											"app.bsky.embed.images",
+											"app.bsky.embed.external",
+											"app.bsky.embed.record",
+											"app.bsky.embed.recordWithMedia"
+												]
+									},
+									"createdAt": {
+										"type": "string",
+										"format": "datetime",
+										"description": "Client-declared timestamp when this post was originally created."
+									}
+								}
+						}
+				}
+		}
+}
diff --git a/lexicons/ai/syui/o/comment.json b/lexicons/ai/syui/o/comment.json
new file mode 100644
index 0000000..c52ec9d
--- /dev/null
+++ b/lexicons/ai/syui/o/comment.json
@@ -0,0 +1,30 @@
+{
+  "lexicon": 1,
+  "id": "ai.syui.o.comment",
+  "defs": {
+    "main": {
+      "type": "record",
+      "description": "Record containing a Frontpage comment.",
+      "key": "tid",
+      "record": {
+        "type": "object",
+        "required": ["content", "createdAt", "post"],
+        "properties": {
+          "content": {
+            "type": "string",
+            "maxLength": 100000,
+            "maxGraphemes": 10000,
+            "description": "The content of the comment."
+          },
+          "createdAt": {
+            "type": "string",
+            "format": "datetime",
+            "description": "Client-declared timestamp when this comment was originally created."
+          },
+          "parent": { "type": "ref", "ref": "com.atproto.repo.strongRef" },
+          "post": { "type": "ref", "ref": "com.atproto.repo.strongRef" }
+        }
+      }
+    }
+  }
+}
diff --git a/lexicons/ai/syui/o/post.json b/lexicons/ai/syui/o/post.json
new file mode 100644
index 0000000..b18659c
--- /dev/null
+++ b/lexicons/ai/syui/o/post.json
@@ -0,0 +1,33 @@
+{
+  "lexicon": 1,
+  "id": "ai.syui.o.post",
+  "defs": {
+    "main": {
+      "type": "record",
+      "description": "Record containing a Frontpage post.",
+      "key": "tid",
+      "record": {
+        "type": "object",
+        "required": ["title", "url", "createdAt"],
+        "properties": {
+          "title": {
+            "type": "string",
+            "maxLength": 3000,
+            "maxGraphemes": 300,
+            "description": "The title of the post."
+          },
+          "url": {
+            "type": "string",
+            "format": "uri",
+            "description": "The URL of the post."
+          },
+          "createdAt": {
+            "type": "string",
+            "format": "datetime",
+            "description": "Client-declared timestamp when this post was originally created."
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/lexicons/ai/syui/o/vote.json b/lexicons/ai/syui/o/vote.json
new file mode 100644
index 0000000..0870658
--- /dev/null
+++ b/lexicons/ai/syui/o/vote.json
@@ -0,0 +1,23 @@
+{
+  "lexicon": 1,
+  "id": "ai.syui.o.vote",
+  "defs": {
+    "main": {
+      "type": "record",
+      "description": "Record containing a Frontpage vote.",
+      "key": "tid",
+      "record": {
+        "type": "object",
+        "required": ["subject", "createdAt"],
+        "properties": {
+          "subject": { "type": "ref", "ref": "com.atproto.repo.strongRef" },
+          "createdAt": {
+            "type": "string",
+            "format": "datetime",
+            "description": "Client-declared timestamp when this vote was originally created."
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/lexicons/com/atproto/repo/applyWrites.json b/lexicons/com/atproto/repo/applyWrites.json
new file mode 100644
index 0000000..26dd96c
--- /dev/null
+++ b/lexicons/com/atproto/repo/applyWrites.json
@@ -0,0 +1,126 @@
+{
+  "lexicon": 1,
+  "id": "com.atproto.repo.applyWrites",
+  "defs": {
+    "main": {
+      "type": "procedure",
+      "description": "Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS.",
+      "input": {
+        "encoding": "application/json",
+        "schema": {
+          "type": "object",
+          "required": ["repo", "writes"],
+          "properties": {
+            "repo": {
+              "type": "string",
+              "format": "at-identifier",
+              "description": "The handle or DID of the repo (aka, current account)."
+            },
+            "validate": {
+              "type": "boolean",
+              "description": "Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons."
+            },
+            "writes": {
+              "type": "array",
+              "items": {
+                "type": "union",
+                "refs": ["#create", "#update", "#delete"],
+                "closed": true
+              }
+            },
+            "swapCommit": {
+              "type": "string",
+              "description": "If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations.",
+              "format": "cid"
+            }
+          }
+        }
+      },
+      "output": {
+        "encoding": "application/json",
+        "schema": {
+          "type": "object",
+          "required": [],
+          "properties": {
+            "commit": {
+              "type": "ref",
+              "ref": "com.atproto.repo.defs#commitMeta"
+            },
+            "results": {
+              "type": "array",
+              "items": {
+                "type": "union",
+                "refs": ["#createResult", "#updateResult", "#deleteResult"],
+                "closed": true
+              }
+            }
+          }
+        }
+      },
+      "errors": [
+        {
+          "name": "InvalidSwap",
+          "description": "Indicates that the 'swapCommit' parameter did not match current commit."
+        }
+      ]
+    },
+    "create": {
+      "type": "object",
+      "description": "Operation which creates a new record.",
+      "required": ["collection", "value"],
+      "properties": {
+        "collection": { "type": "string", "format": "nsid" },
+        "rkey": { "type": "string", "maxLength": 15 },
+        "value": { "type": "unknown" }
+      }
+    },
+    "update": {
+      "type": "object",
+      "description": "Operation which updates an existing record.",
+      "required": ["collection", "rkey", "value"],
+      "properties": {
+        "collection": { "type": "string", "format": "nsid" },
+        "rkey": { "type": "string" },
+        "value": { "type": "unknown" }
+      }
+    },
+    "delete": {
+      "type": "object",
+      "description": "Operation which deletes an existing record.",
+      "required": ["collection", "rkey"],
+      "properties": {
+        "collection": { "type": "string", "format": "nsid" },
+        "rkey": { "type": "string" }
+      }
+    },
+    "createResult": {
+      "type": "object",
+      "required": ["uri", "cid"],
+      "properties": {
+        "uri": { "type": "string", "format": "at-uri" },
+        "cid": { "type": "string", "format": "cid" },
+        "validationStatus": {
+          "type": "string",
+          "knownValues": ["valid", "unknown"]
+        }
+      }
+    },
+    "updateResult": {
+      "type": "object",
+      "required": ["uri", "cid"],
+      "properties": {
+        "uri": { "type": "string", "format": "at-uri" },
+        "cid": { "type": "string", "format": "cid" },
+        "validationStatus": {
+          "type": "string",
+          "knownValues": ["valid", "unknown"]
+        }
+      }
+    },
+    "deleteResult": {
+      "type": "object",
+      "required": [],
+      "properties": {}
+    }
+  }
+}
diff --git a/lexicons/com/atproto/repo/createRecord.json b/lexicons/com/atproto/repo/createRecord.json
new file mode 100644
index 0000000..7290085
--- /dev/null
+++ b/lexicons/com/atproto/repo/createRecord.json
@@ -0,0 +1,72 @@
+{
+  "lexicon": 1,
+  "id": "com.atproto.repo.createRecord",
+  "defs": {
+    "main": {
+      "type": "procedure",
+      "description": "Create a single new repository record. Requires auth, implemented by PDS.",
+      "input": {
+        "encoding": "application/json",
+        "schema": {
+          "type": "object",
+          "required": ["repo", "collection", "record"],
+          "properties": {
+            "repo": {
+              "type": "string",
+              "format": "at-identifier",
+              "description": "The handle or DID of the repo (aka, current account)."
+            },
+            "collection": {
+              "type": "string",
+              "format": "nsid",
+              "description": "The NSID of the record collection."
+            },
+            "rkey": {
+              "type": "string",
+              "description": "The Record Key.",
+              "maxLength": 15
+            },
+            "validate": {
+              "type": "boolean",
+              "description": "Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons."
+            },
+            "record": {
+              "type": "unknown",
+              "description": "The record itself. Must contain a $type field."
+            },
+            "swapCommit": {
+              "type": "string",
+              "format": "cid",
+              "description": "Compare and swap with the previous commit by CID."
+            }
+          }
+        }
+      },
+      "output": {
+        "encoding": "application/json",
+        "schema": {
+          "type": "object",
+          "required": ["uri", "cid"],
+          "properties": {
+            "uri": { "type": "string", "format": "at-uri" },
+            "cid": { "type": "string", "format": "cid" },
+            "commit": {
+              "type": "ref",
+              "ref": "com.atproto.repo.defs#commitMeta"
+            },
+            "validationStatus": {
+              "type": "string",
+              "knownValues": ["valid", "unknown"]
+            }
+          }
+        }
+      },
+      "errors": [
+        {
+          "name": "InvalidSwap",
+          "description": "Indicates that 'swapCommit' didn't match current repo commit."
+        }
+      ]
+    }
+  }
+}
diff --git a/lexicons/com/atproto/repo/defs.json b/lexicons/com/atproto/repo/defs.json
new file mode 100644
index 0000000..0f5128f
--- /dev/null
+++ b/lexicons/com/atproto/repo/defs.json
@@ -0,0 +1,14 @@
+{
+  "lexicon": 1,
+  "id": "com.atproto.repo.defs",
+  "defs": {
+    "commitMeta": {
+      "type": "object",
+      "required": ["cid", "rev"],
+      "properties": {
+        "cid": { "type": "string", "format": "cid" },
+        "rev": { "type": "string" }
+      }
+    }
+  }
+}
diff --git a/lexicons/com/atproto/repo/deleteRecord.json b/lexicons/com/atproto/repo/deleteRecord.json
new file mode 100644
index 0000000..fb9b90b
--- /dev/null
+++ b/lexicons/com/atproto/repo/deleteRecord.json
@@ -0,0 +1,56 @@
+{
+  "lexicon": 1,
+  "id": "com.atproto.repo.deleteRecord",
+  "defs": {
+    "main": {
+      "type": "procedure",
+      "description": "Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS.",
+      "input": {
+        "encoding": "application/json",
+        "schema": {
+          "type": "object",
+          "required": ["repo", "collection", "rkey"],
+          "properties": {
+            "repo": {
+              "type": "string",
+              "format": "at-identifier",
+              "description": "The handle or DID of the repo (aka, current account)."
+            },
+            "collection": {
+              "type": "string",
+              "format": "nsid",
+              "description": "The NSID of the record collection."
+            },
+            "rkey": {
+              "type": "string",
+              "description": "The Record Key."
+            },
+            "swapRecord": {
+              "type": "string",
+              "format": "cid",
+              "description": "Compare and swap with the previous record by CID."
+            },
+            "swapCommit": {
+              "type": "string",
+              "format": "cid",
+              "description": "Compare and swap with the previous commit by CID."
+            }
+          }
+        }
+      },
+      "output": {
+        "encoding": "application/json",
+        "schema": {
+          "type": "object",
+          "properties": {
+            "commit": {
+              "type": "ref",
+              "ref": "com.atproto.repo.defs#commitMeta"
+            }
+          }
+        }
+      },
+      "errors": [{ "name": "InvalidSwap" }]
+    }
+  }
+}
diff --git a/lexicons/com/atproto/repo/describeRepo.json b/lexicons/com/atproto/repo/describeRepo.json
new file mode 100644
index 0000000..b1ce2b6
--- /dev/null
+++ b/lexicons/com/atproto/repo/describeRepo.json
@@ -0,0 +1,51 @@
+{
+  "lexicon": 1,
+  "id": "com.atproto.repo.describeRepo",
+  "defs": {
+    "main": {
+      "type": "query",
+      "description": "Get information about an account and repository, including the list of collections. Does not require auth.",
+      "parameters": {
+        "type": "params",
+        "required": ["repo"],
+        "properties": {
+          "repo": {
+            "type": "string",
+            "format": "at-identifier",
+            "description": "The handle or DID of the repo."
+          }
+        }
+      },
+      "output": {
+        "encoding": "application/json",
+        "schema": {
+          "type": "object",
+          "required": [
+            "handle",
+            "did",
+            "didDoc",
+            "collections",
+            "handleIsCorrect"
+          ],
+          "properties": {
+            "handle": { "type": "string", "format": "handle" },
+            "did": { "type": "string", "format": "did" },
+            "didDoc": {
+              "type": "unknown",
+              "description": "The complete DID document for this account."
+            },
+            "collections": {
+              "type": "array",
+              "description": "List of all the collections (NSIDs) for which this repo contains at least one record.",
+              "items": { "type": "string", "format": "nsid" }
+            },
+            "handleIsCorrect": {
+              "type": "boolean",
+              "description": "Indicates if handle is currently valid (resolves bi-directionally)"
+            }
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/lexicons/com/atproto/repo/getRecord.json b/lexicons/com/atproto/repo/getRecord.json
new file mode 100644
index 0000000..261c1cd
--- /dev/null
+++ b/lexicons/com/atproto/repo/getRecord.json
@@ -0,0 +1,45 @@
+{
+  "lexicon": 1,
+  "id": "com.atproto.repo.getRecord",
+  "defs": {
+    "main": {
+      "type": "query",
+      "description": "Get a single record from a repository. Does not require auth.",
+      "parameters": {
+        "type": "params",
+        "required": ["repo", "collection", "rkey"],
+        "properties": {
+          "repo": {
+            "type": "string",
+            "format": "at-identifier",
+            "description": "The handle or DID of the repo."
+          },
+          "collection": {
+            "type": "string",
+            "format": "nsid",
+            "description": "The NSID of the record collection."
+          },
+          "rkey": { "type": "string", "description": "The Record Key." },
+          "cid": {
+            "type": "string",
+            "format": "cid",
+            "description": "The CID of the version of the record. If not specified, then return the most recent version."
+          }
+        }
+      },
+      "output": {
+        "encoding": "application/json",
+        "schema": {
+          "type": "object",
+          "required": ["uri", "value"],
+          "properties": {
+            "uri": { "type": "string", "format": "at-uri" },
+            "cid": { "type": "string", "format": "cid" },
+            "value": { "type": "unknown" }
+          }
+        }
+      },
+      "errors": [{ "name": "RecordNotFound" }]
+    }
+  }
+}
diff --git a/lexicons/com/atproto/repo/importRepo.json b/lexicons/com/atproto/repo/importRepo.json
new file mode 100644
index 0000000..fc850b1
--- /dev/null
+++ b/lexicons/com/atproto/repo/importRepo.json
@@ -0,0 +1,13 @@
+{
+  "lexicon": 1,
+  "id": "com.atproto.repo.importRepo",
+  "defs": {
+    "main": {
+      "type": "procedure",
+      "description": "Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set.",
+      "input": {
+        "encoding": "application/vnd.ipld.car"
+      }
+    }
+  }
+}
diff --git a/lexicons/com/atproto/repo/listMissingBlobs.json b/lexicons/com/atproto/repo/listMissingBlobs.json
new file mode 100644
index 0000000..c39913d
--- /dev/null
+++ b/lexicons/com/atproto/repo/listMissingBlobs.json
@@ -0,0 +1,44 @@
+{
+  "lexicon": 1,
+  "id": "com.atproto.repo.listMissingBlobs",
+  "defs": {
+    "main": {
+      "type": "query",
+      "description": "Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow.",
+      "parameters": {
+        "type": "params",
+        "properties": {
+          "limit": {
+            "type": "integer",
+            "minimum": 1,
+            "maximum": 1000,
+            "default": 500
+          },
+          "cursor": { "type": "string" }
+        }
+      },
+      "output": {
+        "encoding": "application/json",
+        "schema": {
+          "type": "object",
+          "required": ["blobs"],
+          "properties": {
+            "cursor": { "type": "string" },
+            "blobs": {
+              "type": "array",
+              "items": { "type": "ref", "ref": "#recordBlob" }
+            }
+          }
+        }
+      }
+    },
+    "recordBlob": {
+      "type": "object",
+      "required": ["cid", "recordUri"],
+      "properties": {
+        "cid": { "type": "string", "format": "cid" },
+        "recordUri": { "type": "string", "format": "at-uri" }
+      }
+    }
+  }
+}
diff --git a/lexicons/com/atproto/repo/listRecords.json b/lexicons/com/atproto/repo/listRecords.json
new file mode 100644
index 0000000..bc91c95
--- /dev/null
+++ b/lexicons/com/atproto/repo/listRecords.json
@@ -0,0 +1,69 @@
+{
+  "lexicon": 1,
+  "id": "com.atproto.repo.listRecords",
+  "defs": {
+    "main": {
+      "type": "query",
+      "description": "List a range of records in a repository, matching a specific collection. Does not require auth.",
+      "parameters": {
+        "type": "params",
+        "required": ["repo", "collection"],
+        "properties": {
+          "repo": {
+            "type": "string",
+            "format": "at-identifier",
+            "description": "The handle or DID of the repo."
+          },
+          "collection": {
+            "type": "string",
+            "format": "nsid",
+            "description": "The NSID of the record type."
+          },
+          "limit": {
+            "type": "integer",
+            "minimum": 1,
+            "maximum": 100,
+            "default": 50,
+            "description": "The number of records to return."
+          },
+          "cursor": { "type": "string" },
+          "rkeyStart": {
+            "type": "string",
+            "description": "DEPRECATED: The lowest sort-ordered rkey to start from (exclusive)"
+          },
+          "rkeyEnd": {
+            "type": "string",
+            "description": "DEPRECATED: The highest sort-ordered rkey to stop at (exclusive)"
+          },
+          "reverse": {
+            "type": "boolean",
+            "description": "Flag to reverse the order of the returned records."
+          }
+        }
+      },
+      "output": {
+        "encoding": "application/json",
+        "schema": {
+          "type": "object",
+          "required": ["records"],
+          "properties": {
+            "cursor": { "type": "string" },
+            "records": {
+              "type": "array",
+              "items": { "type": "ref", "ref": "#record" }
+            }
+          }
+        }
+      }
+    },
+    "record": {
+      "type": "object",
+      "required": ["uri", "cid", "value"],
+      "properties": {
+        "uri": { "type": "string", "format": "at-uri" },
+        "cid": { "type": "string", "format": "cid" },
+        "value": { "type": "unknown" }
+      }
+    }
+  }
+}
diff --git a/lexicons/com/atproto/repo/putRecord.json b/lexicons/com/atproto/repo/putRecord.json
new file mode 100644
index 0000000..9a841f6
--- /dev/null
+++ b/lexicons/com/atproto/repo/putRecord.json
@@ -0,0 +1,73 @@
+{
+  "lexicon": 1,
+  "id": "com.atproto.repo.putRecord",
+  "defs": {
+    "main": {
+      "type": "procedure",
+      "description": "Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS.",
+      "input": {
+        "encoding": "application/json",
+        "schema": {
+          "type": "object",
+          "required": ["repo", "collection", "rkey", "record"],
+          "nullable": ["swapRecord"],
+          "properties": {
+            "repo": {
+              "type": "string",
+              "format": "at-identifier",
+              "description": "The handle or DID of the repo (aka, current account)."
+            },
+            "collection": {
+              "type": "string",
+              "format": "nsid",
+              "description": "The NSID of the record collection."
+            },
+            "rkey": {
+              "type": "string",
+              "description": "The Record Key.",
+              "maxLength": 15
+            },
+            "validate": {
+              "type": "boolean",
+              "description": "Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons."
+            },
+            "record": {
+              "type": "unknown",
+              "description": "The record to write."
+            },
+            "swapRecord": {
+              "type": "string",
+              "format": "cid",
+              "description": "Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation"
+            },
+            "swapCommit": {
+              "type": "string",
+              "format": "cid",
+              "description": "Compare and swap with the previous commit by CID."
+            }
+          }
+        }
+      },
+      "output": {
+        "encoding": "application/json",
+        "schema": {
+          "type": "object",
+          "required": ["uri", "cid"],
+          "properties": {
+            "uri": { "type": "string", "format": "at-uri" },
+            "cid": { "type": "string", "format": "cid" },
+            "commit": {
+              "type": "ref",
+              "ref": "com.atproto.repo.defs#commitMeta"
+            },
+            "validationStatus": {
+              "type": "string",
+              "knownValues": ["valid", "unknown"]
+            }
+          }
+        }
+      },
+      "errors": [{ "name": "InvalidSwap" }]
+    }
+  }
+}
diff --git a/lexicons/com/atproto/repo/strongRef.json b/lexicons/com/atproto/repo/strongRef.json
new file mode 100644
index 0000000..cb79625
--- /dev/null
+++ b/lexicons/com/atproto/repo/strongRef.json
@@ -0,0 +1,15 @@
+{
+  "lexicon": 1,
+  "id": "com.atproto.repo.strongRef",
+  "description": "A URI with a content-hash fingerprint.",
+  "defs": {
+    "main": {
+      "type": "object",
+      "required": ["uri", "cid"],
+      "properties": {
+        "uri": { "type": "string", "format": "at-uri" },
+        "cid": { "type": "string", "format": "cid" }
+      }
+    }
+  }
+}
diff --git a/lexicons/com/atproto/repo/uploadBlob.json b/lexicons/com/atproto/repo/uploadBlob.json
new file mode 100644
index 0000000..547a995
--- /dev/null
+++ b/lexicons/com/atproto/repo/uploadBlob.json
@@ -0,0 +1,23 @@
+{
+  "lexicon": 1,
+  "id": "com.atproto.repo.uploadBlob",
+  "defs": {
+    "main": {
+      "type": "procedure",
+      "description": "Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS.",
+      "input": {
+        "encoding": "*/*"
+      },
+      "output": {
+        "encoding": "application/json",
+        "schema": {
+          "type": "object",
+          "required": ["blob"],
+          "properties": {
+            "blob": { "type": "blob" }
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/repos_extra/frontpage/lexicons/ai/syui/o/comment.json b/repos_extra/frontpage/lexicons/ai/syui/o/comment.json
new file mode 100644
index 0000000..c52ec9d
--- /dev/null
+++ b/repos_extra/frontpage/lexicons/ai/syui/o/comment.json
@@ -0,0 +1,30 @@
+{
+  "lexicon": 1,
+  "id": "ai.syui.o.comment",
+  "defs": {
+    "main": {
+      "type": "record",
+      "description": "Record containing a Frontpage comment.",
+      "key": "tid",
+      "record": {
+        "type": "object",
+        "required": ["content", "createdAt", "post"],
+        "properties": {
+          "content": {
+            "type": "string",
+            "maxLength": 100000,
+            "maxGraphemes": 10000,
+            "description": "The content of the comment."
+          },
+          "createdAt": {
+            "type": "string",
+            "format": "datetime",
+            "description": "Client-declared timestamp when this comment was originally created."
+          },
+          "parent": { "type": "ref", "ref": "com.atproto.repo.strongRef" },
+          "post": { "type": "ref", "ref": "com.atproto.repo.strongRef" }
+        }
+      }
+    }
+  }
+}
diff --git a/repos_extra/frontpage/lexicons/ai/syui/o/post.json b/repos_extra/frontpage/lexicons/ai/syui/o/post.json
new file mode 100644
index 0000000..b18659c
--- /dev/null
+++ b/repos_extra/frontpage/lexicons/ai/syui/o/post.json
@@ -0,0 +1,33 @@
+{
+  "lexicon": 1,
+  "id": "ai.syui.o.post",
+  "defs": {
+    "main": {
+      "type": "record",
+      "description": "Record containing a Frontpage post.",
+      "key": "tid",
+      "record": {
+        "type": "object",
+        "required": ["title", "url", "createdAt"],
+        "properties": {
+          "title": {
+            "type": "string",
+            "maxLength": 3000,
+            "maxGraphemes": 300,
+            "description": "The title of the post."
+          },
+          "url": {
+            "type": "string",
+            "format": "uri",
+            "description": "The URL of the post."
+          },
+          "createdAt": {
+            "type": "string",
+            "format": "datetime",
+            "description": "Client-declared timestamp when this post was originally created."
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/repos_extra/frontpage/lexicons/ai/syui/o/vote.json b/repos_extra/frontpage/lexicons/ai/syui/o/vote.json
new file mode 100644
index 0000000..0870658
--- /dev/null
+++ b/repos_extra/frontpage/lexicons/ai/syui/o/vote.json
@@ -0,0 +1,23 @@
+{
+  "lexicon": 1,
+  "id": "ai.syui.o.vote",
+  "defs": {
+    "main": {
+      "type": "record",
+      "description": "Record containing a Frontpage vote.",
+      "key": "tid",
+      "record": {
+        "type": "object",
+        "required": ["subject", "createdAt"],
+        "properties": {
+          "subject": { "type": "ref", "ref": "com.atproto.repo.strongRef" },
+          "createdAt": {
+            "type": "string",
+            "format": "datetime",
+            "description": "Client-declared timestamp when this vote was originally created."
+          }
+        }
+      }
+    }
+  }
+}