update zat to use top-level exports, update dashboard URL

- zat now exports Tid, AtUri, etc. at top level instead of internal namespace
- use zat.Tid.parse() instead of zat.internal.Tid.parse()
- update readme dashboard link to custom domain

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

Changed files
+5 -5
src
+1 -1
README.md
··· 17 17 18 18 ## dashboard 19 19 20 - https://zig-bsky-feed.fly.dev/ 20 + https://music-atmosphere-feed.plyr.fm/ 21 21 22 22 <details> 23 23 <summary>running locally</summary>
+1 -1
build.zig.zon
··· 14 14 }, 15 15 .zat = .{ 16 16 .url = "https://github.com/zzstoatzz/zat/archive/refs/heads/main.tar.gz", 17 - .hash = "zat-0.0.1-alpha-5PuC7liTAAAHY5R9yFiTz2Q51azmq4gLHpJLrzlA6-ms", 17 + .hash = "zat-0.0.1-alpha-5PuC7uWMAAAd0ujX65-3KFbr3IsEaH8PWExoW9rHkJmU", 18 18 }, 19 19 }, 20 20 .paths = .{
+3 -3
src/db.zig
··· 109 109 110 110 /// parse TID to get timestamp in milliseconds 111 111 pub fn parseTidTimestamp(rkey: []const u8) i64 { 112 - const tid = zat.internal.Tid.parse(rkey) orelse return 0; 112 + const tid = zat.Tid.parse(rkey) orelse return 0; 113 113 return @intCast(tid.timestamp() / 1000); // microseconds -> milliseconds 114 114 } 115 115 116 116 /// parse TID from AT URI to get post timestamp 117 117 fn parseTimestampFromUri(uri: []const u8) ?i64 { 118 - const at_uri = zat.internal.AtUri.parse(uri) orelse return null; 118 + const at_uri = zat.AtUri.parse(uri) orelse return null; 119 119 const rkey = at_uri.rkey() orelse return null; 120 120 const ts = parseTidTimestamp(rkey); 121 121 return if (ts > 0) ts else null; ··· 268 268 269 269 /// extract DID from post URI (at://did:plc:xxx/app.bsky.feed.post/yyy) 270 270 fn extractDidFromUri(uri: []const u8) ?[]const u8 { 271 - const at_uri = zat.internal.AtUri.parse(uri) orelse return null; 271 + const at_uri = zat.AtUri.parse(uri) orelse return null; 272 272 return at_uri.authority(); 273 273 } 274 274