release: v0.3.0

Author: Aaron Steven White
Commit e156aac80acbe4c50964e6fee2be4cb6e1e71a4a
Parent: f17e474e50
Structural diff unavailable

These commits were pushed via plain git push, so no pre-parsed schemas are available. Install git-remote-cospan and re-push via panproto:// to see scope-level changes, breaking change detection, and semantic diffs.

brew install panproto/tap/git-remote-cospan
7 files changed +45 -9
@@ -1,5 +1,33 @@
11 # Changelog
22 
3+## v0.3.0
4+
5+### Frontend UX revamp
6+
7+- Mobile responsive header with hamburger menu (nav links, search, auth hidden on small screens)
8+- Horizontal scroll for tab bars and protocol filters on mobile
9+- Stacked layout for profile pages on small screens
10+- Consistent breadcrumb and tab bar across all repo sub-pages
11+- Consistent empty states with icons and CTAs on all list pages
12+- Fixed followers, following, and stars pages (API response key mapping)
13+- Homogeneous design patterns: consistent spacing, text sizes, card styles, and form layouts across all 31 routes
14+- Error page improvements
15+- Logo integrated into header and favicon (dark mode optimized with light strokes)
16+
17+### Auth improvements
18+
19+- Production OAuth with `token_endpoint_auth_method: "none"` for browser client
20+- Root URL added to `redirect_uris` for proper callback handling
21+- `transition:generic` scope for write permissions (create issues, stars, follows)
22+
23+### Deployment fixes
24+
25+- Pre-built Docker images on GHCR (no compilation on the server)
26+- Fixed Caddyfile syntax for production reverse proxy
27+- Fixed node container permissions for `/data` volume
28+- Fixed web container missing `@sveltejs/kit` runtime dependency
29+- Rust 1.88+ in Dockerfiles (MSRV for home, time crates)
30+
331 ## v0.2.0
432 
533 ### Tangled interop
@@ -436,7 +436,7 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
436436 
437437 [[package]]
438438 name = "cospan-appview"
439-version = "0.2.3"
439+version = "0.3.0"
440440 dependencies = [
441441  "anyhow",
442442  "async-trait",
@@ -479,7 +479,7 @@ dependencies = [
479479 
480480 [[package]]
481481 name = "cospan-codegen"
482-version = "0.2.3"
482+version = "0.3.0"
483483 dependencies = [
484484  "anyhow",
485485  "panproto-core",
@@ -493,7 +493,7 @@ dependencies = [
493493 
494494 [[package]]
495495 name = "cospan-node"
496-version = "0.2.3"
496+version = "0.3.0"
497497 dependencies = [
498498  "anyhow",
499499  "async-trait",
@@ -7,7 +7,7 @@ members = [
77 resolver = "2"
88 
99 [workspace.package]
10-version = "0.2.4"
10+version = "0.3.0"
1111 edition = "2024"
1212 license = "AGPL-3.0-or-later"
1313 repository = "https://github.com/cospan-dev/cospan"
@@ -40,11 +40,19 @@ export async function listStars(params?: {
4040 	return { items: raw.stars ?? [], cursor: raw.cursor ?? null, totalCount: raw.totalCount ?? 0 };
4141 }
4242 
43-export function listFollows(params: {
43+export async function listFollows(params: {
4444 	did: string;
4545 	direction: 'followers' | 'following';
4646 	limit?: number;
4747 	cursor?: string;
4848 }): Promise<FollowListResponse> {
49-	return xrpcQuery<FollowListResponse>('dev.cospan.graph.follow.list', params);
49+	const raw = await xrpcQuery<{ follows: Follow[]; cursor: string | null; totalCount: number }>(
50+		'dev.cospan.graph.follow.list',
51+		params
52+	);
53+	return {
54+		items: raw.follows ?? (raw as any).items ?? [],
55+		cursor: raw.cursor ?? null,
56+		totalCount: raw.totalCount ?? 0
57+	};
5058 }
@@ -14,7 +14,7 @@ async function fetchBlueskyProfile(did: string) {
1414 				displayName: data.displayName ?? null,
1515 				handle: data.handle ?? did,
1616 				description: data.description ?? null,
17-				avatar: data.avatar ?? null,
17+				avatarUrl: data.avatar ?? null,
1818 				followerCount: data.followersCount ?? 0,
1919 				followingCount: data.followsCount ?? 0,
2020 				repoCount: 0,
cospan · schematic version control on atproto built on AT Protocol