{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreidxjwzruidxo4tkyelkjss6tmhqfia4bktm2f4tq2jeniaomod4hm",
"commit": {
"cid": "bafyreiacha62g5sjlzedefkynt2xcxy6ys6dji73abyup443jj3iaenibm",
"rev": "3mmjhizyjiq2l"
},
"uri": "at://did:plc:o7m6e6is75r3i6dmj6nzpejg/app.bsky.feed.post/3mmjhizu2ec2h",
"validationStatus": "valid"
},
"content": {
"$type": "pub.leaflet.content",
"pages": [
{
"$type": "pub.leaflet.pages.linearDocument",
"blocks": [
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#link",
"uri": "https://eurosky.social"
}
],
"index": {
"byteEnd": 54,
"byteStart": 47
}
}
],
"plaintext": "I am not very long in the Atmosphere. Actually Eurosky brought me here and made me distract from the Fediverse."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#didMention",
"did": "did:plc:rpgnkq2lg73pec3aqk3kyndz"
}
],
"index": {
"byteEnd": 49,
"byteStart": 26
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#didMention",
"did": "did:plc:o7m6e6is75r3i6dmj6nzpejg"
}
],
"index": {
"byteEnd": 198,
"byteStart": 183
}
}
],
"plaintext": "I started with my account @juergen.eurosky.social and followed some interesting folks which also partly followed back. Then I found it chic to have my own domain which is the account @juergen.social I am writing this article for. Since I did not want to loose my first account name, I created a new account at Eurosky. So the task was not to move my old account to the new one, but to migrate some data."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
}
],
"index": {
"byteEnd": 242,
"byteStart": 230
}
}
],
"plaintext": "The first challenge I needed to close on, was to follow all the accounts with the new account, that I already followed with the existing account. To do this manually is cumbersome, thus I decided to vibe code a tool that I called atproto-tool."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
},
{
"$type": "pub.leaflet.richtext.facet#link",
"uri": "https://codeberg.org/wertarbyte/atproto-tool"
}
],
"index": {
"byteEnd": 251,
"byteStart": 239
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
},
{
"$type": "pub.leaflet.richtext.facet#link",
"uri": "https://codeberg.org/wertarbyte/atproto-tool/src/branch/main/README.md"
}
],
"index": {
"byteEnd": 277,
"byteStart": 269
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
}
],
"index": {
"byteEnd": 278,
"byteStart": 277
}
}
],
"plaintext": "What I used is Claude Code. The requirement was to create an initial function that copies the following list to my new account. The tool, that was created does the job in a very convenient way. Thus I uploaded the source code to Codeberg: atproto-tool. There is also a README.md which explains how to setup the project and how to use the tool."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Feel free to use it and to provide comments and feedback."
}
}
],
"id": "019e54bb-feb1-700b-9f0a-698275a21958"
}
]
},
"description": "A small problem that I solved with a vibe coded own tool.",
"path": "/3mmjhitlalc2t",
"publishedAt": "2026-05-23T12:34:24.022Z",
"site": "at://did:plc:o7m6e6is75r3i6dmj6nzpejg/site.standard.publication/3mmjfnoxcok25",
"tags": [
"vibecoding",
"atproto",
"bluesky",
"moving",
"atmpsphere"
],
"title": "My New ATProto Tool"
}