site.standard.document

standard.site

Samples

9006 randomly sampled records from the AT Protocol firehose

site.standard.document (100 samples)
{
  "path": "/former-firstnet-authority-board-chairs-dont-want-changes-with-reauthorization/",
  "site": "https://broadbandbreakfast.com",
  "tags": [
    "will sunset",
    "Subscribe now"
  ],
  "$type": "site.standard.document",
  "title": "Former FirstNet Authority Board Chairs Don’t Want Changes with Reauthorization",
  "updatedAt": "2026-03-20T09:49:22.395Z",
  "coverImage": {
    "ref": {
      "$link": "bafkreig6ze47cnepjdz7bo3rn4bx2vel7ilpklxryejl2lkm4qn5bd62py"
    },
    "size": 90420,
    "$type": "blob",
    "mimeType": "image/jpeg"
  },
  "bskyPostRef": {
    "cid": "bafyreihp2jjsg73uew2rzm37gszdfafjjfxskqevz3yd7x2snk5w5ivgae",
    "uri": "at://did:plc:mg5ozsljpp6t5b4lvwys4t72/app.bsky.feed.post/3md266cqpeom2"
  },
  "description": "Disagreement on FirstNet’s future is brewing ahead of a Senate hearing next week.",
  "publishedAt": "2026-01-22T21:50:36.000Z",
  "textContent": "WASHINGTON, Jan. 22, 2026 – Former heads of the FirstNet Authority’s board are urging current members to oppose potential changes to the agency’s structure as the deadline for Congressional reauthorization approaches.\n\nThe FirstNet Authority oversees FirstNet, the nationwide first responder network operated by AT&T. If lawmakers don’t reauthorize the agency, it will sunset at the end of 2027, something the Government Accountability Office and others have said would be disruptive for public safety agencies.\n\nTwo former chairs of FirstNet’s board, **Richard Carrizzo** and **Sue Swenson** , said in a letter to members of current board that they should oppose any reauthorization that codified Commerce Department oversight over FirstNet Authority or added new reporting requirements, among other things.\n\n### This post is for subscribers only\n\nBecome a member to get access to all content\n\nSubscribe now"
}

did:plc:mg5ozsljpp6t5b4lvwys4t72 | at://did:plc:mg5ozsljpp6t5b4lvwys4t72/site.standard.document/3me4dbg5af4k2

