I don't remember what I did, my brain hurts... time to goon to Furina

This commit is contained in:
Clove 2026-06-24 05:46:34 +01:00
parent ee66b2fce9
commit f6d5d8ae08
21 changed files with 1994 additions and 1245 deletions

View File

@ -10,7 +10,8 @@
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg"> <link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
<!-- SEO Meta Tags --> <!-- SEO Meta Tags -->
<meta name="description" content="A collection of the 88x31 pixel buttons featured across Clove Twilight's site — grab one and link back."> <meta name="description"
content="A collection of the 88x31 pixel buttons featured across Clove Twilight's site — grab one and link back.">
<meta name="keywords" content="Clove Twilight, c.stupid.cat, 88x31, buttons, web buttons, personal"> <meta name="keywords" content="Clove Twilight, c.stupid.cat, 88x31, buttons, web buttons, personal">
<meta name="author" content="doughmination"> <meta name="author" content="doughmination">
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"> <meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
@ -28,7 +29,8 @@
<meta property="og:image" content="https://c.stupid.cat/assets/favicon/favicon.png"> <meta property="og:image" content="https://c.stupid.cat/assets/favicon/favicon.png">
<meta property="og:site_name" content="c.stupid.cat"> <meta property="og:site_name" content="c.stupid.cat">
<meta property="og:title" content="Clove Twilight"> <meta property="og:title" content="Clove Twilight">
<meta property="og:description" content="A collection of the 88x31 pixel buttons featured across Clove Twilight's site — grab one and link back."> <meta property="og:description"
content="A collection of the 88x31 pixel buttons featured across Clove Twilight's site — grab one and link back.">
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<meta property="og:url" content="https://c.stupid.cat/88x31"> <meta property="og:url" content="https://c.stupid.cat/88x31">
<meta property="og:locale" content="en_GB"> <meta property="og:locale" content="en_GB">
@ -37,7 +39,8 @@
<meta name="twitter:image" content="https://c.stupid.cat/assets/favicon/favicon.png"> <meta name="twitter:image" content="https://c.stupid.cat/assets/favicon/favicon.png">
<meta name="twitter:card" content="summary"> <meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Clove Twilight"> <meta name="twitter:title" content="Clove Twilight">
<meta name="twitter:description" content="A collection of the 88x31 pixel buttons featured across Clove Twilight's site — grab one and link back."> <meta name="twitter:description"
content="A collection of the 88x31 pixel buttons featured across Clove Twilight's site — grab one and link back.">
<!-- Prefetch other pages for faster navigation --> <!-- Prefetch other pages for faster navigation -->
<link rel="prefetch" href="/"> <link rel="prefetch" href="/">
@ -73,48 +76,69 @@
<div class="button-page"> <div class="button-page">
<main class="button-wall" aria-label="88x31 buttons"> <main class="button-wall" aria-label="88x31 buttons">
<!-- coding / web --> <!-- coding / web -->
<a href="https://doughmination.co.uk" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/doughmination.png" alt="Doughmination" loading="eager"></a> <a href="https://doughmination.co.uk" target="_blank" rel="noopener noreferrer"><img
<a href="https://git.gay/doughmination" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/gitgay.png" alt="Git Gay" loading="lazy"></a> src="/assets/88x31/doughmination.png" alt="Doughmination" loading="eager"></a>
<a href="https://code.visualstudio.com" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/vscbutton.png" alt="Made with Visual Studio Code" loading="lazy"></a> <a href="https://git.gay/doughmination" target="_blank" rel="noopener noreferrer"><img
src="/assets/88x31/gitgay.png" alt="Git Gay" loading="lazy"></a>
<a href="https://code.visualstudio.com" target="_blank" rel="noopener noreferrer"><img
src="/assets/88x31/vscbutton.png" alt="Made with Visual Studio Code" loading="lazy"></a>
<img src="/assets/88x31/htmldream.png" alt="I dream in HTML" loading="lazy"> <img src="/assets/88x31/htmldream.png" alt="I dream in HTML" loading="lazy">
<a href="https://validator.w3.org/" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/valid-html5.png" alt="Valid HTML5" loading="lazy"></a> <a href="https://validator.w3.org/" target="_blank" rel="noopener noreferrer"><img
<a href="https://jigsaw.w3.org/css-validator/" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/valid-css.png" alt="Valid CSS" loading="lazy"></a> src="/assets/88x31/valid-html5.png" alt="Valid HTML5" loading="lazy"></a>
<a href="https://yesterweb.org/no-to-web3/" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/noweb32.png" alt="Keep the web free" loading="lazy"></a> <a href="https://jigsaw.w3.org/css-validator/" target="_blank" rel="noopener noreferrer"><img
src="/assets/88x31/valid-css.png" alt="Valid CSS" loading="lazy"></a>
<a href="https://yesterweb.org/no-to-web3/" target="_blank" rel="noopener noreferrer"><img
src="/assets/88x31/noweb32.png" alt="Keep the web free" loading="lazy"></a>
<img src="/assets/88x31/nft.png" alt="No NFTs, no thanks" loading="lazy"> <img src="/assets/88x31/nft.png" alt="No NFTs, no thanks" loading="lazy">
<img src="/assets/88x31/nowebp.png" alt="No WEBp" loading="lazy"> <img src="/assets/88x31/nowebp.png" alt="No WEBp" loading="lazy">
<!-- software / os --> <!-- software / os -->
<a href="https://www.linux.org/" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/linux.png" alt="Made on GNU/Linux" loading="lazy"></a> <a href="https://www.linux.org/" target="_blank" rel="noopener noreferrer"><img
<a href="https://www.mozilla.org/firefox/" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/firefox.png" alt="Firefox" loading="lazy"></a> src="/assets/88x31/linux.png" alt="Made on GNU/Linux" loading="lazy"></a>
<a href="https://www.mozilla.org/firefox/" target="_blank" rel="noopener noreferrer"><img
src="/assets/88x31/firefox.png" alt="Firefox" loading="lazy"></a>
<img src="/assets/88x31/no-chrome.png" alt="Anything but Chrome" loading="lazy"> <img src="/assets/88x31/no-chrome.png" alt="Anything but Chrome" loading="lazy">
<a href="https://support.apple.com/en-gb/121552" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/macbutton.png" alt="Made on a Mac" loading="lazy"></a> <a href="https://support.apple.com/en-gb/121552" target="_blank" rel="noopener noreferrer"><img
<a href="https://www.win-rar.com/" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/winrar4.png" alt="WinRAR" loading="lazy"></a> src="/assets/88x31/macbutton.png" alt="Made on a Mac" loading="lazy"></a>
<a href="https://microslop.com/" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/microslop.png" alt="Stop Microsoft" loading="lazy"></a> <a href="https://www.win-rar.com/" target="_blank" rel="noopener noreferrer"><img
src="/assets/88x31/winrar4.png" alt="WinRAR" loading="lazy"></a>
<a href="https://microslop.com/" target="_blank" rel="noopener noreferrer"><img
src="/assets/88x31/microslop.png" alt="Stop Microsoft" loading="lazy"></a>
<img src="/assets/88x31/dark-mode.png" alt="Made for dark mode" loading="lazy"> <img src="/assets/88x31/dark-mode.png" alt="Made for dark mode" loading="lazy">
<!-- pride / identity --> <!-- pride / identity -->
<a href="https://valerie.vg/" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/estrogen.png" alt="Powered by estrogen" loading="lazy"></a> <a href="https://valerie.vg/" target="_blank" rel="noopener noreferrer"><img
src="/assets/88x31/estrogen.png" alt="Powered by estrogen" loading="lazy"></a>
<img src="/assets/88x31/transnow.png" alt="Trans rights now" loading="lazy"> <img src="/assets/88x31/transnow.png" alt="Trans rights now" loading="lazy">
<img src="/assets/88x31/queerpride.png" alt="Queer pride" loading="lazy"> <img src="/assets/88x31/queerpride.png" alt="Queer pride" loading="lazy">
<img src="/assets/88x31/girlsnow.png" alt="Girls Now" loading="lazy"> <img src="/assets/88x31/girlsnow.png" alt="Girls Now" loading="lazy">
<img src="/assets/88x31/skirt.png" alt="Let boys wear skirts" loading="lazy"> <img src="/assets/88x31/skirt.png" alt="Let boys wear skirts" loading="lazy">
<img src="/assets/88x31/cutesocks.png" alt="I wear cute socks!" loading="lazy"> <img src="/assets/88x31/cutesocks.png" alt="I wear cute socks!" loading="lazy">
<!-- causes --> <!-- causes -->
<a href="https://archive.org/details/zines-anti-fascism" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/antifa.png" alt="No fascism, no bigotry" loading="lazy"></a> <a href="https://archive.org/details/zines-anti-fascism" target="_blank" rel="noopener noreferrer"><img
<a href="https://www.youtube.com/watch?v=7AQbhes-Ntw" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/meltice.png" alt="Melt ICE" loading="lazy"></a> src="/assets/88x31/antifa.png" alt="No fascism, no bigotry" loading="lazy"></a>
<a href="https://www.map.org.uk/" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/palestine.png" alt="Free Palestine" loading="lazy"></a> <a href="https://www.youtube.com/watch?v=7AQbhes-Ntw" target="_blank" rel="noopener noreferrer"><img
<a href="https://u24.gov.ua/" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/ukraine.png" alt="Slava Ukraini" loading="lazy"></a> src="/assets/88x31/meltice.png" alt="Melt ICE" loading="lazy"></a>
<a href="https://www.map.org.uk/" target="_blank" rel="noopener noreferrer"><img
src="/assets/88x31/palestine.png" alt="Free Palestine" loading="lazy"></a>
<a href="https://u24.gov.ua/" target="_blank" rel="noopener noreferrer"><img
src="/assets/88x31/ukraine.png" alt="Slava Ukraini" loading="lazy"></a>
<!-- misc --> <!-- misc -->
<a href="/discord"><img src="/assets/88x31/discord.png" alt="Discord" loading="lazy"></a> <a href="/discord"><img src="/assets/88x31/discord.png" alt="Discord" loading="lazy"></a>
<img src="/assets/88x31/bestvieweddesktop.png" alt="Best viewed on desktop" loading="lazy"> <img src="/assets/88x31/bestvieweddesktop.png" alt="Best viewed on desktop" loading="lazy">
<img src="/assets/88x31/killmenow.png" alt="Kill me now" loading="lazy"> <img src="/assets/88x31/killmenow.png" alt="Kill me now" loading="lazy">
<a href="https://www.youtube.com/watch?v=dQw4w9WgXcQ" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/no.png" alt="Don't click here, no!" loading="lazy"></a> <a href="https://www.youtube.com/watch?v=dQw4w9WgXcQ" target="_blank" rel="noopener noreferrer"><img
<a href="https://www.minecraft.net" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/minecraft.png" alt="Minecraft" loading="lazy"></a> src="/assets/88x31/no.png" alt="Don't click here, no!" loading="lazy"></a>
<a href="https://www.minecraft.net" target="_blank" rel="noopener noreferrer"><img
src="/assets/88x31/minecraft.png" alt="Minecraft" loading="lazy"></a>
<!-- anime --> <!-- anime -->
<img src="/assets/88x31/pokemon.png" alt="Pokémon" loading="lazy"> <img src="/assets/88x31/pokemon.png" alt="Pokémon" loading="lazy">
<a href="https://www.youtube.com/watch?v=VEj0cuqVJ-I" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/caramelldansen.png" alt="Caramelldansen" loading="lazy"></a> <a href="https://www.youtube.com/watch?v=VEj0cuqVJ-I" target="_blank" rel="noopener noreferrer"><img
src="/assets/88x31/caramelldansen.png" alt="Caramelldansen" loading="lazy"></a>
<img src="/assets/88x31/blink.png" alt="Anime blink" loading="lazy"> <img src="/assets/88x31/blink.png" alt="Anime blink" loading="lazy">
<a href="https://www.youtube.com/watch?v=_-2dIuV34cs" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/miku.png" alt="This site is Miku approved" loading="lazy"></a> <a href="https://www.youtube.com/watch?v=_-2dIuV34cs" target="_blank" rel="noopener noreferrer"><img
src="/assets/88x31/miku.png" alt="This site is Miku approved" loading="lazy"></a>
<img src="/assets/88x31/tummy.png" alt="Anime tummy supporter" loading="lazy"> <img src="/assets/88x31/tummy.png" alt="Anime tummy supporter" loading="lazy">
<a href="https://www.youtube.com/watch?v=9lNZ_Rnr7Jc" target="_blank" rel="noopener noreferrer"><img src="/assets/88x31/badapple.png" alt="Bad Apple!!" loading="lazy"></a> <a href="https://www.youtube.com/watch?v=9lNZ_Rnr7Jc" target="_blank" rel="noopener noreferrer"><img
src="/assets/88x31/badapple.png" alt="Bad Apple!!" loading="lazy"></a>
</main> </main>
</div> </div>
</div> </div>

