A social RSS reader built on the AT Protocol. glean.at
glean atproto atmosphere rss feed social app
14
fork

Configure Feed

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

Refine landing page messaging

+27 -23
+1 -1
internal/tmpl/base.html
··· 27 27 }); 28 28 </script> 29 29 <meta property="og:title" content="Glean"> 30 - <meta property="og:description" content="A social RSS reader on the AT Protocol."> 30 + <meta property="og:description" content="The social RSS reader built on AT Protocol."> 31 31 <meta property="og:image" content="/static/banner.png"> 32 32 <meta property="og:type" content="website"> 33 33 <meta property="og:site_name" content="Glean">
+20 -20
internal/tmpl/index.html
··· 13 13 <span class="font-bold text-xl text-spot-text" style="letter-spacing: -0.02em;">Glean</span> 14 14 </div> 15 15 <h1 class="text-3xl md:text-5xl font-bold mb-6 leading-[1.1] text-spot-text" style="letter-spacing: -0.03em;"> 16 - Your feeds,<br>your network,<br>your rules. 16 + The social<br>RSS reader. 17 17 </h1> 18 18 <p class="text-lg text-spot-secondary mb-8 max-w-md leading-relaxed"> 19 - Follow RSS feeds from around the web. See what your network is reading. All tied to your AT Protocol identity. 19 + Read your feeds. See what your circle reads. Discover new sources through personalized recommendations. All on AT Protocol. 20 20 </p> 21 21 <div class="flex flex-col sm:flex-row gap-3"> 22 22 <a href="/auth/login" class="bg-spot-green text-white rounded-pill px-7 py-3 text-sm font-bold uppercase tracking-button hover:brightness-110 transition active:scale-95 inline-flex items-center justify-center gap-2"> ··· 42 42 <svg class="w-4 h-4 text-spot-green" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M12 7.5h1.5m-1.5 3h1.5m-7.5 3h7.5m-7.5 3h7.5m3-9h3.375c.621 0 1.125.504 1.125 1.125V18a2.25 2.25 0 0 1-2.25 2.25M16.5 7.5V18a2.25 2.25 0 0 0 2.25 2.25M16.5 7.5V4.875c0-.621-.504-1.125-1.125-1.125H4.125C3.504 3.75 3 4.254 3 4.875V18a2.25 2.25 0 0 0 2.25 2.25h13.5M6 7.5h3v3H6v-3Z"/></svg> 43 43 </div> 44 44 <div class="flex-1 min-w-0"> 45 - <div class="text-sm font-bold text-spot-text leading-tight">The future of decentralized social media</div> 46 - <div class="text-xs text-spot-secondary mt-0.5">example.com &middot; 2h ago</div> 45 + <div class="text-sm font-bold text-spot-text leading-tight">Why the open web is making a comeback</div> 46 + <div class="text-xs text-spot-secondary mt-0.5">theopenweb.press &middot; 2h ago</div> 47 47 </div> 48 48 <div class="flex items-center gap-1 text-spot-green shrink-0"> 49 49 <svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">{{template "icon-heart"}}</svg> ··· 55 55 <svg class="w-4 h-4 text-spot-blue" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M13.5 21v-7.5a.75.75 0 0 1 .75-.75h3a.75.75 0 0 1 .75.75V21m-4.5 0H2.36m11.14 0H18m0 0h3.64m-1.39 0V9.349M3.75 21V9.349m0 0a3.001 3.001 0 0 0 3.75-.615A2.993 2.993 0 0 0 9.75 9.75c.896 0 1.7-.393 2.25-1.016a2.993 2.993 0 0 0 2.25 1.016c.896 0 1.7-.393 2.25-1.015a3.001 3.001 0 0 0 3.75.614m-16.5 0a3.004 3.004 0 0 1-.621-4.72l1.189-1.19A1.5 1.5 0 0 1 5.378 3h13.243a1.5 1.5 0 0 1 1.06.44l1.19 1.189a3 3 0 0 1-.621 4.72M6.75 18h3.75a.75.75 0 0 0 .75-.75V13.5a.75.75 0 0 0-.75-.75H6.75a.75.75 0 0 0-.75.75v3.75c0 .414.336.75.75.75Z"/></svg> 56 56 </div> 57 57 <div class="flex-1 min-w-0"> 58 - <div class="text-sm font-bold text-spot-text leading-tight">Building a reader for the open web</div> 59 - <div class="text-xs text-spot-secondary mt-0.5">blog.example.net &middot; 5h ago</div> 58 + <div class="text-sm font-bold text-spot-text leading-tight">How to take back control of your reading list</div> 59 + <div class="text-xs text-spot-secondary mt-0.5">readwrite.cafe &middot; 5h ago</div> 60 60 </div> 61 61 </div> 62 62 <div class="rounded-lg px-4 py-3 flex items-start gap-3 hover:bg-spot-hover transition"> ··· 64 64 <svg class="w-4 h-4 text-spot-orange" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0 1 12 21 8.25 8.25 0 0 1 6.038 7.047 8.287 8.287 0 0 0 9 9.601a8.983 8.983 0 0 1 3.361-6.867 8.21 8.21 0 0 0 3 2.48Z"/><path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 0 0 .495-7.468 5.99 5.99 0 0 0-1.925 3.547 5.975 5.975 0 0 1-2.133-1.001A3.75 3.75 0 0 0 12 18Z"/></svg> 65 65 </div> 66 66 <div class="flex-1 min-w-0"> 67 - <div class="text-sm font-bold text-spot-text leading-tight">Why RSS still matters in 2026</div> 68 - <div class="text-xs text-spot-secondary mt-0.5">wire.example.org &middot; 8h ago</div> 67 + <div class="text-sm font-bold text-spot-text leading-tight">RSS is not dead, it was just resting</div> 68 + <div class="text-xs text-spot-secondary mt-0.5">syndication.xyz &middot; 8h ago</div> 69 69 </div> 70 70 <div class="flex items-center gap-1 text-spot-secondary shrink-0"> 71 71 <svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M7.5 8.25h9m-9 3H12m-9.75 1.51c0 1.6 1.123 2.994 2.707 3.227 1.129.166 2.27.293 3.423.379.35.026.67.21.865.501L12 21l2.755-4.133a1.14 1.14 0 0 1 .865-.501 48.172 48.172 0 0 0 3.423-.379c1.584-.233 2.707-1.626 2.707-3.228V6.741c0-1.602-1.123-2.995-2.707-3.228A48.394 48.394 0 0 0 12 3c-2.392 0-4.744.175-7.043.513C3.373 3.746 2.25 5.14 2.25 6.741v6.018Z"/></svg> ··· 77 77 <svg class="w-4 h-4 text-spot-green" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"/><path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"/></svg> 78 78 </div> 79 79 <div class="flex-1 min-w-0"> 80 - <div class="text-sm font-bold text-spot-text leading-tight">Understanding AT Protocol lexicons</div> 81 - <div class="text-xs text-spot-secondary mt-0.5">docs.example.dev &middot; 1d ago</div> 80 + <div class="text-sm font-bold text-spot-text leading-tight">The case for owning your reading history</div> 81 + <div class="text-xs text-spot-secondary mt-0.5">protocolweekly.io &middot; 1d ago</div> 82 82 </div> 83 83 </div> 84 84 </div> ··· 102 102 <svg class="w-5 h-5 text-spot-green" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 5c7.18 0 13 5.82 13 13M6 11a7 7 0 017 7m-7-1a1 1 0 11-2 0 1 1 0 012 0z"/></svg> 103 103 <h3 class="font-bold text-spot-text">Subscribe</h3> 104 104 </div> 105 - <p class="text-sm text-spot-secondary leading-relaxed">Add any RSS or Atom feed. Import your existing subscriptions from another reader via OPML. Group feeds by category.</p> 105 + <p class="text-sm text-spot-secondary leading-relaxed">Add any RSS or Atom feed. Import your existing subscriptions from another reader via OPML. Highlight passages and leave notes on articles.</p> 106 106 </div> 107 107 <div> 108 108 <div class="flex items-center gap-2 mb-3"> 109 - <svg class="w-5 h-5 text-spot-green" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z"/></svg> 110 - <h3 class="font-bold text-spot-text">Connect</h3> 109 + <svg class="w-5 h-5 text-spot-green" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/></svg> 110 + <h3 class="font-bold text-spot-text">Discover</h3> 111 111 </div> 112 - <p class="text-sm text-spot-secondary leading-relaxed">Follow people on the Atmosphere. See what they read and share. Get recommendations from readers with similar tastes.</p> 112 + <p class="text-sm text-spot-secondary leading-relaxed">Find new articles and feeds through personalized recommendations based on what your circle and readers with similar tastes are subscribing to.</p> 113 113 </div> 114 114 <div> 115 115 <div class="flex items-center gap-2 mb-3"> 116 - <svg class="w-5 h-5 text-spot-green" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 8h10M7 12h4m1 8l-4-4H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-3l-4 4z"/></svg> 117 - <h3 class="font-bold text-spot-text">Annotate</h3> 116 + <svg class="w-5 h-5 text-spot-green" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z"/></svg> 117 + <h3 class="font-bold text-spot-text">Connect</h3> 118 118 </div> 119 - <p class="text-sm text-spot-secondary leading-relaxed">Leave notes on any article. Quote passages that matter. Annotations are public records on your PDS, visible to anyone.</p> 119 + <p class="text-sm text-spot-secondary leading-relaxed">Find and follow people with similar reading tastes. See what they read and share. Build your circle on the Atmosphere.</p> 120 120 </div> 121 121 </div> 122 122 </section> ··· 124 124 <section class="bg-spot-green-house"> 125 125 <div class="max-w-6xl mx-auto px-6 py-16"> 126 126 <div class="max-w-2xl"> 127 - <h2 class="text-2xl md:text-3xl font-bold text-white mb-4" style="letter-spacing: -0.02em;">Owned by you, not by us.</h2> 127 + <h2 class="text-2xl md:text-3xl font-bold text-white mb-4" style="letter-spacing: -0.02em;">Your feeds. Your data. Yours.</h2> 128 128 <p class="text-[rgba(255,255,255,0.70)] leading-relaxed mb-8"> 129 - Glean stores subscriptions, annotations, and your social graph in your personal data repository (PDS) on the AT Protocol. Take your data anywhere. Glean will never show you ads or track you. 129 + Glean stores subscriptions and annotations in your personal data repository (PDS) on the AT Protocol. Your social graph comes from your existing Bluesky or Atmosphere connections. Take your data anywhere. Glean will never show you ads or track you. 130 130 </p> 131 131 <div class="flex flex-wrap gap-x-8 gap-y-4 text-sm"> 132 132 <div class="flex items-center gap-2 text-[rgba(255,255,255,0.70)]"> ··· 153 153 <section class="py-16 text-center"> 154 154 <div class="max-w-md mx-auto px-6"> 155 155 <h2 class="text-2xl font-bold text-spot-text mb-3" style="letter-spacing: -0.02em;">Start reading</h2> 156 - <p class="text-spot-secondary mb-6 text-sm leading-relaxed">Sign in with your Bluesky handle or any Atmosphere account. Your feeds are waiting.</p> 156 + <p class="text-spot-secondary mb-6 text-sm leading-relaxed">Sign in with your Bluesky handle or any Atmosphere account. Your network is already waiting.</p> 157 157 <a href="/auth/login" class="bg-spot-green text-white rounded-pill px-8 py-3 text-sm font-bold uppercase tracking-button hover:brightness-110 transition active:scale-95 inline-flex items-center justify-center gap-2"> 158 158 Get started 159 159 </a>
+6 -2
static/manifest.json
··· 1 1 { 2 2 "name": "Glean", 3 3 "short_name": "Glean", 4 - "description": "A social RSS reader on the AT Protocol.", 4 + "description": "The social RSS reader built on AT Protocol.", 5 5 "start_url": "/dashboard", 6 6 "display": "standalone", 7 7 "background_color": "#0a1814", ··· 9 9 "icons": [ 10 10 { "src": "/static/favicon.svg", "sizes": "any", "type": "image/svg+xml" }, 11 11 { "src": "/static/favicon.png", "sizes": "512x512", "type": "image/png" }, 12 - { "src": "/static/apple-touch-icon.png", "sizes": "180x180", "type": "image/png" } 12 + { 13 + "src": "/static/apple-touch-icon.png", 14 + "sizes": "180x180", 15 + "type": "image/png" 16 + } 13 17 ] 14 18 }