actor.rpg.news (nested within site.standard.document) (100 samples)
{
  "path": "/the-parade-continues",
  "site": "at://did:plc:kwgllf365cwmxbnxitx4pjdj/site.standard.publication/self",
  "tags": [
    "draft",
    "update",
    "features",
    "items",
    "fashion",
    "stats",
    "creators"
  ],
  "$type": "site.standard.document",
  "title": "The Parade Continues",
  "images": [
    {
      "ref": {
        "$link": "bafkreictgbvrvagpb6tpdukmaz5e7wenx4djwp26omxy2kxcbcqx4kzcoi"
      },
      "size": 21847,
      "$type": "blob",
      "mimeType": "image/png"
    },
    {
      "ref": {
        "$link": "bafkreighmecc7y7sjnrp5fjshqhpnbwrlxaye4wlnj6a25jwti2hzifsau"
      },
      "size": 36493,
      "$type": "blob",
      "mimeType": "image/png"
    },
    {
      "ref": {
        "$link": "bafkreicitjkhpxdu4s7jlwm4ct5thzz6ahzuj2afzashcyr32w4wkljmvu"
      },
      "size": 297372,
      "$type": "blob",
      "mimeType": "image/png"
    },
    {
      "ref": {
        "$link": "bafkreicpz5relbyu3fmyveqvvg4xh5xmh7knuyiu5kvogptxfjwsc5vxv4"
      },
      "size": 65512,
      "$type": "blob",
      "mimeType": "image/png"
    },
    {
      "ref": {
        "$link": "bafkreicve2nfi63rrozvsl2fax73zqanxwgeeldytrafgxev4ts5luxg34"
      },
      "size": 22703,
      "$type": "blob",
      "mimeType": "image/png"
    },
    {
      "ref": {
        "$link": "bafkreid5lbs6fzrgpxeznl3rxl6pxipbtfhoktm5yyaokieks42se3x5cq"
      },
      "size": 32126,
      "$type": "blob",
      "mimeType": "image/png"
    },
    {
      "ref": {
        "$link": "bafkreigyz5z4ncwoyydrxq3b7fnjofysyeg74vwt5l4foqnz3izk5qyqg4"
      },
      "size": 69440,
      "$type": "blob",
      "mimeType": "image/png"
    },
    {
      "ref": {
        "$link": "bafkreigcizgq4ez46e2fpvcv2r2lgtzun2glj36g5qck4w4ufyof2du5aq"
      },
      "size": 38415,
      "$type": "blob",
      "mimeType": "image/png"
    },
    {
      "ref": {
        "$link": "bafkreih7k2lxexxpgwxrugfvpchdfmvcqq3tfixbm6riwjfuwosasn6nbi"
      },
      "size": 284009,
      "$type": "blob",
      "mimeType": "image/png"
    },
    {
      "ref": {
        "$link": "bafkreicurncndhqrxcxhasgvokbo5o2m6p4edr2go4jhyfu52e6lvf4aoa"
      },
      "size": 50499,
      "$type": "blob",
      "mimeType": "image/png"
    }
  ],
  "content": {
    "$type": "actor.rpg.news#markdown",
    "value": "## Your Fashion Royalty\n\nThe end of the [Fashion Jam](https://rpg.actor/fashion) is here, and while we had dozens of amazing participants walk [The Runway](https://rpg.actor/runway), or customize their looks with our [Sprite Painter](https://rpg.actor/painter), ultimately only a few can be crowned as [Fashion Royalty](https://rpg.actor/fashion-finale). Let's give congratulations to our three winners [@goose.art](https://rpg.actor/goose.art), [@meson.ninja](https://rpg.actor/meson.ninja), and [@heika.dog](https://rpg.actor/heika.dog) who each get [Creator Accounts](https://rpg.actor/creator) to expand their fashion empire, [Jam Medals](https://rpg.actor/catalogue/goldmedal_jam001) for their wardrobe, and all our adoration.\n\n[![image.png](blob:bafkreictgbvrvagpb6tpdukmaz5e7wenx4djwp26omxy2kxcbcqx4kzcoi)](https://rpg.actor/fashion-finale)\n\nIn addition, the top 30 contestants have had their sprites immortalized in the [Fashionista Archive](https://rpg.actor/fashion-finale) and will soon be printed on real sticker sheets that we'll be mailing out to them. If you are among them, there will be a special announcement in your inbox, and you'll see a claim button on the [Fashion Finale](https://rpg.actor/fashion-finale) page to submit a mailing address to receive them at.\n\n*Thank you everyone for participating in our second jam, we've got more on the way!*\n\n## Builders Jamming\n\nWith more jams on the way, we've added a new [Builder Jams](https://rpg.actor/jamming) portal which is designed to highlight our current events and keep a nice archive of all our prior ones. If you're new to jamming, it's got a nice breakdown of what they are and what to expect. There's also a new feature to add yourself to our [Jammer List](https://rpg.actor/jamming) and get notified whenever there's a new one coming up!\n\n[![image.png](blob:bafkreighmecc7y7sjnrp5fjshqhpnbwrlxaye4wlnj6a25jwti2hzifsau)](https://rpg.actor/jamming)\n\n<mark>Expect another Jam in the end-half of June!</mark>\n\n## New Profile Layouts\n\nOne of the things that's slowly evolving without much fanfare is our UI, which has recently had some really nice changes (in particular on mobile). With all the new features the old layout just wasn't working anymore, so we've broken things into three distinct dropdowns for **Experience** (games, places), **Creative** (sprites, etc), and **Toolkit** (plugins, documents). It's a little more helpful organizing things, and should offer more extensibility as things contine to expand.\n\n[![image.png](blob:bafkreicitjkhpxdu4s7jlwm4ct5thzz6ahzuj2afzashcyr32w4wkljmvu)](https://rpg.actor/compendium)\n\nMuch more noticeably, on your profile there have been some big changes to the way things are laid out at first view. Now, rather than defaulting to a single character sheet, we're offering a card-based overview that showcases all of the games you have stats for. It even has a special \"Other Games\" card for including a list of all the more stat-oriented games (like [Clun's Cannon](https://rpg.actor/cannon), or [Proto Hopper](https://protoimsg.app/games)), as well as custom systems, which can continue extending quite easily.\n\nNow when others visit your profile, they'll be able to quickly know at-a-glance which games you play, and can more easily recognize what systems and genres you're fit for. A great way to find new party members!\n\n## New Stats Structures\n\n<mark>Excuse while we get technical for a bit... if you only like rolling dice, feel free to skip!</mark>\n\nWhen first building out our .stats lexicons we were deep in the mindset of, *\"these are your stats, they're you!\"* and so built the schema oriented towards the /self reference with all of the different systems having different header keys within the singular record. At the time there were only 3 systems in play, and it made sense to our <u>dungeoneering brains</u>... but now that there are more than 20 systems, our <u>engineering brains</u> disagree.\n\nThe obvious problem with this design is that as more games get added, the single record becomes unwieldy, and new games are required to ingest, modify, and republish the /self key as whole each time they update. This can run into clashes, or careless developers (which we must expect!) could accidentally wipe out your entire .stats record in one failed write attempt. <u>**NOT GOOD!**</u>\n\n[![image.png](blob:bafkreicpz5relbyu3fmyveqvvg4xh5xmh7knuyiu5kvogptxfjwsc5vxv4)](https://pdsls.dev/at://did:web:vessel.darkworld.download/actor.rpg.stats)\n\nSo, we've begun the scary process of transitioning to a **per-system rkey** that functions almost identically to the existing /self oriented system, except now every stat system is broken out into its own individual record rather than split-by-heading under the singular. It's simpler to read, it's cleaner to write, and it's probably what we should have started with, but one of the beautiful things about **AT Protocol** is its forgiveness toward these kind of evolution.\n\nThankfully, we're still pretty early in the game(s) and have good relationships with everyone currently producing these records, and we have the bandwidth to help them upgrade. For our own systems we've already implemented all the automation process to upgrade existing users; just by logging in you'll find your records instantly improved while the old /self stays preserved as a retrofit fallback. Any new records will still write both for the time being, but the [Compendium](https://rpg.actor/compendium) will default to preferring the **per-system rkey** and even show a little checkmark next to the system title when it's happy with them.\n\n[![image.png](blob:bafkreicve2nfi63rrozvsl2fax73zqanxwgeeldytrafgxev4ts5luxg34)](https://rpg.actor/compendium)\n\n<u>Players won't have to think about this</u>, and pretty much everything is just seamless automatic. None of the .master records are affected by this change (only their interpreters), as they never pointed to keys and only referenced system names which transpose perfectly to the new rkey names. For the time being, all of our games will remain in a dual-write method until eventually we sunset the entirety of the /self key sometime in the near future.\n\n## Streampets Enhancements\n\n<mark>**OKAY BACK TO THE FUN STUFF!!!**</mark>\n\n[Streampets](https://rpg.actor/streampets) has quickly become one of the most popular ways folks are using their **rpg.actor** character, appearing on all sorts of [stream.place](https://stream.place) broadcasts as a fun and interactive representation of themselves from the audience. So, we've done a little more work to keep improving it and help streamers get the most out of it.\n\n[![image.png](blob:bafkreid5lbs6fzrgpxeznl3rxl6pxipbtfhoktm5yyaokieks42se3x5cq)](https://rpg.actor/streampets)\n\nNow instead of having to enter your handle to generate an OBS URL, the service now automatically recognizes you from your login and keeps better track of the settings you've applied between sessions. This includes the command permissions you've applied, as well as the badge designations that you've assigned privileges to. We also fixed the way that the Badge Repos are recognized so they now (actually) work, and added a real easy one-touch button to add all the badges officially issued from [@stream.place](https://bsky.app/profile/stream.place) themselves!\n\n[![image.png](blob:bafkreigyz5z4ncwoyydrxq3b7fnjofysyeg74vwt5l4foqnz3izk5qyqg4)](https://rpg.actor/streampets)\n\nAlso, as a viewer you can now visit the [Streampets](https://rpg.actor/streampets) setup page and see this nifty little preview window of what your character looks like walking around, and try any of the **!commands** yourself just by clicking on them. There's been a few changes to some like **!dance** and **!sleep**, and some new secrets in **!transform** to explore, so go ahead and try them out.\n\n## Cross-Compatible Cannoneering\n\nNow that there are a few experiences outside the walls of **rpg.actor** starting to offer their own [Catalogue Items](https://rpg.actor/catalogue), our dear clown [@clun.rpg.actor](https://bsky.app/profile/did:plc:vgld2e4x2rfk3kzwfcwhxok4) thought it was high time we gave some respect!\n\n[![image.png](blob:bafkreigcizgq4ez46e2fpvcv2r2lgtzun2glj36g5qck4w4ufyof2du5aq)](https://rpg.actor/cannon)\n\n[Clun's Cannon](https://rpg.actor/cannon) will now recognize certain items you've earned from other games and give your character a little boost next time they're being launched. If you've been looking for an unfair advantage, and a way to climb the leaderboard, then it might be worth exploring **The Atmosphere** and playing some new games!\n\n## Creator Enhancements\n\nFor a while our [Creator Panel](https://rpg.actor/creator) has been a bit of an eye-sore and very developer-oriented. We decided to give it a little facelift to help improve the flows for creating and editing items, along with a few other areas, as we continue striving to make it a fun and easy-to-use system for all your world-building and game extension needs!\n\n[![image.png](blob:bafkreih7k2lxexxpgwxrugfvpchdfmvcqq3tfixbm6riwjfuwosasn6nbi)](https://rpg.actor/creator)\n\nTo help our mission of making it ultimately useful for creators, we've been hard at work at a new API which will enable game developers and app builders to leverage our server to compile or recolour sprites, alter .generator records, validate composition, check item references, and check / roll stats from your character sheets. It's a very robust system and we're still working out the finest details with the help of some beta testers, but it's coming along swimmingly and should be available to all before our next announcement.\n\n[![image.png](blob:bafkreicurncndhqrxcxhasgvokbo5o2m6p4edr2go4jhyfu52e6lvf4aoa)](https://rpg.actor/creator)\n\nImproving the [Creator Panel](https://rpg.actor/creator) and offering more things to do with it remains one of our highest priorities. We want to make sure that those of you who support our ecosystem with your upgrade get as much value as we can offer!\n\n## ...And It Never Stops!\n\n**Okay, so... that's a lot... but, what's next?!**\n\nWell, we're cooking up another [Builder Jam](https://rpg.actor/jamming) for later in June and we're in the final stages of testing a <u>new game</u> coming soon to the **Experiences** tab. Those of you who enjoy daily challenges are in for a treat!\n\nWe're also working on some more character sheet options, and continuing to expand the [Sprite Generator](https://rpg.actor/generator) with more of your requests... so keep 'em coming!\n\nBut, that's enough to mention for now. Thanks for reading. **HAVE FUN!!**"
  },
  "language": "en",
  "updatedAt": "2026-06-04T17:02:32.239Z",
  "coverImage": {
    "ref": {
      "$link": "bafkreiatnmpaxun5cywxswwyke4cdghjr7msl5bpl2pmwtc4nm6r3m7tsm"
    },
    "size": 75778,
    "$type": "blob",
    "mimeType": "image/png"
  },
  "description": "Fashion Feathers Fly — With the end of the Fashion Jam we have our winners to congratulate, as well as a bunch of new Creator features and some very important updates to your game stats to talk about.",
  "publishedAt": "2026-06-02T12:09:47.469Z",
  "textContent": "Your Fashion Royalty\n\nThe end of the Fashion Jam is here, and while we had dozens of amazing participants walk The Runway, or customize their looks with our Sprite Painter, ultimately only a few can be crowned as Fashion Royalty. Let's give congratulations to our three winners @goose.art, @meson.ninja, and @heika.dog who each get Creator Accounts to expand their fashion empire, Jam Medals for their wardrobe, and all our adoration.\n\nIn addition, the top 30 contestants have had their sprites immortalized in the Fashionista Archive and will soon be printed on real sticker sheets that we'll be mailing out to them. If you are among them, there will be a special announcement in your inbox, and you'll see a claim button on the Fashion Finale page to submit a mailing address to receive them at.\n\nThank you everyone for participating in our second jam, we've got more on the way!\n\nBuilders Jamming\n\nWith more jams on the way, we've added a new Builder Jams portal which is designed to highlight our current events and keep a nice archive of all our prior ones. If you're new to jamming, it's got a nice breakdown of what they are and what to expect. There's also a new feature to add yourself to our Jammer List and get notified whenever there's a new one coming up!\n\n<mark>Expect another Jam in the end-half of June!</mark>\n\nNew Profile Layouts\n\nOne of the things that's slowly evolving without much fanfare is our UI, which has recently had some really nice changes (in particular on mobile). With all the new features the old layout just wasn't working anymore, so we've broken things into three distinct dropdowns for Experience (games, places), Creative (sprites, etc), and Toolkit (plugins, documents). It's a little more helpful organizing things, and should offer more extensibility as things contine to expand.\n\nMuch more noticeably, on your profile there have been some big changes to the way things are laid out at first view. Now, rather than defaulting to a single character sheet, we're offering a card-based overview that showcases all of the games you have stats for. It even has a special \"Other Games\" card for including a list of all the more stat-oriented games (like Clun's Cannon, or Proto Hopper), as well as custom systems, which can continue extending quite easily.\n\nNow when others visit your profile, they'll be able to quickly know at-a-glance which games you play, and can more easily recognize what systems and genres you're fit for. A great way to find new party members!\n\nNew Stats Structures\n\n<mark>Excuse while we get technical for a bit... if you only like rolling dice, feel free to skip!</mark>\n\nWhen first building out our .stats lexicons we were deep in the mindset of, \"these are your stats, they're you!\" and so built the schema oriented towards the /self reference with all of the different systems having different header keys within the singular record. At the time there were only 3 systems in play, and it made sense to our <u>dungeoneering brains</u>... but now that there are more than 20 systems, our <u>engineering brains</u> disagree.\n\nThe obvious problem with this design is that as more games get added, the single record becomes unwieldy, and new games are required to ingest, modify, and republish the /self key as whole each time they update. This can run into clashes, or careless developers (which we must expect!) could accidentally wipe out your entire .stats record in one failed write attempt. <u>NOT GOOD!</u>\n\nSo, we've begun the scary process of transitioning to a per-system rkey that functions almost identically to the existing /self oriented system, except now every stat system is broken out into its own individual record rather than split-by-heading under the singular. It's simpler to read, it's cleaner to write, and it's probably what we should have started with, but one of the beautiful things about AT Protocol is its forgiveness toward these kind of evolution.\n\nThankfully, we're still pretty early in the game(s) and have good relationships with everyone currently producing these records, and we have the bandwidth to help them upgrade. For our own systems we've already implemented all the automation process to upgrade existing users; just by logging in you'll find your records instantly improved while the old /self stays preserved as a retrofit fallback. Any new records will still write both for the time being, but the Compendium will default to preferring the per-system rkey and even show a little checkmark next to the system title when it's happy with them.\n\n<u>Players won't have to think about this</u>, and pretty much everything is just seamless automatic. None of the .master records are affected by this change (only their interpreters), as they never pointed to keys and only referenced system names which transpose perfectly to the new rkey names. For the time being, all of our games will remain in a dual-write method until eventually we sunset the entirety of the /self key sometime in the near future.\n\nStreampets Enhancements\n\n<mark>OKAY BACK TO THE FUN STUFF!!!</mark>\n\nStreampets has quickly become one of the most popular ways folks are using their rpg.actor character, appearing on all sorts of stream.place broadcasts as a fun and interactive representation of themselves from the audience. So, we've done a little more work to keep improving it and help streamers get the most out of it.\n\nNow instead of having to enter your handle to generate an OBS URL, the service now automatically recognizes you from your login and keeps better track of the settings you've applied between sessions. This includes the command permissions you've applied, as well as the badge designations that you've assigned privileges to. We also fixed the way that the Badge Repos are recognized so they now (actually) work, and added a real easy one-touch button to add all the badges officially issued from @stream.place themselves!\n\nAlso, as a viewer you can now visit the Streampets setup page and see this nifty little preview window of what your character looks like walking around, and try any of the !commands yourself just by clicking on them. There's been a few changes to some like !dance and !sleep, and some new secrets in !transform to explore, so go ahead and try them out.\n\nCross-Compatible Cannoneering\n\nNow that there are a few experiences outside the walls of rpg.actor starting to offer their own Catalogue Items, our dear clown @clun.rpg.actor thought it was high time we gave some respect!\n\nClun's Cannon will now recognize certain items you've earned from other games and give your character a little boost next time they're being launched. If you've been looking for an unfair advantage, and a way to climb the leaderboard, then it might be worth exploring The Atmosphere and playing some new games!\n\nCreator Enhancements\n\nFor a while our Creator Panel has been a bit of an eye-sore and very developer-oriented. We decided to give it a little facelift to help improve the flows for creating and editing items, along with a few other areas, as we continue striving to make it a fun and easy-to-use system for all your world-building and game extension needs!\n\nTo help our mission of making it ultimately useful for creators, we've been hard at work at a new API which will enable game developers and app builders to leverage our server to compile or recolour sprites, alter .generator records, validate composition, check item references, and check / roll stats from your character sheets. It's a very robust system and we're still working out the finest details with the help of some beta testers, but it's coming along swimmingly and should be available to all before our next announcement.\n\nImproving the Creator Panel and offering more things to do with it remains one of our highest priorities. We want to make sure that those of you who support our ecosystem with your upgrade get as much value as we can offer!\n\n...And It Never Stops!\n\nOkay, so... that's a lot... but, what's next?!\n\nWell, we're cooking up another Builder Jam for later in June and we're in the final stages of testing a <u>new game</u> coming soon to the Experiences tab. Those of you who enjoy daily challenges are in for a treat!\n\nWe're also working on some more character sheet options, and continuing to expand the Sprite Generator with more of your requests... so keep 'em coming!\n\nBut, that's enough to mention for now. Thanks for reading. HAVE FUN!!"
}

