home to your local SPACEGIRL 💫 arimelody.space
1
fork

Configure Feed

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

homepage rework for socials and projects

+424 -129
-67
controller/qr.go
··· 1 1 package controller 2 2 3 3 import ( 4 - "bytes" 5 4 "encoding/base64" 6 - "errors" 7 - "fmt" 8 5 "image" 9 6 "image/color" 10 - "image/png" 11 7 12 8 "github.com/skip2/go-qrcode" 13 9 ) ··· 32 28 QUARTILE 33 29 HIGH 34 30 ) 35 - 36 - func noDepsGenerateQRCode() (string, error) { 37 - version := 1 38 - 39 - size := 0 40 - size = 21 + version * 4 41 - if version > 10 { 42 - return "", errors.New(fmt.Sprintf("QR version %d not supported", version)) 43 - } 44 - 45 - img := image.NewGray(image.Rect(0, 0, size + margin * 2, size + margin * 2)) 46 - 47 - // fill white 48 - for y := range size + margin * 2 { 49 - for x := range size + margin * 2 { 50 - img.Set(x, y, color.White) 51 - } 52 - } 53 - 54 - // draw alignment squares 55 - drawLargeAlignmentSquare(margin, margin, img) 56 - drawLargeAlignmentSquare(margin, margin + size - 7, img) 57 - drawLargeAlignmentSquare(margin + size - 7, margin, img) 58 - drawSmallAlignmentSquare(size - 5, size - 5, img) 59 - /* 60 - if version > 4 { 61 - space := version * 3 - 2 62 - end := size / space 63 - for y := range size / space + 1 { 64 - for x := range size / space + 1 { 65 - if x == 0 && y == 0 { continue } 66 - if x == 0 && y == end { continue } 67 - if x == end && y == 0 { continue } 68 - if x == end && y == end { continue } 69 - drawSmallAlignmentSquare( 70 - x * space + margin + 4, 71 - y * space + margin + 4, 72 - img, 73 - ) 74 - } 75 - } 76 - } 77 - */ 78 - 79 - // draw timing bits 80 - for i := margin + 6; i < size - 4; i++ { 81 - if (i % 2 == 0) { 82 - img.Set(i, margin + 6, color.Black) 83 - img.Set(margin + 6, i, color.Black) 84 - } 85 - } 86 - img.Set(margin + 8, size - 4, color.Black) 87 - 88 - var imgBuf bytes.Buffer 89 - err := png.Encode(&imgBuf, img) 90 - if err != nil { 91 - return "", err 92 - } 93 - 94 - base64Img := base64.StdEncoding.EncodeToString(imgBuf.Bytes()) 95 - 96 - return "data:image/png;base64," + base64Img, nil 97 - } 98 31 99 32 func drawLargeAlignmentSquare(x int, y int, img *image.Gray) { 100 33 for yi := range 7 {
+10
public/img/brand/bandcamp.svg
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 + <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 3 + <svg width="100%" height="100%" viewBox="0 0 512 512" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> 4 + <g> 5 + <path d="M256,512C397.384,512 512,397.385 512,256C512,114.616 397.384,0 256,0C114.615,0 0,114.616 0,256C0,397.385 114.615,512 256,512Z" style="fill:rgb(35,159,194);"/> 6 + <path d="M324.857,238.405C306.507,238.405 297.131,252.847 297.131,274.605C297.131,295.171 307.269,310.609 324.857,310.609C344.746,310.609 352.202,292.407 352.202,274.605C352.188,256.015 342.817,238.405 324.851,238.405L324.857,238.405ZM276.1,184.409L297.896,184.409L297.896,236.624L298.282,236.624C304.209,226.737 316.637,220.603 327.728,220.603C358.89,220.603 374.001,245.137 374.001,275.007C374.001,302.492 360.618,328.405 331.358,328.405C317.974,328.405 303.633,325.051 297.13,311.596L296.752,311.596L296.752,325.647L276.098,325.647L276.098,184.412L276.1,184.409Z" style="fill:white;"/> 7 + <path d="M454.389,257.598C452.667,245.136 443.874,238.406 431.827,238.406C420.54,238.406 404.674,244.541 404.674,275.598C404.674,292.61 411.938,310.613 430.87,310.613C443.488,310.613 452.281,301.899 454.389,287.262L476.185,287.262C472.169,313.768 456.302,328.405 430.87,328.405C399.893,328.405 382.876,305.663 382.876,275.598C382.876,244.742 399.129,220.609 431.635,220.609C454.579,220.609 474.089,232.476 476.185,257.6L454.425,257.6L454.389,257.598Z" style="fill:white;"/> 8 + <path d="M199.895,325.339L36.407,325.339L112.753,184.409L276.242,184.409L199.895,325.339Z" style="fill:white;"/> 9 + </g> 10 + </svg>
+10
public/img/brand/bluesky.svg
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 + <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 3 + <svg width="100%" height="100%" viewBox="0 0 568 501" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> 4 + <g transform="matrix(1,0,0,1,-228,-281.442)"> 5 + <path d="M351.121,315.106C416.241,363.994 486.281,463.123 512,516.315C537.719,463.123 607.759,363.994 672.879,315.106C719.866,279.83 796,252.536 796,339.388C796,356.734 786.055,485.101 780.222,505.943C759.947,578.396 686.067,596.876 620.347,585.691C735.222,605.242 764.444,670.002 701.333,734.762C581.473,857.754 529.061,703.903 515.631,664.481C513.169,657.254 512.017,653.873 512,656.748C511.983,653.873 510.831,657.254 508.369,664.481C494.939,703.903 442.527,857.754 322.667,734.762C259.556,670.002 288.778,605.242 403.653,585.691C337.933,596.876 264.053,578.396 243.778,505.943C237.945,485.101 228,356.734 228,339.388C228,252.536 304.134,279.83 351.121,315.106Z" style="fill:url(#_Linear1);fill-rule:nonzero;"/> 6 + </g> 7 + <defs> 8 + <linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.06233e-14,500.117,-500.117,3.06233e-14,512,281.442)"><stop offset="0" style="stop-color:rgb(10,122,255);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(89,185,255);stop-opacity:1"/></linearGradient> 9 + </defs> 10 + </svg>
+164
public/img/brand/codeberg.svg
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 + <svg 3 + width="16" 4 + height="16" 5 + viewBox="0 0 4.2333332 4.2333335" 6 + version="1.1" 7 + id="svg1468" 8 + sodipodi:docname="codeberg-logo_icon_blue.svg" 9 + inkscape:version="1.2-alpha1 (b6a15bb, 2022-02-23)" 10 + inkscape:export-filename="/home/mray/Projects/Codeberg/logo/icon/png/codeberg-logo_icon_blue.png" 11 + inkscape:export-xdpi="384" 12 + inkscape:export-ydpi="384" 13 + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 14 + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 15 + xmlns:xlink="http://www.w3.org/1999/xlink" 16 + xmlns="http://www.w3.org/2000/svg" 17 + xmlns:svg="http://www.w3.org/2000/svg" 18 + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 19 + xmlns:cc="http://creativecommons.org/ns#" 20 + xmlns:dc="http://purl.org/dc/elements/1.1/"> 21 + <title 22 + id="title16">Codeberg logo</title> 23 + <defs 24 + id="defs1462"> 25 + <linearGradient 26 + xlink:href="#linearGradient6924" 27 + id="linearGradient6918" 28 + x1="42519.285" 29 + y1="-7078.7891" 30 + x2="42575.336" 31 + y2="-6966.9307" 32 + gradientUnits="userSpaceOnUse" /> 33 + <linearGradient 34 + id="linearGradient6924"> 35 + <stop 36 + style="stop-color:#2185d0;stop-opacity:0" 37 + offset="0" 38 + id="stop6920" /> 39 + <stop 40 + id="stop6926" 41 + offset="0.49517274" 42 + style="stop-color:#2185d0;stop-opacity:0.48923996" /> 43 + <stop 44 + style="stop-color:#2185d0;stop-opacity:0.63279623" 45 + offset="1" 46 + id="stop6922" /> 47 + </linearGradient> 48 + <linearGradient 49 + xlink:href="#linearGradient6924-6" 50 + id="linearGradient6918-3" 51 + x1="42519.285" 52 + y1="-7078.7891" 53 + x2="42575.336" 54 + y2="-6966.9307" 55 + gradientUnits="userSpaceOnUse" /> 56 + <linearGradient 57 + id="linearGradient6924-6"> 58 + <stop 59 + style="stop-color:#2185d0;stop-opacity:0;" 60 + offset="0" 61 + id="stop6920-7" /> 62 + <stop 63 + id="stop6926-5" 64 + offset="0.49517274" 65 + style="stop-color:#2185d0;stop-opacity:0.30000001;" /> 66 + <stop 67 + style="stop-color:#2185d0;stop-opacity:0.30000001;" 68 + offset="1" 69 + id="stop6922-3" /> 70 + </linearGradient> 71 + </defs> 72 + <sodipodi:namedview 73 + showborder="false" 74 + id="base" 75 + pagecolor="#ffffff" 76 + bordercolor="#666666" 77 + borderopacity="1.0" 78 + inkscape:pageopacity="0.0" 79 + inkscape:pageshadow="2" 80 + inkscape:zoom="22.627417" 81 + inkscape:cx="12.948893" 82 + inkscape:cy="12.661631" 83 + inkscape:document-units="px" 84 + inkscape:current-layer="svg1468" 85 + inkscape:document-rotation="0" 86 + showgrid="false" 87 + fit-margin-top="0" 88 + fit-margin-left="0" 89 + fit-margin-right="0" 90 + fit-margin-bottom="0" 91 + units="px" 92 + inkscape:snap-global="false" 93 + inkscape:snap-page="true" 94 + showguides="false" 95 + inkscape:window-width="1531" 96 + inkscape:window-height="873" 97 + inkscape:window-x="69" 98 + inkscape:window-y="27" 99 + inkscape:window-maximized="1" 100 + inkscape:pagecheckerboard="0" 101 + inkscape:deskcolor="#d1d1d1"> 102 + <inkscape:grid 103 + type="xygrid" 104 + id="grid2067" /> 105 + </sodipodi:namedview> 106 + <metadata 107 + id="metadata1465"> 108 + <rdf:RDF> 109 + <cc:Work 110 + rdf:about=""> 111 + <dc:format>image/svg+xml</dc:format> 112 + <dc:type 113 + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> 114 + <dc:title>Codeberg logo</dc:title> 115 + <cc:license 116 + rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" /> 117 + <dc:creator> 118 + <cc:Agent> 119 + <dc:title>Robert Martinez</dc:title> 120 + </cc:Agent> 121 + </dc:creator> 122 + <dc:rights> 123 + <cc:Agent> 124 + <dc:title>Codeberg and the Codeberg Logo are trademarks of Codeberg e.V.</dc:title> 125 + </cc:Agent> 126 + </dc:rights> 127 + <dc:date>2020-04-09</dc:date> 128 + <dc:publisher> 129 + <cc:Agent> 130 + <dc:title>Codeberg e.V.</dc:title> 131 + </cc:Agent> 132 + </dc:publisher> 133 + <dc:source>codeberg.org</dc:source> 134 + </cc:Work> 135 + <cc:License 136 + rdf:about="http://creativecommons.org/publicdomain/zero/1.0/"> 137 + <cc:permits 138 + rdf:resource="http://creativecommons.org/ns#Reproduction" /> 139 + <cc:permits 140 + rdf:resource="http://creativecommons.org/ns#Distribution" /> 141 + <cc:permits 142 + rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /> 143 + </cc:License> 144 + </rdf:RDF> 145 + </metadata> 146 + <g 147 + id="g370484" 148 + inkscape:label="logo" 149 + transform="matrix(0.06551432,0,0,0.06551432,-2.232417,-1.431776)"> 150 + <path 151 + id="path6733-5" 152 + style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:url(#linearGradient6918-3);fill-opacity:1;stroke:none;stroke-width:3.67846;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke markers fill;stop-color:#000000;stop-opacity:1" 153 + d="m 42519.285,-7078.7891 a 0.76086879,0.56791688 0 0 0 -0.738,0.6739 l 33.586,125.8886 a 87.182358,87.182358 0 0 0 39.381,-33.7636 l -71.565,-92.5196 a 0.76086879,0.56791688 0 0 0 -0.664,-0.2793 z" 154 + transform="matrix(0.37058478,0,0,0.37058478,-15690.065,2662.0533)" 155 + inkscape:label="berg" /> 156 + <path 157 + id="path360787" 158 + style="opacity:1;fill:#2185d0;fill-opacity:1;stroke-width:17.0055;paint-order:markers fill stroke;stop-color:#000000" 159 + d="m 11249.461,-1883.6961 c -12.74,0 -23.067,10.3275 -23.067,23.0671 0,4.3335 1.22,8.5795 3.522,12.2514 l 19.232,-24.8636 c 0.138,-0.1796 0.486,-0.1796 0.624,0 l 19.233,24.8646 c 2.302,-3.6721 3.523,-7.9185 3.523,-12.2524 0,-12.7396 -10.327,-23.0671 -23.067,-23.0671 z" 160 + sodipodi:nodetypes="sccccccs" 161 + inkscape:label="sky" 162 + transform="matrix(1.4006354,0,0,1.4006354,-15690.065,2662.0533)" /> 163 + </g> 164 + </svg>
+1
public/img/brand/discord.svg
··· 1 + <?xml version="1.0" encoding="UTF-8"?><svg id="Discord-Logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 126.644 96"><defs><style>.cls-1{fill:#5865f2;}</style></defs><path id="Discord-Symbol-Blurple" class="cls-1" d="M81.15,0c-1.2376,2.1973-2.3489,4.4704-3.3591,6.794-9.5975-1.4396-19.3718-1.4396-28.9945,0-.985-2.3236-2.1216-4.5967-3.3591-6.794-9.0166,1.5407-17.8059,4.2431-26.1405,8.0568C2.779,32.5304-1.6914,56.3725.5312,79.8863c9.6732,7.1476,20.5083,12.603,32.0505,16.0884,2.6014-3.4854,4.8998-7.1981,6.8698-11.0623-3.738-1.3891-7.3497-3.1318-10.8098-5.1523.9092-.6567,1.7932-1.3386,2.6519-1.9953,20.281,9.547,43.7696,9.547,64.0758,0,.8587.7072,1.7427,1.3891,2.6519,1.9953-3.4601,2.0457-7.0718,3.7632-10.835,5.1776,1.97,3.8642,4.2683,7.5769,6.8698,11.0623,11.5419-3.4854,22.3769-8.9156,32.0509-16.0631,2.626-27.2771-4.496-50.9172-18.817-71.8548C98.9811,4.2684,90.1918,1.5659,81.1752.0505l-.0252-.0505ZM42.2802,65.4144c-6.2383,0-11.4159-5.6575-11.4159-12.6535s4.9755-12.6788,11.3907-12.6788,11.5169,5.708,11.4159,12.6788c-.101,6.9708-5.026,12.6535-11.3907,12.6535ZM84.3576,65.4144c-6.2637,0-11.3907-5.6575-11.3907-12.6535s4.9755-12.6788,11.3907-12.6788,11.4917,5.708,11.3906,12.6788c-.101,6.9708-5.026,12.6535-11.3906,12.6535Z"/></svg>
+21
public/img/brand/twitch.svg
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <!-- Generator: Adobe Illustrator 23.0.6, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 + <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 4 + viewBox="0 0 2400 2800" style="enable-background:new 0 0 2400 2800;" xml:space="preserve"> 5 + <style type="text/css"> 6 + .st0{fill:#FFFFFF;} 7 + .st1{fill:#9146FF;} 8 + </style> 9 + <title>Asset 2</title> 10 + <g> 11 + <polygon class="st0" points="2200,1300 1800,1700 1400,1700 1050,2050 1050,1700 600,1700 600,200 2200,200 "/> 12 + <g> 13 + <g id="Layer_1-2"> 14 + <path class="st1" d="M500,0L0,500v1800h600v500l500-500h400l900-900V0H500z M2200,1300l-400,400h-400l-350,350v-350H600V200h1600 15 + V1300z"/> 16 + <rect x="1700" y="550" class="st1" width="200" height="600"/> 17 + <rect x="1150" y="550" class="st1" width="200" height="600"/> 18 + </g> 19 + </g> 20 + </g> 21 + </svg>
+10
public/img/brand/youtube.svg
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 + <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 3 + <svg width="100%" height="100%" viewBox="0 0 507 355" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> 4 + <g transform="matrix(4.16667,0,0,4.16667,495.608,299.004)"> 5 + <path d="M0,-58.482C-1.397,-63.709 -5.514,-67.825 -10.741,-69.222C-20.215,-71.761 -58.204,-71.761 -58.204,-71.761C-58.204,-71.761 -96.193,-71.761 -105.667,-69.222C-110.894,-67.825 -115.011,-63.709 -116.408,-58.482C-118.946,-49.008 -118.946,-29.241 -118.946,-29.241C-118.946,-29.241 -118.946,-9.474 -116.408,-0.001C-115.011,5.226 -110.894,9.343 -105.667,10.74C-96.193,13.279 -58.204,13.279 -58.204,13.279C-58.204,13.279 -20.215,13.279 -10.741,10.74C-5.514,9.343 -1.397,5.226 0,-0.001C2.539,-9.474 2.539,-29.241 2.539,-29.241C2.539,-29.241 2.539,-49.008 0,-58.482" style="fill:rgb(255,0,0);fill-rule:nonzero;"/> 6 + </g> 7 + <g transform="matrix(4.16667,0,0,4.16667,202.472,101.237)"> 8 + <path d="M0,36.446L31.562,18.223L0,0L0,36.446Z" style="fill:white;fill-rule:nonzero;"/> 9 + </g> 10 + </svg>
+7
public/script/index.js
··· 1 + import { hijackClickEvent } from "./main.js"; 2 + 1 3 const hexPrimary = document.getElementById("hex-primary"); 2 4 const hexSecondary = document.getElementById("hex-secondary"); 3 5 const hexTertiary = document.getElementById("hex-tertiary"); ··· 14 16 window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", () => { 15 17 updateHexColours(); 16 18 }); 19 + 20 + document.querySelectorAll("ul#projects li.project-item").forEach(projectItem => { 21 + const link = projectItem.querySelector('a'); 22 + hijackClickEvent(projectItem, link); 23 + });
+17
public/script/main.js
··· 45 45 }); 46 46 } 47 47 48 + export function hijackClickEvent(container, link) { 49 + container.addEventListener('click', event => { 50 + if (event.target.tagName.toLowerCase() === 'a') return; 51 + event.preventDefault(); 52 + link.dispatchEvent(new MouseEvent('click', { 53 + bubbles: true, 54 + cancelable: true, 55 + view: window, 56 + ctrlKey: event.ctrlKey, 57 + metaKey: event.metaKey, 58 + shiftKey: event.shiftKey, 59 + altKey: event.altKey, 60 + button: event.button, 61 + })); 62 + }); 63 + } 64 + 48 65 document.addEventListener("DOMContentLoaded", () => { 49 66 [...document.querySelectorAll(".typeout")] 50 67 .filter((e) => e.innerText != "")
+3 -9
public/script/music.js
··· 1 - import "./main.js"; 1 + import { hijackClickEvent } from "./main.js"; 2 2 3 3 document.querySelectorAll("div.music").forEach(container => { 4 - const link = container.querySelector(".music-title a").href 5 - 6 - container.addEventListener("click", event => { 7 - if (event.target.href) return; 8 - 9 - event.preventDefault(); 10 - location = link; 11 - }); 4 + const link = container.querySelector(".music-title a") 5 + hijackClickEvent(container, link); 12 6 });
+81 -7
public/style/index.css
··· 96 96 overflow: visible; 97 97 } 98 98 99 - ul.links { 99 + ul.platform-links { 100 + padding-left: 1em; 100 101 display: flex; 101 - gap: 1em .5em; 102 + gap: .5em; 102 103 flex-wrap: wrap; 103 104 } 104 105 105 - ul.links li { 106 + ul.platform-links li { 106 107 list-style: none; 107 108 } 108 109 109 - ul.links li a { 110 + ul.platform-links li a { 110 111 padding: .4em .5em; 112 + display: flex; 113 + flex-direction: row; 114 + justify-content: center; 115 + align-items: center; 116 + gap: .5em; 111 117 border: 1px solid var(--links); 112 118 color: var(--links); 113 119 border-radius: 2px; 114 120 background-color: transparent; 115 - transition-property: color, border-color, background-color; 121 + transition-property: color, border-color, background-color, box-shadow; 116 122 transition-duration: .2s; 117 123 animation-delay: 0s; 118 124 animation: list-item-fadein .2s forwards; 119 125 opacity: 0; 120 126 } 121 127 122 - ul.links li a:hover { 128 + ul.platform-links li a:hover { 123 129 color: #eee; 124 130 border-color: #eee; 125 131 background-color: var(--links) !important; ··· 127 133 box-shadow: 0 0 1em var(--links); 128 134 } 129 135 136 + ul.platform-links li a img { 137 + height: 1em; 138 + width: 1em; 139 + } 140 + 141 + ul#projects { 142 + padding: 0; 143 + list-style: none; 144 + } 145 + 146 + li.project-item { 147 + padding: .5em; 148 + border: 1px solid var(--links); 149 + margin: 1em 0; 150 + display: flex; 151 + flex-direction: row; 152 + gap: .5em; 153 + border-radius: 2px; 154 + transition-property: color, border-color, background-color, box-shadow; 155 + transition-duration: .2s; 156 + cursor: pointer; 157 + } 158 + li.project-item a { 159 + transition: color .2s linear; 160 + } 161 + 162 + li.project-item:hover { 163 + color: #eee; 164 + border-color: #eee; 165 + background-color: var(--links) !important; 166 + text-decoration: none; 167 + box-shadow: 0 0 1em var(--links); 168 + } 169 + li.project-item:hover a { 170 + color: #eee; 171 + } 172 + 173 + li.project-item .project-info { 174 + display: flex; 175 + flex-direction: column; 176 + justify-content: center; 177 + } 178 + 179 + li.project-item img.project-icon { 180 + width: 2.5em; 181 + height: 2.5em; 182 + object-fit: cover; 183 + border-radius: 2px; 184 + } 185 + 186 + li.project-item span.project-icon { 187 + font-size: 2em; 188 + display: block; 189 + width: 45px; 190 + height: 45px; 191 + text-align: center; 192 + /* background: #0004; */ 193 + /* border: 1px solid var(--on-background); */ 194 + border-radius: 2px; 195 + } 196 + 197 + li.project-item a { 198 + text-decoration: none; 199 + } 200 + 201 + li.project-item p { 202 + margin: 0; 203 + } 204 + 130 205 div#web-buttons { 131 206 margin: 2rem 0; 132 207 } ··· 147 222 transform: translate(-2px, -2px); 148 223 box-shadow: 1px 1px 0 #eee, 2px 2px 0 #eee; 149 224 } 150 -
+100 -46
views/index.html
··· 17 17 <link rel="me" href="https://ice.arimelody.me/@ari"> 18 18 <link rel="me" href="https://wetdry.world/@ari"> 19 19 20 - <script type="module" src="/script/index.js" defer> </script> 20 + <script type="module" src="/script/index.js" defer></script> 21 21 {{end}} 22 22 23 23 {{define "content"}} ··· 33 33 </p> 34 34 35 35 <p> 36 - i'm a <a href="/music">musician</a>, <a href="https://github.com/arimelody?tab=repositories">developer</a>, 36 + i'm a <a href="/music">musician</a>, <a href="https://codeberg.org/arimelody?tab=repositories">developer</a>, 37 37 <a href="https://twitch.tv/arispacegirl">streamer</a>, <a href="https://youtube.com/@arispacegirl">youtuber</a>, 38 38 and probably a bunch of other things i forgot to mention! 39 39 </p> ··· 44 44 <p> 45 45 if you're looking to support me financially, that's so cool of you!! 46 46 if you like, you can buy some of my music over on 47 - <a href="https://arimelody.bandcamp.com" target="_blank">bandcamp</a> 47 + <a href="https://arimelody.bandcamp.com">bandcamp</a> 48 48 so you can at least get something for your money. 49 49 thank you very much either way!! 💕 50 50 </p> ··· 84 84 <p> 85 85 <strong>where to find me 🛰️</strong> 86 86 </p> 87 + <!-- 87 88 <ul class="links"> 88 89 <li> 89 - <a href="https://youtube.com/@arispacegirl" target="_blank">youtube</a> 90 + <a href="https://youtube.com/@arispacegirl">youtube</a> 90 91 </li> 91 92 <li> 92 - <a href="https://twitch.tv/arispacegirl" target="_blank">twitch</a> 93 + <a href="https://twitch.tv/arispacegirl">twitch</a> 93 94 </li> 94 95 <li> 95 - <a href="https://arimelody.bandcamp.com" target="_blank">bandcamp</a> 96 + <a href="https://arimelody.bandcamp.com">bandcamp</a> 96 97 </li> 97 98 <li> 98 - <a href="https://codeberg.org/arimelody" target="_blank">codeberg</a> 99 + <a href="https://codeberg.org/arimelody">codeberg</a> 99 100 </li> 100 101 <li> 101 - <a href="https://bsky.app/profile/arimelody.me" target="_blank">bluesky</a> 102 + <a href="https://bsky.app/profile/arimelody.me">bluesky</a> 102 103 </li> 103 104 <li> 104 - <a href="https://discord.gg/MmJtBebF28" target="_blank">discord</a> 105 + <a href="https://discord.gg/MmJtBebF28">discord</a> 105 106 </li> 106 107 </ul> 107 - 108 - <p> 109 - <strong>projects i've worked on 🛠️</strong> 110 - </p> 111 - <ul class="links"> 108 + --> 109 + <ul class="platform-links"> 112 110 <li> 113 - <a href="https://codeberg.org/arimelody/mcstatusface" target="_blank"> 114 - mcstatusface 111 + <a href="https://youtube.com/@arispacegirl" title="youtube"> 112 + <img src="/img/brand/youtube.svg" alt="youtube" width="32" height="32"/> 113 + youtube 115 114 </a> 116 115 </li> 117 116 <li> 118 - <a href="https://catdance.arimelody.me" target="_blank"> 119 - catdance 117 + <a href="https://twitch.tv/arispacegirl" title="twitch"> 118 + <img src="/img/brand/twitch.svg" alt="twitch" width="32" height="32"/> 119 + twitch 120 120 </a> 121 121 </li> 122 122 <li> 123 - <a href="https://git.arimelody.me/ari/prideflag" target="_blank"> 124 - pride flag 123 + <a href="https://arimelody.bandcamp.com" title="bandcamp"> 124 + <img src="/img/brand/bandcamp.svg" alt="bandcamp" width="32" height="32"/> 125 + bandcamp 125 126 </a> 126 127 </li> 127 128 <li> 128 - <a href="https://github.com/arimelody/ipaddrgen" target="_blank"> 129 - ipaddrgen 129 + <a href="https://codeberg.org/arimelody" title="codeberg"> 130 + <img src="/img/brand/codeberg.svg" alt="codeberg" width="32" height="32"/> 131 + codeberg 130 132 </a> 131 133 </li> 132 134 <li> 133 - <a href="https://impact.arimelody.me/" target="_blank"> 134 - impact meme 135 + <a href="https://bsky.app/profile/arimelody.me" title="bluesky"> 136 + <img src="/img/brand/bluesky.svg" alt="bluesky" width="32" height="32"/> 137 + bluesky 135 138 </a> 136 139 </li> 137 140 <li> 138 - <a href="https://term.arimelody.me/" target="_blank"> 139 - OpenTerminal 141 + <a href="https://discord.gg/MmJtBebF28" title="discord"> 142 + <img src="/img/brand/discord.svg" alt="discord" width="32" height="32"/> 143 + discord 140 144 </a> 141 145 </li> 142 - <li> 143 - <a href="https://silver.bliss.town/" target="_blank"> 144 - Silver.js 145 - </a> 146 + </ul> 147 + 148 + <p> 149 + <strong>projects i've worked on 🛠️</strong> 150 + </p> 151 + <ul id="projects"> 152 + <li class="project-item"> 153 + <span aria-hidden=true class="project-icon">⛏️</span> 154 + <div class="project-info"> 155 + <a href="https://mcq.bliss.town">McStatusFace</a> 156 + <p>minecraft server query utility</p> 157 + </div> 158 + </li> 159 + <li class="project-item"> 160 + <img src="https://catdance.arimelody.me/img/favicon.png" alt="catdance icon" aria-hidden=true class="project-icon" width="64" height="64"> 161 + <div class="project-info"> 162 + <a href="https://catdance.arimelody.me">catdance</a> 163 + <p>watch the cat dance 🐱</p> 164 + </div> 165 + </li> 166 + <li class="project-item"> 167 + <img src="https://git.arimelody.me/repo-avatars/6b0a1ffb78cbc6f906f83152ea42a710220174e8f48a3e44f159ae58dacd7a2f" alt="catdance icon" aria-hidden=true class="project-icon" width="64" height="64"> 168 + <div class="project-info"> 169 + <a href="https://git.arimelody.me/ari/prideflag">pride flag</a> 170 + <p>progressive pride flag widget for websites</p> 171 + </div> 172 + </li> 173 + <li class="project-item"> 174 + <span aria-hidden=true class="project-icon">👩‍💻</span> 175 + <div class="project-info"> 176 + <a href="https://github.com/arimelody/ipaddrgen">ipaddrgen</a> 177 + <p>silly hackerman IP address generator</p> 178 + </div> 179 + </li> 180 + <li class="project-item"> 181 + <img src="https://impact.arimelody.me/favicon.png" alt="impact meme icon" aria-hidden=true class="project-icon" width="64" height="64"> 182 + <div class="project-info"> 183 + <a href="https://impact.arimelody.me/">impact meme</a> 184 + <p>impact meme generator</p> 185 + </div> 186 + </li> 187 + <li class="project-item"> 188 + <img src="https://codeberg.org/repo-avatars/e67303eeda4fa6d268948e71b7b0837357d8c519772701ffc36b84ae7975319f" alt="OpenTerminal icon" aria-hidden=true class="project-icon" width="64" height="64"> 189 + <div class="project-info"> 190 + <a href="https://term.arimelody.me/">OpenTerminal</a> 191 + <p>communal online text buffer</p> 192 + </div> 193 + </li> 194 + <li class="project-item"> 195 + <span aria-hidden=true class="project-icon">📜</span> 196 + <div class="project-info"> 197 + <a href="https://silver.bliss.town/">Silver.js</a> 198 + <p>lightweight reactive state library</p> 199 + </div> 146 200 </li> 147 201 </ul> 148 202 ··· 156 210 <a href="https://arimelody.me"> 157 211 <img src="/img/buttons/ari melody.gif" alt="ari melody web button" width="88" height="31"> 158 212 </a> 159 - <a href="https://supitszaire.com" target="_blank"> 213 + <a href="https://supitszaire.com"> 160 214 <img src="/img/buttons/zaire.gif" alt="zaire web button" width="88" height="31"> 161 215 </a> 162 - <a href="https://mae.wtf" target="_blank"> 216 + <a href="https://mae.wtf"> 163 217 <img src="/img/buttons/mae.png" alt="vimae web button" width="88" height="31"> 164 218 </a> 165 - <a href="https://girlthi.ng/~thermia/" target="_blank"> 166 - <img src="/img/buttons/thermia.png" alt="thermia web button" width="88" height="31"> 219 + <a href="https://girlthi.ng/~thermia/"> 220 + <img src="/img/buttons/thermia.gif" alt="thermia web button" width="88" height="31"> 167 221 </a> 168 - <a href="https://elke.cafe" target="_blank"> 222 + <a href="https://elke.cafe"> 169 223 <img src="/img/buttons/elke.gif" alt="elke web button" width="88" height="31"> 170 224 </a> 171 - <a href="https://invoxiplaygames.uk/" target="_blank"> 225 + <a href="https://invoxiplaygames.uk/"> 172 226 <img src="/img/buttons/ipg.png" alt="InvoxiPlayGames web button" width="88" height="31"> 173 227 </a> 174 - <a href="https://ioletsgo.gay" target="_blank"> 228 + <a href="https://ioletsgo.gay"> 175 229 <img src="/img/buttons/ioletsgo.gif" alt="ioletsgo web button" width="88" height="31"> 176 230 </a> 177 - <a href="https://notnite.com/" target="_blank"> 231 + <a href="https://notnite.com/"> 178 232 <img src="/img/buttons/notnite.png" alt="notnite web button" width="88" height="31"> 179 233 </a> 180 - <a href="https://www.da.vidbuchanan.co.uk/" target="_blank"> 234 + <a href="https://www.da.vidbuchanan.co.uk/"> 181 235 <img src="/img/buttons/retr0id_now.gif" alt="retr0id web button" width="88" height="31"> 182 236 </a> 183 - <a href="https://aikoyori.xyz" target="_blank"> 237 + <a href="https://aikoyori.xyz"> 184 238 <img src="/img/buttons/aikoyori.gif" alt="aikoyori web button" width="88" height="31"> 185 239 </a> 186 - <a href="https://xenia.blahaj.land/" target="_blank"> 240 + <a href="https://xenia.blahaj.land/"> 187 241 <img src="/img/buttons/xenia.png" alt="xenia web button" width="88" height="31"> 188 242 </a> 189 - <a href="https://stardust.elysium.gay/" target="_blank"> 243 + <a href="https://stardust.elysium.gay/"> 190 244 <img src="/img/buttons/stardust.png" alt="stardust web button" width="88" height="31"> 191 245 </a> 192 - <a href="https://isabelroses.com/" target="_blank"> 246 + <a href="https://isabelroses.com/"> 193 247 <img src="/img/buttons/isabelroses.gif" alt="isabel roses web button" width="88" height="31"> 194 248 </a> 195 249 ··· 205 259 <img src="/img/buttons/misc/sprunk.gif" alt="sprunk" width="88" height="31"> 206 260 <img src="/img/buttons/misc/tohell.gif" alt="go straight to hell" width="88" height="31"> 207 261 <img src="/img/buttons/misc/virusalert.gif" alt="virus alert! click here" onclick="alert('meow :3')" width="88" height="31"> 208 - <a href="http://wiishopchannel.net/" target="_blank"> 262 + <a href="http://wiishopchannel.net/"> 209 263 <img src="/img/buttons/misc/wii.gif" alt="wii" width="88" height="31"> 210 264 </a> 211 265 <img src="/img/buttons/misc/www2.gif" alt="www" width="88" height="31"> 212 266 <img src="/img/buttons/misc/iemandatory.gif" alt="get mandatory internet explorer" width="88" height="31"> 213 267 <img src="/img/buttons/misc/learn_html.gif" alt="HTML - learn it today!" width="88" height="31"> 214 - <a href="https://smokepowered.com" target="_blank"> 268 + <a href="https://smokepowered.com"> 215 269 <img src="/img/buttons/misc/smokepowered.gif" alt="high on SMOKE" width="88" height="31"> 216 270 </a> 217 - <a href="https://epicblazed.com" target="_blank"> 271 + <a href="https://epicblazed.com"> 218 272 <img src="/img/buttons/misc/epicblazed.png" alt="epic blazed" width="88" height="31"> 219 273 </a> 220 274 <img src="/img/buttons/misc/blink.gif" alt="closeup anime blink" width="88" height="31">