besaid.zone / discostubot
A discord bot that displays your music listens based on your teal.fm records
Pull this image
docker pull atcr.io/besaid.zone/discostubot:1.0
Overview
<!doctype html>
<html lang="en" class="dark:bg-gray-900">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta name="description" content="Social coding, but for real this time!"/>
<meta name="htmx-config" content='{"includeIndicatorStyles": false}'>
<script defer src="/static/htmx.min.js"></script>
<script defer src="/static/htmx-ext-ws.min.js"></script>
<script defer src="/static/actor-typeahead.js" type="module"></script>
<link rel="preconnect" href="https://avatar.tangled.sh" />
<link rel="preconnect" href="https://camo.tangled.sh" />
<link rel="manifest" href="/pwa-manifest.json" />
<link rel="preload" href="/static/fonts/InterVariable.woff2" as="font" type="font/woff2" crossorigin />
<link rel="stylesheet" href="/static/tw.css?dac20eb5" type="text/css" />
<title>404 · tangled · tangled</title>
</head>
<body class="min-h-screen flex flex-col gap-4 bg-slate-100 dark:bg-gray-900 dark:text-white transition-colors duration-200">
<header class="w-full col-span-full md:col-span-1 md:col-start-2" style="z-index: 20;">
<nav class="mx-auto space-x-4 px-6 py-2 dark:text-white drop-shadow-sm bg-white dark:bg-gray-800">
<div class="flex justify-between p-0 items-center">
<div id="left-items">
<a href="/" hx-boost="true" class="text-2xl no-underline hover:no-underline flex items-center gap-2">
<sodipodi:namedview
id=“namedview1”
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity=“0.25”
inkscape:showpageshadow=“2”
inkscape:pageopacity=“0.0”
inkscape:pagecheckerboard=“true”
inkscape:deskcolor="#d5d5d5"
inkscape:zoom=“45.254834”
inkscape:cx=“3.1377863”
inkscape:cy=“8.9382717”
inkscape:window-width=“3840”
inkscape:window-height=“2160”
inkscape:window-x=“0”
inkscape:window-y=“0”
inkscape:window-maximized=“0”
inkscape:current-layer=“g1”
borderlayer=“true”>
<inkscape:page
x=“0”
y=“0”
width=“25”
height=“25”
id=“page2”
margin=“0”
bleed=“0” />
</sodipodi:namedview>
rdf:RDF
<cc:Work
rdf:about="">
<cc:license
rdf:resource=“http://creativecommons.org/licenses/by/4.0/" />
</cc:Work>
<cc:License
rdf:about=“http://creativecommons.org/licenses/by/4.0/">
<cc:permits
rdf:resource=“http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource=“http://creativecommons.org/ns#Distribution" />
<cc:requires
rdf:resource=“http://creativecommons.org/ns#Notice" />
<cc:requires
rdf:resource=“http://creativecommons.org/ns#Attribution" />
<cc:permits
rdf:resource=“http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
<span class="font-bold text-xl not-italic hidden md:inline">tangled</span>
<span class="font-normal not-italic text-xs rounded bg-gray-100 dark:bg-gray-700 px-1 hidden md:inline">
alpha
</span>
</a>
</div>
<div id="right-items" class="flex items-center gap-4">
<a href="/login">login</a>
<span class="text-gray-500 dark:text-gray-400">or</span>
<a href="/signup" class="btn-create py-0 hover:no-underline hover:text-white flex items-center gap-2">
join now <svg
xmlns=“http://www.w3.org/2000/svg"
width=“24”
height=“24”
viewBox=“0 0 24 24”
fill=“none”
stroke=“currentColor”
stroke-width=“2”
stroke-linecap=“round”
stroke-linejoin=“round”
class=“size-4”>
</a>
</div>
</div>
</nav>
</header>
<div class="flex-grow">
<div class="max-w-screen-lg mx-auto flex flex-col gap-4">
<main>
</div>
</div>
<div class="space-y-4">
<h1 class="text-2xl sm:text-3xl font-bold text-gray-900 dark:text-white">
404 — page not found
</h1>
<p class="text-gray-600 dark:text-gray-300">
The page you're looking for doesn't exist. It may have been moved, deleted, or you have the wrong URL.
</p>
<div class="flex flex-col sm:flex-row gap-3 justify-center items-center mt-6">
<a href="javascript:history.back()" class="btn no-underline hover:no-underline gap-2">
<svg
xmlns=“http://www.w3.org/2000/svg"
width=“24”
height=“24”
viewBox=“0 0 24 24”
fill=“none”
stroke=“currentColor”
stroke-width=“2”
stroke-linecap=“round”
stroke-linejoin=“round”
class=“w-4 h-4”>
go back
</a>
</div>
</div>
</div>
</main>
<main>
</main>
</div>
</div>
<footer class="mt-12">
<div class="hidden lg:grid lg:grid-cols-[1fr_minmax(0,1024px)_1fr] lg:gap-8 lg:items-start">
<div>
<a href="/" hx-boost="true" class="flex gap-2 font-semibold italic no-underline hover:no-underline">
<sodipodi:namedview
id=“namedview1”
pagecolor="#ffffff”
bordercolor="#000000”
borderopacity=“0.25”
inkscape:showpageshadow=“2”
inkscape:pageopacity=“0.0”
inkscape:pagecheckerboard=“true”
inkscape:deskcolor="#d5d5d5”
inkscape:zoom=“45.254834”
inkscape:cx=“3.1377863”
inkscape:cy=“8.9382717”
inkscape:window-width=“3840”
inkscape:window-height=“2160”
inkscape:window-x=“0”
inkscape:window-y=“0”
inkscape:window-maximized=“0”
inkscape:current-layer=“g1”
borderlayer=“true”>
<inkscape:page
x=“0”
y=“0”
width=“25”
height=“25”
id=“page2”
margin=“0”
bleed=“0” />
</sodipodi:namedview>
rdf:RDF
<cc:Work
rdf:about=”">
<cc:license
rdf:resource=“http://creativecommons.org/licenses/by/4.0/" />
</cc:Work>
<cc:License
rdf:about=“http://creativecommons.org/licenses/by/4.0/">
<cc:permits
rdf:resource=“http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource=“http://creativecommons.org/ns#Distribution" />
<cc:requires
rdf:resource=“http://creativecommons.org/ns#Notice" />
<cc:requires
rdf:resource=“http://creativecommons.org/ns#Attribution" />
<cc:permits
rdf:resource=“http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
<span class="font-bold text-xl not-italic">tangled</span>
<span class="font-normal not-italic text-xs rounded bg-gray-100 dark:bg-gray-700 px-1">
alpha
</span>
</a>
</div>
<div class="grid grid-cols-4 gap-2">
<div class="flex flex-col gap-1">
<div class="text-gray-900 dark:text-gray-200 font-bold text-sm uppercase tracking-wide mb-1">legal</div>
<a href="/terms" class="text-gray-500 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:underline inline-flex gap-1 items-center"><svg
xmlns=“http://www.w3.org/2000/svg"
width=“24”
height=“24”
viewBox=“0 0 24 24”
fill=“none”
stroke=“currentColor”
stroke-width=“2”
stroke-linecap=“round”
stroke-linejoin=“round”
class=“w-4 h-4 flex-shrink-0”>
terms of service
privacy policy
<div class="flex flex-col gap-1">
<div class="text-gray-900 dark:text-gray-200 font-bold text-sm uppercase tracking-wide mb-1">resources</div>
<a href="https://blog.tangled.org" class="text-gray-500 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:underline inline-flex gap-1 items-center" target="_blank" rel="noopener noreferrer"><svg
xmlns=“http://www.w3.org/2000/svg"
width=“24”
height=“24”
viewBox=“0 0 24 24”
fill=“none”
stroke=“currentColor”
stroke-width=“2”
stroke-linecap=“round”
stroke-linejoin=“round”
class=“w-4 h-4 flex-shrink-0”>
blog
docs
source
brand
<div class="flex flex-col gap-1">
<div class="text-gray-900 dark:text-gray-200 font-bold text-sm uppercase tracking-wide mb-1">social</div>
<a href="https://chat.tangled.org" class="text-gray-500 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:underline inline-flex gap-1 items-center" target="_blank" rel="noopener noreferrer"><svg
xmlns=“http://www.w3.org/2000/svg"
width=“24”
height=“24”
viewBox=“0 0 24 24”
fill=“none”
stroke=“currentColor”
stroke-width=“2”
stroke-linecap=“round”
stroke-linejoin=“round”
class=“w-4 h-4 flex-shrink-0”>
discord
irc
<div class="flex flex-col gap-1">
<div class="text-gray-900 dark:text-gray-200 font-bold text-sm uppercase tracking-wide mb-1">contact</div>
<a href="mailto:team@tangled.org" class="text-gray-500 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:underline inline-flex gap-1 items-center"><svg
xmlns=“http://www.w3.org/2000/svg"
width=“24”
height=“24”
viewBox=“0 0 24 24”
fill=“none”
stroke=“currentColor”
stroke-width=“2”
stroke-linecap=“round”
stroke-linejoin=“round”
class=“w-4 h-4 flex-shrink-0”>
team@tangled.org
security@tangled.org
<div class="text-right">
<div class="text-xs">© 2025 Tangled Labs Oy. All rights reserved.</div>
</div>
</div>
<div class="lg:hidden flex flex-col gap-8">
<div class="mb-4 md:mb-0">
<a href="/" hx-boost="true" class="flex gap-2 font-semibold italic no-underline hover:no-underline">
<sodipodi:namedview
id=“namedview1”
pagecolor="#ffffff”
bordercolor="#000000”
borderopacity=“0.25”
inkscape:showpageshadow=“2”
inkscape:pageopacity=“0.0”
inkscape:pagecheckerboard=“true”
inkscape:deskcolor="#d5d5d5”
inkscape:zoom=“45.254834”
inkscape:cx=“3.1377863”
inkscape:cy=“8.9382717”
inkscape:window-width=“3840”
inkscape:window-height=“2160”
inkscape:window-x=“0”
inkscape:window-y=“0”
inkscape:window-maximized=“0”
inkscape:current-layer=“g1”
borderlayer=“true”>
<inkscape:page
x=“0”
y=“0”
width=“25”
height=“25”
id=“page2”
margin=“0”
bleed=“0” />
</sodipodi:namedview>
rdf:RDF
<cc:Work
rdf:about=”">
<cc:license
rdf:resource=“http://creativecommons.org/licenses/by/4.0/" />
</cc:Work>
<cc:License
rdf:about=“http://creativecommons.org/licenses/by/4.0/">
<cc:permits
rdf:resource=“http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource=“http://creativecommons.org/ns#Distribution" />
<cc:requires
rdf:resource=“http://creativecommons.org/ns#Notice" />
<cc:requires
rdf:resource=“http://creativecommons.org/ns#Attribution" />
<cc:permits
rdf:resource=“http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
<span class="font-bold text-xl not-italic">tangled</span>
<span class="font-normal not-italic text-xs rounded bg-gray-100 dark:bg-gray-700 px-1">
alpha
</span>
</a>
</div>
<div class="grid grid-cols-1 sm:grid-cols-1 md:grid-cols-4 sm:gap-6 md:gap-2 gap-6">
<div class="flex flex-col gap-1">
<div class="text-gray-900 dark:text-gray-200 font-bold text-xs uppercase tracking-wide mb-1">legal</div>
<a href="/terms" class="text-gray-500 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:underline inline-flex gap-1 items-center"><svg
xmlns=“http://www.w3.org/2000/svg"
width=“24”
height=“24”
viewBox=“0 0 24 24”
fill=“none”
stroke=“currentColor”
stroke-width=“2”
stroke-linecap=“round”
stroke-linejoin=“round”
class=“w-4 h-4 flex-shrink-0”>
terms of service
privacy policy
<div class="flex flex-col gap-1">
<div class="text-gray-900 dark:text-gray-200 font-bold text-xs uppercase tracking-wide mb-1">resources</div>
<a href="https://blog.tangled.org" class="text-gray-500 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:underline inline-flex gap-1 items-center" target="_blank" rel="noopener noreferrer"><svg
xmlns=“http://www.w3.org/2000/svg"
width=“24”
height=“24”
viewBox=“0 0 24 24”
fill=“none”
stroke=“currentColor”
stroke-width=“2”
stroke-linecap=“round”
stroke-linejoin=“round”
class=“w-4 h-4 flex-shrink-0”>
blog
docs
source
brand
<div class="flex flex-col gap-1">
<div class="text-gray-900 dark:text-gray-200 font-bold text-xs uppercase tracking-wide mb-1">social</div>
<a href="https://chat.tangled.org" class="text-gray-500 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:underline inline-flex gap-1 items-center" target="_blank" rel="noopener noreferrer"><svg
xmlns=“http://www.w3.org/2000/svg"
width=“24”
height=“24”
viewBox=“0 0 24 24”
fill=“none”
stroke=“currentColor”
stroke-width=“2”
stroke-linecap=“round”
stroke-linejoin=“round”
class=“w-4 h-4 flex-shrink-0”>
discord
irc
<div class="flex flex-col gap-1">
<div class="text-gray-900 dark:text-gray-200 font-bold text-xs uppercase tracking-wide mb-1">contact</div>
<a href="mailto:team@tangled.org" class="text-gray-500 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:underline inline-flex gap-1 items-center"><svg
xmlns=“http://www.w3.org/2000/svg"
width=“24”
height=“24”
viewBox=“0 0 24 24”
fill=“none”
stroke=“currentColor”
stroke-width=“2”
stroke-linecap=“round”
stroke-linejoin=“round”
class=“w-4 h-4 flex-shrink-0”>
team@tangled.org
security@tangled.org
<div class="text-center">
<div class="text-xs">© 2025 Tangled Labs Oy. All rights reserved.</div>
</div>
</div>
</div>
</footer>
</body>
</html>
Tags
sha256:f1470a897de395cce486bd4667968cc70f75de3f058d25cb6a7d2aa7858cb3ac
docker pull atcr.io/besaid.zone/discostubot:1.0
Manifests
sha256:f1470a897de395cce486bd4667968cc70f75de3f058d25cb6a7d2aa7858cb3ac
sha256:3f9cbdec4528fe0390d6d0398f7151474f736cfa6288277ff28255815be75da3