did:plc:kwgllf365cwmxbnxitx4pjdj | at://did:plc:kwgllf365cwmxbnxitx4pjdj/site.standard.document/3mnckrz42ac5s

ai.syui.log.post (nested within site.standard.document) (6 samples)
{
  "path": "/3mkvxp3zq7rms",
  "site": "at://did:plc:vzsvtbtbnwn22xjqhcu3vd6y/site.standard.publication/self",
  "$type": "site.standard.document",
  "title": "webのURL構造をAT-URIに合わせた",
  "content": {
    "text": "## 背景\n\nこれまでwebのURLは `/at/collection/{nsid}` のような独自prefixが挟まっていた。\n\n```\n/@syui.syui.ai/at/service/syui.ai\n/@syui.syui.ai/at/collection/ai.syui.log.post\n/@syui.syui.ai/at/collection/ai.syui.log.post/3xxx\n/@syui.syui.ai/at/post\n```\n\nAT-URI (`at://did/collection/rkey`) は3要素のフラットな構造なのに、URLは冗長な階層を持っていた。\n\n## 意味論\n\nURL の `@` を `at://` と読み替えると、AT-URI がそのまま URL になる。\n\n```\nURL:    /@handle/{collection}/{rkey}\nAT-URI: at://handle/{collection}/{rkey}\n```\n\n`@` = `at://` と思えば自然。\n\n## 新しい設計\n\nAT-URIの3要素をそのままパスに写像。\n\n```\n/@handle                        → home (profile + PDS/DID + services + posts)\n/@handle/{service}   (1 dot)    → service group (例: bsky.app)\n/@handle/{nsid}      (2+ dots)  → listRecords (例: app.bsky.feed.post)\n/@handle/{nsid}/{rkey}          → getRecord\n```\n\nトップページ `/` は `config.json` の `handle` / `did` を参照して admin ユーザーを表示する。\n\n## URL discriminator\n\nパスのドット数だけで型を判定:\n\n- 0 dots → post rkey (固定 alias に当たらなければ)\n- 1 dot → service group\n- 2+ dots → NSID\n\n衝突しない。\n\n## NSID alias\n\n管理者の NSID (`ai.syui.{X}.{Y}`) は最後の2セグメントを URL に使う:\n\n| NSID | URL |\n|------|-----|\n| `ai.syui.log.post` | `/log/post` |\n| `ai.syui.log.chat` | `/log/chat` |\n| `ai.syui.at.link` | `/at/link` |\n| `ai.syui.card.user` | `/card/user` |\n| `ai.syui.rse.user` | `/rse/user` |\n| `ai.syui.note.post` | `/note/post` |\n| `ai.syui.vrm` | `/vrm` |\n\n## DID でもアクセス可能\n\nhandle 部分は DID でも指定できる。`did:` で始まる場合はアクセス時に handle へ canonical redirect される。\n\n```\n/@did:plc:vzsvtbtbnwn22xjqhcu3vd6y           → /@syui.syui.ai\n/@did:plc:vzsvtbtbnwn22xjqhcu3vd6y/log/post  → /@syui.syui.ai/log/post\n```\n\nDID は永続 (handle は変わりうる) なので、不変な永続リンクとして使える。\n\n## 削除\n\n- `/at` (at-browser ルート): `/@handle` 自体がサービス一覧を兼ねるので不要\n- `/at/collection/` prefix: 冗長\n- `/at/service/` prefix: NSID 逆ドメインのファセットに過ぎず、AT-URI にない概念\n\n## メリット\n\n1. URL が `at://did/{nsid}/{rkey}` に直接対応\n2. レンダリングは `$type` で分岐。スキーマが増えても URL 構造は変わらない\n3. at-browser と個人サイトビューが同じ URL 空間で自然に重なる",
    "$type": "ai.syui.log.post#markdown"
  },
  "description": "背景\n\nこれまでwebのURLは /at/collection/{nsid} のような独自prefixが挟まっていた。\n\nAT-URI (at://did/collection/rkey) は3要素のフラットな構造なのに、URLは冗長な階層を持っていた。\n\n意味論\n\nURL の @ を at:// と読み替えると、AT-URI がそのまま URL になる。\n\n@ = at:// と思えば自然。\n\n",
  "publishedAt": "2026-04-18T00:00:00.000Z",
  "textContent": "背景\n\nこれまでwebのURLは /at/collection/{nsid} のような独自prefixが挟まっていた。\n\nAT-URI (at://did/collection/rkey) は3要素のフラットな構造なのに、URLは冗長な階層を持っていた。\n\n意味論\n\nURL の @ を at:// と読み替えると、AT-URI がそのまま URL になる。\n\n@ = at:// と思えば自然。\n\n新しい設計\n\nAT-URIの3要素をそのままパスに写像。\n\nトップページ / は config.json の handle / did を参照して admin ユーザーを表示する。\n\nURL discriminator\n\nパスのドット数だけで型を判定:\n0 dots → post rkey (固定 alias に当たらなければ)\n1 dot → service group\n2+ dots → NSID\n\n衝突しない。\n\nNSID alias\n\n管理者の NSID (ai.syui.{X}.{Y}) は最後の2セグメントを URL に使う:\n\n| NSID | URL |\n|------|-----|\n| ai.syui.log.post | /log/post |\n| ai.syui.log.chat | /log/chat |\n| ai.syui.at.link | /at/link |\n| ai.syui.card.user | /card/user |\n| ai.syui.rse.user | /rse/user |\n| ai.syui.note.post | /note/post |\n| ai.syui.vrm | /vrm |\n\nDID でもアクセス可能\n\nhandle 部分は DID でも指定できる。did: で始まる場合はアクセス時に handle へ canonical redirect される。\n\nDID は永続 (handle は変わりうる) なので、不変な永続リンクとして使える。\n\n削除\n/at (at-browser ルート): /@handle 自体がサービス一覧を兼ねるので不要\n/at/collection/ prefix: 冗長\n/at/service/ prefix: NSID 逆ドメインのファセットに過ぎず、AT-URI にない概念\n\nメリット\n\n1. URL が at://did/{nsid}/{rkey} に直接対応\n2. レンダリングは $type で分岐。スキーマが増えても URL 構造は変わらない\n3. at-browser と個人サイトビューが同じ URL 空間で自然に重なる"
}

