a calm atproto client
1
fork

Configure Feed

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

looking not too bad, added emoji reacts

goose.art ea366918 88fb585b

verified
+116 -18
+2 -2
src/components/AccountDetails.svelte
··· 3 3 </script> 4 4 5 5 <div id="account-details"> 6 - <hr /> 7 - <p>Logged in as {user.name}</p> 6 + <hr class="w-md" /> 7 + <p>logged in as {user.name}</p> 8 8 </div> 9 9 10 10 <style>
+30
src/components/EmojiReact.svelte
··· 1 + <script> 2 + let { emotes } = $props(); 3 + </script> 4 + 5 + <div class="emoticons"> 6 + {#each emotes as emote (emote.id)} 7 + <span class="emote">{emote.name}</span> 8 + {/each} 9 + </div> 10 + 11 + <style> 12 + .emoticons { 13 + position: absolute; 14 + bottom: -1rem; 15 + left: 1rem; 16 + width: 100%; 17 + } 18 + .emote { 19 + font-size: 1.25rem; 20 + background: var(--sunrise-white); 21 + border: 2px solid var(--sunrise-pink); 22 + color: var(--sunrise-navy); 23 + border-radius: 50%; 24 + margin-left: -0.5rem; 25 + display: inline-block; 26 + width: 2rem; 27 + height: 2rem; 28 + text-align: center; 29 + } 30 + </style>
+41 -6
src/components/Porthole.svelte
··· 1 1 <script lang="ts"> 2 - let { lexicon, children } = $props(); 2 + import EmojiReact from './EmojiReact.svelte'; 3 + import BskyPost from './lexicons/BskyPost.svelte'; 4 + import Leaflet from './lexicons/Leaflet.svelte'; 5 + 6 + let { lexicon, author, content } = $props(); 3 7 </script> 4 8 5 - <div class="porthole col-span-2"> 6 - <h1 class="text-lg font-bold">{lexicon}</h1> 7 - {@render children()} 9 + <div class="porthole relative my-5"> 10 + <h1 style="color: {lexicon.color}" class="inline text-lg font-bold">{lexicon.name}</h1> 11 + <img src={lexicon.logo} alt="{lexicon.name} Logo" class="logo" /> 12 + {#if lexicon.name == 'app.bsky.feed.post'} 13 + <BskyPost post={{ text: content.text, createdAt: content.createdAt }} /> 14 + {:else if lexicon.name == 'pub.leaflet.document'} 15 + <Leaflet {content} /> 16 + {/if} 17 + 18 + <p class="absolute right-4 bottom-4"> 19 + created by <a class="accentlink" href="/profile/{author}">{author}</a> 20 + </p> 21 + <EmojiReact 22 + emotes={[ 23 + { id: 1, name: '😤' }, 24 + { id: 2, name: '😢' }, 25 + { id: 3, name: '😂' } 26 + ]} 27 + /> 8 28 </div> 9 29 10 30 <style> 31 + .accentlink { 32 + color: var(--sunrise-purple); 33 + text-decoration: underline; 34 + } 35 + 11 36 .porthole { 12 - border: 0.5rem solid var(--sunrise-orange); 37 + color: var(--sunrise-navy); 38 + background: var(--sunrise-white); 39 + 40 + border: 0.5rem solid var(--sunrise-purple); 13 41 max-width: 60vw; 14 42 padding: 1rem; 15 43 border-radius: 40px; 16 44 corner-shape: superellipse(1.5); 17 - box-shadow: 0 0 1rem 0rem var(--sunrise-purple); 45 + /*box-shadow: 0 0 1rem 0rem var(--sunrise-purple);*/ 46 + position: relative; 47 + } 48 + 49 + .logo { 50 + display: inline-block; 51 + width: 1.125rem; 52 + height: 1.125rem; 18 53 } 19 54 </style>
+1 -1
src/components/Sidebar.svelte
··· 2 2 let { children } = $props(); 3 3 </script> 4 4 5 - <div class="sidebar"> 5 + <div class="sidebar h-min"> 6 6 {@render children()} 7 7 </div> 8 8
+8
src/components/lexicons/BskyPost.svelte
··· 1 + <script> 2 + let { post } = $props(); 3 + </script> 4 + 5 + <div class="bsky-post"> 6 + <p>{post.text}</p> 7 + <p>posted at {post.createdAt}</p> 8 + </div>
+5
src/components/lexicons/Leaflet.svelte
··· 1 + <script lang="ts"> 2 + let { content } = $props(); 3 + </script> 4 + 5 + <p>Ah this is a post am on the profile page for {content.text}</p>
+21 -3
src/routes/+page.svelte
··· 21 21 user={{ name: 'goose.art', email: 'goose.art@example.com', joined: '2022-01-01' }} 22 22 /> 23 23 </Sidebar> 24 - <Porthole lexicon="Bluesky"> 25 - <h2 class="align-center">I am in the hole</h2> 26 - </Porthole> 24 + <div class="col-span-2"> 25 + <Porthole 26 + lexicon={{ 27 + name: 'app.bsky.feed.post', 28 + color: '#3471F6', 29 + logo: 'https://upload.wikimedia.org/wikipedia/commons/7/7a/Bluesky_Logo.svg' 30 + }} 31 + author="goose.art" 32 + content={{ text: 'I am in the hole', createdAt: '2022-01-01T00:00:00Z' }} 33 + /> 34 + 35 + <Porthole 36 + lexicon={{ 37 + name: 'pub.leaflet.document', 38 + color: '#6E9340', 39 + logo: 'https://raw.githubusercontent.com/hyperlink-academy/leaflet/refs/heads/main/public/Logos/Logo%20Color%2064x64.svg' 40 + }} 41 + author="bees" 42 + content={{ text: 'I am in the hole', createdAt: '2022-01-01T00:00:00Z' }} 43 + /> 44 + </div> 27 45 </div> 28 46 </div>
+3 -6
src/routes/layout.css
··· 13 13 14 14 body { 15 15 background-color: light-dark(var(--sunrise-blue), var(--sunrise-navy)); 16 + /*background: linear-gradient(to bottom, var(--sunrise-blue), var(--sunrise-navy));*/ 17 + background-repeat: no-repeat; 18 + background-attachment: fixed; 16 19 color: light-dark(var(--sunrise-navy), var(--sunrise-white)); 17 20 } 18 - 19 - .porthole { 20 - background: var(--sunrise-white); 21 - border: 1px solid var(--sunrise-orange); 22 - color: light-dark(var(--sunrise-blue), var(--sunrise-navy)); 23 - }
+5
src/routes/profile/[username]/+page.svelte
··· 1 + <script lang="ts"> 2 + import { page } from '$app/stores'; 3 + </script> 4 + 5 + <p>Ah i am on the profile page for {$page.params.username}</p>