fix: consistent page titles (text-xl), always show Bluesky avatar on profile

Author: Aaron Steven White
Commit 6b15e701a35f31c732f087fd00c2806a572a89b9
Parent: 437bc10ad8
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
10 files changed +41 -19
@@ -22,3 +22,12 @@ body {
2222 	color: var(--color-text-primary);
2323 	font-family: var(--font-sans);
2424 }
25+
26+/* Hide scrollbar for horizontal scroll areas while keeping scroll behavior */
27+.scrollbar-none {
28+	-ms-overflow-style: none;
29+	scrollbar-width: none;
30+}
31+.scrollbar-none::-webkit-scrollbar {
32+	display: none;
33+}
@@ -22,7 +22,7 @@
2222 </svelte:head>
2323 
2424 <section>
25-	<h1 class="mb-2 text-2xl font-semibold text-text-primary">Explore</h1>
25+	<h1 class="mb-2 text-xl font-semibold text-text-primary">Explore</h1>
2626 	<p class="mb-6 text-sm text-text-secondary">
2727 		Discover repositories across protocols on the AT Protocol network.
2828 	</p>
@@ -67,7 +67,7 @@
6767 
6868 		{#if data.trending.items.length === 0}
6969 			<p class="py-8 text-center text-sm text-text-secondary">
70-				{activeProtocol ? `No ${activeProtocol} repositories found.` : 'No repositories yet. Be the first to create one.'}
70+				{activeProtocol ? `No ${activeProtocol} repositories found.` : 'No repositories yet.'}
7171 			</p>
7272 		{:else}
7373 			<div class="grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
@@ -25,15 +25,23 @@ async function fetchBlueskyProfile(did: string) {
2525 }
2626 
2727 export const load: PageServerLoad = async ({ params }) => {
28-	// Try Cospan profile first, fall back to Bluesky public API
29-	let profile = null;
28+	// Always fetch Bluesky profile for avatar and social stats
29+	const bskyProfile = await fetchBlueskyProfile(params.did);
30+
31+	// Try Cospan profile for any Cospan-specific fields
32+	let cospanProfile = null;
3033 	try {
31-		profile = await getProfile({ did: params.did });
34+		cospanProfile = await getProfile({ did: params.did });
3235 	} catch {}
3336 
34-	if (!profile) {
35-		profile = await fetchBlueskyProfile(params.did);
36-	}
37+	// Merge: Bluesky provides avatar/stats, Cospan overrides if it has data
38+	const profile = bskyProfile
39+		? {
40+				...bskyProfile,
41+				...(cospanProfile?.displayName ? { displayName: cospanProfile.displayName } : {}),
42+				...(cospanProfile?.description ? { description: cospanProfile.description } : {}),
43+			}
44+		: cospanProfile;
3745 
3846 	let repos = { items: [] as any[], cursor: null as string | null };
3947 	try {
@@ -2,6 +2,7 @@
22 	import { goto } from '$app/navigation';
33 	import { getAuth } from '$lib/stores/auth.svelte';
44 	import Breadcrumb from '$lib/components/shared/Breadcrumb.svelte';
5+	import BackLink from '$lib/components/shared/BackLink.svelte';
56 
67 	let { data } = $props();
78 
@@ -117,4 +118,6 @@
117118 			</button>
118119 		</div>
119120 	</div>
121+
122+	<BackLink href="/{data.did}/{data.repoName}" />
120123 </section>
@@ -3,6 +3,7 @@
33 	import { goto } from '$app/navigation';
44 	import { getAuth } from '$lib/stores/auth.svelte';
55 	import Breadcrumb from '$lib/components/shared/Breadcrumb.svelte';
6+	import BackLink from '$lib/components/shared/BackLink.svelte';
67 
78 	let auth = $derived(getAuth());
89 	let did = $derived($page.params.did);
@@ -108,4 +109,6 @@
108109 			</div>
109110 		</form>
110111 	{/if}
112+
113+	<BackLink href="{basePath}/issues" label="Back to issues" />
111114 </section>
cospan · schematic version control on atproto built on AT Protocol