did:plc:vzsvtbtbnwn22xjqhcu3vd6y | at://did:plc:vzsvtbtbnwn22xjqhcu3vd6y/site.standard.document/3mkvxp3zq7rms

app.bsky.embed.images (nested within site.standard.document) (20 samples)
{
  "path": "/image-aether",
  "$type": "site.standard.document",
  "embed": {
    "$type": "app.bsky.embed.images",
    "images": [
      {
        "alt": "attached image",
        "image": {
          "ref": {
            "$link": "bafkreib6iw6w77l4nhpgpgnifcoajfs5ikacrmfmwtzpjyyo4i56pjzvxy"
          },
          "size": 23716,
          "$type": "blob",
          "mimeType": "image/png"
        }
      }
    ]
  },
  "title": "Image 2",
  "description": "Hello there, from Aether. With an image test 2",
  "publishedAt": "2026-05-20T16:35:09.045Z",
  "textContent": "![image](https://5eb488ea.aether-5ow.pages.dev/blob/did:plc:kdcc475mwmfd7ehlvhqxgrqr/bafkreib6iw6w77l4nhpgpgnifcoajfs5ikacrmfmwtzpjyyo4i56pjzvxy)"
}

did:plc:kdcc475mwmfd7ehlvhqxgrqr | at://did:plc:kdcc475mwmfd7ehlvhqxgrqr/site.standard.document/image-aether

