See the best posts from any Bluesky account
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Fix Edge template: @{{ handle }} renders literal instead of @<handle>

Edge treats `@{{ expr }}` as its escape syntax for the `{{ expr }}`
interpolation — the `@` is consumed as part of the escape, so the
template renders literal "{{ handle }}" instead of "@dril.bsky.social".
This was wrong in loading.edge, gone.edge, show.edge, and not_found.edge
(8 call sites total).

Fix by putting the literal '@' inside the interpolation expression:
{{ '@' + handle }} — a single interpolation with no escape foot-gun.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

+8 -8
+1 -1
resources/views/pages/errors/not_found.edge
··· 7 7 <div style="padding: 64px 0; text-align: center;"> 8 8 <h1 style="font-size: 1.6rem; margin-bottom: 16px;"> 9 9 @if(handle) 10 - We can't find @{{ handle }} on Bluesky. Did you typo? 10 + We can't find {{ '@' + handle }} on Bluesky. Did you typo? 11 11 @else 12 12 Page not found. 13 13 @endif
+2 -2
resources/views/pages/profile/gone.edge
··· 1 1 @component('components/layout') 2 2 @slot('title') 3 - @{{ handle }} — skystar 3 + {{ '@' + handle }} — skystar 4 4 @endslot 5 5 6 6 @slot('main') 7 7 <div style="padding: 64px 0; text-align: center;"> 8 - <h1 style="font-size: 1.6rem; margin-bottom: 16px;">@{{ handle }} is no longer available.</h1> 8 + <h1 style="font-size: 1.6rem; margin-bottom: 16px;">{{ '@' + handle }} is no longer available.</h1> 9 9 <p style="color: #666;"> 10 10 This account has been deleted or taken down from Bluesky. 11 11 </p>
+2 -2
resources/views/pages/profile/loading.edge
··· 4 4 @endslot 5 5 6 6 @slot('title') 7 - Indexing @{{ handle }} — skystar 7 + Indexing {{ '@' + handle }} — skystar 8 8 @endslot 9 9 10 10 @slot('main') 11 11 <div style="padding: 64px 0; text-align: center;"> 12 - <h1 style="font-size: 1.6rem; margin-bottom: 16px;">Indexing @{{ handle }}…</h1> 12 + <h1 style="font-size: 1.6rem; margin-bottom: 16px;">Indexing {{ '@' + handle }}…</h1> 13 13 <p style="color: #666; max-width: 420px; margin: 0 auto;"> 14 14 This is a one-time process that takes about 10 seconds. 15 15 The page will load automatically.
+3 -3
resources/views/pages/profile/show.edge
··· 1 1 @component('components/layout', { canonicalUrl }) 2 2 @slot('title') 3 - Top {{ kind === 'likes' ? 'liked' : 'reposted' }} posts of @{{ handle }} — skystar 3 + Top {{ kind === 'likes' ? 'liked' : 'reposted' }} posts of {{ '@' + handle }} — skystar 4 4 @endslot 5 5 6 6 @slot('main') ··· 19 19 @if(user.displayName) 20 20 <div style="font-size: 1.1rem; font-weight: 600;">{{ user.displayName }}</div> 21 21 @endif 22 - <div style="color: #555;">@{{ handle }}</div> 22 + <div style="color: #555;">{{ '@' + handle }}</div> 23 23 </div> 24 24 </div> 25 25 ··· 76 76 77 77 {{-- Posts --}} 78 78 @if(posts.length === 0) 79 - <p style="color: #888;">@{{ handle }} hasn't posted anything yet (or nothing in this window).</p> 79 + <p style="color: #888;">{{ '@' + handle }} hasn't posted anything yet (or nothing in this window).</p> 80 80 @else 81 81 <ol style="list-style: none; padding: 0; margin: 0;"> 82 82 @each((post, index) in posts)