View File

@ -23,7 +23,8 @@
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg"> <link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
<!-- SEO Meta Tags --> <!-- SEO Meta Tags -->
<meta name="description" content="Cool people Clove Twilight knows — friends, mutuals, and creators worth checking out, with links to their sites."> <meta name="description"
content="Cool people Clove Twilight knows — friends, mutuals, and creators worth checking out, with links to their sites.">
<meta name="keywords" content="Clove Twilight, c.stupid.cat, friends, cool people, mutuals, links"> <meta name="keywords" content="Clove Twilight, c.stupid.cat, friends, cool people, mutuals, links">
<meta name="author" content="doughmination"> <meta name="author" content="doughmination">
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"> <meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
@ -41,7 +42,8 @@
<meta property="og:image" content="https://c.stupid.cat/assets/favicon/favicon.png"> <meta property="og:image" content="https://c.stupid.cat/assets/favicon/favicon.png">
<meta property="og:site_name" content="c.stupid.cat"> <meta property="og:site_name" content="c.stupid.cat">
<meta property="og:title" content="Clove Twilight"> <meta property="og:title" content="Clove Twilight">
<meta property="og:description" content="Cool people Clove Twilight knows — friends, mutuals, and creators worth checking out, with links to their sites."> <meta property="og:description"
content="Cool people Clove Twilight knows — friends, mutuals, and creators worth checking out, with links to their sites.">
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<meta property="og:url" content="https://c.stupid.cat/cool-people"> <meta property="og:url" content="https://c.stupid.cat/cool-people">
<meta property="og:locale" content="en_GB"> <meta property="og:locale" content="en_GB">
@ -50,19 +52,8 @@
<meta name="twitter:image" content="https://c.stupid.cat/assets/favicon/favicon.png"> <meta name="twitter:image" content="https://c.stupid.cat/assets/favicon/favicon.png">
<meta name="twitter:card" content="summary"> <meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Clove Twilight"> <meta name="twitter:title" content="Clove Twilight">
<meta name="twitter:description" content="Cool people Clove Twilight knows — friends, mutuals, and creators worth checking out, with links to their sites."> <meta name="twitter:description"
content="Cool people Clove Twilight knows — friends, mutuals, and creators worth checking out, with links to their sites.">
<style>
.friends-disclaimer {
margin: 2.5rem auto 0;
max-width: 60ch;
text-align: center;
font-size: .8rem;
line-height: 1.5;
opacity: .6;
}
.friends-disclaimer a { color: inherit; text-decoration: underline; }
</style>
<!-- Prefetch other pages for faster navigation --> <!-- Prefetch other pages for faster navigation -->
<link rel="prefetch" href="/"> <link rel="prefetch" href="/">
@ -89,26 +80,23 @@
</nav> </nav>
</header> </header>
<div class="hub friends-wrap"> <main class="hub friends-wrap">
<header class="hub-header"> <header class="hub-header">
<h1>Cool People</h1> <h1>Cool People</h1>
<p class="tagline">This is where people I know can be put up on my site, click their profiles for their <p class="tagline">This is where people I know can be put up on my site, click their profiles for their
pages</p> pages</p>
</header> </header>
<!-- Cards are rendered by friends.js from the FRIENDS config --> <div id="friends-discord"></div>
<div id="friends-root"></div>
<p class="friends-disclaimer"> <p class="friends-disclaimer">
Presence data is served by Presence data is served by
<a href="https://restful.doughmination.uk" target="_blank" rel="noopener">Doughmination Restful</a>. <a href="https://restful.doughmination.uk" target="_blank" rel="noopener">Doughmination Restful</a>.
</p> </p>
</div> </main>
<script src="/js/core.js" data-cat="/assets/oneko/classics/classic.png"></script> <script src="/js/core.js" data-cat="/assets/oneko/classics/classic.png"></script>
<!-- discord.js exposes window.PresenceCard, used by friends.js for the cards -->
<script src="/js/discord.js"></script> <script src="/js/discord.js"></script>
<script src="/js/friends.js"></script>
</body> </body>
</html> </html>

View File