app.bsky.feed.post (nested within site.standard.document) (100 samples)
{
  "path": "/news/rayon/uraza-gaete-belan",
  "site": "https://saby-rt.ru",
  "tags": [
    "Район яңалыклары"
  ],
  "$type": "site.standard.document",
  "title": "Ураза гаете белән!",
  "coverImage": {
    "ref": {
      "$link": "bafkreifqi5pcjxfvq26glxzwukmnsdeyoygsylfx6skq44ioe3zi4c4eeu"
    },
    "size": 580790,
    "$type": "blob",
    "mimeType": "image/png"
  },
  "bskyPostRef": {
    "cid": "bafyreicdf5lfhxrzoxyfzb4jh7ibigirrir7seojvdp2nmnroxy3y4dbh4",
    "uri": "at://did:plc:37uc53jd4zb732mvm4gqesro/app.bsky.feed.post/3mhhvkywtfy72"
  },
  "publishedAt": "2026-03-20T04:30:00.000Z",
  "textContent": "Бүген- мөселманнар өчен иң зур һәм мөбарәк бәйрәмнәрнең берсе – Ураза гаете"
}

did:plc:37uc53jd4zb732mvm4gqesro | at://did:plc:37uc53jd4zb732mvm4gqesro/site.standard.document/3mhhvkywtgt72

