+2
.gitignore
+2
.gitignore
+2
-1
README.md
+2
-1
README.md
···-a webapp and server that monitors bluesky's jetsream and counts how many times different types of records are created or deleted. it shows you which collections (like posts, likes, follows, etc.) are most active on the network.+a webapp and server that monitors the jetstream and tracks the different lexicons as they are created or deleted.
+7
client/bun.lock
+7
client/bun.lock
······"@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="],"@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="],+"@number-flow/svelte": ["@number-flow/svelte@0.3.9", "", { "dependencies": { "esm-env": "^1.1.4", "number-flow": "0.5.8" }, "peerDependencies": { "svelte": "^4 || ^5" } }, "sha512-CTw1+e0074GzbPX2IHcNCaK8nqxGNCOIUnQUjEjhcmBwBxOAhN3GYLQ6cJHvhQnWwplVe4eQ3z+c25Vttr2stQ=="],"@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="],···"nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="],"natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="],+"number-flow": ["number-flow@0.5.8", "", { "dependencies": { "esm-env": "^1.1.4" } }, "sha512-FPr1DumWyGi5Nucoug14bC6xEz70A1TnhgSHhKyfqjgji2SOTz+iLJxKtv37N5JyJbteGYCm6NQ9p1O4KZ7iiA=="],"optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="],
+4
-1
client/package.json
+4
-1
client/package.json
+13
-1
client/src/lib/api.ts
+13
-1
client/src/lib/api.ts
······
+25
client/src/lib/components/BskyToggle.svelte
+25
client/src/lib/components/BskyToggle.svelte
···
+21
-14
client/src/lib/components/EventCard.svelte
+21
-14
client/src/lib/components/EventCard.svelte
·········-class="mx-auto md:mx-0 bg-white border border-gray-200 rounded-lg p-2 md:p-6 hover:shadow-lg transition-all duration-200 hover:-translate-y-1 transform"+class="group flex flex-col gap-2 p-1.5 md:p-3 min-h-64 bg-white border border-gray-200 rounded-lg hover:shadow-lg md:hover:-translate-y-1 transition-all duration-200 transform"+class="font-mono text-sm text-gray-700 mt-0.5 leading-relaxed rounded-full text-nowrap text-ellipsis overflow-hidden group-hover:overflow-visible group-hover:bg-gray-50 border-gray-100 group-hover:border transition-all px-1"
+13
-28
client/src/lib/components/FilterControls.svelte
+13
-28
client/src/lib/components/FilterControls.svelte
···-class="bg-blue-50 text-blue-900 placeholder-blue-400 border border-blue-200 rounded-full px-1 outline-none focus:bg-white focus:border-blue-400 min-w-0 w-24"+class="bg-blue-50 text-blue-900 placeholder-blue-400 border border-blue-200 rounded-full px-1 outline-none focus:bg-white focus:border-blue-400 min-w-0 w-24"
+37
client/src/lib/components/RefreshControl.svelte
+37
client/src/lib/components/RefreshControl.svelte
···+class="wsbadge !pl-2 !px-1 !mt-0 !font-normal bg-green-100 hover:bg-green-200 border-green-300"+class="bg-green-50 text-green-900 placeholder-green-400 border border-green-200 rounded-full px-1 outline-none focus:bg-white focus:border-green-400 min-w-0 w-20"
+41
client/src/lib/components/SortControls.svelte
+41
client/src/lib/components/SortControls.svelte
···+class="wsbadge !pl-2 !px-1 !mt-0 !font-normal bg-purple-100 hover:bg-purple-200 border-purple-300"+class="bg-purple-50 text-purple-900 border border-purple-200 rounded-full px-1 outline-none focus:bg-white focus:border-purple-400 min-w-0"
+5
-6
client/src/lib/components/StatsCard.svelte
+5
-6
client/src/lib/components/StatsCard.svelte
······
+4
-4
client/src/lib/components/StatusBadge.svelte
+4
-4
client/src/lib/components/StatusBadge.svelte
···
+5
client/src/lib/types.ts
+5
client/src/lib/types.ts
+126
-31
client/src/routes/+page.svelte
+126
-31
client/src/routes/+page.svelte
···························
+1
-1
nix/client-modules.nix
+1
-1
nix/client-modules.nix
+5
-2
nix/server.nix
+5
-2
nix/server.nix
···
+328
-53
server/Cargo.lock
+328
-53
server/Cargo.lock
··························································································
+15
-5
server/Cargo.toml
+15
-5
server/Cargo.toml
···tokio-websockets = { version = "0.12", features = ["client", "rustls-platform-verifier", "getrandom", "ring"] }-axum = { version = "0.8", default-features = false, features = ["http1", "tokio", "tracing", "json"] }+axum = { version = "0.8", default-features = false, features = ["http1", "tokio", "tracing", "json", "query"] }
+84
-3
server/src/api.rs
+84
-3
server/src/api.rs
············
+521
server/src/db/block.rs
+521
server/src/db/block.rs
···+impl<T: for<'a> Serialize<HighSerializer<AlignedVec, ArenaHandle<'a>, rancor::Error>>> Item<T> {
+232
server/src/db/handle.rs
+232
server/src/db/handle.rs
···
+447
server/src/db/mod.rs
+447
server/src/db/mod.rs
···+fn ensure_handle(&self, nsid: &SmolStr) -> impl Deref<Target = Arc<LexiconHandle>> + use<'_> {
-195
server/src/db.rs
-195
server/src/db.rs
···
+501
server/src/db_old/block.rs
+501
server/src/db_old/block.rs
···+impl<T: for<'a> Serialize<HighSerializer<AlignedVec, ArenaHandle<'a>, rancor::Error>>> Item<T> {
+424
server/src/db_old/mod.rs
+424
server/src/db_old/mod.rs
···
+230
-40
server/src/main.rs
+230
-40
server/src/main.rs
··················+"migrated {total_count} events in {total_time:?} ({read_per_second:.2} rps, {write_per_second:.2} wps)"
+322
server/src/utils.rs
+322
server/src/utils.rs
···