@ -41,36 +41,43 @@
src: url('/assets/fonts/8Bit.woff2') format('woff2'); src: url('/assets/fonts/8Bit.woff2') format('woff2');
font-display: swap; font-display: swap;
} }
@font-face { @font-face {
font-family: 'DDN Jellybean'; font-family: 'DDN Jellybean';
src: url('/assets/fonts/Jellybean.woff2') format('woff2'); src: url('/assets/fonts/Jellybean.woff2') format('woff2');
font-display: swap; font-display: swap;
} }
@font-face { @font-face {
font-family: 'DDN Medieval'; font-family: 'DDN Medieval';
src: url('/assets/fonts/Medieval.woff2') format('woff2'); src: url('/assets/fonts/Medieval.woff2') format('woff2');
font-display: swap; font-display: swap;
} }
@font-face { @font-face {
font-family: 'DDN Modern'; font-family: 'DDN Modern';
src: url('/assets/fonts/Modern.woff2') format('woff2'); src: url('/assets/fonts/Modern.woff2') format('woff2');
font-display: swap; font-display: swap;
} }
@font-face { @font-face {
font-family: 'DDN Sakura'; font-family: 'DDN Sakura';
src: url('/assets/fonts/Sakura.woff2') format('woff2'); src: url('/assets/fonts/Sakura.woff2') format('woff2');
font-display: swap; font-display: swap;
} }
@font-face { @font-face {
font-family: 'DDN Tempo'; font-family: 'DDN Tempo';
src: url('/assets/fonts/Tempo.woff2') format('woff2'); src: url('/assets/fonts/Tempo.woff2') format('woff2');
font-display: swap; font-display: swap;
} }
@font-face { @font-face {
font-family: 'DDN Vampyre'; font-family: 'DDN Vampyre';
src: url('/assets/fonts/Vampyre.woff2') format('woff2'); src: url('/assets/fonts/Vampyre.woff2') format('woff2');
font-display: swap; font-display: swap;
} }
@font-face { @font-face {
font-family: 'DDN gg sans'; font-family: 'DDN gg sans';
src: url('/assets/fonts/gg%20sans.woff2') format('woff2'); src: url('/assets/fonts/gg%20sans.woff2') format('woff2');

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,8 @@ html[data-flavor="frappe"] {
--rosewater: #f2d5cf; --rosewater: #f2d5cf;
--flamingo: #eebebe; --flamingo: #eebebe;
--pink: #f4b8e4; --pink: #f4b8e4;
--accent-rgb: 244, 184, 228; /* live accent default = theme pink */ --accent-rgb: 244, 184, 228;
/* live accent default = theme pink */
--mauve: #ca9ee6; --mauve: #ca9ee6;
--red: #e78284; --red: #e78284;
--maroon: #ea999c; --maroon: #ea999c;

View File

@ -7,7 +7,8 @@ html[data-flavor="latte"] {
--rosewater: #dc8a78; --rosewater: #dc8a78;
--flamingo: #dd7878; --flamingo: #dd7878;
--pink: #ea76cb; --pink: #ea76cb;
--accent-rgb: 234, 118, 203; /* live accent default = theme pink */ --accent-rgb: 234, 118, 203;
/* live accent default = theme pink */
--mauve: #8839ef; --mauve: #8839ef;
--red: #d20f39; --red: #d20f39;
--maroon: #e64553; --maroon: #e64553;

View File

@ -7,7 +7,8 @@ html[data-flavor="macchiato"] {
--rosewater: #f4dbd6; --rosewater: #f4dbd6;
--flamingo: #f0c6c6; --flamingo: #f0c6c6;
--pink: #f5bde6; --pink: #f5bde6;
--accent-rgb: 245, 189, 230; /* live accent default = theme pink */ --accent-rgb: 245, 189, 230;
/* live accent default = theme pink */
--mauve: #c6a0f6; --mauve: #c6a0f6;
--red: #ed8796; --red: #ed8796;
--maroon: #ee99a0; --maroon: #ee99a0;

View File

@ -7,7 +7,8 @@ html[data-flavor="mocha"] {
--rosewater: #f5e0dc; --rosewater: #f5e0dc;
--flamingo: #f2cdcd; --flamingo: #f2cdcd;
--pink: #f5c2e7; --pink: #f5c2e7;
--accent-rgb: 245, 194, 231; /* live accent default = theme pink */ --accent-rgb: 245, 194, 231;
/* live accent default = theme pink */
--mauve: #cba6f7; --mauve: #cba6f7;
--red: #f38ba8; --red: #f38ba8;
--maroon: #eba0ac; --maroon: #eba0ac;

View File

@ -17,8 +17,10 @@
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg"> <link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
<!-- SEO Meta Tags --> <!-- SEO Meta Tags -->
<meta name="description" content="What Clove Twilight has been coding lately — a live contribution heatmap and WakaTime coding stats."> <meta name="description"
<meta name="keywords" content="Clove Twilight, c.stupid.cat, dev info, coding stats, WakaTime, contributions, developer"> content="What Clove Twilight has been coding lately — a live contribution heatmap and WakaTime coding stats.">
<meta name="keywords"
content="Clove Twilight, c.stupid.cat, dev info, coding stats, WakaTime, contributions, developer">
<meta name="author" content="doughmination"> <meta name="author" content="doughmination">
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"> <meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
@ -35,7 +37,8 @@
<meta property="og:image" content="https://c.stupid.cat/assets/favicon/favicon.png"> <meta property="og:image" content="https://c.stupid.cat/assets/favicon/favicon.png">
<meta property="og:site_name" content="c.stupid.cat"> <meta property="og:site_name" content="c.stupid.cat">
<meta property="og:title" content="Clove Twilight"> <meta property="og:title" content="Clove Twilight">
<meta property="og:description" content="What Clove Twilight has been coding lately — a live contribution heatmap and WakaTime coding stats."> <meta property="og:description"
content="What Clove Twilight has been coding lately — a live contribution heatmap and WakaTime coding stats.">
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<meta property="og:url" content="https://c.stupid.cat/dev-info"> <meta property="og:url" content="https://c.stupid.cat/dev-info">
<meta property="og:locale" content="en_GB"> <meta property="og:locale" content="en_GB">
@ -44,7 +47,8 @@
<meta name="twitter:image" content="https://c.stupid.cat/assets/favicon/favicon.png"> <meta name="twitter:image" content="https://c.stupid.cat/assets/favicon/favicon.png">
<meta name="twitter:card" content="summary"> <meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Clove Twilight"> <meta name="twitter:title" content="Clove Twilight">
<meta name="twitter:description" content="What Clove Twilight has been coding lately — a live contribution heatmap and WakaTime coding stats."> <meta name="twitter:description"
content="What Clove Twilight has been coding lately — a live contribution heatmap and WakaTime coding stats.">
<!-- Prefetch other pages for faster navigation --> <!-- Prefetch other pages for faster navigation -->
<link rel="prefetch" href="/"> <link rel="prefetch" href="/">
@ -85,71 +89,116 @@
<summary class="section-title">Tech Stack</summary> <summary class="section-title">Tech Stack</summary>
<div class="dev-info" role="region" aria-label="Tech stack"> <div class="dev-info" role="region" aria-label="Tech stack">
<!-- Languages --> <!-- Languages -->
<span class="tech-icon red" style="--si:url('https://cdn.simpleicons.org/python')" role="img" aria-label="Python"></span> <span class="tech-icon red" style="--si:url('https://cdn.simpleicons.org/python')" role="img"
<span class="tech-icon mauve" style="--si:url('https://cdn.simpleicons.org/openjdk')" role="img" aria-label="Java"></span> aria-label="Python"></span>
<span class="tech-icon pink" style="--si:url('https://cdn.simpleicons.org/javascript')" role="img" aria-label="JavaScript"></span> <span class="tech-icon mauve" style="--si:url('https://cdn.simpleicons.org/openjdk')" role="img"
<span class="tech-icon peach" style="--si:url('https://cdn.simpleicons.org/typescript')" role="img" aria-label="TypeScript"></span> aria-label="Java"></span>
<span class="tech-icon yellow" style="--si:url('https://cdn.simpleicons.org/gnubash')" role="img" aria-label="Bash Script"></span> <span class="tech-icon pink" style="--si:url('https://cdn.simpleicons.org/javascript')" role="img"
aria-label="JavaScript"></span>
<span class="tech-icon peach" style="--si:url('https://cdn.simpleicons.org/typescript')" role="img"
aria-label="TypeScript"></span>
<span class="tech-icon yellow" style="--si:url('https://cdn.simpleicons.org/gnubash')" role="img"
aria-label="Bash Script"></span>
<!-- Markup, Styling & Docs --> <!-- Markup, Styling & Docs -->
<span class="tech-icon lavender" style="--si:url('https://cdn.simpleicons.org/html5')" role="img" aria-label="HTML5"></span> <span class="tech-icon lavender" style="--si:url('https://cdn.simpleicons.org/html5')" role="img"
<span class="tech-icon teal" style="--si:url('https://cdn.simpleicons.org/css')" role="img" aria-label="CSS"></span> aria-label="HTML5"></span>
<span class="tech-icon blue" style="--si:url('https://cdn.simpleicons.org/markdown')" role="img" aria-label="Markdown"></span> <span class="tech-icon teal" style="--si:url('https://cdn.simpleicons.org/css')" role="img"
<span class="tech-icon teal" style="--si:url('https://cdn.simpleicons.org/latex')" role="img" aria-label="LaTeX"></span> aria-label="CSS"></span>
<span class="tech-icon blue" style="--si:url('https://cdn.simpleicons.org/markdown')" role="img"
aria-label="Markdown"></span>
<span class="tech-icon teal" style="--si:url('https://cdn.simpleicons.org/latex')" role="img"
aria-label="LaTeX"></span>
<!-- Frontend — Frameworks & Libraries --> <!-- Frontend — Frameworks & Libraries -->
<span class="tech-icon blue" style="--si:url('https://cdn.simpleicons.org/react')" role="img" aria-label="React"></span> <span class="tech-icon blue" style="--si:url('https://cdn.simpleicons.org/react')" role="img"
<span class="tech-icon sapphire" style="--si:url('https://cdn.simpleicons.org/vuedotjs')" role="img" aria-label="Vue.js"></span> aria-label="React"></span>
<span class="tech-icon rosewater" style="--si:url('https://cdn.simpleicons.org/nextdotjs')" role="img" aria-label="Next JS"></span> <span class="tech-icon sapphire" style="--si:url('https://cdn.simpleicons.org/vuedotjs')" role="img"
<span class="tech-icon blue" style="--si:url('https://cdn.simpleicons.org/ejs')" role="img" aria-label="EJS"></span> aria-label="Vue.js"></span>
<span class="tech-icon teal" style="--si:url('https://cdn.simpleicons.org/electron')" role="img" aria-label="Electron.js"></span> <span class="tech-icon rosewater" style="--si:url('https://cdn.simpleicons.org/nextdotjs')" role="img"
aria-label="Next JS"></span>
<span class="tech-icon blue" style="--si:url('https://cdn.simpleicons.org/ejs')" role="img"
aria-label="EJS"></span>
<span class="tech-icon teal" style="--si:url('https://cdn.simpleicons.org/electron')" role="img"
aria-label="Electron.js"></span>
<!-- Frontend — Styling --> <!-- Frontend — Styling -->
<span class="tech-icon red" style="--si:url('https://cdn.simpleicons.org/tailwindcss')" role="img" aria-label="TailwindCSS"></span> <span class="tech-icon red" style="--si:url('https://cdn.simpleicons.org/tailwindcss')" role="img"
<span class="tech-icon lavender" style="--si:url('https://cdn.simpleicons.org/bootstrap')" role="img" aria-label="Bootstrap"></span> aria-label="TailwindCSS"></span>
<span class="tech-icon lavender" style="--si:url('https://cdn.simpleicons.org/bootstrap')" role="img"
aria-label="Bootstrap"></span>
<!-- Backend --> <!-- Backend -->
<span class="tech-icon pink" style="--si:url('https://cdn.simpleicons.org/nodedotjs')" role="img" aria-label="NodeJS"></span> <span class="tech-icon pink" style="--si:url('https://cdn.simpleicons.org/nodedotjs')" role="img"
<span class="tech-icon green" style="--si:url('https://cdn.simpleicons.org/express')" role="img" aria-label="Express.js"></span> aria-label="NodeJS"></span>
<span class="tech-icon peach" style="--si:url('https://cdn.simpleicons.org/fastapi')" role="img" aria-label="FastAPI"></span> <span class="tech-icon green" style="--si:url('https://cdn.simpleicons.org/express')" role="img"
<span class="tech-icon maroon" style="--si:url('https://cdn.simpleicons.org/jsonwebtokens')" role="img" aria-label="JWT"></span> aria-label="Express.js"></span>
<span class="tech-icon rosewater" style="--si:url('https://cdn.simpleicons.org/wordpress')" role="img" aria-label="WordPress"></span> <span class="tech-icon peach" style="--si:url('https://cdn.simpleicons.org/fastapi')" role="img"
aria-label="FastAPI"></span>
<span class="tech-icon maroon" style="--si:url('https://cdn.simpleicons.org/jsonwebtokens')" role="img"
aria-label="JWT"></span>
<span class="tech-icon rosewater" style="--si:url('https://cdn.simpleicons.org/wordpress')" role="img"
aria-label="WordPress"></span>
<!-- Databases --> <!-- Databases -->
<span class="tech-icon teal" style="--si:url('https://cdn.simpleicons.org/postgresql')" role="img" aria-label="Postgres"></span> <span class="tech-icon teal" style="--si:url('https://cdn.simpleicons.org/postgresql')" role="img"
<span class="tech-icon lavender" style="--si:url('https://cdn.simpleicons.org/mysql')" role="img" aria-label="MySQL"></span> aria-label="Postgres"></span>
<span class="tech-icon blue" style="--si:url('https://cdn.simpleicons.org/sqlite')" role="img" aria-label="SQLite"></span> <span class="tech-icon lavender" style="--si:url('https://cdn.simpleicons.org/mysql')" role="img"
<span class="tech-icon green" style="--si:url('https://cdn.simpleicons.org/redis')" role="img" aria-label="Redis"></span> aria-label="MySQL"></span>
<span class="tech-icon blue" style="--si:url('https://cdn.simpleicons.org/sqlite')" role="img"
aria-label="SQLite"></span>
<span class="tech-icon green" style="--si:url('https://cdn.simpleicons.org/redis')" role="img"
aria-label="Redis"></span>
<!-- Package Managers & Build Tools --> <!-- Package Managers & Build Tools -->
<span class="tech-icon sapphire" style="--si:url('https://cdn.simpleicons.org/npm')" role="img" aria-label="NPM"></span> <span class="tech-icon sapphire" style="--si:url('https://cdn.simpleicons.org/npm')" role="img"
<span class="tech-icon lavender" style="--si:url('https://cdn.simpleicons.org/pnpm')" role="img" aria-label="PNPM"></span> aria-label="NPM"></span>
<span class="tech-icon maroon" style="--si:url('https://cdn.simpleicons.org/vite')" role="img" aria-label="Vite"></span> <span class="tech-icon lavender" style="--si:url('https://cdn.simpleicons.org/pnpm')" role="img"
<span class="tech-icon mauve" style="--si:url('https://cdn.simpleicons.org/nodemon')" role="img" aria-label="Nodemon"></span> aria-label="PNPM"></span>
<span class="tech-icon green" style="--si:url('https://cdn.simpleicons.org/gradle')" role="img" aria-label="Gradle"></span> <span class="tech-icon maroon" style="--si:url('https://cdn.simpleicons.org/vite')" role="img"
<span class="tech-icon blue" style="--si:url('https://cdn.simpleicons.org/eslint')" role="img" aria-label="ESLint"></span> aria-label="Vite"></span>
<span class="tech-icon mauve" style="--si:url('https://cdn.simpleicons.org/nodemon')" role="img"
aria-label="Nodemon"></span>
<span class="tech-icon green" style="--si:url('https://cdn.simpleicons.org/gradle')" role="img"
aria-label="Gradle"></span>
<span class="tech-icon blue" style="--si:url('https://cdn.simpleicons.org/eslint')" role="img"
aria-label="ESLint"></span>
<!-- Version Control & CI/CD --> <!-- Version Control & CI/CD -->
<span class="tech-icon sapphire" style="--si:url('https://cdn.simpleicons.org/git')" role="img" aria-label="Git"></span> <span class="tech-icon sapphire" style="--si:url('https://cdn.simpleicons.org/git')" role="img"
<span class="tech-icon sky" style="--si:url('https://cdn.simpleicons.org/github')" role="img" aria-label="GitHub"></span> aria-label="Git"></span>
<span class="tech-icon maroon" style="--si:url('https://cdn.simpleicons.org/githubactions')" role="img" aria-label="GitHub Actions"></span> <span class="tech-icon sky" style="--si:url('https://cdn.simpleicons.org/github')" role="img"
<span class="tech-icon rosewater" style="--si:url('https://cdn.simpleicons.org/gitea')" role="img" aria-label="Gitea"></span> aria-label="GitHub"></span>
<span class="tech-icon maroon" style="--si:url('https://cdn.simpleicons.org/githubactions')" role="img"
aria-label="GitHub Actions"></span>
<span class="tech-icon rosewater" style="--si:url('https://cdn.simpleicons.org/gitea')" role="img"
aria-label="Gitea"></span>
<!-- Infrastructure & Deployment --> <!-- Infrastructure & Deployment -->
<span class="tech-icon lavender" style="--si:url('https://cdn.simpleicons.org/docker')" role="img" aria-label="Docker"></span> <span class="tech-icon lavender" style="--si:url('https://cdn.simpleicons.org/docker')" role="img"
<span class="tech-icon mauve" style="--si:url('https://cdn.simpleicons.org/nginx')" role="img" aria-label="Nginx"></span> aria-label="Docker"></span>
<span class="tech-icon sapphire" style="--si:url('https://cdn.simpleicons.org/cloudflare')" role="img" aria-label="Cloudflare"></span> <span class="tech-icon mauve" style="--si:url('https://cdn.simpleicons.org/nginx')" role="img"
<span class="tech-icon mauve" style="--si:url('https://cdn.simpleicons.org/vercel')" role="img" aria-label="Vercel"></span> aria-label="Nginx"></span>
<span class="tech-icon sapphire" style="--si:url('https://cdn.simpleicons.org/cloudflare')" role="img"
aria-label="Cloudflare"></span>
<span class="tech-icon mauve" style="--si:url('https://cdn.simpleicons.org/vercel')" role="img"
aria-label="Vercel"></span>
<!-- Dev Tools & Utilities --> <!-- Dev Tools & Utilities -->
<span class="tech-icon blue" style="--si:url('https://cdn.simpleicons.org/vscodium')" role="img" aria-label="VSCodium"></span> <span class="tech-icon blue" style="--si:url('https://cdn.simpleicons.org/vscodium')" role="img"
<span class="tech-icon red" style="--si:url('https://cdn.simpleicons.org/insomnia')" role="img" aria-label="Insomnia"></span> aria-label="VSCodium"></span>
<span class="tech-icon teal" style="--si:url('https://cdn.simpleicons.org/ffmpeg')" role="img" aria-label="FFmpeg"></span> <span class="tech-icon red" style="--si:url('https://cdn.simpleicons.org/insomnia')" role="img"
<span class="tech-icon red" style="--si:url('https://cdn.simpleicons.org/inkscape')" role="img" aria-label="Inkscape"></span> aria-label="Insomnia"></span>
<span class="tech-icon teal" style="--si:url('https://cdn.simpleicons.org/ffmpeg')" role="img"
aria-label="FFmpeg"></span>
<span class="tech-icon red" style="--si:url('https://cdn.simpleicons.org/inkscape')" role="img"
aria-label="Inkscape"></span>
<!-- Hardware / IoT --> <!-- Hardware / IoT -->
<span class="tech-icon pink" style="--si:url('https://cdn.simpleicons.org/arduino')" role="img" aria-label="Arduino"></span> <span class="tech-icon pink" style="--si:url('https://cdn.simpleicons.org/arduino')" role="img"
<span class="tech-icon red" style="--si:url('https://cdn.simpleicons.org/raspberrypi')" role="img" aria-label="Raspberry Pi"></span> aria-label="Arduino"></span>
<span class="tech-icon red" style="--si:url('https://cdn.simpleicons.org/raspberrypi')" role="img"
aria-label="Raspberry Pi"></span>
</div> </div>
</details> </details>
@ -159,43 +208,64 @@
<dl class="hw-list"> <dl class="hw-list">
<div class="hw-row"> <div class="hw-row">
<dt>CPU</dt> <dt>CPU</dt>
<dd><a class="hw-item" href="https://uk.pcpartpicker.com/product/Pk62FT/amd-ryzen-9-9950x3d-43-ghz-16-core-processor-100-100000719wof">AMD Ryzen 9 9950x3d 4.3 GHz 16-Core Processor</a></dd> <dd><a class="hw-item"
href="https://uk.pcpartpicker.com/product/Pk62FT/amd-ryzen-9-9950x3d-43-ghz-16-core-processor-100-100000719wof">AMD
Ryzen 9 9950x3d 4.3 GHz 16-Core Processor</a></dd>
</div> </div>
<div class="hw-row"> <div class="hw-row">
<dt>GPU</dt> <dt>GPU</dt>
<dd><a class="hw-item" href="https://uk.pcpartpicker.com/product/GtXJ7P/xfx-speedster-merc-310-black-edition-radeon-rx-7900-xtx-24-gb-video-card-rx-79xmercb9">XFX Speedster MERC 310 Black Edition Radeon RX 7900 XTX 24 GB Video Card</a></dd> <dd><a class="hw-item"
href="https://uk.pcpartpicker.com/product/GtXJ7P/xfx-speedster-merc-310-black-edition-radeon-rx-7900-xtx-24-gb-video-card-rx-79xmercb9">XFX
Speedster MERC 310 Black Edition Radeon RX 7900 XTX 24 GB Video Card</a></dd>
</div> </div>
<div class="hw-row"> <div class="hw-row">
<dt>RAM</dt> <dt>RAM</dt>
<dd><a class="hw-item" href="https://uk.pcpartpicker.com/product/LWVmP6/corsair-vengeance-64-gb-2-x-32-gb-ddr5-6000-cl40-memory-cmk64gx5m2b6000z40">Corsair Vengeance 64 GB (2 x 32 GB) DDR5-6000 CL40 Memory</a></dd> <dd><a class="hw-item"
href="https://uk.pcpartpicker.com/product/LWVmP6/corsair-vengeance-64-gb-2-x-32-gb-ddr5-6000-cl40-memory-cmk64gx5m2b6000z40">Corsair
Vengeance 64 GB (2 x 32 GB) DDR5-6000 CL40 Memory</a></dd>
</div> </div>
<div class="hw-row"> <div class="hw-row">
<dt>Storage</dt> <dt>Storage</dt>
<dd><a class="hw-item" href="https://uk.pcpartpicker.com/product/YPKscf/acer-predator-gm7-1-tb-m2-2280-pcie-40-x4-nvme-solid-state-drive-bl9bwwr118">2x 1TB NVMe</a> + <a class="hw-item" href="https://uk.pcpartpicker.com/product/fmfhP6/seagate-exos-x14-12-tb-35-7200-rpm-internal-hard-drive-st12000nm0008">10TB HDD</a></dd> <dd><a class="hw-item"
href="https://uk.pcpartpicker.com/product/YPKscf/acer-predator-gm7-1-tb-m2-2280-pcie-40-x4-nvme-solid-state-drive-bl9bwwr118">2x
1TB NVMe</a> + <a class="hw-item"
href="https://uk.pcpartpicker.com/product/fmfhP6/seagate-exos-x14-12-tb-35-7200-rpm-internal-hard-drive-st12000nm0008">10TB
HDD</a></dd>
</div> </div>
<div class="hw-row"> <div class="hw-row">
<dt>Motherboard</dt> <dt>Motherboard</dt>
<dd><a class="hw-item" href="https://uk.pcpartpicker.com/product/Q8KnTW/gigabyte-b850m-aorus-elite-wifi6e-ice-micro-atx-am5-motherboard-b850m-aorus-elite-wifi6e-ice">Gigabyte B850M AORUS ELITE WIFI6E ICE Micro ATX AM5 Motherboard</a></dd> <dd><a class="hw-item"
href="https://uk.pcpartpicker.com/product/Q8KnTW/gigabyte-b850m-aorus-elite-wifi6e-ice-micro-atx-am5-motherboard-b850m-aorus-elite-wifi6e-ice">Gigabyte
B850M AORUS ELITE WIFI6E ICE Micro ATX AM5 Motherboard</a></dd>
</div> </div>
<div class="hw-row"> <div class="hw-row">
<dt>Cooling</dt> <dt>Cooling</dt>
<dd><a class="hw-item" href="https://uk.pcpartpicker.com/product/YXFmP6/thermalright-aqua-elite-v3-6617-cfm-liquid-cpu-cooler-aqua-elite-360-white-v3">Thermalright Aqua Elite V3 66.17 CFM Liquid CPU Cooler</a></dd> <dd><a class="hw-item"
href="https://uk.pcpartpicker.com/product/YXFmP6/thermalright-aqua-elite-v3-6617-cfm-liquid-cpu-cooler-aqua-elite-360-white-v3">Thermalright
Aqua Elite V3 66.17 CFM Liquid CPU Cooler</a></dd>
</div> </div>
<div class="hw-row"> <div class="hw-row">
<dt>Keyboard</dt> <dt>Keyboard</dt>
<dd><a class="hw-item" href="https://en.akkogear.com/product/sakura-miku-5108b-plus-mechanical-keyboard/">Akko Sakura Miku 5108B Plus</a></dd> <dd><a class="hw-item"
href="https://en.akkogear.com/product/sakura-miku-5108b-plus-mechanical-keyboard/">Akko
Sakura Miku 5108B Plus</a></dd>
</div> </div>
<div class="hw-row"> <div class="hw-row">
<dt>Mouse</dt> <dt>Mouse</dt>
<dd><a class="hw-item" href="https://www.logitechg.com/en-gb/shop/p/g502-x-plus-wireless-lightforce.910-006163">Logitech G502 X Gaming Lightspeed Wireless</a></dd> <dd><a class="hw-item"
href="https://www.logitechg.com/en-gb/shop/p/g502-x-plus-wireless-lightforce.910-006163">Logitech
G502 X Gaming Lightspeed Wireless</a></dd>
</div> </div>
<div class="hw-row"> <div class="hw-row">
<dt>Monitor(s)</dt> <dt>Monitor(s)</dt>
<dd><a class="hw-item" href="https://uk.pcpartpicker.com/product/XpVfrH/gigabyte-g34wqcp-340-3440-x-1440-180-hz-curved-monitor-g34wqcp">Gigabyte G34WQCP 34.0" 3440 x 1440 180 Hz Curved Monitor</a></dd> <dd><a class="hw-item"
href="https://uk.pcpartpicker.com/product/XpVfrH/gigabyte-g34wqcp-340-3440-x-1440-180-hz-curved-monitor-g34wqcp">Gigabyte
G34WQCP 34.0" 3440 x 1440 180 Hz Curved Monitor</a></dd>
</div> </div>
<div class="hw-row"> <div class="hw-row">
<dt>Headphones</dt> <dt>Headphones</dt>
<dd><a class="hw-item" href="https://m.yowu.com/product/detail?sku=3588">Yowu Cat Ear Headphones Hatsune Miku NX</a></dd> <dd><a class="hw-item" href="https://m.yowu.com/product/detail?sku=3588">Yowu Cat Ear Headphones
Hatsune Miku NX</a></dd>
</div> </div>
<div class="hw-row"> <div class="hw-row">
<dt>Microphone</dt> <dt>Microphone</dt>
@ -203,7 +273,8 @@
</div> </div>
<div class="hw-row"> <div class="hw-row">
<dt>OS</dt> <dt>OS</dt>
<dd><a class="hw-item" href="https://archlinux.org/download/">Arch Linux</a> | <a class="hw-item" href="https://www.microsoft.com/en-us/software-download/windows11">Windows 11</a></dd> <dd><a class="hw-item" href="https://archlinux.org/download/">Arch Linux</a> | <a class="hw-item"
href="https://www.microsoft.com/en-us/software-download/windows11">Windows 11</a></dd>
</div> </div>
</dl> </dl>
</details> </details>
@ -236,7 +307,8 @@
</div> </div>
<div class="hw-row"> <div class="hw-row">
<dt>Arch btw</dt> <dt>Arch btw</dt>
<dd>Daily driver is Arch Linux: rolling release, built up from the ground exactly how I like it.</dd> <dd>Daily driver is Arch Linux: rolling release, built up from the ground exactly how I like it.
</dd>
</div> </div>
<div class="hw-row"> <div class="hw-row">
<dt>Debian Pro</dt> <dt>Debian Pro</dt>

View File

@ -76,14 +76,14 @@
<main class="presence-stage"> <main class="presence-stage">
<div class="presence-intro"> <div class="presence-intro">
<h1>Discord</h1> <h1>Discord</h1>
<p>What fae is up to, live via Lanyard.</p> <p>What fae is up to, live via Doughmination Restful.</p>
</div> </div>
<div id="discord"></div> <div id="my-discord"></div>
</main> </main>
<script src="/js/core.js" data-cat="/assets/oneko/classics/classic.png"></script> <script src="/js/core.js" data-cat="/assets/oneko/classics/classic.png"></script>
<script src="/js/discord.js" data-user="1464890289922641993"></script> <script src="/js/discord.js"></script>
</body> </body>
</html> </html>

View File

@ -118,8 +118,7 @@
</div> </div>
<script src="/js/core.js" data-cat="/assets/oneko/classics/classic.png"></script> <script src="/js/core.js" data-cat="/assets/oneko/classics/classic.png"></script>
<script src="/js/guestbook.js" <script src="/js/guestbook.js" data-api="https://guestbook.doughmination.uk"
data-api="https://guestbook.doughmination.uk"
data-turnstile-key="0x4AAAAAAB08ZhSxKn5rAD3d"></script> data-turnstile-key="0x4AAAAAAB08ZhSxKn5rAD3d"></script>
</body> </body>

View File

@ -1,3 +1,14 @@
// main.js — merged Discord presence module (formerly discord.js + friends.js).
//
// Part 1: the PresenceCard factory (window.PresenceCard) + the owner's own
// card, auto-mounted on #my-discord with a hardcoded DUID.
// Part 2: the friends/alts grid, auto-mounted on #friends-discord, built
// from the FRIENDS list using the same factory.
//
// HTML usage:
// <div id="my-discord"></div> -> single full presence card (owner)
// <div id="friends-discord"></div> -> friend/alt grid of mini cards
(function () { (function () {
"use strict"; "use strict";
@ -123,6 +134,12 @@
card.dataset.status = "offline"; card.dataset.status = "offline";
card.hidden = false; card.hidden = false;
} }
// Optional @username sub-row for ID-less placeholder cards (e.g. dead alts
// whose display name differs from their actual username). render() will
// overwrite this with the live username if/when real API data comes in.
if (opts.fallbackUser) {
userEl.textContent = "@" + opts.fallbackUser;
}
// ---- wishlist (revealed by the star) ------------------------------------ // ---- wishlist (revealed by the star) ------------------------------------
// Items come straight from the Doughmination Restful API (j.data.wishlist): // Items come straight from the Doughmination Restful API (j.data.wishlist):
@ -351,11 +368,11 @@
const CONNECTION_URLS = { const CONNECTION_URLS = {
tiktok: function (n) { return "https://tiktok.com/@" + n; }, tiktok: function (n) { return "https://tiktok.com/@" + n; },
ebay: function (n) { return "https://www.ebay.com/usr/" + n; }, ebay: function (n) { return "https://www.ebay.com/usr/" + n; },
instagram: function (n) {return "https://www.instagram.com/" + n; }, instagram: function (n) { return "https://www.instagram.com/" + n; },
xbox: function (n) {return "https://www.xbox.com/en-GB/play/user/" + n; }, xbox: function (n) { return "https://www.xbox.com/en-GB/play/user/" + n; },
github: function (n) { return "https://github.com/" + n; }, github: function (n) { return "https://github.com/" + n; },
roblox: function (n, id) { return "https://www.roblox.com/users/" + id + "/profile";}, roblox: function (n, id) { return "https://www.roblox.com/users/" + id + "/profile"; },
epicgames: function (n, id) {return "https://store.epicgames.com/u/" + id; }, epicgames: function (n, id) { return "https://store.epicgames.com/u/" + id; },
twitter: function (n) { return "https://twitter.com/" + n; }, twitter: function (n) { return "https://twitter.com/" + n; },
twitch: function (n) { return "https://twitch.tv/" + n; }, twitch: function (n) { return "https://twitch.tv/" + n; },
youtube: function (n, id) { return "https://youtube.com/channel/" + id; }, youtube: function (n, id) { return "https://youtube.com/channel/" + id; },
@ -829,7 +846,162 @@
// Expose the factory so other pages (e.g. /cool-people) can build cards. // Expose the factory so other pages (e.g. /cool-people) can build cards.
window.PresenceCard = createPresenceCard; window.PresenceCard = createPresenceCard;
// Auto-mount the standalone card whenever its #discord placeholder exists, // ---- the owner's own DUID, hardcoded so #my-discord never needs a query
// preserving the original /discord page behaviour exactly. // string / data attribute to know who to show. ----------------------------
if (document.getElementById("discord")) createPresenceCard({}); var MY_DISCORD_USER_ID = "1464890289922641993";
// Auto-mount the standalone card whenever its placeholder exists.
// #my-discord is the current mount point (see homepage / discord page).
// #discord is kept for backwards compatibility with older markup.
var myMount = document.getElementById("my-discord");
if (myMount) {
createPresenceCard({ mount: myMount, userId: MY_DISCORD_USER_ID });
} else if (document.getElementById("discord")) {
createPresenceCard({});
}
})();
(function friends() {
"use strict";
// Each friend is rendered as a full — but smaller — presence card, built by
// the shared factory above (window.PresenceCard). Cards pull live
// presence (status, activity, badges, banner, bio, connections, wishlist…)
// from the same Doughmination Restful API the main card uses.
// NOTE: now lives in the same file as the factory (formerly discord.js),
// so load order is no longer a concern — this IIFE just runs second.
var FRIENDS = [
{
title: "Fiancée",
members: [
{ name: "Aria", tier: "wife", discordId: "1305215902685597797", link: null }
]
},
{
title: "Close Friends",
members: [
{ name: "Ari", tier: "close", discordId: "1474568910736199825", link: "https://a.stupid.cat" },
// { name: "Lilly", tier: "close", discordId: "908055723659898902", link: null }, // Currently commented out as she's blocked me and idk if I should keep her displayed </3
{ name: "Ria", tier: "close", discordId: "1513506390088618145", link: null },
{ name: "Camilla", tier: "close", discordId: "1110542429838397471", link: "https://cammy-the-cat.com" },
{ name: "Saphie", tier: "close", discordId: "527709099186716673", link: null }
]
},
{
title: "Friends",
members: [
{ name: "Fin", tier: "friend", discordId: "867818211574808607", link: null },
{ name: "Meme", tier: "friend", discordId: "812998699667161098", link: null },
{ name: "N", tier: "friend", discordId: "639399972407869450", link: null },
{ name: "Lylla", tier: "friend", discordId: "1009889543878611016", link: null },
{ name: "Simon", tier: "friend", discordId: "758466783354814514", link: null }
]
},
{
title: "Other Peeps",
subtitle: "You can request to be added here!",
members: [
{ name: "furi", tier: "known", discordId: "781445370177126401", link: "https://furina.is-a.dev" },
{ name: "pokemon", tier: "known", discordId: "784443338627612673", link: "https://devmatei.com/" }
]
},
{
title: "Alts",
subtitle: "My other accounts, dead or alive",
members: [
{ name: "J", user: "real_serial_designationj", img: "/assets/alts/j.png", tier: "active-alt", discordId: "1500197577336033301", link: null },
{ name: "Uzi", user: "theuzidoorman", img: "/assets/alts/uzi.png", tier: "active-alt", discordId: "526626867973849123", link: null },
{ name: "Clove Twilight", user: "clovetwilight3", img: "/assets/alts/clovetwilight3.png", tier: "dead-alt", discordId: null, link: null },
{ name: "estrogenhrt", user: "estrogenhrt", img: "/assets/alts/estrogenhrt.png", tier: "dead-alt", discordId: "1025770042245251122", link: null },
{ name: "Clove <3", img: "/assets/alts/clove.png", tier: "dead-alt", discordId: "1125844710511104030", link: null },
{ name: "Clove ⛤", user: "greenirisluna", img: "/assets/alts/butterfly.png", tier: "dead-alt", discordId: "514994021970739201", link: null },
{ name: "Mrow", user: "arisgayasswife", img: "/assets/alts/mrow.png", tier: "dead-alt", discordId: "219480349053288450", link: null }
]
}
];
var FRIEND_POLL_MS = 60000; // re-poll each live friend once a minute
var root = document.getElementById("friends-discord");
if (!root) return;
// title → URL-safe anchor id, e.g. "Close Friends" -> "close-friends"
function slugify(str) {
return String(str == null ? "" : str)
.toLowerCase()
.trim()
.replace(/[^a-z0-9]+/g, "-")
.replace(/^-+|-+$/g, "");
}
var make = window.PresenceCard;
if (typeof make !== "function") {
console.error("friends.js: window.PresenceCard is missing — load /js/discord.js before /js/friends.js");
}
// ---- render ---------------------------------------------------------
FRIENDS.forEach(function (group) {
var section = document.createElement("section");
section.className = "section";
section.id = slugify(group.title); // anchor target, e.g. #alts
// gg sans (Discord's font) as the default for the whole friends widget —
// group headers, subtitles and the cards inside — over the page's Comic Code.
section.style.fontFamily = "'DDN gg sans', sans-serif";
var h2 = document.createElement("h2");
h2.className = "section-title";
h2.textContent = group.title;
section.appendChild(h2);
if (group.subtitle) {
var sub = document.createElement("p");
sub.className = "section-subtitle";
sub.textContent = group.subtitle;
section.appendChild(sub);
}
var grid = document.createElement("div");
grid.className = "friend-grid";
group.members.forEach(function (m) {
// placeholder slot — the factory replaces it with the finished card
var slot = document.createElement("div");
grid.appendChild(slot);
// Always show the friendly name; for ID-less (dead alt) entries that
// also have a stored `user`, show that as the @username sub-row too.
if (typeof make === "function") {
make({
mount: slot,
userId: m.discordId || null, // null → static placeholder card (dead alts)
mini: true, // smaller styling + keeps page accent local
pollMs: FRIEND_POLL_MS,
tier: m.tier || null,
link: m.link || null,
fallbackName: m.name, // shown instantly + kept if the API has no data
fallbackUser: (!m.discordId && m.user) ? m.user : null,
fallbackImg: m.img || null
});
} else {
// hard fallback: at least show the name if the factory didn't load
slot.className = "presence-card is-mini" + (m.tier ? " tier-" + m.tier : "");
slot.dataset.status = "offline";
slot.textContent = m.name;
}
});
section.appendChild(grid);
root.appendChild(section);
});
// ---- jump to anchor (sections are built after page load) ------------
function scrollToHash() {
var id = (location.hash || "").slice(1);
if (!id) return;
var target = document.getElementById(id);
if (target) target.scrollIntoView();
}
scrollToHash();
window.addEventListener("hashchange", scrollToHash);
})(); })();

View File

@ -1,140 +0,0 @@
(function friends() {
"use strict";
// Each friend is rendered as a full — but smaller — presence card, built by
// the shared factory in discord.js (window.PresenceCard). Cards pull live
// presence (status, activity, badges, banner, bio, connections, wishlist…)
// from the same Doughmination Restful API the /discord card uses.
// NOTE: discord.js must be loaded BEFORE this file (see cool-people/index.html).
var FRIENDS = [
{
title: "Fiancée",
members: [
{ name: "Aria", tier: "wife", discordId: "1305215902685597797", link: null }
]
},
{
title: "Close Friends",
members: [
// { name: "Lilly", tier: "close", discordId: "908055723659898902", link: null },
{ name: "Ria", tier: "close", discordId: "1513506390088618145", link: null },
{ name: "Camilla", tier: "close", discordId: "1110542429838397471", link: "https://cammy-the-cat.com" },
{ name: "Saphie", tier: "close", discordId: "527709099186716673", link: null },
{ name: "Ari", tier: "close", discordId: "1474568910736199825", link: "https://a.stupid.cat" }
]
},
{
title: "Friends",
members: [
{ name: "Fin", tier: "friend", discordId: "867818211574808607", link: null },
{ name: "Meme", tier: "friend", discordId: "812998699667161098", link: null },
{ name: "N", tier: "friend", discordId: "639399972407869450", link: null },
{ name: "Lylla", tier: "friend", discordId: "1009889543878611016", link: null },
{ name: "Simon", tier: "friend", discordId: "758466783354814514", link: null }
]
},
{
title: "Other Peeps",
subtitle: "You can request to be added here!",
members: [
{ name: "furi", tier: "known", discordId: "781445370177126401", link: "https://furina.is-a.dev"},
{ name: "pokemon", tier: "known", discordId: "784443338627612673", link: "https://devmatei.com/" }
]
},
{
title: "Alts",
subtitle: "My other accounts, dead or alive",
members: [
{ name: "J", img: "/assets/alts/j.png", tier: "active-alt", discordId: "1500197577336033301", link: null},
{ name: "Uzi", img: "/assets/alts/uzi.png", tier: "active-alt", discordId: "526626867973849123", link: null },
{ name: "clovetwilight3", img: "/assets/alts/clovetwilight3.png", tier: "dead-alt", discordId: null, link: null },
{ name: "estrogenhrt", img: "/assets/alts/estrogenhrt.png", tier: "dead-alt", discordId: null, link: null },
{ name: "Clove <3", img: "/assets/alts/clove.png", tier: "dead-alt", discordId: "1125844710511104030", link: null},
{ name: "Clove ⛤", img: "/assets/alts/butterfly.png", tier: "dead-alt", discordId: "514994021970739201", link: null },
{ name: "Mrow", img: "/assets/alts/mrow.png", tier: "dead-alt", discordId: "219480349053288450", link: null }
]
}
];
var FRIEND_POLL_MS = 60000; // re-poll each live friend once a minute
var root = document.getElementById("friends-root");
if (!root) return;
// title → URL-safe anchor id, e.g. "Close Friends" -> "close-friends"
function slugify(str) {
return String(str == null ? "" : str)
.toLowerCase()
.trim()
.replace(/[^a-z0-9]+/g, "-")
.replace(/^-+|-+$/g, "");
}
var make = window.PresenceCard;
if (typeof make !== "function") {
console.error("friends.js: window.PresenceCard is missing — load /js/discord.js before /js/friends.js");
}
// ---- render ---------------------------------------------------------
FRIENDS.forEach(function (group) {
var section = document.createElement("section");
section.className = "section";
section.id = slugify(group.title); // anchor target, e.g. #alts
// gg sans (Discord's font) as the default for the whole friends widget —
// group headers, subtitles and the cards inside — over the page's Comic Code.
section.style.fontFamily = "'DDN gg sans', sans-serif";
var h2 = document.createElement("h2");
h2.className = "section-title";
h2.textContent = group.title;
section.appendChild(h2);
if (group.subtitle) {
var sub = document.createElement("p");
sub.className = "section-subtitle";
sub.textContent = group.subtitle;
section.appendChild(sub);
}
var grid = document.createElement("div");
grid.className = "friend-grid";
group.members.forEach(function (m) {
// placeholder slot — the factory replaces it with the finished card
var slot = document.createElement("div");
grid.appendChild(slot);
if (typeof make === "function") {
make({
mount: slot,
userId: m.discordId || null, // null → static placeholder card (dead alts)
mini: true, // smaller styling + keeps page accent local
pollMs: FRIEND_POLL_MS,
tier: m.tier || null,
link: m.link || null,
fallbackName: m.name, // shown instantly + kept if the API has no data
fallbackImg: m.img || null
});
} else {
// hard fallback: at least show the name if the factory didn't load
slot.className = "presence-card is-mini" + (m.tier ? " tier-" + m.tier : "");
slot.dataset.status = "offline";
slot.textContent = m.name;
}
});
section.appendChild(grid);
root.appendChild(section);
});
// ---- jump to anchor (sections are built after page load) ------------
function scrollToHash() {
var id = (location.hash || "").slice(1);
if (!id) return;
var target = document.getElementById(id);
if (target) target.scrollIntoView();
}
scrollToHash();
window.addEventListener("hashchange", scrollToHash);
})();

View File

@ -152,7 +152,7 @@
if (global.turnstile && typeof global.turnstile.getResponse === "function") { if (global.turnstile && typeof global.turnstile.getResponse === "function") {
return global.turnstile.getResponse() || ""; return global.turnstile.getResponse() || "";
} }
} catch (_) {} } catch (_) { }
// Fallback: the widget injects a hidden input named cf-turnstile-response // Fallback: the widget injects a hidden input named cf-turnstile-response
var input = document.querySelector('[name="cf-turnstile-response"]'); var input = document.querySelector('[name="cf-turnstile-response"]');
return input ? input.value : ""; return input ? input.value : "";
@ -221,7 +221,7 @@
if (counterEl) counterEl.textContent = "0 / 500"; if (counterEl) counterEl.textContent = "0 / 500";
try { try {
if (global.turnstile && global.turnstile.reset) global.turnstile.reset(); if (global.turnstile && global.turnstile.reset) global.turnstile.reset();
} catch (_) {} } catch (_) { }
await loadEntries(); await loadEntries();
} catch (err) { } catch (err) {
console.error("[guestbook] submit failed", err); console.error("[guestbook] submit failed", err);

View File

@ -118,7 +118,7 @@
return THEMES[theme] || THEMES.rainbow; return THEMES[theme] || THEMES.rainbow;
} }
const MONTHS = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]; const MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
// track in-flight fetch per container so re-renders cancel cleanly // track in-flight fetch per container so re-renders cancel cleanly
const controllers = new WeakMap(); const controllers = new WeakMap();
@ -160,7 +160,7 @@
if (palette[i]) root.style.setProperty("--contrib-" + i, palette[i]); if (palette[i]) root.style.setProperty("--contrib-" + i, palette[i]);
} }
if (opts.colors) { if (opts.colors) {
for (const k of [0,1,2,3,4]) { for (const k of [0, 1, 2, 3, 4]) {
if (opts.colors[k]) root.style.setProperty("--contrib-" + k, opts.colors[k]); if (opts.colors[k]) root.style.setProperty("--contrib-" + k, opts.colors[k]);
} }
} }