app.bsky.richtext.facet (nested within site.standard.document) (96 samples)
{
  "path": "/",
  "site": "at://did:plc:7kpq3n7brenbgyp2gx36hl6x/site.standard.publication/self",
  "$type": "site.standard.document",
  "title": "About",
  "facets": [
    {
      "index": {
        "byteEnd": 18,
        "byteStart": 5
      },
      "features": [
        {
          "uri": "https://julien.rbrt.fr/cv",
          "$type": "app.bsky.richtext.facet#link"
        }
      ]
    },
    {
      "index": {
        "byteEnd": 137,
        "byteStart": 131
      },
      "features": [
        {
          "uri": "https://github.com/julienrbrt",
          "$type": "app.bsky.richtext.facet#link"
        }
      ]
    },
    {
      "index": {
        "byteEnd": 156,
        "byteStart": 152
      },
      "features": [
        {
          "uri": "https://bsky.app/profile/julien.rbrt.fr",
          "$type": "app.bsky.richtext.facet#link"
        }
      ]
    },
    {
      "index": {
        "byteEnd": 165,
        "byteStart": 161
      },
      "features": [
        {
          "uri": "https://x.com/_julienrbrt",
          "$type": "app.bsky.richtext.facet#link"
        }
      ]
    }
  ],
  "description": "Julien Robert, Blockchain Engineer",
  "publishedAt": "2026-03-22T21:32:19Z",
  "textContent": "I am Julien Robert, Blockchain Engineer, currently based in the Netherlands.\nGo and Crypto enthusiast, explore my contributions on GitHub or find me on 🦋 and 𝕏.\nTo contact me directly, send an email to:\njulien at rbrt dot fr"
}

