Ethan

Making products people love πŸ”₯πŸš€

Did super satisfying refactoring of backend code into objects for each source type!

Released v0.1.7 πŸŽ‰

New features: https://twitter.com/booligoosh/status/1302860614994481152

Pushed Version 0.1.6 β€” Important bug fixes for entity detection and feed fetching

Fixed bug which caused all tags to be concatenated</span> </h2> <div class="mt-4 text-zinc-400"> PSA TO DEVS OUT THERE WHO USE CHEERIO: .text() returns the text within ALL of the matching elements, concatenated! I didn't realise this before. You can fix it by changing it to .first().text() </div> <div class="mt-6 -mb-4 -mx-4 border-t rounded-b-lg bg-zinc-900 border-zinc-700"> <div class="my-2 px-4 flex items-center gap-3"> <a href="/sign-up" class="active:scale-95 justify-center rounded-md text-sm font-medium transition-colors focus:outline-none focus:ring-0 focus:ring-offset-0 disabled:opacity-50 disabled:pointer-events-none disabled:cursor-not-allowed bg-transparent hover:bg-zinc-800 hover:text-zinc-100 h-10 py-2 px-4 flex-1 flex items-center gap-2 text-zinc-500 group"><svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="thumb-up" class="w-5 h-5 group-hover:text-primary-600"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 11v8a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-7a1 1 0 0 1 1-1h3a4 4 0 0 0 4-4V6a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1-2 2h-7a3 3 0 0 1-3-3"/></svg> <span>1 Like</span></a> <a href="/tasks/8c2bc41a-d8ce-4ff3-abb6-a5297118f79e" class="active:scale-95 justify-center rounded-md text-sm font-medium transition-colors focus:outline-none focus:ring-0 focus:ring-offset-0 disabled:opacity-50 disabled:pointer-events-none disabled:cursor-not-allowed bg-transparent hover:bg-zinc-800 hover:text-zinc-100 h-10 py-2 px-4 flex-1 flex items-center gap-2 text-zinc-500"><svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="message-circle" class="w-5 h-5"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m3 20l1.3-3.9C1.976 12.663 2.874 8.228 6.4 5.726c3.526-2.501 8.59-2.296 11.845.48c3.255 2.777 3.695 7.266 1.029 10.501C16.608 19.942 11.659 20.922 7.7 19L3 20"/></svg> <span>2 Comments</span></a> </div> <a id="comment-3e7e6ecf-7fda-4330-bcee-39a044bbfd5e"></a> <div class="border-t border-zinc-700 p-4 flex space-x-3 group" x-cloak x-show="comment"> <img class="rounded-full w-9 h-9" src="https://www.gravatar.com/avatar/82dc3398f58928df3d42ffb3b400b2b9?d=retro&r=g&s=200" /> <div class=""> <div class="w-fit mb-2 flex flex-col"> <div class="flex items-center space-x-1"> <a href="/ethan" class="font-medium text-zinc-400 hover:text-primary-600"> Ethan </a> <span class="text-xs px-1 py-0.5 bg-zinc-950/70 rounded-md text-primary-600">Author</span> <span class="text-xs hidden group-hover:inline-block">@ethan</span> </div> <time class="text-xs text-zinc-500" datetime=2020-09-06T10:14:39.252+00:00 x-text="DateTime.fromISO('2020-09-06T10:14:39.252+00:00').toRelative()"> September 6, 2020 at 10:14 AM </time> </div> <div class="text-zinc-300"> <p>πŸ˜‚πŸ˜‚πŸ˜‚</p> </div> <a href="/sign-up" class="flex mt-4 items-center space-x-1 group"><svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="thumb-up" class="w-4 h-4 group-hover:text-primary-600"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 11v8a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-7a1 1 0 0 1 1-1h3a4 4 0 0 0 4-4V6a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1-2 2h-7a3 3 0 0 1-3-3"/></svg> <span class="text-xs">0 Likes</span> </a> </div> </div> <a id="comment-5480c901-4db5-4c30-ab7a-d72358561836"></a> <div class="border-t border-zinc-700 p-4 flex space-x-3 group" x-cloak x-show="comment"> <img class="rounded-full w-9 h-9" src="https://makerlog-cdn.nyc3.digitaloceanspaces.com/avatars/clsf3npl603vo1xsb81bvf0vu.jpg" /> <div class=""> <div class="w-fit mb-2 flex flex-col"> <div class="flex items-center space-x-1"> <a href="/sergio" class="font-medium text-zinc-400 hover:text-primary-600"> Sergio Mattei </a> <span class="text-xs hidden group-hover:inline-block">@sergio</span> </div> <time class="text-xs text-zinc-500" datetime=2020-09-05T22:47:52.860+00:00 x-text="DateTime.fromISO('2020-09-05T22:47:52.860+00:00').toRelative()"> September 5, 2020 at 10:47 PM </time> </div> <div class="text-zinc-300"> <p>I use Cheerios in the morning.</p> </div> <a href="/sign-up" class="flex mt-4 items-center space-x-1 group"><svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="thumb-up" class="w-4 h-4 group-hover:text-primary-600"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 11v8a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-7a1 1 0 0 1 1-1h3a4 4 0 0 0 4-4V6a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1-2 2h-7a3 3 0 0 1-3-3"/></svg> <span class="text-xs">0 Likes</span> </a> </div> </div> </div> </div> <div id="task-4a3f01b1-8ab3-4dbc-b16a-ac01c8a458a4" x-data="{ comment: false }" hx-disinherit="hx-select hx-get hx-target" class="w-full bg-zinc-900 border border-t-4 rounded-lg border-zinc-700 border-t-primary-600 py-4 px-4 mb-6 shadow-md max-w-[24.6rem] sm:max-w-none"> <div class="flex justify-between group"> <div class="flex flex-1 space-x-3"> <div class="relative"> <img class="w-9 h-9 rounded-full" src="https://www.gravatar.com/avatar/82dc3398f58928df3d42ffb3b400b2b9?d=retro&r=g&s=200" /> <a href="/1feed" class="absolute bottom-0 right-0"> <img src="https://makerlog-cdn.nyc3.digitaloceanspaces.com/product-icons/clsf40pld01nk32sb1yh337ig.png" class="w-4 h-4 rounded-full" /> </a> </div> <div class="w-fit"> <div class="flex items-center space-x-1"> <a href="/ethan" class="font-medium text-zinc-400 hover:text-primary-600"> Ethan </a> <span class="text-xs hidden group-hover:inline-block">@ethan</span> </div> <div class="flex space-x-1 text-xs text-zinc-400"> <a href="/tasks/4a3f01b1-8ab3-4dbc-b16a-ac01c8a458a4" class="text-zinc-500 hover:underline"> <time datetime=2020-09-05T22:20:08.292+00:00 x-text="DateTime.fromISO('2020-09-05T22:20:08.292+00:00').toRelative()"> September 5, 2020 at 10:20 PM </time> </a> <div> for <a href="/1feed" class="text-zinc-500 hover:underline">1Feed</a></div> </div> </div> </div> <div class="relative" x-data="{ open: false }" x-on:click.away="open = false"> <button type="button" class="text-zinc-500 hover:text-zinc-400" x-on:click="open = !open"> <svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="dots-vertical" class="w-5 h-5"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 12a1 1 0 1 0 2 0a1 1 0 1 0-2 0m0 7a1 1 0 1 0 2 0a1 1 0 1 0-2 0m0-14a1 1 0 1 0 2 0a1 1 0 1 0-2 0"/></svg> </button> <div x-cloak x-show="open" x-transition:enter="ease-out duration-200" x-transition:enter-start="-translate-y-2" x-transition:enter-end="translate-y-0" class="absolute z-50 w-auto mt-12 top-0 right-0" > <div class="p-2 bg-zinc-900 border rounded-md shadow-md drop-shadow-md border-zinc-700 text-zinc-500 -mt-5"> <ul class="w-80 text-sm space-y-2"> <li class="text-zinc-400"> <a href="#" class="flex items-start gap-2 py-1.5 px-2 rounded-md bg-transparent hover:bg-black hover:text-primary-600"><svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="message-report" class="w-6 h-6 flex-shrink-0"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 21V8a3 3 0 0 1 3-3h10a3 3 0 0 1 3 3v6a3 3 0 0 1-3 3H8l-4 4m8-13v3m0 3v.01"/></svg> <span class="flex flex-col"> <span class="mb-0.5">Report Task</span> <span class="text-xs text-zinc-500">We won't let Ethan know who reported this.</span> </span> </a> </li> </ul> </div> </div> </div> </div> <h2 class="my-4 text-base text-zinc-100 flex space-x-1.5 items-center"> <span class="text-primary-600"><svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="circle-check-filled" class="w-6 h-6"><g fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M0 0h24v24H0z"/><path fill="currentColor" d="M17 3.34a10 10 0 1 1-14.995 8.984L2 12l.005-.324A10 10 0 0 1 17 3.34zm-1.293 5.953a1 1 0 0 0-1.32-.083l-.094.083L11 12.585l-1.293-1.292l-.094-.083a1 1 0 0 0-1.403 1.403l.083.094l2 2l.094.083a1 1 0 0 0 1.226 0l.094-.083l4-4l.083-.094a1 1 0 0 0-.083-1.32z"/></g></svg> </span> <span>Cache avatars on Vercel for 1 day before serving stale & revalidating (changed from 1 month)</span> </h2> <div class="mt-4 text-zinc-400"> It won't put too much suspicious load on the sites it's fetching from, and it won't affect performance since it's revalidated in the background. </div> <div class="mt-6 -mb-4 -mx-4 border-t rounded-b-lg bg-zinc-900 border-zinc-700"> <div class="my-2 px-4 flex items-center gap-3"> <a href="/sign-up" class="active:scale-95 justify-center rounded-md text-sm font-medium transition-colors focus:outline-none focus:ring-0 focus:ring-offset-0 disabled:opacity-50 disabled:pointer-events-none disabled:cursor-not-allowed bg-transparent hover:bg-zinc-800 hover:text-zinc-100 h-10 py-2 px-4 flex-1 flex items-center gap-2 text-zinc-500 group"><svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="thumb-up" class="w-5 h-5 group-hover:text-primary-600"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 11v8a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-7a1 1 0 0 1 1-1h3a4 4 0 0 0 4-4V6a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1-2 2h-7a3 3 0 0 1-3-3"/></svg> <span>1 Like</span></a> <a href="/tasks/4a3f01b1-8ab3-4dbc-b16a-ac01c8a458a4" class="active:scale-95 justify-center rounded-md text-sm font-medium transition-colors focus:outline-none focus:ring-0 focus:ring-offset-0 disabled:opacity-50 disabled:pointer-events-none disabled:cursor-not-allowed bg-transparent hover:bg-zinc-800 hover:text-zinc-100 h-10 py-2 px-4 flex-1 flex items-center gap-2 text-zinc-500"><svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="message-circle" class="w-5 h-5"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m3 20l1.3-3.9C1.976 12.663 2.874 8.228 6.4 5.726c3.526-2.501 8.59-2.296 11.845.48c3.255 2.777 3.695 7.266 1.029 10.501C16.608 19.942 11.659 20.922 7.7 19L3 20"/></svg> <span>3 Comments</span></a> </div> <a id="comment-109409b5-cb47-41b5-ab95-5e6a9ba0f6d2"></a> <div class="border-t border-zinc-700 p-4 flex space-x-3 group" x-cloak x-show="comment"> <img class="rounded-full w-9 h-9" src="https://www.gravatar.com/avatar/82dc3398f58928df3d42ffb3b400b2b9?d=retro&r=g&s=200" /> <div class=""> <div class="w-fit mb-2 flex flex-col"> <div class="flex items-center space-x-1"> <a href="/ethan" class="font-medium text-zinc-400 hover:text-primary-600"> Ethan </a> <span class="text-xs px-1 py-0.5 bg-zinc-950/70 rounded-md text-primary-600">Author</span> <span class="text-xs hidden group-hover:inline-block">@ethan</span> </div> <time class="text-xs text-zinc-500" datetime=2020-09-06T10:16:37.982+00:00 x-text="DateTime.fromISO('2020-09-06T10:16:37.982+00:00').toRelative()"> September 6, 2020 at 10:16 AM </time> </div> <div class="text-zinc-300"> <p>Also, it's got much faster response times than Netlify and they give you some caching control. Using Netlify + Cloudflare comes close, but still, it's nice having everything in one platform. And just running <code>vc dev</code> to get my backend and frontend started all at once makes things so easy!</p> </div> <a href="/sign-up" class="flex mt-4 items-center space-x-1 group"><svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="thumb-up" class="w-4 h-4 group-hover:text-primary-600"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 11v8a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-7a1 1 0 0 1 1-1h3a4 4 0 0 0 4-4V6a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1-2 2h-7a3 3 0 0 1-3-3"/></svg> <span class="text-xs">0 Likes</span> </a> </div> </div> <a id="comment-2702e1bf-4ca9-4385-963c-377995dce5bb"></a> <div class="border-t border-zinc-700 p-4 flex space-x-3 group" x-cloak x-show="comment"> <img class="rounded-full w-9 h-9" src="https://www.gravatar.com/avatar/82dc3398f58928df3d42ffb3b400b2b9?d=retro&r=g&s=200" /> <div class=""> <div class="w-fit mb-2 flex flex-col"> <div class="flex items-center space-x-1"> <a href="/ethan" class="font-medium text-zinc-400 hover:text-primary-600"> Ethan </a> <span class="text-xs px-1 py-0.5 bg-zinc-950/70 rounded-md text-primary-600">Author</span> <span class="text-xs hidden group-hover:inline-block">@ethan</span> </div> <time class="text-xs text-zinc-500" datetime=2020-09-06T10:15:15.487+00:00 x-text="DateTime.fromISO('2020-09-06T10:15:15.487+00:00').toRelative()"> September 6, 2020 at 10:15 AM </time> </div> <div class="text-zinc-300"> <p>Yeah! I love how easy it makes deploying cloud functions 😍</p> </div> <a href="/sign-up" class="flex mt-4 items-center space-x-1 group"><svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="thumb-up" class="w-4 h-4 group-hover:text-primary-600"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 11v8a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-7a1 1 0 0 1 1-1h3a4 4 0 0 0 4-4V6a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1-2 2h-7a3 3 0 0 1-3-3"/></svg> <span class="text-xs">0 Likes</span> </a> </div> </div> <div class="px-4 pt-1 pb-4 text-sm" x-cloak x-show="comment"> <a href="/tasks/4a3f01b1-8ab3-4dbc-b16a-ac01c8a458a4" class="text-zinc-500 hover:underline" > View 1 more replies. </a> </div> </div> </div> <div id="task-50ef7091-4466-4e8a-8380-a509504db7f9" x-data="{ comment: false }" hx-disinherit="hx-select hx-get hx-target" class="w-full bg-zinc-900 border border-t-4 rounded-lg border-zinc-700 border-t-primary-600 py-4 px-4 mb-6 shadow-md max-w-[24.6rem] sm:max-w-none"> <div class="flex justify-between group"> <div class="flex flex-1 space-x-3"> <div class="relative"> <img class="w-9 h-9 rounded-full" src="https://www.gravatar.com/avatar/82dc3398f58928df3d42ffb3b400b2b9?d=retro&r=g&s=200" /> <a href="/1feed" class="absolute bottom-0 right-0"> <img src="https://makerlog-cdn.nyc3.digitaloceanspaces.com/product-icons/clsf40pld01nk32sb1yh337ig.png" class="w-4 h-4 rounded-full" /> </a> </div> <div class="w-fit"> <div class="flex items-center space-x-1"> <a href="/ethan" class="font-medium text-zinc-400 hover:text-primary-600"> Ethan </a> <span class="text-xs hidden group-hover:inline-block">@ethan</span> </div> <div class="flex space-x-1 text-xs text-zinc-400"> <a href="/tasks/50ef7091-4466-4e8a-8380-a509504db7f9" class="text-zinc-500 hover:underline"> <time datetime=2020-09-05T22:19:18.369+00:00 x-text="DateTime.fromISO('2020-09-05T22:19:18.369+00:00').toRelative()"> September 5, 2020 at 10:19 PM </time> </a> <div> for <a href="/1feed" class="text-zinc-500 hover:underline">1Feed</a></div> </div> </div> </div> <div class="relative" x-data="{ open: false }" x-on:click.away="open = false"> <button type="button" class="text-zinc-500 hover:text-zinc-400" x-on:click="open = !open"> <svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="dots-vertical" class="w-5 h-5"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 12a1 1 0 1 0 2 0a1 1 0 1 0-2 0m0 7a1 1 0 1 0 2 0a1 1 0 1 0-2 0m0-14a1 1 0 1 0 2 0a1 1 0 1 0-2 0"/></svg> </button> <div x-cloak x-show="open" x-transition:enter="ease-out duration-200" x-transition:enter-start="-translate-y-2" x-transition:enter-end="translate-y-0" class="absolute z-50 w-auto mt-12 top-0 right-0" > <div class="p-2 bg-zinc-900 border rounded-md shadow-md drop-shadow-md border-zinc-700 text-zinc-500 -mt-5"> <ul class="w-80 text-sm space-y-2"> <li class="text-zinc-400"> <a href="#" class="flex items-start gap-2 py-1.5 px-2 rounded-md bg-transparent hover:bg-black hover:text-primary-600"><svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="message-report" class="w-6 h-6 flex-shrink-0"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 21V8a3 3 0 0 1 3-3h10a3 3 0 0 1 3 3v6a3 3 0 0 1-3 3H8l-4 4m8-13v3m0 3v.01"/></svg> <span class="flex flex-col"> <span class="mb-0.5">Report Task</span> <span class="text-xs text-zinc-500">We won't let Ethan know who reported this.</span> </span> </a> </li> </ul> </div> </div> </div> </div> <h2 class="my-4 text-base text-zinc-100 flex space-x-1.5 items-center"> <span class="text-primary-600"><svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="circle-check-filled" class="w-6 h-6"><g fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M0 0h24v24H0z"/><path fill="currentColor" d="M17 3.34a10 10 0 1 1-14.995 8.984L2 12l.005-.324A10 10 0 0 1 17 3.34zm-1.293 5.953a1 1 0 0 0-1.32-.083l-.094.083L11 12.585l-1.293-1.292l-.094-.083a1 1 0 0 0-1.403 1.403l.083.094l2 2l.094.083a1 1 0 0 0 1.226 0l.094-.083l4-4l.083-.094a1 1 0 0 0-.083-1.32z"/></g></svg> </span> <span>Fixed issue where some RSS feeds would return a 406 error</span> </h2> <div class="mt-4 text-zinc-400"> Before I was requesting them with the Accept header "application/rss+xml", however some servers returned a 406 which means they couldn't return anything that matches the content type. This is probably because there are a wide variety of different content types used for RSS. So I updated the header to "application/rss+xml, *; q=0.1" which means it prefers RSS but will fall back to any content type (eg. plain XML, plain text) </div> <div class="mt-6 -mb-4 -mx-4 border-t rounded-b-lg bg-zinc-900 border-zinc-700"> <div class="my-2 px-4 flex items-center gap-3"> <a href="/sign-up" class="active:scale-95 justify-center rounded-md text-sm font-medium transition-colors focus:outline-none focus:ring-0 focus:ring-offset-0 disabled:opacity-50 disabled:pointer-events-none disabled:cursor-not-allowed bg-transparent hover:bg-zinc-800 hover:text-zinc-100 h-10 py-2 px-4 flex-1 flex items-center gap-2 text-zinc-500 group"><svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="thumb-up" class="w-5 h-5 group-hover:text-primary-600"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 11v8a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-7a1 1 0 0 1 1-1h3a4 4 0 0 0 4-4V6a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1-2 2h-7a3 3 0 0 1-3-3"/></svg> <span>0 Likes</span></a> <a href="/tasks/50ef7091-4466-4e8a-8380-a509504db7f9" class="active:scale-95 justify-center rounded-md text-sm font-medium transition-colors focus:outline-none focus:ring-0 focus:ring-offset-0 disabled:opacity-50 disabled:pointer-events-none disabled:cursor-not-allowed bg-transparent hover:bg-zinc-800 hover:text-zinc-100 h-10 py-2 px-4 flex-1 flex items-center gap-2 text-zinc-500"><svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="message-circle" class="w-5 h-5"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m3 20l1.3-3.9C1.976 12.663 2.874 8.228 6.4 5.726c3.526-2.501 8.59-2.296 11.845.48c3.255 2.777 3.695 7.266 1.029 10.501C16.608 19.942 11.659 20.922 7.7 19L3 20"/></svg> <span>0 Comments</span></a> </div> </div> </div> </div> <div class="w-full bg-zinc-900 border rounded-lg border-zinc-700 py-4 px-4 mb-6 shadow-md border-t-zinc-700 border-t-1"> <ul class="flex items-center justify-between text-sm space-x-3"> <li> <a href="/ethan?page=5" class="bg-zinc-900 text-zinc-400 px-3 py-1 rounded-lg hover:text-primary-700" > β—„ Previous </a> </li> <li class="hidden sm:block"> <a href="/ethan?page=1" class="bg-zinc-900 text-zinc-400 px-3 py-1 rounded-lg hover:text-primary-700" > 1 </a> </li> <li class="hidden sm:block"> <a href="/ethan?page=2" class="bg-zinc-900 text-zinc-400 px-3 py-1 rounded-lg hover:text-primary-700" > 2 </a> </li> <li class="hidden sm:block"> <a href="/ethan?page=3" class="bg-zinc-900 text-zinc-400 px-3 py-1 rounded-lg hover:text-primary-700" > 3 </a> </li> <li class="hidden sm:block"> <a href="/ethan?page=4" class="bg-zinc-900 text-zinc-400 px-3 py-1 rounded-lg hover:text-primary-700" > 4 </a> </li> <li class="hidden sm:block"> <a href="/ethan?page=5" class="bg-zinc-900 text-zinc-400 px-3 py-1 rounded-lg hover:text-primary-700" > 5 </a> </li> <li class="hidden sm:block"> <a href="/ethan?page=6" class="text-zinc-400 px-3 py-1 rounded-lg bg-zinc-700" > 6 </a> </li> <li class="hidden sm:block"> <a href="/ethan?page=7" class="bg-zinc-900 text-zinc-400 px-3 py-1 rounded-lg hover:text-primary-700" > 7 </a> </li> <li class="hidden sm:block"> <a href="/ethan?page=8" class="bg-zinc-900 text-zinc-400 px-3 py-1 rounded-lg hover:text-primary-700" > 8 </a> </li> <li class="hidden sm:block"> <a href="/ethan?page=9" class="bg-zinc-900 text-zinc-400 px-3 py-1 rounded-lg hover:text-primary-700" > 9 </a> </li> <li class="px-3 py-1 cursor-default select-none hidden sm:block">...</li> <li class="hidden sm:block"> <a href="/ethan?page=120" class="bg-zinc-900 text-zinc-400 px-3 py-1 rounded-lg hover:text-primary-700" > 120 </a> </li> <li> <a href="/ethan?page=7" class="bg-zinc-900 text-zinc-400 px-3 py-1 rounded-lg hover:text-primary-700" > Next β–Ί </a> </li> </ul> </div> </section> <aside class="w-[375px] hidden sm:block"> <div class="w-full bg-zinc-900 border border-t-4 rounded-lg border-zinc-700 border-t-primary-600 py-4 px-4 mb-6 shadow-md"> <div class="pb-4"> <p class="font-medium text-zinc-100">Products Made</p> </div> <ul class="divide-y divide-zinc-700"> <li class="group"> <a href="/1feed" class="py-3 flex items-center justify-between"> <div class="flex space-x-2 items-center"> <img src="https://makerlog-cdn.nyc3.digitaloceanspaces.com/product-icons/clsf40pld01nk32sb1yh337ig.png" class="h-auto w-8 rounded-full bg-primary-700" /> <span>1Feed</span> </div> <span class="text-xl mr-2 group-hover:text-primary-600"> β†’ </span> </a> <p class="text-sm pb-3 text-left group-hover:cursor-pointer">1Feed is your quiet place on the internet, where you can focus on the people...</p> </li> <li class="group"> <a href="/togetherfit" class="py-3 flex items-center justify-between"> <div class="flex space-x-2 items-center"> <img src="https://makerlog-cdn.nyc3.digitaloceanspaces.com/product-icons/clsf3yyu8015f32sb250th626.png" class="h-auto w-8 rounded-full bg-primary-700" /> <span>Together.fit</span> </div> <span class="text-xl mr-2 group-hover:text-primary-600"> β†’ </span> </a> <p class="text-sm pb-3 text-left group-hover:cursor-pointer">Use the power of friends to crush your fitness goals! πŸ’ͺ</p> </li> <li class="group"> <a href="/startup-bot" class="py-3 flex items-center justify-between"> <div class="flex space-x-2 items-center"> <div class="h-8 w-8 rounded-full bg-primary-700 flex items-center justify-center"> <span class="text-zinc-100 text-xs">SB</span> </div> <span>Startup Bot</span> </div> <span class="text-xl mr-2 group-hover:text-primary-600"> β†’ </span> </a> <p class="text-sm pb-3 text-left group-hover:cursor-pointer">A Telegram bot that keeps you updated on all areas of your business β€” new customers...</p> </li> <li class="group"> <a href="/gray" class="py-3 flex items-center justify-between"> <div class="flex space-x-2 items-center"> <img src="https://makerlog-cdn.nyc3.digitaloceanspaces.com/product-icons/clsf3yc1o00z032sbfkw16d38.png" class="h-auto w-8 rounded-full bg-primary-700" /> <span>Gray</span> </div> <span class="text-xl mr-2 group-hover:text-primary-600"> β†’ </span> </a> <p class="text-sm pb-3 text-left group-hover:cursor-pointer">A super simple menubar application to turn grayscale on/off</p> </li> <li class="group"> <a href="/carbon-tab" class="py-3 flex items-center justify-between"> <div class="flex space-x-2 items-center"> <img src="https://makerlog-cdn.nyc3.digitaloceanspaces.com/product-icons/clsf3xzrh00vj32sbdcz3cjr8.png" class="h-auto w-8 rounded-full bg-primary-700" /> <span>Carbon Tab</span> </div> <span class="text-xl mr-2 group-hover:text-primary-600"> β†’ </span> </a> <p class="text-sm pb-3 text-left group-hover:cursor-pointer">Make a statement. Keep the climate crisis on your mind.</p> </li> <li class="group"> <a href="/rubiks-robot" class="py-3 flex items-center justify-between"> <div class="flex space-x-2 items-center"> <div class="h-8 w-8 rounded-full bg-primary-700 flex items-center justify-center"> <span class="text-zinc-100 text-xs">RS</span> </div> <span>Rubik's Robot</span> </div> <span class="text-xl mr-2 group-hover:text-primary-600"> β†’ </span> </a> <p class="text-sm pb-3 text-left group-hover:cursor-pointer">[HOBBY PROJECT] A robot that can solve a Rubik's Cube!</p> </li> <li class="group"> <a href="/makerlog-menubar" class="py-3 flex items-center justify-between"> <div class="flex space-x-2 items-center"> <img src="https://makerlog-cdn.nyc3.digitaloceanspaces.com/product-icons/clsf3vkl7006x32sb428d1cmq.png" class="h-auto w-8 rounded-full bg-primary-700" /> <span>Makerlog Menubar</span> </div> <span class="text-xl mr-2 group-hover:text-primary-600"> β†’ </span> </a> <p class="text-sm pb-3 text-left group-hover:cursor-pointer">⚑️ A super fast menubar app for Makerlog πŸ”₯🚒</p> </li> <li class="group"> <a href="/makerrocks" class="py-3 flex items-center justify-between"> <div class="flex space-x-2 items-center"> <img src="https://makerlog-cdn.nyc3.digitaloceanspaces.com/product-icons/clsf3v7ck003h32sbh4us9e40.gif" class="h-auto w-8 rounded-full bg-primary-700" /> <span>maker.rocks</span> </div> <span class="text-xl mr-2 group-hover:text-primary-600"> β†’ </span> </a> <p class="text-sm pb-3 text-left group-hover:cursor-pointer">One page that sums you up as a maker</p> </li> <li class="group"> <a href="/code-the-web" class="py-3 flex items-center justify-between"> <div class="flex space-x-2 items-center"> <img src="https://makerlog-cdn.nyc3.digitaloceanspaces.com/product-icons/clsf3ut04000432sbe0gp119k.png" class="h-auto w-8 rounded-full bg-primary-700" /> <span>Code The Web</span> </div> <span class="text-xl mr-2 group-hover:text-primary-600"> β†’ </span> </a> <p class="text-sm pb-3 text-left group-hover:cursor-pointer">Web development explained for normal people</p> </li> <li class="group"> <a href="/kanbanmail" class="py-3 flex items-center justify-between"> <div class="flex space-x-2 items-center"> <img src="https://makerlog-cdn.nyc3.digitaloceanspaces.com/product-icons/clsf3us19000032sbbezzbpjv.png" class="h-auto w-8 rounded-full bg-primary-700" /> <span>KanbanMail</span> </div> <span class="text-xl mr-2 group-hover:text-primary-600"> β†’ </span> </a> <p class="text-sm pb-3 text-left group-hover:cursor-pointer">A Kanban board for your emails! βœ¨πŸ’Œ</p> </li> </ul> </div> <div class="w-full bg-zinc-900 border border-t-4 rounded-lg border-zinc-700 border-t-primary-600 py-4 px-4 mb-6 shadow-md"> <div class="pb-4"> <p class="font-medium text-zinc-100">Leaderboard</p> </div> <div class="bg-black rounded-md px-4 py-3 flex justify-between"> <span class="block text-sm cursor-not-allowed hover:text-primary-600">This Week</span> <span class="block text-sm cursor-pointer text-primary-600">This Month</span> <span class="block text-sm cursor-not-allowed hover:text-primary-600">This Year</span> </div> <div class="flex justify-around mt-4 mx-4"> <a href="/darren" class="mt-6 flex flex-col items-center"> <div class="relative"> <img class="rounded-full w-16 h-auto" src="https://makerlog-cdn.nyc3.digitaloceanspaces.com/avatars/clsf3mb6x03ky1xsbc7zl725w.png" /> <span class="absolute -bottom-1.5 left-4 rounded-full bg-zinc-500 border-2 border-zinc-800 text-white text-xs font-semibold py-0.5 px-2">2</span> </div> <div class="text-center mt-2"> <p class="text-xs font-medium text-zinc-400">Darren Travel</p> <p class="text-sm">48</p> </div> </a> <a href="/gomoviex" class="mb-6 flex flex-col items-center"> <div class="relative"> <img class="rounded-full w-16 h-auto" src="https://www.gravatar.com/avatar/54a705866b0d6314340f7b530e23b6a7?d=retro&r=g&s=200" /> <span class="absolute -bottom-1.5 left-4 rounded-full bg-primary-600 border-2 border-zinc-800 text-white text-xs font-semibold py-0.5 px-2">1</span> </div> <div class="text-center mt-2"> <p class="text-xs font-medium text-zinc-400">nick vorhes</p> <p class="text-sm">95</p> </div> </a> <a href="/imfraser" class="mt-6 flex flex-col items-center"> <div class="relative"> <img class="rounded-full w-16 h-auto" src="https://www.gravatar.com/avatar/ffa550678d781bd619ef56284bc0a5b8?d=retro&r=g&s=200" /> <span class="absolute -bottom-1.5 left-4 rounded-full bg-zinc-500 border-2 border-zinc-800 text-white text-xs font-semibold py-0.5 px-2">3</span> </div> <div class="text-center mt-2"> <p class="text-xs font-medium text-zinc-400">Fraser Millban...</p> <p class="text-sm">45</p> </div> </a> </div> <ul class="mt-6 mx-4 divide-y divide-zinc-700"> <li> <a href="/ryanhefner" class="flex justify-between items-center py-4"> <div class="w-8 font-semibold text-zinc-300">4</div> <div class="flex-1 flex items-center space-x-4"> <img class="rounded-full w-8 h-8" src="https://www.gravatar.com/avatar/12556c70a3b7619d0afdcb0d3afae224?d=retro&r=g&s=200" /> <span class="text-xs font-medium text-zinc-400">Ryan Hefner</span> </div> <div class="w-10 text-zinc-500 text-sm">31</div> </a> </li> <li> <a href="/sombrecopie" class="flex justify-between items-center py-4"> <div class="w-8 font-semibold text-zinc-300">5</div> <div class="flex-1 flex items-center space-x-4"> <img class="rounded-full w-8 h-8" src="https://www.gravatar.com/avatar/90db289b3155731e74038ccf2aa0bce3?d=retro&r=g&s=200" /> <span class="text-xs font-medium text-zinc-400">Jonathan DUC</span> </div> <div class="w-10 text-zinc-500 text-sm">23</div> </a> </li> <li> <a href="/devianisabrina82" class="flex justify-between items-center py-4"> <div class="w-8 font-semibold text-zinc-300">6</div> <div class="flex-1 flex items-center space-x-4"> <img class="rounded-full w-8 h-8" src="https://makerlog-cdn.nyc3.digitaloceanspaces.com/avatars/cm3gbjftsrf890eyfel221j9p.jpg" /> <span class="text-xs font-medium text-zinc-400">Devianie Sabers</span> </div> <div class="w-10 text-zinc-500 text-sm">22</div> </a> </li> <li> <a href="/hemanth" class="flex justify-between items-center py-4"> <div class="w-8 font-semibold text-zinc-300">7</div> <div class="flex-1 flex items-center space-x-4"> <img class="rounded-full w-8 h-8" src="https://www.gravatar.com/avatar/0197f10ba1eb7d993101e713cf075db2?d=retro&r=g&s=200" /> <span class="text-xs font-medium text-zinc-400">Hemanth M</span> </div> <div class="w-10 text-zinc-500 text-sm">20</div> </a> </li> <li> <a href="/polleckmichael" class="flex justify-between items-center py-4"> <div class="w-8 font-semibold text-zinc-300">8</div> <div class="flex-1 flex items-center space-x-4"> <img class="rounded-full w-8 h-8" src="https://www.gravatar.com/avatar/8b616c4a2091da04db1f6f4b8bf9a6bb?d=retro&r=g&s=200" /> <span class="text-xs font-medium text-zinc-400">polleck michael</span> </div> <div class="w-10 text-zinc-500 text-sm">20</div> </a> </li> <li> <a href="/supermemos" class="flex justify-between items-center py-4"> <div class="w-8 font-semibold text-zinc-300">9</div> <div class="flex-1 flex items-center space-x-4"> <img class="rounded-full w-8 h-8" src="https://www.gravatar.com/avatar/d728826ae061c873068da157a98e384c?d=retro&r=g&s=200" /> <span class="text-xs font-medium text-zinc-400">Super Memos AI</span> </div> <div class="w-10 text-zinc-500 text-sm">20</div> </a> </li> <li> <a href="/cornbreadcbdgummies" class="flex justify-between items-center py-4"> <div class="w-8 font-semibold text-zinc-300">10</div> <div class="flex-1 flex items-center space-x-4"> <img class="rounded-full w-8 h-8" src="https://www.gravatar.com/avatar/f00a55b63e1a991864b5daf147ae085d?d=retro&r=g&s=200" /> <span class="text-xs font-medium text-zinc-400">Buddy Gerlach</span> </div> <div class="w-10 text-zinc-500 text-sm">20</div> </a> </li> <li class="text-xs pt-4 text-center"> Leaderboards updated every hour. </li> </ul> </div> </div> </aside> </main> <footer class="p-4 w-full"> <p class="text-xs text-center text-zinc-500">Copyright Β© 2024 <a href="https://aniftyco.com" class="font-semibold hover:underline" title="NiftyCo, LLC">NiftyCo, LLC</a>. All rights reserved.</p> </footer> <ul class="sm:hidden flex justify-between sticky left-0 bottom-0 bg-zinc-900 border-t border-t-zinc-700 w-full px-4 py-2"> <li> <a href="/" title="Feed" class="flex flex-col items-center justify-center" ><svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="activity-heartbeat" class="w-8 h-8"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12h4.5L9 6l4 12l2-9l1.5 3H21"/></svg> <span class="block">Feed</span> </a> </li> <li> <a href="/discussions" title="Discussions" class="flex flex-col items-center justify-center" ><svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="message" class="w-8 h-8"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 9h8m-8 4h6m4-9a3 3 0 0 1 3 3v8a3 3 0 0 1-3 3h-5l-5 3v-3H6a3 3 0 0 1-3-3V7a3 3 0 0 1 3-3h12z"/></svg> <span class="block">Discussions</span> </a> </li> <li> <a href="/posts" title="Posts" class="flex flex-col items-center justify-center" ><svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="news" class="w-8 h-8"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 6h3a1 1 0 0 1 1 1v11a2 2 0 0 1-4 0V5a1 1 0 0 0-1-1H5a1 1 0 0 0-1 1v12a3 3 0 0 0 3 3h11M8 8h4m-4 4h4m-4 4h4"/></svg> <span class="block">Posts</span> </a> </li> <li> <a href="/milestones" title="Milestones" class="flex flex-col items-center justify-center" ><svg width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" name="award" class="w-8 h-8"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M6 9a6 6 0 1 0 12 0A6 6 0 1 0 6 9"/><path d="m12 15l3.4 5.89l1.598-3.233l3.598.232l-3.4-5.889M6.802 12l-3.4 5.89L7 17.657l1.598 3.232l3.4-5.889"/></g></svg> <span class="block">Milestones</span> </a> </li> </ul> </body> </html>