See the best posts from any Bluesky account
0
fork

Configure Feed

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

add tangled link

+48 -44
+39 -38
resources/views/components/layout.edge
··· 10 10 <link rel="dns-prefetch" href="https://cdn.jsdelivr.net" /> 11 11 <link href="https://fonts.bunny.net/css?family=figtree:400,500,600,700|gabarito:400,500,600,700&display=swap" rel="stylesheet" /> 12 12 <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256'><path fill='%23ef4444' d='M240,98a57.63,57.63,0,0,1-17,41L128,234,33,139A58,58,0,0,1,114,57.41l14,14.18,14-14.18A58,58,0,0,1,240,98Z'/></svg>" /> 13 - <script nonce="{{ cspNonce }}"> 14 - (function(){var m=document.cookie.match(/(?:^|;\s*)theme=(dark|light)/);if(m){if(m[1]==='dark')document.documentElement.classList.add('dark');else document.documentElement.classList.remove('dark');return}var d=window.matchMedia('(prefers-color-scheme: dark)').matches;var v=d?'dark':'light';document.cookie='theme='+v+';path=/;max-age=31536000;SameSite=Lax';if(d)document.documentElement.classList.add('dark')})() 15 - </script> 16 - @vite(['resources/css/app.css', 'resources/js/app.js'], { nonce: cspNonce }) 17 - <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.2/src/fill/style.css" /> 18 - <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.2/src/bold/style.css" /> 19 - <meta name="csrf-token" content="{{ csrfToken }}"> 20 - <meta name="description" content="{{ $props.get('description', 'See the most popular posts from any Bluesky account.') }}" /> 21 - @if(posthogApiKey) 22 - <meta name="posthog-api-key" content="{{ posthogApiKey }}"> 23 - <meta name="posthog-host" content="{{ posthogHost }}"> 24 - @if(auth && auth.isAuthenticated) 25 - <meta name="posthog-distinct-id" content="{{ auth.user.did }}"> 26 - <meta name="posthog-handle" content="{{ auth.user.handle }}"> 27 - @endif 28 - @endif 29 - @if($slots.head) 30 - {{{ await $slots.head() }}} 31 - @endif 32 - <title> 33 - @if($slots.title) 34 - {{{ await $slots.title() }}} 35 - @else 36 - favs.blue — bluesky's greatest hits 37 - @endif 38 - </title> 39 - @if(typeof canonicalUrl !== 'undefined' && canonicalUrl) 40 - <link rel="canonical" href="{{ canonicalUrl }}" /> 41 - @endif 13 + <script nonce="{{ cspNonce }}"> 14 + (function(){var m=document.cookie.match(/(?:^|;\s*)theme=(dark|light)/);if(m){if(m[1]==='dark')document.documentElement.classList.add('dark');else document.documentElement.classList.remove('dark');return}var d=window.matchMedia('(prefers-color-scheme: dark)').matches;var v=d?'dark':'light';document.cookie='theme='+v+';path=/;max-age=31536000;SameSite=Lax';if(d)document.documentElement.classList.add('dark')})() 15 + </script> 16 + @vite(['resources/css/app.css', 'resources/js/app.js'], { nonce: cspNonce }) 17 + <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.2/src/fill/style.css" /> 18 + <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.2/src/bold/style.css" /> 19 + <meta name="csrf-token" content="{{ csrfToken }}"> 20 + <meta name="description" content="{{ $props.get('description', 'See the most popular posts from any Bluesky account.') }}" /> 21 + @if(posthogApiKey) 22 + <meta name="posthog-api-key" content="{{ posthogApiKey }}"> 23 + <meta name="posthog-host" content="{{ posthogHost }}"> 24 + @if(auth && auth.isAuthenticated) 25 + <meta name="posthog-distinct-id" content="{{ auth.user.did }}"> 26 + <meta name="posthog-handle" content="{{ auth.user.handle }}"> 27 + @endif 28 + @endif 29 + @if($slots.head) 30 + {{{ await $slots.head() }}} 31 + @endif 32 + <title> 33 + @if($slots.title) 34 + {{{ await $slots.title() }}} 35 + @else 36 + favs.blue — bluesky's greatest hits 37 + @endif 38 + </title> 39 + @if(typeof canonicalUrl !== 'undefined' && canonicalUrl) 40 + <link rel="canonical" href="{{ canonicalUrl }}" /> 41 + @endif 42 42 </head> 43 43 <body class="font-sans text-base leading-relaxed text-gray-900 bg-gray-50 dark:text-gray-100 dark:bg-gray-950"> 44 44 <div class="max-w-[680px] mx-auto px-4"> ··· 46 46 <div class="flex items-center justify-between gap-3 pt-6 pb-4"> 47 47 <a href="/" class="flex items-center gap-1.5 text-gray-900 dark:text-gray-100 no-underline hover:opacity-70 transition-opacity duration-200"> 48 48 <i class="ph-fill ph-heart text-red-500 text-2xl"></i> 49 - <span class="font-heading font-bold text-lg tracking-tight">favs.blue</span> 49 + <span class="font-heading font-bold text-lg tracking-tight">favs.blue</span> 50 50 </a> 51 51 <div class="flex items-center gap-2"> 52 52 <form action="/search" method="GET" class="hidden sm:block"> ··· 54 54 @endcomponent 55 55 </form> 56 56 <a 57 - href="/" 58 - class="sm:hidden size-8 inline-flex items-center justify-center rounded-md text-gray-500 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-800 transition-colors duration-200" 59 - aria-label="Search for a handle" 57 + href="/" 58 + class="sm:hidden size-8 inline-flex items-center justify-center rounded-md text-gray-500 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-800 transition-colors duration-200" 59 + aria-label="Search for a handle" 60 60 > 61 - <i class="ph-bold ph-magnifying-glass text-base"></i> 62 - </a> 63 - @include('partials/theme_toggle') 64 - @include('partials/auth_buttons') 61 + <i class="ph-bold ph-magnifying-glass text-base"></i> 62 + </a> 63 + @include('partials/theme_toggle') 64 + @include('partials/auth_buttons') 65 65 </div> 66 66 </div> 67 67 @endif 68 68 {{{ await $slots.main() }}} 69 69 <footer class="mt-12 py-6 border-t border-gray-200 dark:border-gray-800 text-xs text-gray-500 dark:text-gray-400 text-center"> 70 70 <a href="https://bsky.app/profile/favs.blue" target="_blank" rel="noopener" class="text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300 hover:underline">{{ '@favs.blue' }}</a> &middot; 71 - <a href="/about" class="text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300 hover:underline">about</a> 71 + <a href="/about" class="text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300 hover:underline">about</a> &middot; 72 + <a href="https://tangled.org/btao.org/favs.blue" target="_blank" class="text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300 hover:underline">source</a> 72 73 </footer> 73 74 </div> 74 75 </body>
+9 -6
resources/views/pages/about.edge
··· 2 2 @slot('title') 3 3 About — favs.blue 4 4 @endslot 5 - 5 + 6 6 @slot('main') 7 7 <div class="py-12 space-y-4"> 8 8 <h1 class="font-heading text-3xl font-bold mb-6 tracking-tight">About favs.blue</h1> 9 9 <p> 10 10 favs.blue is a <a href="https://en.wikipedia.org/wiki/Favstar" target="_blank" rel="noopener" class="text-blue-600 dark:text-blue-400 hover:underline">favstar.fm</a>-style 11 11 site for <a href="https://bsky.app" target="_blank" rel="noopener" class="text-blue-600 dark:text-blue-400 hover:underline">Bluesky</a>. 12 - Type any handle and see that account's most popular posts. 12 + Type any handle and see that account's most popular posts. 13 13 </p> 14 14 <p> 15 15 Data is updated in real-time. ··· 21 21 Bluesky, it disappears from favs.blue too. 22 22 </p> 23 23 <p> 24 + favs.blue is free and open-source software. You can see the source code on <a href="https://tangled.org/btao.org/favs.blue" target="_blank" rel="noopener" class="text-blue-600 dark:text-blue-400 hover:underline">Tangled</a>. 25 + </p> 26 + <p> 24 27 Follow <a href="https://bsky.app/profile/favs.blue" target="_blank" rel="noopener" class="text-blue-600 dark:text-blue-400 hover:underline">{{ '@favs.blue' }}</a> on Bluesky, 25 - or subscribe to our feeds: 28 + or subscribe to our feeds: 26 29 </p> 27 30 <ul class="list-disc pl-6 space-y-1"> 28 31 <li> 29 - <a href="https://bsky.app/profile/favs.blue/feed/1k-favs" target="_blank" rel="noopener" class="text-blue-600 dark:text-blue-400 hover:underline">Posts that hit 1,000 likes</a> 32 + <a href="https://bsky.app/profile/favs.blue/feed/1k-favs" target="_blank" rel="noopener" class="text-blue-600 dark:text-blue-400 hover:underline">Posts that hit 1,000 likes</a> 30 33 </li> 31 34 <li> 32 - <a href="https://bsky.app/profile/favs.blue/feed/10k-favs" target="_blank" rel="noopener" class="text-blue-600 dark:text-blue-400 hover:underline">Posts that hit 10,000 likes</a> 35 + <a href="https://bsky.app/profile/favs.blue/feed/10k-favs" target="_blank" rel="noopener" class="text-blue-600 dark:text-blue-400 hover:underline">Posts that hit 10,000 likes</a> 33 36 </li> 34 37 </ul> 35 - <p class="pt-8"><a href="/" class="text-blue-600 dark:text-blue-400 hover:underline">← Back to search</a></p> 38 + <p class="pt-8"><a href="/" class="text-blue-600 dark:text-blue-400 hover:underline">← Back to search</a></p> 36 39 </div> 37 40 @endslot 38 41 @endcomponent