silly personal website
1

Configure Feed

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

ion remember lul

july (May 13, 2026, 6:29 PM -0300) 8b1ff4ff fd9582f5

+66 -37
+1
.gitignore
··· 1 1 sync.sh 2 + TOmCob8gDIDAg6bPNF34.tsx
+7 -7
src/components/Footer.tsx
··· 52 52 <hr /> 53 53 <Import styles={[footer]} /> 54 54 <p> 55 - © {new Date().getFullYear()} <span class="highlight">kyure</span> 55 + © {new Date().getFullYear()} <span class="highlight">kyu.re</span> 56 56 {" · "} 57 57 Made with <span class="highlight">❤</span> · Source code available at{" "} 58 58 <a href="https://kyu.re/~web">https://kyu.re/~web</a> under the{" "} ··· 72 72 adoravel 73 73 </a> 74 74 </li> 75 - <li> 76 - <a href="https://tangled.org/kyu.re"> 77 - <Tangled /> 78 - kyu.re 79 - </a> 80 - </li> 75 + {/* <li> */} 76 + {/* <a href="https://tangled.org/kyu.re"> */} 77 + {/* <Tangled /> */} 78 + {/* kyu.re */} 79 + {/* </a> */} 80 + {/* </li> */} 81 81 <li> 82 82 <button onclick="let t=this.lastChild,n=t.nodeValue;navigator.clipboard.writeText(n.trim());if(!this.dataset.t){this.dataset.t=n;t.nodeValue=' copied to clipboard';setTimeout(()=>{t.nodeValue=this.dataset.t;delete this.dataset.t},3000)}"> 83 83 <Fluxer />
+1 -1
src/components/KVTable.tsx
··· 14 14 display: grid; 15 15 grid-template-columns: minmax(80px, 140px) 1fr; 16 16 border-bottom: 1px solid var(--theme-surface-border); 17 - transition: background 0.1s; 17 + transition: background 0.1s var(--transition-fast); 18 18 } 19 19 20 20 .kv-row:last-child { border-bottom: none; }
+5 -3
src/components/Projects.tsx
··· 17 17 export const ProjectLanguage = { 18 18 TypeScript: { label: "TypeScript", colour: "#3178c6" }, 19 19 C: { label: "C", colour: "#555" }, 20 + Scala: { label: "Scala", colour: "#c22d40" }, 20 21 } as const; 21 22 22 23 export type ProjectLanguage = typeof ProjectLanguage[keyof typeof ProjectLanguage]; ··· 57 58 .project-card:hover { 58 59 background-color: rgba(255, 255, 255, 0.025); 59 60 border-color: rgba(255, 255, 255, 0.125); 60 - 61 + 61 62 &::before { 62 63 transform: scale(1.125); 63 64 opacity: 1; ··· 77 78 text-align: center; 78 79 align-items: center; 79 80 justify-content: center; 81 + transition: transform 0.1s var(--transition-fast); 80 82 -webkit-text-stroke: 2px var(--theme-inner-border); 81 - opacity: 0.16; 83 + opacity: 0.32; 82 84 } 83 85 84 86 .external-icon { ··· 102 104 } 103 105 104 106 .author { 105 - font-size: calc(var(--font-size-sm) * 1.25); 107 + font-size: var(--font-size-md); 106 108 margin-bottom: var(--space-1) 107 109 } 108 110
+1 -1
src/components/Typecycle.tsx
··· 61 61 <span class={typecycle.scope}> 62 62 <Import styles={[typecycle]} /> 63 63 <span style="color: var(--theme-foreground-alt)">λ</span> 64 - <span class="text">kyure</span> 64 + <span class="text">kyu.re</span> 65 65 </span> 66 66 ); 67 67 }
+43 -20
src/constants.ts
··· 1 1 import { ProjectLanguage } from "~/components/Projects.tsx"; 2 2 import { MediaItemProps } from "./components/MediaItem.tsx"; 3 3 4 - function art(path: string, size = "512x512bb.jpg"): string { 5 - return `https://is1-ssl.mzstatic.com/image/thumb/${path}/${size}`; 4 + function art(path: string, size = "512x512bb"): string { 5 + return `https://is1-ssl.mzstatic.com/image/thumb/${path}.jpg/${size}.jpg`; 6 6 } 7 7 8 8 export const songs: MediaItemProps[] = [ 9 9 { 10 - header: "(Un)Equivalent_Exchange", 11 - album: "The Death and Birth of an Angel", 12 - artist: "fallingwithscissors", 13 - tag: "metalcore, cybergrind", 10 + header: "matryoshka", 11 + album: "heartstrings", 12 + artist: "lexycat", 13 + tag: "digicore, plunderphonics", 14 14 url: "https://song.link/i/1722427758", 15 - coverUrl: art("Music116/v4/1c/d1/c3/1cd1c301-4c19-5c6e-f846-0377c5f89f02/artwork.jpg"), 16 - releaseDate: "Released on December 22, 2023", 15 + coverUrl: art("Music211/v4/b9/7b/66/b97b6672-7c40-8b1c-fd7b-51e8866c0a6a/cover_198662567310"), 16 + releaseDate: "Released on August 18, 2024", 17 17 }, 18 18 { 19 - header: "Tá Perdoado", 20 - album: "Samba Meu", 21 - artist: "Maria Rita", 22 - tag: "samba, mpb", 23 - url: "https://song.link/i/263514926", 24 - coverUrl: art("Music125/v4/f5/8e/a6/f58ea644-ce2d-ed8f-765c-6c8af49b8b7e/mzi.cnyqyppy.jpg"), 25 - releaseDate: "Released on September 1, 2007", 19 + header: "tile floors", 20 + album: "lettinggomakestheheartburnhotter", 21 + artist: "fallingwithscissors", 22 + tag: "experimental metalcore", 23 + url: "https://song.link/i/1681979278", 24 + coverUrl: art("Music116/v4/53/4d/18/534d18da-75d9-5d48-2a14-17256a49c2c9/9b0f51d8-05f2-47a6-ba89-01ad8804828b"), 25 + releaseDate: "Released on April 17, 2023", 26 26 }, 27 27 { 28 - header: "i need to see", 29 - album: "my limbs are not mine", 28 + header: "lose myself in you", 29 + album: "lose myself in you", 30 30 artist: "coffret de bijoux", 31 31 tag: "atmospheric black metal", 32 - url: "https://song.link/i/1877277808", 33 - coverUrl: art("Music211/v4/27/94/f3/2794f31b-256b-1282-5c7e-6c4d99a3e0f5/5063907590277_cover.jpg"), 34 - releaseDate: "Released on January 2, 2026", 32 + url: "https://song.link/i/1886039227", 33 + coverUrl: art("Music221/v4/39/19/03/39190326-8671-70f7-a488-39ae4d6d74bb/5063959778586_cover"), 34 + releaseDate: "Released on March 9, 2026", 35 35 }, 36 36 ]; 37 37 ··· 52 52 license: "BSD-3-Clause", 53 53 url: "/~ratazana", 54 54 lang: ProjectLanguage.C, 55 + }, 56 + { 57 + author: "w", 58 + name: "ribbon", 59 + description: "modular client mod for fluxer", 60 + url: "/~ribbon", 61 + license: "EUPL-1.2 & MPL-2.0", 62 + lang: ProjectLanguage.TypeScript, 63 + }, 64 + { 65 + author: "w", 66 + name: "scrobkit", 67 + description: "a minimal CLI toolkit for working with last.fm scrobbles", 68 + url: "/~scrobkit", 69 + license: "BSD-3-Clause", 70 + lang: ProjectLanguage.TypeScript, 71 + }, 72 + { 73 + author: "w", 74 + name: "terracotta", 75 + description: "mill-based toolchain for crossplatform and multi-version minecraft mod development", 76 + license: "LGPL-3.0", 77 + lang: ProjectLanguage.Scala, 55 78 }, 56 79 { 57 80 author: "w",
+1 -2
src/layout.tsx
··· 4 4 */ 5 5 6 6 import { jsx, JsxElement, JsxNode } from "@july/snarl/jsx-runtime"; 7 - import { css } from "./mech/css.ts"; 8 7 9 8 const styles = /* css */ ` 10 9 :root { ··· 195 194 const result: CollectResult = { head: [], body: [] }; 196 195 collect(children, result); 197 196 198 - return ( 197 + return "<!DOCTYPE html>" + ( 199 198 <html lang="en"> 200 199 <head> 201 200 <meta charset="utf-8" />
+7 -3
src/routes/mod.tsx
··· 8 8 import { NavigationBar } from "~/components/NavigationBar.tsx"; 9 9 import { Typecycle } from "~/components/Typecycle.tsx"; 10 10 import SectionTitle from "~/components/SectionTitle.tsx"; 11 - import Projects, { ProjectLanguage } from "~/components/Projects.tsx"; 11 + import Projects from "~/components/Projects.tsx"; 12 12 import { MediaItem } from "~/components/MediaItem.tsx"; 13 13 import { Fm } from "~/components/Fm.tsx"; 14 14 import KVTable from "~/components/KVTable.tsx"; ··· 17 17 18 18 const home = css(` 19 19 #heading { 20 - margin-bottom: var(--spacing-2xl); 20 + margin-bottom: var(--section-spacing); 21 21 position: relative; 22 22 } 23 23 24 24 #heading h1 { 25 25 font-size: clamp(1.5rem, 5vw + 0.5rem, var(--font-size-2xl)); 26 - line-height: 1.2; 26 + line-height: 1.25; 27 27 margin-bottom: var(--space-1); 28 28 display: block; 29 29 } ··· 155 155 font-size: var(--font-size-text); 156 156 user-select: none; 157 157 } 158 + 159 + .break { 160 + height: 1em; 161 + } 158 162 159 163 .buttons { 160 164 display: flex;