diff --git a/docsite/docs/configuration/clients/rocksky.mdx b/docsite/docs/configuration/clients/rocksky.mdx
index e9f2cc3d..2561bded 100644
--- a/docsite/docs/configuration/clients/rocksky.mdx
+++ b/docsite/docs/configuration/clients/rocksky.mdx
@@ -4,19 +4,59 @@ toc_min_heading_level: 2
toc_max_heading_level: 5
---
-[**Rocksky**](https://docs.rocksky.app/) is music tracking and discovery platform built on the AT Protocol (Bluesky). It is compatible with the Listenbrainz API and so can be configured as a multi-scrobbler [Listenbrainz Client](/configuration/clients/listenbrainz) using a custom URL.
+import Bluesky from "@site/src/components/snippets/_bluesky.mdx";
+import JsonConfig from '!!raw-loader!@site/../config/rocksky.json.example';
+
+:::tip[Other Uses]
+
+To monitor and re-scrobble activity **from** Rocksky create a [Rocksky (Source)](/configuration/sources/rocksky-source)
+
+:::
+
+[**Rocksky**](https://docs.rocksky.app/) is music tracking and discovery platform built on the AT Protocol (Bluesky).
+
+
+
+How does that work?
+
+
+
+
+
+:::warning
+
+The default Bluesky PDS is **public**, meaning your scrobbles are also public (read-only). This isn't any different than using Last.fm or Listenbrainz, in terms of privacy.
+
+:::
+
+## Setup
You will need a [Bluesky](https://bsky.app/) account to use Rocksky.
:::note
-Usage is adapted from [the Listenbrainz to Rocksky docs](https://docs.rocksky.app/migrating-from-listenbrainz-to-rocksky-1040189m0) on [docs.rocksky.app](https://docs.rocksky.app)
+Usage is adapted from [Rocksky docs](https://docs.rocksky.app/migrating-to-rocksky-scrobble-api-957839m0) on [docs.rocksky.app](https://docs.rocksky.app)
:::
-While logged in to Bluesky, navigate to [RockSky API Application](https://rocksky.app/apikeys) and obtain an API Key.
+* Navigate to [rocksky.app](https://rocksky.app/) and sign up/logn using your Bluesky account
+* Then, navigate to the [RockSky developer dashboard](https://rocksky.app/apikeys) and obtain an API Key
+
+## Configuration
+
+### Handle
+
+The handle used with multi-scrobbler should be your **full** ATProto handle, including TLD.
+
+* For regular Bluesky account this will be like: `alice.bsky.social`
+* For Bluesky accounts that [use their website as their account](https://bsky.social/about/blog/4-28-2023-domain-handle-tutorial) this is your domain: `mydomain.com`
+* For non-Bluesky users, you probably already know your handle
-Then, follow the directions to create a normal multi-scrobbler [Listenbrainz Client](/configuration/clients/listenbrainz) and use:
+If you do not include a TLD then multi-scrobbler will automatically append `.bsky.social` to your handle value.
-* **Listenbrainz Token** (`LZ_TOKEN`) - The API Key from RockSky
-* **Listenbrainz URL** (`LZ_URL`) - `https://audioscrobbler.rocksky.app`
+
+ | Environmental Variable | Required? | Default | Description |
+ | :--------------------- | --------- | ------- | ----------------------------------------------------------------------------------- |
+ | ROCKSKY_HANDLE | Yes | | Your **full** ATProto handle. For Bluesky account this is like `myUser.bsky.social` |
+ | ROCKSKY_KEY | Yes | | API Key obtained from Rocksky developer dashboard |
+
\ No newline at end of file
diff --git a/docsite/docs/configuration/clients/tealfm.mdx b/docsite/docs/configuration/clients/tealfm.mdx
index 063bbf14..cb7d597c 100644
--- a/docsite/docs/configuration/clients/tealfm.mdx
+++ b/docsite/docs/configuration/clients/tealfm.mdx
@@ -8,6 +8,7 @@ import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import CodeBlock from '@theme/CodeBlock';
import JsonConfig from '!!raw-loader!@site/../config/tealfm.json.example';
+import Bluesky from "@site/src/components/snippets/_bluesky.mdx";
:::tip[Other Uses]
@@ -21,18 +22,7 @@ To monitor and re-scrobble activity from a ATProto Profile create a [teal.fm (So
How does that work?
-The [AT Protocol](https://docs.bsky.app/docs/advanced-guides/atproto) is a standard to allow different applications to share and interpret your social data.
-
-Your data is stored in a personal [repository](https://atproto.com/guides/data-repos) in a [PDS (Personal Data Server)](https://github.com/Bluesky-social/pds), which is data-type agnostic (it's just JSON). Each application defines their own datatypes and pulls data from your repository to render to you, your network, etc...
-
-Even though the application and the PDS/repository are independent, all of this is done for you automatically when you create a [Bluesky](https://bsky.social/about) account.
-
-So...
-
-* multi-scrobbler "scrobbles" your plays to your repository
- * in a JSON data structure which includes [teal.fm's data type and structure](https://atproto.com/specs/lexicon)
- * at a [known location for teal.fm's data](https://atproto.com/guides/glossary#collection) (`fm.teal.alpha.feed.play`), in a list that is appended to as you continue to scrobble
-* when accessing teal.fm, or another application that knows how to read it, your data is pulled from the repository to render the app
+
diff --git a/docsite/docs/configuration/sources/rocksky-source.mdx b/docsite/docs/configuration/sources/rocksky-source.mdx
new file mode 100644
index 00000000..3c800cc5
--- /dev/null
+++ b/docsite/docs/configuration/sources/rocksky-source.mdx
@@ -0,0 +1,39 @@
+---
+title: Rocksky
+toc_min_heading_level: 2
+toc_max_heading_level: 5
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import CodeBlock from '@theme/CodeBlock';
+import JsonConfig from '!!raw-loader!@site/../config/rocksky.json.example';
+
+:::tip[Other Uses]
+
+* To **scrobble to** Rocksky, create a [Rocksky (Client)](/configuration/clients/rocksky)
+
+:::
+
+[**Rocksky**](https://docs.rocksky.app/) is music tracking and discovery platform built on the AT Protocol (Bluesky).
+
+This Source monitors the Rocksky scrobbles in your PDS and then re-scrobbles discovered tracks to configured clients.
+
+Learn more about how Rocksky scrobbles work in the [Rocksky (Client)](/configuration/clients/rocksky) docs.
+
+## Setup
+
+Follow the **Setup** instructions in the [Rocksky (Client)](/configuration/clients/rocksky#setup) docs to get access to your Bluesky PDS repository and scrobble data.
+
+## Configuration
+
+See the [Rocksky (Client)](/configuration/clients/rocksky#setup) configuration for general setup. The only difference for **Source** configuration:
+
+* Cannot be setup with ENV config
+* [File/AIO config](/configuration?configType=file#configuration-types) must include `"configureAs": "source"`
+
+
+ :::note
+ You cannot use ENV variables shown in the [Rocksky Client config](/configuration/clients/rocksky#configuration) -- multi-scrobbler assumes Rocksky ENVs are always used for the **client** configuration. You must use the [File or AIO](/configuration?configType=file#configuration-types) config to setup Rocksky as a Source.
+ :::
+
\ No newline at end of file
diff --git a/docsite/docs/configuration/sources/sources.mdx b/docsite/docs/configuration/sources/sources.mdx
index 3814c540..3221118f 100644
--- a/docsite/docs/configuration/sources/sources.mdx
+++ b/docsite/docs/configuration/sources/sources.mdx
@@ -31,9 +31,10 @@ A **Source** is a data source that contains information about tracks you are pla
| [MPD (Music Player Daemon)](/configuration/sources/mpd) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ❌ | ✅ | ✅ | ❌ |
| [Musikcube](/configuration/sources/musikcube) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ❌ | ✅ | ✅ | ❌ |
| [Plex](/configuration/sources/plex) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ✅ | ✅ | ✅ | ❌ |
+| [Rocksky](/configuration/sources/rocksky-source) | [Active](./?sourceComm=active#by-communication-method) | [History](./?sot=history#by-data-source-of-truth) | ❌ | ✅ | ❌ | ❌ |
| [Spotify](/configuration/sources/spotify) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ✅ | ✅ | ✅ | ❌ |
| [Subsonic-compatible APIs](/configuration/sources/subsonic) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ✅ | ✅ | ✅ | ❌ |
-| [teal.fm](/configuration/sources/tealfm-source) | [Active](./?sourceComm=active#by-communication-method) | [History](./?sot=history#by-data-source-of-truth) | ❌ | ✅ | ✅ | ❌ |
+| [teal.fm](/configuration/sources/tealfm-source) | [Active](./?sourceComm=active#by-communication-method) | [History](./?sot=history#by-data-source-of-truth) | ❌ | ✅ | ❌ | ❌ |
| [WebScrobbler](/configuration/sources/webscrobbler) | [Ingress](./?sourceComm=active#by-communication-method) | [History](./?sot=history#by-data-source-of-truth) | ❌ | ✅ | ❌ | ❌ |
| [VLC](/configuration/sources/vlc) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ❌ | ✅ | ✅ | ❌ |
| [Yamaha MusicCast](/configuration/sources/yamaha-musiccast) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ❌ | ✅ | ✅ | ❌ |
diff --git a/docsite/docs/index.mdx b/docsite/docs/index.mdx
index 90930a47..8fa32b2e 100644
--- a/docsite/docs/index.mdx
+++ b/docsite/docs/index.mdx
@@ -31,6 +31,7 @@ A javascript app to scrobble music you listened to, to [Maloja](https://github.c
* [MPRIS (Linux Desktop)](/configuration/sources/mpris)
* [Musikcube](/configuration/sources/musikcube)
* [Plex](/configuration/sources/plex)
+ * [Rocksky](/configuration/sources/rocksky-source)
* [Spotify](/configuration/sources/spotify)
* [Subsonic-compatible APIs](/configuration/sources/subsonic) (like [Airsonic](https://airsonic.github.io/) and [Navidrome](https://www.navidrome.org/))
* [teal.fm](/configuration/sources/tealfm-source)
diff --git a/docsite/src/components/snippets/_bluesky.mdx b/docsite/src/components/snippets/_bluesky.mdx
new file mode 100644
index 00000000..3d6db9c9
--- /dev/null
+++ b/docsite/src/components/snippets/_bluesky.mdx
@@ -0,0 +1,14 @@
+import CodeInline from '@theme/CodeInline';
+
+The [AT Protocol](https://docs.bsky.app/docs/advanced-guides/atproto) is a standard to allow different applications to share and interpret your social data.
+
+Your data is stored in a personal [repository](https://atproto.com/guides/data-repos) in a [PDS (Personal Data Server)](https://github.com/Bluesky-social/pds), which is data-type agnostic (it's just JSON). Each application defines their own datatypes and pulls data from your repository to render to you, your network, etc...
+
+Even though the application and the PDS/repository are independent, all of this is done for you automatically when you create a [Bluesky](https://bsky.social/about) account.
+
+So...
+
+* multi-scrobbler "scrobbles" your plays to your repository
+ * in a JSON data structure which includes [{props.name}'s data type and structure](https://atproto.com/specs/lexicon)
+ * at a [known location for {props.name}'s data](https://atproto.com/guides/glossary#collection) ({props.lexicon}), in a list that is appended to as you continue to scrobble
+* when accessing {props.name}, or another application that knows how to read it, your data is pulled from the repository to render the app