my blog https://overreacted.io

Fix Bluesky discussion links with direct post URLs (#863)

Replace broken search-based "Discuss on Bluesky" links with direct links to announcement posts. Bluesky disabled unauthed search, making the old search URLs non-functional.

- Remove discussUrl generation in page.js
- Add conditional bluesky frontmatter rendering like YouTube links
- Update 15 blog posts with their corresponding Bluesky post URLs
- Links now go directly to Dan's announcement posts

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

Co-authored-by: Claude <noreply@anthropic.com>

authored by danabra.mov

Claude and committed by
GitHub
064621ab ae2be202

+21 -6
+7 -6
app/[slug]/page.js
··· 30 30 let Wrapper = postComponents.Wrapper ?? Fragment; 31 31 const { content, data } = matter(file); 32 32 const isDraft = new Date(data.date).getFullYear() > new Date().getFullYear(); 33 - const discussUrl = `https://bsky.app/search?q=${encodeURIComponent( 34 - `https://overreacted.io/${slug}/`, 35 - )}`; 36 33 const editUrl = `https://github.com/gaearon/overreacted.io/edit/main/public/${encodeURIComponent( 37 34 slug, 38 35 )}/index.md`; ··· 135 132 )} 136 133 <hr /> 137 134 <p> 138 - <Link href={discussUrl}>Discuss on Bluesky</Link> 139 - {data.youtube && ( 135 + {data.bluesky && ( 140 136 <> 137 + <Link href={data.bluesky}>Discuss on Bluesky</Link> 141 138 &nbsp;&nbsp;&middot;&nbsp;&nbsp; 139 + </> 140 + )} 141 + {data.youtube && ( 142 + <> 142 143 <Link href={data.youtube}>Watch on YouTube</Link> 144 + &nbsp;&nbsp;&middot;&nbsp;&nbsp; 143 145 </> 144 146 )} 145 - &nbsp;&nbsp;&middot;&nbsp;&nbsp; 146 147 <Link href={editUrl}>Edit on GitHub</Link> 147 148 </p> 148 149 </div>
+1
public/functional-html/index.md
··· 2 2 title: Functional HTML 3 3 date: '2025-05-02' 4 4 spoiler: Tags on both sides. 5 + bluesky: https://bsky.app/profile/danabra.mov/post/3lo75qixee226 5 6 --- 6 7 7 8 Here's a piece of HTML:
+1
public/how-imports-work-in-rsc/index.md
··· 2 2 title: How Imports Work in RSC 3 3 date: '2025-06-05' 4 4 spoiler: A layered module system. 5 + bluesky: https://bsky.app/profile/danabra.mov/post/3lquyr3wtc22r 5 6 --- 6 7 7 8 React Server Components (RSC) is a programming paradigm that lets you express a client/server application as a single program spanning over two environments. Concretely, RSC extends the module system (the `import` and `export` keywords) with novel semantics that let the developer control the frontend/backend split.
+1
public/im-doing-a-little-consulting/index.md
··· 2 2 title: I'm Doing a Little Consulting 3 3 date: '2025-06-11' 4 4 spoiler: Personal update post. 5 + bluesky: https://bsky.app/profile/danabra.mov/post/3lrc6uftquk2v 5 6 --- 6 7 7 8 It's been a while since I've posted any personal/professional updates.
+1
public/impossible-components/index.md
··· 2 2 title: Impossible Components 3 3 date: '2025-04-22' 4 4 spoiler: Composing across the stack. 5 + bluesky: https://bsky.app/profile/danabra.mov/post/3lnftttyxwc2n 5 6 --- 6 7 7 8 Suppose I want to greet you in *my* favorite color.
+1
public/jsx-over-the-wire/index.md
··· 2 2 title: JSX Over The Wire 3 3 date: '2025-04-16' 4 4 spoiler: Turning your API inside-out. 5 + bluesky: https://bsky.app/profile/danabra.mov/post/3lmugrkifo22f 5 6 --- 6 7 7 8 Suppose you have an API route that returns some data as JSON:
+1
public/one-roundtrip-per-navigation/index.md
··· 2 2 title: One Roundtrip Per Navigation 3 3 date: '2025-05-29' 4 4 spoiler: What do HTML, GraphQL, and RSC have in common? 5 + bluesky: https://bsky.app/profile/danabra.mov/post/3lqdmyuqkt22e 5 6 --- 6 7 7 8 How many requests should it take to navigate to another page?
+1
public/progressive-json/index.md
··· 3 3 date: '2025-05-31' 4 4 spoiler: Why streaming isn't enough. 5 5 youtube: https://www.youtube.com/watch?v=MaMQLNBZz64 6 + bluesky: https://bsky.app/profile/danabra.mov/post/3lqi6txrp3c2b 6 7 --- 7 8 8 9 Do you know about Progressive JPEGs? Here's a [nice explanation](https://www.liquidweb.com/blog/what-is-a-progressive-jpeg/) of what a Progressive JPEG is. The idea is that instead of loading the image top to bottom, the image instead is fuzzy at first and then progressively becomes more crisp.
+1
public/react-for-two-computers/index.md
··· 2 2 title: React for Two Computers 3 3 date: '2025-04-09' 4 4 spoiler: Two things, one origin. 5 + bluesky: https://bsky.app/profile/danabra.mov/post/3lmem35tcac2q 5 6 --- 6 7 7 8 I've been trying to write this post at least a dozen times. I don't mean this figuratively; at one point, I literally had a desktop folder with a dozen abandoned drafts. They had wildly different styles--from rigoruous to chaotically cryptic and insufferably meta; they would start abruptly, chew on themselves, and eventually trail off to nowhere. One by one, I threw them all away because they all sucked.
+1
public/rsc-for-astro-developers/index.md
··· 2 2 title: RSC for Astro Developers 3 3 date: '2025-05-06' 4 4 spoiler: Islands, but make it fractal. 5 + bluesky: https://bsky.app/profile/danabra.mov/post/3lohxdpw4jk2j 5 6 --- 6 7 7 8 Okay, so in [Astro](https://docs.astro.build/en/getting-started/) you have two things:
+1
public/rsc-for-lisp-developers/index.md
··· 2 2 title: RSC for LISP Developers 3 3 date: '2025-06-01' 4 4 spoiler: Quoting for modules. 5 + bluesky: https://bsky.app/profile/danabra.mov/post/3lqj5nr7dok23 5 6 --- 6 7 7 8 One of the big ideas of LISP is that code is data, and data is code. I mean, that's kind of [generally](https://wiki.c2.com/?DataAndCodeAreTheSameThing) true, but in LISP it's both culturally and syntactically emphasized. For example, let's take this piece of code in LISP:
+1
public/static-as-a-server/index.md
··· 2 2 title: Static as a Server 3 3 date: '2025-05-08' 4 4 spoiler: You wouldn't download a site. 5 + bluesky: https://bsky.app/profile/danabra.mov/post/3loohv4fpvc2j 5 6 --- 6 7 7 8 RSC means React *Server* Components.
+1
public/the-two-reacts/index.md
··· 2 2 title: "The Two Reacts" 3 3 date: '2024-01-04' 4 4 spoiler: "UI = f(data)(state)" 5 + bluesky: https://bsky.app/profile/danabra.mov/post/3ki6tqebcdm2s 5 6 --- 6 7 7 8 Suppose I want to display something on your screen. Whether I want to display a web page like this blog post, an interactive web app, or even a native app that you might download from some app store, at least *two* devices must be involved.
+1
public/what-does-use-client-do/index.md
··· 3 3 date: '2025-04-25' 4 4 spoiler: Two worlds, two doors. 5 5 youtube: https://www.youtube.com/watch?v=31e5c67znF4 6 + bluesky: https://bsky.app/profile/danabra.mov/post/3lnnmyifqos2f 6 7 --- 7 8 8 9 React Server Components (in?)famously has no API surface. It's an entire programming paradigm largely stemming from two directives:
+1
public/why-does-rsc-integrate-with-a-bundler/index.md
··· 2 2 title: Why Does RSC Integrate with a Bundler? 3 3 date: '2025-05-30' 4 4 spoiler: One does not simply serialize a module. 5 + bluesky: https://bsky.app/profile/danabra.mov/post/3lqgljazwe22f 5 6 --- 6 7 7 8 Fair warning--this one's for the nerds.