did:plc:7kpq3n7brenbgyp2gx36hl6x | at://did:plc:7kpq3n7brenbgyp2gx36hl6x/site.standard.document/about

app.greengale.document (nested within site.standard.document) (78 samples)
{
  "path": "/3mhtgkia6lq27",
  "site": "at://did:plc:ges46mhwlox3bybfawq53rgm/site.standard.publication/3mhtf6ljfrcjp",
  "tags": [
    "meta"
  ],
  "$type": "site.standard.document",
  "title": "GreenGale metadata",
  "content": {
    "uri": "at://did:plc:ges46mhwlox3bybfawq53rgm/app.greengale.document/3mhtgkia6lq27",
    "$type": "app.greengale.document#contentRef"
  },
  "description": "About this blog in particular",
  "publishedAt": "2026-03-24T20:38:05.523Z",
  "textContent": "As I'm writing this, my main blog is currently offline and I had things to say anyway. This is the occupational hazard of self-hosting (and of writing content in advance for a blog that hadn't launched yet when I wrote this -- it's not \"down temporarily\", it's \"hasn't been up yet\" today): I'm my own admin, and sometimes my own admin hasn't hosted the blog yet. I wanted an AT Protocol-compatible backup option and have settled on GreenGale, so I'm here. Posts here are in a somewhat degraded state compared to on the Quarto blog proper: - More limited theming - No footnotes that I'm aware of, footnotes have to be approximated - Posted out of order as I think about backing them up But they do have necessary features: - Table of contents generated from headings when present - Can be created by pasting Markdown into an editor with minimal babysitting - Exist online I'll be editing posts to reflect their source permalink as the links exist/become accessible and I remember. Until/besides then, I'll try to keep this mirror up to date too, but order of writing will reflect when I got around to posting things as opposed to when they were originally written or scheduled. What this blog is about, since that's not present here: I wanted somewhere longform to remember how to think in full sentences online. More specifically, I'm not in practice writing about technical content and over the past four months have gotten very into homelabbing (running servers in my apartment, like the one the master version of the blog belongs on), and want to have proof outside my apartment that these things exist. The intention is combination \"dev blog\" and \"things that I shouldn't try to compress into a bsky thread, as a thinking habit\"."
}

did:plc:ges46mhwlox3bybfawq53rgm | at://did:plc:ges46mhwlox3bybfawq53rgm/site.standard.document/3mhtgkia6lq27

Lexicon Garden

@