View File

@ -75,7 +75,7 @@
"vc:" + namespace + ":" + key, "vc:" + namespace + ":" + key,
JSON.stringify({ count, session: token }) JSON.stringify({ count, session: token })
); );
} catch (_) {} } catch (_) { }
} }
async function fetchCount(namespace, key) { async function fetchCount(namespace, key) {

View File

@ -21,7 +21,8 @@
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg"> <link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
<!-- SEO Meta Tags --> <!-- SEO Meta Tags -->
<meta name="description" content="What Clove Twilight is listening to — live now-playing track, synced lyrics, and recent plays from Last.fm."> <meta name="description"
content="What Clove Twilight is listening to — live now-playing track, synced lyrics, and recent plays from Last.fm.">
<meta name="keywords" content="Clove Twilight, c.stupid.cat, music, now playing, Last.fm, lyrics, scrobbles"> <meta name="keywords" content="Clove Twilight, c.stupid.cat, music, now playing, Last.fm, lyrics, scrobbles">
<meta name="author" content="doughmination"> <meta name="author" content="doughmination">
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"> <meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
@ -39,7 +40,8 @@
<meta property="og:image" content="https://c.stupid.cat/assets/favicon/favicon.png"> <meta property="og:image" content="https://c.stupid.cat/assets/favicon/favicon.png">
<meta property="og:site_name" content="c.stupid.cat"> <meta property="og:site_name" content="c.stupid.cat">
<meta property="og:title" content="Clove Twilight"> <meta property="og:title" content="Clove Twilight">
<meta property="og:description" content="What Clove Twilight is listening to — live now-playing track, synced lyrics, and recent plays from Last.fm."> <meta property="og:description"
content="What Clove Twilight is listening to — live now-playing track, synced lyrics, and recent plays from Last.fm.">
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<meta property="og:url" content="https://c.stupid.cat/music"> <meta property="og:url" content="https://c.stupid.cat/music">
<meta property="og:locale" content="en_GB"> <meta property="og:locale" content="en_GB">
@ -48,7 +50,8 @@
<meta name="twitter:image" content="https://c.stupid.cat/assets/favicon/favicon.png"> <meta name="twitter:image" content="https://c.stupid.cat/assets/favicon/favicon.png">
<meta name="twitter:card" content="summary"> <meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Clove Twilight"> <meta name="twitter:title" content="Clove Twilight">
<meta name="twitter:description" content="What Clove Twilight is listening to — live now-playing track, synced lyrics, and recent plays from Last.fm."> <meta name="twitter:description"
content="What Clove Twilight is listening to — live now-playing track, synced lyrics, and recent plays from Last.fm.">
<!-- Prefetch other pages for faster navigation --> <!-- Prefetch other pages for faster navigation -->
<link rel="prefetch" href="/"> <link rel="prefetch" href="/">
@ -82,7 +85,8 @@
<!-- now playing --> <!-- now playing -->
<a class="mdc" id="dc-link"> <a class="mdc" id="dc-link">
<img class="mdc-art" id="dc-art" alt="" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"> <img class="mdc-art" id="dc-art" alt=""
src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7">
<div class="mdc-meta"> <div class="mdc-meta">
<span class="mdc-state" id="dc-state">Connecting…</span> <span class="mdc-state" id="dc-state">Connecting…</span>
<span class="mdc-title" id="dc-title"></span> <span class="mdc-title" id="dc-title"></span>
@ -99,9 +103,13 @@
<!-- lyrics --> <!-- lyrics -->
<div class="sec-row" id="lyrics-section"> <div class="sec-row" id="lyrics-section">
<h2 class="sec-title">Lyrics</h2> <h2 class="sec-title">Lyrics</h2>
<button class="ly-lock is-locked" id="ly-lock" type="button" aria-pressed="true" hidden><span class="ly-bars" aria-hidden="true"><i></i><i></i><i></i><i></i></span><span class="ly-lock-label">Synced</span></button> <button class="ly-lock is-locked" id="ly-lock" type="button" aria-pressed="true" hidden><span
class="ly-bars" aria-hidden="true"><i></i><i></i><i></i><i></i></span><span
class="ly-lock-label">Synced</span></button>
</div>
<div class="lyrics is-empty" id="lyrics">
<p class="ly-note">Waiting for a track…</p>
</div> </div>
<div class="lyrics is-empty" id="lyrics"><p class="ly-note">Waiting for a track…</p></div>
<!-- recently played --> <!-- recently played -->
<h2 class="sec-title" id="recently-played">Recently played</h2> <h2 class="sec-title" id="recently-played">Recently played</h2>

View File

@ -10,7 +10,8 @@
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg"> <link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
<!-- SEO Meta Tags --> <!-- SEO Meta Tags -->
<meta name="description" content="Explore the projects Clove Twilight actively builds and contributes to, from web apps to Discord bots."> <meta name="description"
content="Explore the projects Clove Twilight actively builds and contributes to, from web apps to Discord bots.">
<meta name="keywords" content="Clove Twilight, c.stupid.cat, projects, portfolio, developer, open source"> <meta name="keywords" content="Clove Twilight, c.stupid.cat, projects, portfolio, developer, open source">
<meta name="author" content="doughmination"> <meta name="author" content="doughmination">
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"> <meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
@ -28,7 +29,8 @@
<meta property="og:image" content="https://c.stupid.cat/assets/favicon/favicon.png"> <meta property="og:image" content="https://c.stupid.cat/assets/favicon/favicon.png">
<meta property="og:site_name" content="c.stupid.cat"> <meta property="og:site_name" content="c.stupid.cat">
<meta property="og:title" content="Clove Twilight"> <meta property="og:title" content="Clove Twilight">
<meta property="og:description" content="Explore the projects Clove Twilight actively builds and contributes to, from web apps to Discord bots."> <meta property="og:description"
content="Explore the projects Clove Twilight actively builds and contributes to, from web apps to Discord bots.">
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<meta property="og:url" content="https://c.stupid.cat/projects"> <meta property="og:url" content="https://c.stupid.cat/projects">
<meta property="og:locale" content="en_GB"> <meta property="og:locale" content="en_GB">
@ -37,7 +39,8 @@
<meta name="twitter:image" content="https://c.stupid.cat/assets/favicon/favicon.png"> <meta name="twitter:image" content="https://c.stupid.cat/assets/favicon/favicon.png">
<meta name="twitter:card" content="summary"> <meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Clove Twilight"> <meta name="twitter:title" content="Clove Twilight">
<meta name="twitter:description" content="Explore the projects Clove Twilight actively builds and contributes to, from web apps to Discord bots."> <meta name="twitter:description"
content="Explore the projects Clove Twilight actively builds and contributes to, from web apps to Discord bots.">
<!-- Prefetch other pages for faster navigation --> <!-- Prefetch other pages for faster navigation -->
<link rel="prefetch" href="/"> <link rel="prefetch" href="/">
@ -89,7 +92,8 @@
<span class="project-card-title">Ghostwire</span> <span class="project-card-title">Ghostwire</span>
<span class="project-card-status closed">Closed Source</span> <span class="project-card-status closed">Closed Source</span>
</div> </div>
<p class="project-card-bio">The private security bot and brains behind everything major in Girls.</p> <p class="project-card-bio">The private security bot and brains behind everything major in
Girls.</p>
</div> </div>
</a> </a>
@ -100,7 +104,8 @@
<span class="project-card-title">GayBot</span> <span class="project-card-title">GayBot</span>
<span class="project-card-status">Open Source</span> <span class="project-card-status">Open Source</span>
</div> </div>
<p class="project-card-bio">A Discord bot for LGBTQIA+ servers &mdash; keyword emoji reactions, identity profiles, lookups, and a few fun extras.</p> <p class="project-card-bio">A Discord bot for LGBTQIA+ servers &mdash; keyword emoji reactions,
identity profiles, lookups, and a few fun extras.</p>
</div> </div>
</a> </a>
@ -140,7 +145,8 @@
<span class="project-card-title">Mod Update Checker</span> <span class="project-card-title">Mod Update Checker</span>
<span class="project-card-status">Open Source</span> <span class="project-card-status">Open Source</span>
</div> </div>
<p class="project-card-bio is-placeholder">Add a short description for Mod Update Checker here.</p> <p class="project-card-bio is-placeholder">Add a short description for Mod Update Checker here.
</p>
</div> </div>
</a> </a>
@ -162,7 +168,8 @@
<span class="project-card-title">Widget-v2 Script</span> <span class="project-card-title">Widget-v2 Script</span>
<span class="project-card-status">Open Source</span> <span class="project-card-status">Open Source</span>
</div> </div>
<p class="project-card-bio is-placeholder">Add a short description for Widget-v2 Script here.</p> <p class="project-card-bio is-placeholder">Add a short description for Widget-v2 Script here.
</p>
</div> </div>
</a> </a>

View File

@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
@ -48,6 +49,7 @@
<link rel="prefetch" href="/music"> <link rel="prefetch" href="/music">
<link rel="prefetch" href="/88x31"> <link rel="prefetch" href="/88x31">
</head> </head>
<body> <body>
<header class="nav"> <header class="nav">
@ -76,4 +78,5 @@
<script src="/js/core.js" data-cat="/assets/oneko/classics/classic.png"></script> <script src="/js/core.js" data-cat="/assets/oneko/classics/classic.png"></script>
<script src="/js/selfies.js"></script> <script src="/js/selfies.js"></script>
</body> </body>
</html> </html>