diff --git a/next.config.ts b/next.config.ts index cd6c0be..3e1d9c9 100644 --- a/next.config.ts +++ b/next.config.ts @@ -13,10 +13,15 @@ const nextConfig: NextConfig = { // route. Send it (and every nested path under it) to the matching // /explore URL so deep links keep working when someone fat-fingers // or copies from a referrer that included the "r". + // + // /universal-links is the old path for the universal links landing + // page; it now lives at the shorter /links. The old URL still works + // by redirecting so existing shares and bookmarks don't break. async redirects() { return [ { source: '/explorer', destination: '/explore', permanent: true }, { source: '/explorer/:path*', destination: '/explore/:path*', permanent: true }, + { source: '/universal-links', destination: '/links', permanent: true }, ]; }, }; diff --git a/src/app/universal-links/page.tsx b/src/app/links/page.tsx similarity index 100% rename from src/app/universal-links/page.tsx rename to src/app/links/page.tsx diff --git a/src/components/Header.tsx b/src/components/Header.tsx index af4cfaf..3855a2a 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -266,7 +266,7 @@ export default function Header({ simple = false, compact = false }: HeaderProps) extension - + universal links @@ -384,7 +384,7 @@ export default function Header({ simple = false, compact = false }: HeaderProps) extension · - + universal links @@ -491,7 +491,7 @@ export default function Header({ simple = false, compact = false }: HeaderProps) extension · - + universal links diff --git a/src/components/account/tabs/AboutTab.tsx b/src/components/account/tabs/AboutTab.tsx index c08f45d..3bd447c 100644 --- a/src/components/account/tabs/AboutTab.tsx +++ b/src/components/account/tabs/AboutTab.tsx @@ -19,7 +19,7 @@ const LINKS: { label: string; href: string; icon?: React.ReactNode }[] = [ }, { label: 'Universal links', - href: '/universal-links', + href: '/links', }, { label: 'Terms & privacy', diff --git a/src/components/landing/CrossLinkCards.tsx b/src/components/landing/CrossLinkCards.tsx index de21ed1..07890ad 100644 --- a/src/components/landing/CrossLinkCards.tsx +++ b/src/components/landing/CrossLinkCards.tsx @@ -16,7 +16,7 @@ type Card = { const CARDS: Card[] = [ { key: 'universal-links', - href: '/universal-links', + href: '/links', icon: , title: 'Universal links', body: 'Share aturi.to/handle/collection/rkey. Visitors choose which Atmosphere app opens it.', diff --git a/src/components/landing/RecordTypesGrid.tsx b/src/components/landing/RecordTypesGrid.tsx index 7025344..745a883 100644 --- a/src/components/landing/RecordTypesGrid.tsx +++ b/src/components/landing/RecordTypesGrid.tsx @@ -1,6 +1,3 @@ -'use client'; - -import Link from 'next/link'; import { BookOpen, Camera, @@ -18,7 +15,6 @@ type RecordType = { label: string; collection: string; example: string; - href: string; }; const TYPES: RecordType[] = [ @@ -27,63 +23,54 @@ const TYPES: RecordType[] = [ label: 'Posts', collection: 'app.bsky.feed.post', example: 'aturi.to/profile/handle/post/', - href: '/profile/aturi.to', }, { icon: , label: 'Profiles', collection: 'app.bsky.actor.profile', example: 'aturi.to/profile/handle', - href: '/profile/aturi.to', }, { icon: , label: 'Lists', collection: 'app.bsky.graph.list', example: 'aturi.to/profile/handle/app.bsky.graph.list/', - href: '/profile/aturi.to', }, { icon: , label: 'Feeds', collection: 'app.bsky.feed.generator', example: 'aturi.to/profile/handle/app.bsky.feed.generator/', - href: '/profile/aturi.to', }, { icon: , label: 'Documents', collection: 'pub.leaflet.document', example: 'aturi.to/profile/handle/pub.leaflet.document/', - href: '/profile/aturi.to', }, { icon: , label: 'Repositories', collection: 'sh.tangled.repo', example: 'aturi.to/profile/handle/sh.tangled.repo/', - href: '/profile/aturi.to', }, { icon: , label: 'Photo galleries', collection: 'social.grain.gallery', example: 'aturi.to/profile/handle/social.grain.gallery/', - href: '/profile/aturi.to', }, { icon: , label: 'Annotations', collection: 'at.margin.annotation', example: 'aturi.to/profile/handle/at.margin.annotation/', - href: '/profile/aturi.to', }, { icon: , label: 'Any other lexicon', collection: 'collection.nsid', example: 'aturi.to/profile/handle//', - href: '/explore', }, ]; @@ -92,6 +79,10 @@ const TYPES: RecordType[] = [ * Communicates breadth without forcing the visitor to skim a long * categorized list — each tile names a record type, its lexicon NSID, * and what a universal link to one looks like. + * + * These tiles are illustrative reference, not navigation — the example + * URLs use placeholder `handle`/`` segments that don't resolve to + * anything, so the cards are plain (non-interactive) elements. */ export default function RecordTypesGrid() { return ( @@ -103,9 +94,8 @@ export default function RecordTypesGrid() { }} > {TYPES.map((t) => ( - { - e.currentTarget.style.borderColor = 'var(--text-accent)'; - e.currentTarget.style.background = 'var(--bg-tertiary)'; - }} - onMouseLeave={(e) => { - e.currentTarget.style.borderColor = 'var(--border-medium)'; - e.currentTarget.style.background = 'var(--bg-secondary)'; }} >
{t.example}
- + ))} );