ʕ·ᴥ·ʔ- embrace tradition <3
49
compress.sh
|
@ -1,49 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Directory containing the images
|
||||
input_dir="./public"
|
||||
output_dir="./public/tmp"
|
||||
|
||||
rm -rf ${output_dir}
|
||||
mkdir -p ${output_dir}
|
||||
|
||||
for input_file in "$input_dir"/*; do
|
||||
if [ -f "$input_file" ]; then
|
||||
filename=$(basename "$input_file")
|
||||
extension="${filename##*.}"
|
||||
output_file="${output_dir}/${filename}"
|
||||
|
||||
case "$extension" in
|
||||
jpg)
|
||||
# local max=65536
|
||||
if [ $(stat -f%z "${input_file}") -gt 65536 ]; then
|
||||
magick "${input_file}" -resize 30% "${output_file}"
|
||||
while [ $(stat -f%z "$output_file") -gt 65536 ]; do
|
||||
echo "Processing JPEG file: $output_file"
|
||||
magick "${output_file}" -resize 30% "${output_file}"
|
||||
done
|
||||
fi
|
||||
mv "${output_file}" "${input_file}"
|
||||
;;
|
||||
gif)
|
||||
if [ $(stat -f%z "$input_file") -gt 1048576 ]; then
|
||||
ffmpeg -y -i "$input_file" -vf "scale=iw*0.75:ih*0.75" "${output_file}"
|
||||
while [ $(stat -f%z "$output_file") -gt 1048576 ]; do
|
||||
echo "Processing GIF file: $output_file"
|
||||
# Compress GIF files using ffmpeg
|
||||
ffmpeg -y -i "$output_file" -vf "scale=iw*0.75:ih*0.75:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=32[p];[s1][p]paletteuse=dither=bayer" "${output_dir}/tmp-${filename}"
|
||||
mv "${output_dir}/tmp-${filename}" "${output_file}"
|
||||
done
|
||||
mv "${output_file}" "${input_file}"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Skipping file: $input_file"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
|
||||
rm -rf ${output_dir}
|
||||
|
||||
echo "Compression complete!"
|
32
filenames.sh
|
@ -1,32 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
input_dir="./public"
|
||||
output_dir="./public"
|
||||
|
||||
mkdir -p "$output_dir"
|
||||
|
||||
for input_file in "$input_dir"/*.png; do
|
||||
if [ -f "$input_file" ]; then
|
||||
filename=$(basename "$input_file" .png)
|
||||
output_file="$output_dir/$filename.jpg"
|
||||
|
||||
imagemagick "$input_file" "$output_file"
|
||||
|
||||
rm "${input_file}"
|
||||
|
||||
echo "Converted $input_file to $output_file"
|
||||
fi
|
||||
done
|
||||
|
||||
for input_file in "$input_dir"/*.jpeg; do
|
||||
if [ -f "$input_file" ]; then
|
||||
filename=$(basename "$input_file" .jpeg)
|
||||
output_file="$output_dir/$filename.jpg"
|
||||
|
||||
mv "$input_file" "$output_file"
|
||||
|
||||
echo "Converted $input_file to $output_file"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Conversion complete!"
|
32
index.html
|
@ -1,32 +0,0 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/png" href="/augustcircle.png" />
|
||||
<link rel="stylesheet" type="text/css" href="/style.css" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>ʕ·ᴥ·ʔ- august kline</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
<h1>hi! i'm august. or kline. </h1>
|
||||
<p>lately i've been working on
|
||||
<a href="https://git.augustkline.com/august/george" target="_blank" rel="noreferer">george</a>.
|
||||
here's my
|
||||
<a href="/blog/">blog</a>
|
||||
and my
|
||||
<a href="https://git.augustkline.com/august" target="_blank" rel="noreferer">git</a>
|
||||
and my
|
||||
<a href="https://kline.cohost.org" target="_blank" rel="noreferer">cohost</a>
|
||||
and my
|
||||
<a href="mailto:me@augustkline.com" target="_blank" rel="noreferer">email</a>
|
||||
</p>
|
||||
</main>
|
||||
<div id="background">
|
||||
</div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"watch": ["vite.config.ts","src", "public"],
|
||||
"ext": "js,ts,html,css,md",
|
||||
"exec": "npm run preview"
|
||||
}
|
|
@ -1,867 +0,0 @@
|
|||
{
|
||||
"name": "augustkline.com",
|
||||
"version": "0.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "augustkline.com",
|
||||
"version": "0.0.0",
|
||||
"devDependencies": {
|
||||
"typescript": "^5.2.2",
|
||||
"vite": "^5.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/aix-ppc64": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
|
||||
"integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"aix"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/android-arm": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
|
||||
"integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"android"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/android-arm64": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
|
||||
"integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"android"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/android-x64": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
|
||||
"integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"android"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/darwin-arm64": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
|
||||
"integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/darwin-x64": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
|
||||
"integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/freebsd-arm64": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
|
||||
"integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"freebsd"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/freebsd-x64": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
|
||||
"integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"freebsd"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-arm": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
|
||||
"integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-arm64": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
|
||||
"integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-ia32": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
|
||||
"integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-loong64": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
|
||||
"integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
|
||||
"cpu": [
|
||||
"loong64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-mips64el": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
|
||||
"integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
|
||||
"cpu": [
|
||||
"mips64el"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-ppc64": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
|
||||
"integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-riscv64": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
|
||||
"integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-s390x": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
|
||||
"integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-x64": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
|
||||
"integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/netbsd-x64": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
|
||||
"integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"netbsd"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/openbsd-x64": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
|
||||
"integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"openbsd"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/sunos-x64": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
|
||||
"integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"sunos"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/win32-arm64": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
|
||||
"integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/win32-ia32": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
|
||||
"integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/win32-x64": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
|
||||
"integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@rollup/rollup-android-arm-eabi": {
|
||||
"version": "4.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz",
|
||||
"integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"android"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-android-arm64": {
|
||||
"version": "4.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz",
|
||||
"integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"android"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-darwin-arm64": {
|
||||
"version": "4.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz",
|
||||
"integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-darwin-x64": {
|
||||
"version": "4.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz",
|
||||
"integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
||||
"version": "4.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz",
|
||||
"integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
||||
"version": "4.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz",
|
||||
"integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
||||
"version": "4.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz",
|
||||
"integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
||||
"version": "4.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz",
|
||||
"integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
|
||||
"version": "4.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz",
|
||||
"integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
||||
"version": "4.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz",
|
||||
"integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
||||
"version": "4.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz",
|
||||
"integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==",
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
||||
"version": "4.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz",
|
||||
"integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-x64-musl": {
|
||||
"version": "4.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz",
|
||||
"integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
||||
"version": "4.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz",
|
||||
"integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
||||
"version": "4.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz",
|
||||
"integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
||||
"version": "4.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz",
|
||||
"integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
]
|
||||
},
|
||||
"node_modules/@types/estree": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
|
||||
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/esbuild": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
|
||||
"integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"esbuild": "bin/esbuild"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@esbuild/aix-ppc64": "0.21.5",
|
||||
"@esbuild/android-arm": "0.21.5",
|
||||
"@esbuild/android-arm64": "0.21.5",
|
||||
"@esbuild/android-x64": "0.21.5",
|
||||
"@esbuild/darwin-arm64": "0.21.5",
|
||||
"@esbuild/darwin-x64": "0.21.5",
|
||||
"@esbuild/freebsd-arm64": "0.21.5",
|
||||
"@esbuild/freebsd-x64": "0.21.5",
|
||||
"@esbuild/linux-arm": "0.21.5",
|
||||
"@esbuild/linux-arm64": "0.21.5",
|
||||
"@esbuild/linux-ia32": "0.21.5",
|
||||
"@esbuild/linux-loong64": "0.21.5",
|
||||
"@esbuild/linux-mips64el": "0.21.5",
|
||||
"@esbuild/linux-ppc64": "0.21.5",
|
||||
"@esbuild/linux-riscv64": "0.21.5",
|
||||
"@esbuild/linux-s390x": "0.21.5",
|
||||
"@esbuild/linux-x64": "0.21.5",
|
||||
"@esbuild/netbsd-x64": "0.21.5",
|
||||
"@esbuild/openbsd-x64": "0.21.5",
|
||||
"@esbuild/sunos-x64": "0.21.5",
|
||||
"@esbuild/win32-arm64": "0.21.5",
|
||||
"@esbuild/win32-ia32": "0.21.5",
|
||||
"@esbuild/win32-x64": "0.21.5"
|
||||
}
|
||||
},
|
||||
"node_modules/fsevents": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
|
||||
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/nanoid": {
|
||||
"version": "3.3.7",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
|
||||
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"nanoid": "bin/nanoid.cjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/picocolors": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
|
||||
"integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
|
||||
"dev": true,
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/postcss": {
|
||||
"version": "8.4.41",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
|
||||
"integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/postcss/"
|
||||
},
|
||||
{
|
||||
"type": "tidelift",
|
||||
"url": "https://tidelift.com/funding/github/npm/postcss"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"nanoid": "^3.3.7",
|
||||
"picocolors": "^1.0.1",
|
||||
"source-map-js": "^1.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^10 || ^12 || >=14"
|
||||
}
|
||||
},
|
||||
"node_modules/rollup": {
|
||||
"version": "4.20.0",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz",
|
||||
"integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/estree": "1.0.5"
|
||||
},
|
||||
"bin": {
|
||||
"rollup": "dist/bin/rollup"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.0.0",
|
||||
"npm": ">=8.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@rollup/rollup-android-arm-eabi": "4.20.0",
|
||||
"@rollup/rollup-android-arm64": "4.20.0",
|
||||
"@rollup/rollup-darwin-arm64": "4.20.0",
|
||||
"@rollup/rollup-darwin-x64": "4.20.0",
|
||||
"@rollup/rollup-linux-arm-gnueabihf": "4.20.0",
|
||||
"@rollup/rollup-linux-arm-musleabihf": "4.20.0",
|
||||
"@rollup/rollup-linux-arm64-gnu": "4.20.0",
|
||||
"@rollup/rollup-linux-arm64-musl": "4.20.0",
|
||||
"@rollup/rollup-linux-powerpc64le-gnu": "4.20.0",
|
||||
"@rollup/rollup-linux-riscv64-gnu": "4.20.0",
|
||||
"@rollup/rollup-linux-s390x-gnu": "4.20.0",
|
||||
"@rollup/rollup-linux-x64-gnu": "4.20.0",
|
||||
"@rollup/rollup-linux-x64-musl": "4.20.0",
|
||||
"@rollup/rollup-win32-arm64-msvc": "4.20.0",
|
||||
"@rollup/rollup-win32-ia32-msvc": "4.20.0",
|
||||
"@rollup/rollup-win32-x64-msvc": "4.20.0",
|
||||
"fsevents": "~2.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/source-map-js": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
|
||||
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
|
||||
"dev": true,
|
||||
"license": "BSD-3-Clause",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.5.4",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
|
||||
"integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.17"
|
||||
}
|
||||
},
|
||||
"node_modules/vite": {
|
||||
"version": "5.4.0",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.0.tgz",
|
||||
"integrity": "sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"esbuild": "^0.21.3",
|
||||
"postcss": "^8.4.40",
|
||||
"rollup": "^4.13.0"
|
||||
},
|
||||
"bin": {
|
||||
"vite": "bin/vite.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.0.0 || >=20.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/vitejs/vite?sponsor=1"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "~2.3.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/node": "^18.0.0 || >=20.0.0",
|
||||
"less": "*",
|
||||
"lightningcss": "^1.21.0",
|
||||
"sass": "*",
|
||||
"sass-embedded": "*",
|
||||
"stylus": "*",
|
||||
"sugarss": "*",
|
||||
"terser": "^5.4.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@types/node": {
|
||||
"optional": true
|
||||
},
|
||||
"less": {
|
||||
"optional": true
|
||||
},
|
||||
"lightningcss": {
|
||||
"optional": true
|
||||
},
|
||||
"sass": {
|
||||
"optional": true
|
||||
},
|
||||
"sass-embedded": {
|
||||
"optional": true
|
||||
},
|
||||
"stylus": {
|
||||
"optional": true
|
||||
},
|
||||
"sugarss": {
|
||||
"optional": true
|
||||
},
|
||||
"terser": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
24
package.json
|
@ -1,24 +0,0 @@
|
|||
{
|
||||
"name": "augustkline.com",
|
||||
"private": true,
|
||||
"version": "0.0.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "tsc && vite build",
|
||||
"preview": "npm run build && vite preview"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^22.7.4",
|
||||
"@types/xml": "^1.0.11",
|
||||
"feed": "^4.2.2",
|
||||
"highlight.js": "^11.10.0",
|
||||
"marked": "^14.1.2",
|
||||
"typescript": "^5.2.2",
|
||||
"vite": "^5.2.0",
|
||||
"gray-matter": "^4.0.3",
|
||||
"http-server": "^14.1.1",
|
||||
"nodemon": "^3.1.7",
|
||||
"xml": "^1.0.1"
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 943 KiB |
Before Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 958 KiB |
Before Width: | Height: | Size: 761 KiB |
Before Width: | Height: | Size: 607 KiB |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 831 KiB |
Before Width: | Height: | Size: 15 KiB |
|
@ -1,125 +0,0 @@
|
|||
/*!
|
||||
Theme: GitHub
|
||||
Description: Light theme as seen on github.com
|
||||
Author: github.com
|
||||
Maintainer: @Hirse
|
||||
Updated: 2021-05-15
|
||||
|
||||
Outdated base version: https://github.com/primer/github-syntax-light
|
||||
Current colors taken from GitHub's CSS
|
||||
*/
|
||||
|
||||
.hljs {
|
||||
color: #24292e;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.hljs-doctag,
|
||||
.hljs-keyword,
|
||||
.hljs-meta .hljs-keyword,
|
||||
.hljs-template-tag,
|
||||
.hljs-template-variable,
|
||||
.hljs-type,
|
||||
.hljs-variable.language_ {
|
||||
/* prettylights-syntax-keyword */
|
||||
color: #d73a49;
|
||||
}
|
||||
|
||||
.hljs-title,
|
||||
.hljs-title.class_,
|
||||
.hljs-title.class_.inherited__,
|
||||
.hljs-title.function_ {
|
||||
/* prettylights-syntax-entity */
|
||||
color: #6f42c1;
|
||||
}
|
||||
|
||||
.hljs-attr,
|
||||
.hljs-attribute,
|
||||
.hljs-literal,
|
||||
.hljs-meta,
|
||||
.hljs-number,
|
||||
.hljs-operator,
|
||||
.hljs-variable,
|
||||
.hljs-selector-attr,
|
||||
.hljs-selector-class,
|
||||
.hljs-selector-id {
|
||||
/* prettylights-syntax-constant */
|
||||
color: #005cc5;
|
||||
}
|
||||
|
||||
.hljs-regexp,
|
||||
.hljs-string,
|
||||
.hljs-meta .hljs-string {
|
||||
/* prettylights-syntax-string */
|
||||
color: #032f62;
|
||||
}
|
||||
|
||||
.hljs-built_in,
|
||||
.hljs-symbol {
|
||||
/* prettylights-syntax-variable */
|
||||
color: #e36209;
|
||||
}
|
||||
|
||||
.hljs-comment,
|
||||
.hljs-code,
|
||||
.hljs-formula {
|
||||
/* prettylights-syntax-comment */
|
||||
color: #6a737d;
|
||||
}
|
||||
|
||||
.hljs-name,
|
||||
.hljs-quote,
|
||||
.hljs-selector-tag,
|
||||
.hljs-selector-pseudo {
|
||||
/* prettylights-syntax-entity-tag */
|
||||
color: #22863a;
|
||||
}
|
||||
|
||||
.hljs-subst {
|
||||
/* prettylights-syntax-storage-modifier-import */
|
||||
color: #24292e;
|
||||
}
|
||||
|
||||
.hljs-section {
|
||||
/* prettylights-syntax-markup-heading */
|
||||
color: #005cc5;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.hljs-bullet {
|
||||
/* prettylights-syntax-markup-list */
|
||||
color: #735c0f;
|
||||
}
|
||||
|
||||
.hljs-emphasis {
|
||||
/* prettylights-syntax-markup-italic */
|
||||
color: #24292e;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.hljs-strong {
|
||||
/* prettylights-syntax-markup-bold */
|
||||
color: #24292e;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.hljs-addition {
|
||||
/* prettylights-syntax-markup-inserted */
|
||||
color: #22863a;
|
||||
background-color: #f0fff4;
|
||||
}
|
||||
|
||||
.hljs-deletion {
|
||||
/* prettylights-syntax-markup-deleted */
|
||||
color: #b31d28;
|
||||
background-color: #ffeef0;
|
||||
}
|
||||
|
||||
.hljs-char.escape_,
|
||||
.hljs-link,
|
||||
.hljs-params,
|
||||
.hljs-property,
|
||||
.hljs-punctuation,
|
||||
.hljs-tag {
|
||||
/* purposely ignored */
|
||||
}
|
BIN
public/heron.jpg
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 34 KiB |
BIN
public/lamp.gif
Before Width: | Height: | Size: 788 KiB |
Before Width: | Height: | Size: 20 KiB |
BIN
public/ohio.jpg
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 12 KiB |
174
public/style.css
|
@ -1,174 +0,0 @@
|
|||
:root {
|
||||
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
|
||||
line-height: 1.5;
|
||||
font-weight: 400;
|
||||
color: var(--text-color);
|
||||
font-synthesis: none;
|
||||
text-rendering: optimizeLegibility;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
--text-color: black;
|
||||
--link-color: var(--text-color);
|
||||
--link-shadow-color: rgba(0, 0, 0, 0.5);
|
||||
--border-color: rgba(200, 200, 200, 0.5);
|
||||
--text-bg-color: rgba(255, 255, 255, 0.95);
|
||||
--text-border-shadow-color: rgba(255, 255, 255, 0.7);
|
||||
--text-shadow-color: rgba(0, 0, 0, 0.1);
|
||||
--img-bg-color: rgba(50, 50, 50, 0.2);
|
||||
--img-border-color: rgba(255, 255, 255, 0.8);
|
||||
--font-base-size: 1rem;
|
||||
}
|
||||
|
||||
body,
|
||||
html {
|
||||
align-items: center;
|
||||
block-size: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
inline-size: 100%;
|
||||
justify-content: center;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3 {
|
||||
margin-block: .5rem;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: calc(var(--font-base-size) * 2);
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: calc(var(--font-base-size) * 1.8);
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: calc(var(--font-base-size) * 1.6);
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: calc(var(--font-base-size) * 1.5);
|
||||
margin: 0;
|
||||
inline-size: 100%;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--link-color);
|
||||
transition: .2s text-shadow, .2s transform;
|
||||
display: inline-block;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--link-color);
|
||||
transition: .2s text-shadow, .2s transform;
|
||||
display: inline-block;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
a {
|
||||
transition: .2s text-shadow, .2s box-shadow,
|
||||
.2s transform;
|
||||
|
||||
&:has(> p) {
|
||||
&:hover {
|
||||
box-shadow: 0rem 0.2rem 1rem var(--link-shadow-color);
|
||||
transform: translateY(-7%);
|
||||
}
|
||||
|
||||
color: var(--link-color);
|
||||
display: inline-block;
|
||||
border-radius: 1rem;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
&:not(:has(> p)) {
|
||||
&:hover {
|
||||
text-shadow: 0rem 0.2rem 1rem var(--link-shadow-color);
|
||||
transform: translateY(-7%) scale(1.01);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#background {
|
||||
transform-style: preserve-3d;
|
||||
transform: rotateX(var(--rotate-x)) rotateY(var(--rotate-y));
|
||||
inline-size: 100%;
|
||||
block-size: 100%;
|
||||
z-index: -1;
|
||||
position: absolute;
|
||||
|
||||
&[loaded] img {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
img {
|
||||
transform: translate(-50%, -50%) translateZ(var(--translate-z));
|
||||
transition: opacity 0.3s;
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
border: 0.01rem solid var(--img-border-color);
|
||||
border-radius: 1rem;
|
||||
box-shadow: 0.05rem 0.05rem 0px var(--img-bg-color),
|
||||
-0.05rem -0.05rem 0px var(--img-bg-color),
|
||||
0.05rem -0.05rem 0px var(--img-bg-color),
|
||||
-0.05rem 0.05rem 0px var(--img-bg-color),
|
||||
0 0 1rem rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
}
|
||||
|
||||
pre {
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 1rem;
|
||||
box-shadow: 0.05rem 0.05rem 0px var(--img-bg-color),
|
||||
-0.05rem -0.05rem 0px var(--img-bg-color),
|
||||
0.05rem -0.05rem 0px var(--img-bg-color),
|
||||
-0.05rem 0.05rem 0px var(--img-bg-color),
|
||||
0 0 1rem rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.blog {}
|
||||
|
||||
main {
|
||||
overflow-inline: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: var(--text-bg-color);
|
||||
backdrop-filter: blur(10px);
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
border: 0.01rem solid var(--border-color);
|
||||
margin: 1px;
|
||||
padding: .8rem 1.6rem;
|
||||
max-inline-size: clamp(20rem, 50%, 40rem);
|
||||
border-radius: 1rem;
|
||||
box-shadow: 0.05rem 0.05rem 0px var(--text-border-shadow-color),
|
||||
-0.05rem -0.05rem 0px var(--text-border-shadow-color),
|
||||
0.05rem -0.05rem 0px var(--text-border-shadow-color),
|
||||
-0.05rem 0.05rem 0px var(--text-border-shadow-color),
|
||||
0rem 0rem 2rem var(--text-shadow-color);
|
||||
|
||||
img {
|
||||
inline-size: 100%;
|
||||
border-radius: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
#background {
|
||||
transform: none;
|
||||
}
|
||||
|
||||
a {
|
||||
transition: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
transform: none;
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 229 KiB |
After Width: | Height: | Size: 160 KiB |
After Width: | Height: | Size: 267 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 221 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 242 KiB |
After Width: | Height: | Size: 99 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 365 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 100 KiB |
After Width: | Height: | Size: 210 KiB |
After Width: | Height: | Size: 92 KiB |
After Width: | Height: | Size: 200 KiB |
After Width: | Height: | Size: 59 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 61 KiB |
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 66 KiB |
|
@ -0,0 +1,41 @@
|
|||
const taped = Array.from(document.body.getElementsByClassName("taped"));
|
||||
for (let i = 0; i < taped.length; i++) {
|
||||
const val0 = Math.floor(15 * Math.random());
|
||||
const val1 = Math.floor(15 * Math.random());
|
||||
taped[i].style.setProperty(
|
||||
"--washi-url-0",
|
||||
`url(/assets/images/washi/${val0}.png)`,
|
||||
);
|
||||
taped[i].style.setProperty(
|
||||
"--washi-url-1",
|
||||
`url(/assets/images/washi/${val1}.png)`,
|
||||
);
|
||||
}
|
||||
|
||||
const gallery = Array.from(document.body.getElementsByClassName("gallery-3"));
|
||||
for (let i = 0; i < gallery.length; i++) {
|
||||
const children = Array.from(gallery[i].children);
|
||||
for (let i = 0; i < children.length; i++) {
|
||||
const child = children[i];
|
||||
const val0 = Math.floor(15 * Math.random());
|
||||
const val1 = Math.floor(15 * Math.random());
|
||||
child.style.setProperty(
|
||||
"--washi-url-0",
|
||||
`url(/assets/images/washi/${val0}.png)`,
|
||||
);
|
||||
child.style.setProperty(
|
||||
"--washi-url-1",
|
||||
`url(/assets/images/washi/${val1}.png)`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const content = Array.from(document.getElementsByClassName("content"))[0];
|
||||
const imgs = Array.from(content.getElementsByTagName("img"));
|
||||
for (let i = 0; i < imgs.length; i++) {
|
||||
const img = imgs[i];
|
||||
const anchor = document.createElement("a");
|
||||
anchor.href = img.src;
|
||||
img.parentNode.insertBefore(anchor, img);
|
||||
anchor.appendChild(img);
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><rss><channel><title>ʕ·ᴥ·ʔ-☆ august kline's blog ☆</title><link>https://augustkline.com/blog</link><description>whatever's on my mind, short essays, tech stuff, etc :)</description><item><title>hello word</title><link>/blog/2024-9-30-hello-word.html</link><description>the first post on my blog! check back in soon cause this is very janky rn lol</description><pubDate>2024-9-30</pubDate></item></channel></rss>
|
|
@ -0,0 +1,52 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/png" href="/assets/images/ribbon.png" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>ʕ·ᴥ·ʔ- george!</title>
|
||||
<link rel="stylesheet" type="text/css" href="/style.css" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
<div class="container">
|
||||
<div class="clipped">
|
||||
<div class="clipped-items">
|
||||
<a title="ʕ·ᴥ·ʔ- home" aria-label="home" href="/">
|
||||
<img src="/assets/images/me.jpg"
|
||||
alt="august kline, a young woman smiling gently with sunset cityscape behind her"
|
||||
class="clipped-image" />
|
||||
</a>
|
||||
<p class="slip slip-george">ʕ·ᴥ·ʔ</p>
|
||||
<p class="slip slip-label">home</p>
|
||||
</div>
|
||||
<img class="paperclip" src="/assets/images/paperclip.png" />
|
||||
</div>
|
||||
<h1>george! yes!</h1>
|
||||
<div class="content">
|
||||
<div class="taped">
|
||||
<img src="/assets/images/georgeandfuzzy.jpeg" />
|
||||
</div>
|
||||
<p>george is my stuffed monkey. i am building her a computer body.</p>
|
||||
<div class="gallery-3">
|
||||
<div>
|
||||
<img src="/assets/images/hiaugust.jpeg" />
|
||||
</div>
|
||||
<div>
|
||||
<img src="/assets/images/breadboard.jpeg" />
|
||||
</div>
|
||||
<div>
|
||||
<img src="/assets/images/georgebed.jpeg" />
|
||||
</div>
|
||||
</div>
|
||||
<p>am i a crank? ...a little <3</p>
|
||||
</div>
|
||||
</main>
|
||||
<script>const valedictions = ["love", "in solidarity", "yours forever", "just 4 u", "until tomorrow", "endlessly", "yours", "until we meet again", "tirelessly yours", "<3", "with warmth", "xoxo", "with open arms", "gently", "truly yours", "until our next encounter", "awaiting your reply", "with grace", "with love", "solidarity forever", "joyfully", "hearts & little stars", "ribbons & bows", "unabashedly yours", "thinking of u"]; const valediction = document.getElementsByClassName("valediction")[0]; const index = Math.floor(Math.random() * valedictions.length); valediction.textContent = valedictions[index];</script>
|
||||
<script src="/assets/js/washi.js"></script>
|
||||
</body>
|
||||
|
||||
|
||||
</html>
|
|
@ -0,0 +1,80 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/png" href="/assets/images/ribbon.png" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>ʕ·ᴥ·ʔ- august kline</title>
|
||||
<link rel="stylesheet" type="text/css" href="/style.css" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
<div class="container">
|
||||
<div class="clipped">
|
||||
<div class="clipped-items">
|
||||
<a title="ʕ·ᴥ·ʔ- home" aria-label="home" href="/">
|
||||
<img src="/assets/images/me.jpg"
|
||||
alt="august kline, a young woman smiling gently with sunset cityscape behind her"
|
||||
class="clipped-image" />
|
||||
</a>
|
||||
<p class="slip slip-george">ʕ·ᴥ·ʔ</p>
|
||||
<p class="slip slip-label">home</p>
|
||||
</div>
|
||||
<img class="paperclip" src="/assets/images/paperclip.png" />
|
||||
</div>
|
||||
<h1>give us money!</h1>
|
||||
<div class="content">
|
||||
<p>did you know the U.S. trans <a
|
||||
href="https://transequality.org/sites/default/files/2024-02/2022%20USTS%20Early%20Insights%20Report_FINAL.pdf"
|
||||
target="_blank" rel="noreferrer">unemployment rate</a> is
|
||||
<b>18%</b>? or that the trans <a
|
||||
href="https://transequality.org/sites/default/files/2024-02/2022%20USTS%20Early%20Insights%20Report_FINAL.pdf"
|
||||
target="_blank" rel="noreferrer">poverty rate</a> is <b>34%</b>?
|
||||
</p>
|
||||
<p>now more than ever, trans people need money! if you know a trans person,
|
||||
give them anything you can. if you don't (or if you have more to give!), here are some
|
||||
groups that need your money:
|
||||
</p>
|
||||
<ul style="display: block; list-style: '~ '; padding-inline-start: 5cqi;">
|
||||
<li style="margin-block: 1cqb; color: slateblue;">
|
||||
<a href="https://www.glitsinc.org/donate" target="_blank" rel="noreferrer"
|
||||
style="--color: slateblue; text-decoration-style: solid;">gays & lesbians
|
||||
living
|
||||
in a transgender society (G.L.I.T.S)</a>
|
||||
</li>
|
||||
<li style="margin-block: 1cqb; color: palevioletred">
|
||||
<a href="https://www.blacktranstravelfund.com/donate.html" target="_blank" rel="noreferrer"
|
||||
style="--color: palevioletred; text-decoration-style: solid;">black trans
|
||||
travel fund</a>
|
||||
</li>
|
||||
<li style="margin-block: 1cqb; color: slategrey">
|
||||
<a href="https://tgijp.org/donate-html/" target="_blank" rel="noreferrer"
|
||||
style="--color: slategrey; text-decoration-style: solid;">transgender
|
||||
gender-variant & intersex justice project (TGIJP)</a>
|
||||
</li>
|
||||
<li style="margin-block: 1cqb; color: palevioletred">
|
||||
<a href="https://srlp.org/donate/" target="_blank" rel="noreferrer"
|
||||
style="--color: palevioletred; text-decoration-style: solid;">sylvia rivera law
|
||||
project</a>
|
||||
</li>
|
||||
<li style="margin-block: 1cqb; color: slateblue">
|
||||
<a href="https://www.them.us/story/orgs-fighting-back-anti-trans-legislation" target="_blank"
|
||||
rel="noreferrer" style="--color: slateblue; text-decoration-style: solid;">and many more
|
||||
in
|
||||
your
|
||||
state!</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- <a class="signature" href="mailto:yours@augustkline.com" title="ʕ·ᴥ·ʔ- send me a message!" -->
|
||||
<!-- style="margin-block-start: 8cqb" aria-label="send me a message"><span -->
|
||||
<!-- class="valediction">love</span>,<br><span class="name">kline</span></a> -->
|
||||
</div>
|
||||
</main>
|
||||
<script>const valedictions = ["love", "in solidarity", "yours forever", "just 4 u", "until tomorrow", "endlessly", "yours", "until we meet again", "tirelessly yours", "<3", "with warmth", "xoxo", "with open arms", "gently", "truly yours", "until our next encounter", "awaiting your reply", "with grace", "with love", "solidarity forever", "joyfully", "hearts & little stars", "ribbons & bows", "unabashedly yours", "thinking of u"]; const valediction = document.getElementsByClassName("valediction")[0]; const index = Math.floor(Math.random() * valedictions.length); valediction.textContent = valedictions[index];</script>
|
||||
</body>
|
||||
|
||||
|
||||
</html>
|
|
@ -0,0 +1,55 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/png" href="/assets/images/ribbon.png" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>ʕ·ᴥ·ʔ- august kline</title>
|
||||
<link rel="stylesheet" type="text/css" href="/style.css" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
<div class="container">
|
||||
<div class="clipped">
|
||||
<div class="clipped-items">
|
||||
<a title="ʕ·ᴥ·ʔ- home" aria-label="home" href="/">
|
||||
<img src="/assets/images/me.jpg"
|
||||
alt="august kline, a young woman smiling gently with sunset cityscape behind her"
|
||||
class="clipped-image" />
|
||||
</a>
|
||||
<p class="slip slip-george">ʕ·ᴥ·ʔ</p>
|
||||
<p class="slip slip-label">home</p>
|
||||
</div>
|
||||
<img class="paperclip" src="/assets/images/paperclip.png" />
|
||||
</div>
|
||||
<h1>hi, i'm august...</h1>
|
||||
<div class="content">
|
||||
<p>
|
||||
i'm like, ludicrously into computers <3</p>
|
||||
<p>as of january 2025, myself & my friends no longer <a
|
||||
href="https://web.archive.org/web/20250121015439/https://www.whitehouse.gov/presidential-actions/2025/01/defending-women-from-gender-ideology-extremism-and-restoring-biological-truth-to-the-federal-government/"
|
||||
rel="noreferrer" target="_blank">legally
|
||||
exist</a>
|
||||
here in the u.s.. i have a bag packed for if i have to flee my home. things are dark right now.
|
||||
if you're cis, you can help by <a href="/giving-us-money">giving us money</a>! </p>
|
||||
<p>those in power are trying to wipe us out, but their failure will make our existence
|
||||
<b>undeniable</b>.
|
||||
</p>
|
||||
<p><i>anyways...</i> hi! welcome <3 you can find more at the <i><b>link authority</b></i>:</p>
|
||||
</div>
|
||||
<a class="stamp" style="" href="/links" aria-label="link authority">
|
||||
<img src="/assets/images/linkauthority.svg"
|
||||
style="block-size: 10cqb; margin-inline-start: 5cqi; transform: rotate(-8deg);">
|
||||
</a>
|
||||
<a class="signature" href="mailto:yours@augustkline.com" title="ʕ·ᴥ·ʔ- send me a message!"
|
||||
style="margin-block-start: 8cqb" aria-label="send me a message"><span
|
||||
class="valediction">love</span>,<br><span class="name">kline</span></a>
|
||||
</div>
|
||||
</main>
|
||||
<script>const valedictions = ["love", "in solidarity", "yours forever", "just 4 u", "until tomorrow", "endlessly", "yours", "until we meet again", "tirelessly yours", "<3", "with warmth", "xoxo", "with open arms", "gently", "truly yours", "until our next encounter", "awaiting your reply", "with grace", "with love", "solidarity forever", "joyfully", "hearts & little stars", "ribbons & bows", "unabashedly yours", "thinking of u"]; const valediction = document.getElementsByClassName("valediction")[0]; const index = Math.floor(Math.random() * valedictions.length); valediction.textContent = valedictions[index];</script>
|
||||
</body>
|
||||
|
||||
|
||||
</html>
|
|
@ -0,0 +1,50 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/png" href="/assets/images/ribbon.png" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>ʕ·ᴥ·ʔ- august kline</title>
|
||||
<link rel="stylesheet" type="text/css" href="/style.css" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
<div class="container">
|
||||
<div class="clipped">
|
||||
<div class="clipped-items">
|
||||
<a title="ʕ·ᴥ·ʔ- home" aria-label="home" href="/">
|
||||
<img src="/assets/images/me.jpg"
|
||||
alt="august kline, a young woman smiling gently with sunset cityscape behind her"
|
||||
class="clipped-image" />
|
||||
</a>
|
||||
<p class="slip slip-george">ʕ·ᴥ·ʔ</p>
|
||||
<p class="slip slip-label">home</p>
|
||||
</div>
|
||||
<img class="paperclip" src="/assets/images/paperclip.png" />
|
||||
</div>
|
||||
<h1 class="authority"><img src="/assets/images/linkauthority.svg" alt="link authority"
|
||||
style="block-size: 15cqb;"></h1>
|
||||
<div class="content">
|
||||
<p style="margin-block-end: 5cqb;">i hope you like my fun quirky design choices</p>
|
||||
<div class="pos-anchor">
|
||||
<a class="stamp" href="/george">
|
||||
<img src="/assets/images/stampgeorge.svg" style="transform: rotate(-8deg); left: 5cqi"
|
||||
alt="george"></a>
|
||||
<!-- <a class="stamp" href="/links"> -->
|
||||
<!-- <img src="/assets/images/stampprojects.svg" -->
|
||||
<!-- style="transform: rotate(12deg); block-size: 10cqb; right: 0%; top: 0cqb" -->
|
||||
<!-- alt="projects"></a> -->
|
||||
<a class="stamp" href="/minecraft">
|
||||
<img src="/assets/images/stampminecraft.svg"
|
||||
style="transform: rotate(-3deg); left: 28cqi; top: 12cqb;" alt="minecraft"></a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
|
||||
|
||||
</html>
|
|
@ -0,0 +1,43 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/png" href="/assets/images/ribbon.png" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>ʕ·ᴥ·ʔ- minecraft</title>
|
||||
<link rel="stylesheet" type="text/css" href="/style.css" />
|
||||
<script src="/assets/js/washi.js" defer></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
<div class="container">
|
||||
<div class="clipped">
|
||||
<div class="clipped-items">
|
||||
<a title="ʕ·ᴥ·ʔ- home" aria-label="home" href="/">
|
||||
<img src="/assets/images/me.jpg"
|
||||
alt="august kline, a young woman smiling gently with sunset cityscape behind her"
|
||||
class="clipped-image" />
|
||||
</a>
|
||||
<p class="slip slip-george">ʕ·ᴥ·ʔ</p>
|
||||
<p class="slip slip-label">home</p>
|
||||
</div>
|
||||
<img class="paperclip" src="/assets/images/paperclip.png" />
|
||||
</div>
|
||||
<h1><img src="/assets/images/minecraft.png" alt="minecraft"
|
||||
style="transform: rotate(-1deg) translateX(-2cqi);"></h1>
|
||||
<div class="content">
|
||||
<p>i've played minecraft since i was like 10, and recently i started a world this year that i plan on
|
||||
playing forever :)</p>
|
||||
<div class="taped"><a href="/assets/images/foxsleep.png"><img src="/assets/images/foxsleep.png"
|
||||
alt="a minecraft fox sleeping beneath a spruce tree" /></a>
|
||||
</div>
|
||||
<p>i live on a little island called <i>foxtrot island</i>, cause there's a bunch of foxes there lol</p>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
|
||||
|
||||
</html>
|
|
@ -0,0 +1,457 @@
|
|||
@font-face {
|
||||
src: url("./assets/fonts/LatinModernMonoRegular.otf");
|
||||
font-family: "LatinModernMono";
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
src: url("./assets/fonts/LatinModernMonoBold.otf");
|
||||
font-family: "LatinModernMono";
|
||||
font-weight: bold;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
src: url("./assets/fonts/LatinModernMonoBoldOblique.otf");
|
||||
font-family: "LatinModernMono";
|
||||
font-weight: bold;
|
||||
font-style: oblique;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
src: url("./assets/fonts/LatinModernMonoItalic.otf");
|
||||
font-family: "LatinModernMono";
|
||||
font-weight: normal;
|
||||
font-style: oblique;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
src: url("./assets/fonts/Bienchena.ttf");
|
||||
font-family: "Bienchen";
|
||||
}
|
||||
|
||||
:root {
|
||||
--text-color: color-mix(in srgb, black 40%, darkslategrey 60%);
|
||||
--text-bg-color: snow;
|
||||
font-synthesis: none;
|
||||
text-rendering: optimizeLegibility;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
color: var(--text-color);
|
||||
}
|
||||
|
||||
body,
|
||||
html {
|
||||
block-size: 100%;
|
||||
inline-size: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
display: flex;
|
||||
background-color: linen;
|
||||
}
|
||||
|
||||
::selection {
|
||||
background: color-mix(in srgb, mistyrose 80%, transparent 20%);
|
||||
/* background: lightpink; */
|
||||
}
|
||||
|
||||
|
||||
a {
|
||||
&[href^="http"] {
|
||||
--color: darkgreen;
|
||||
text-decoration-style: dashed;
|
||||
}
|
||||
|
||||
text-decoration-thickness: 1px;
|
||||
|
||||
--color: firebrick;
|
||||
color: var(--color);
|
||||
text-decoration-style: wavy;
|
||||
|
||||
@media not (prefers-reduced-motion) {
|
||||
transition: 0.3s outline ease,
|
||||
0.2s text-shadow ease;
|
||||
}
|
||||
|
||||
outline: 2px transparent solid;
|
||||
|
||||
&:hover {
|
||||
text-shadow: 0px 0px 1px var(--color);
|
||||
}
|
||||
|
||||
&:focus-visible {
|
||||
outline: 2px var(--color) solid;
|
||||
}
|
||||
}
|
||||
|
||||
main {
|
||||
user-select: none;
|
||||
/* top: 50%; */
|
||||
/* left: 50%; */
|
||||
/* position: absolute; */
|
||||
container-type: size;
|
||||
background: var(--text-bg-color);
|
||||
transform: rotate(-1deg);
|
||||
aspect-ratio: 5.5 / 8.75;
|
||||
font-family: "Bienchen";
|
||||
box-shadow: 5px 5px 20px rgba(152, 97, 42, 0.1);
|
||||
word-wrap: pretty;
|
||||
margin: auto;
|
||||
|
||||
--scale: 0.9;
|
||||
|
||||
--block: calc(var(--scale) * 100svb);
|
||||
--inline: calc(var(--scale) * 100svi * (8.75 / 5.5));
|
||||
|
||||
block-size: min(var(--inline), var(--block));
|
||||
|
||||
transition: 0.3s transform ease, 0.3s box-shadow ease;
|
||||
|
||||
&>div {
|
||||
padding: 2% 5%;
|
||||
font-size: 8cqb;
|
||||
}
|
||||
|
||||
.content {
|
||||
transform: rotate(-0.5deg);
|
||||
}
|
||||
|
||||
h1 {
|
||||
img {
|
||||
max-inline-size: 70cqi;
|
||||
}
|
||||
|
||||
font-size: 1em;
|
||||
margin-block: 0.5em;
|
||||
color: darkblue;
|
||||
user-select: text;
|
||||
}
|
||||
|
||||
p,
|
||||
li {
|
||||
font-family: "LatinModernMono";
|
||||
line-height: 1.1em;
|
||||
user-select: text;
|
||||
}
|
||||
|
||||
.content {
|
||||
font-size: 0.4em;
|
||||
}
|
||||
|
||||
@media not (prefers-reduced-motion) {
|
||||
&:hover {
|
||||
transform: scale(1.025) rotate(0deg);
|
||||
box-shadow: 0px 0px 30px rgba(152, 97, 42, 0.05);
|
||||
}
|
||||
}
|
||||
|
||||
.signature {
|
||||
appearance: none;
|
||||
color: unset;
|
||||
text-decoration: none;
|
||||
position: absolute;
|
||||
right: 10%;
|
||||
font-family: "Bienchen";
|
||||
font-size: 0.65em;
|
||||
line-height: 0.8em;
|
||||
transform: rotate(-4deg);
|
||||
text-align: end;
|
||||
|
||||
transition: outline 0.3s ease, transform 0.2s ease;
|
||||
|
||||
@media not (prefers-reduced-motion) {
|
||||
* {
|
||||
transition: text-shadow 0.2s ease;
|
||||
text-shadow: -1px 2px 4px rgba(152, 97, 42, 0);
|
||||
}
|
||||
|
||||
|
||||
&:hover,
|
||||
&:focus-visible {
|
||||
transform: translateY(-2px) rotate(-2deg) scale(1.025);
|
||||
|
||||
* {
|
||||
text-shadow: 0px 2px 4px rgba(152, 97, 42, 0.1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
outline: 2px transparent solid;
|
||||
|
||||
&:focus-visible {
|
||||
outline: 2px crimson solid;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.valediction {
|
||||
color: crimson;
|
||||
letter-spacing: -0.03em;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.clipped {
|
||||
position: absolute;
|
||||
display: block;
|
||||
container-type: inline-size;
|
||||
z-index: 100;
|
||||
top: 0;
|
||||
right: 0;
|
||||
inline-size: 20cqi;
|
||||
|
||||
:first-child {
|
||||
inline-size: 100cqi;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.clipped-items {
|
||||
appearance: none;
|
||||
display: block;
|
||||
transform: rotate(17deg);
|
||||
color: unset;
|
||||
text-shadow: unset;
|
||||
|
||||
img {
|
||||
position: relative;
|
||||
box-shadow: 0px 4px 8px rgba(152, 97, 42, 0.2);
|
||||
outline: 2px transparent solid;
|
||||
transition: outline 0.3s ease;
|
||||
}
|
||||
|
||||
.slip {
|
||||
appearance: unset;
|
||||
margin: 0;
|
||||
|
||||
* {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
position: absolute;
|
||||
background: antiquewhite;
|
||||
color: var(--text-color);
|
||||
font-size: 0.35em;
|
||||
padding-inline: 0.5ch;
|
||||
display: block;
|
||||
z-index: -1;
|
||||
--mask: conic-gradient(from 60deg at left, #0000, #000 1deg 59deg, #0000 60deg) left/51% 0.2em repeat-y,
|
||||
conic-gradient(from -120deg at right, #0000, #000 1deg 59deg, #0000 60deg) right/51% 0.2em repeat-y;
|
||||
-webkit-mask: var(--mask);
|
||||
mask: var(--mask);
|
||||
}
|
||||
|
||||
.slip-george {
|
||||
bottom: 20%;
|
||||
left: 40%;
|
||||
transform: translateX(-50%) rotate(-5deg);
|
||||
}
|
||||
|
||||
.slip-label {
|
||||
z-index: 1;
|
||||
bottom: 65%;
|
||||
left: 70%;
|
||||
transform: translateX(-50%) rotate(25deg);
|
||||
}
|
||||
|
||||
&:focus-visible {
|
||||
outline: none;
|
||||
|
||||
img {
|
||||
outline: 2px crimson solid;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.paperclip {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: -20%;
|
||||
inline-size: 50cqi;
|
||||
filter: brightness(0.85);
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion) {
|
||||
.clipped-items {
|
||||
transform: rotate(9deg) translate(-5%, 10%);
|
||||
|
||||
.slip-george {
|
||||
bottom: -15%;
|
||||
left: 40%;
|
||||
transform: translateX(-50%) rotate(-15deg);
|
||||
}
|
||||
}
|
||||
|
||||
.paperclip {
|
||||
transform: rotate(4deg);
|
||||
top: -25%;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@media not (prefers-reduced-motion) {
|
||||
* {
|
||||
transition: transform 0.4s ease, top 0.3s ease, bottom 0.3s ease, left 0.3s ease;
|
||||
}
|
||||
|
||||
&:has(.clipped-items:focus) {
|
||||
.clipped-items {
|
||||
transform: rotate(9deg) translate(-5%, 10%);
|
||||
}
|
||||
|
||||
.paperclip {
|
||||
transform: rotate(4deg);
|
||||
top: -25%;
|
||||
}
|
||||
}
|
||||
|
||||
&:hover,
|
||||
&:focus-visible {
|
||||
.clipped-items {
|
||||
transform: rotate(9deg) translate(-5%, 10%);
|
||||
|
||||
.slip-george {
|
||||
bottom: 5%;
|
||||
left: 50%;
|
||||
transform: translateX(-50%) rotate(-18deg);
|
||||
}
|
||||
|
||||
.slip-sitemap {
|
||||
bottom: 70%;
|
||||
left: -30%;
|
||||
transform: translateX(-50%) rotate(7deg);
|
||||
}
|
||||
}
|
||||
|
||||
.paperclip {
|
||||
transform: rotate(4deg);
|
||||
top: -25%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.authority {
|
||||
img {
|
||||
block-size: 8cqb;
|
||||
opacity: 0.9;
|
||||
}
|
||||
}
|
||||
|
||||
.stamp {
|
||||
display: block;
|
||||
|
||||
img {
|
||||
position: absolute;
|
||||
transition: 0.3s transform ease;
|
||||
block-size: 15cqb;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
img {
|
||||
transform: rotate(0deg) scale(1.05) !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.taped {
|
||||
|
||||
img {
|
||||
max-block-size: 35cqb;
|
||||
max-inline-size: 60cqi;
|
||||
/* box-shadow: 0px 0px 8px rgba(152, 97, 42, 0.3); */
|
||||
}
|
||||
|
||||
&::before,
|
||||
&::after {
|
||||
content: "";
|
||||
display: block;
|
||||
position: absolute;
|
||||
block-size: 4.5cqb;
|
||||
aspect-ratio: 8 / 3;
|
||||
transform: rotate(-45deg);
|
||||
background-size: contain;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
opacity: 0.95;
|
||||
}
|
||||
|
||||
&::before {
|
||||
top: 0cqb;
|
||||
left: -6cqi;
|
||||
background-image: var(--washi-url-0);
|
||||
}
|
||||
|
||||
&::after {
|
||||
bottom: 1cqb;
|
||||
right: -6cqi;
|
||||
background-image: var(--washi-url-1);
|
||||
}
|
||||
}
|
||||
|
||||
.taped,
|
||||
.gallery-3 {
|
||||
display: inline-flex;
|
||||
position: relative;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-inline-start: 50%;
|
||||
transform: translateX(-50%) rotate(1deg);
|
||||
}
|
||||
|
||||
.gallery-3 {
|
||||
img {
|
||||
max-block-size: 25cqb;
|
||||
max-inline-size: 40cqi;
|
||||
}
|
||||
|
||||
div {
|
||||
|
||||
/* position: absolute; */
|
||||
&::before,
|
||||
&::after {
|
||||
content: "";
|
||||
display: block;
|
||||
position: absolute;
|
||||
block-size: 3cqb;
|
||||
aspect-ratio: 8 / 3;
|
||||
background-size: contain;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
opacity: 0.95;
|
||||
}
|
||||
|
||||
--washi-url-0: url("/assets/images/washi/0.png");
|
||||
--washi-url-1: url("/assets/images/washi/0.png");
|
||||
|
||||
&::before {
|
||||
top: -2cqb;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
background-image: var(--washi-url-0);
|
||||
}
|
||||
}
|
||||
|
||||
&>* {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
&>:nth-child(1) {
|
||||
transform: translate(40%, 10%) rotate(-8deg);
|
||||
}
|
||||
|
||||
&>:nth-child(2) {
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
&>:nth-child(3) {
|
||||
transform: translate(-40%, 10%) rotate(8deg);
|
||||
}
|
||||
}
|
||||
|
||||
.pos-anchor {
|
||||
position: relative;
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
---
|
||||
title: hello word
|
||||
date: 2024-9-30
|
||||
desc: the first post on my blog! check back in soon cause this is very janky rn lol
|
||||
---
|
||||
|
||||
# hi!
|
||||
|
||||
i just wanted to get something up and running before cohost shuts down
|
||||
|
||||
this will look prettier soon i was just rushing!
|
||||
|
||||
you can subscribe with [rss](/feed.xml) and eventually i think i will add automated instagram posts whenever there's a new update, but that's for later
|
218
src/main.ts
|
@ -1,218 +0,0 @@
|
|||
import sunsetfourteenth from "/14thstsunrise.gif";
|
||||
import backwalkgeorge from "/backwalkgeorge.jpg";
|
||||
import ducklings from "/ducklings.gif";
|
||||
import ermine from "/ermine.gif";
|
||||
import fieldnotes from "/fieldnotes.gif";
|
||||
import flowers from "/flowers.jpg";
|
||||
import georgerasp from "/georgerasp.gif";
|
||||
import georgetoilet from "/georgetoilet.jpg";
|
||||
import heron from "/heron.jpg";
|
||||
import klinefloor from "/klinefloor.jpg";
|
||||
import klinemirror from "/klinemirror.jpg";
|
||||
import klineoutside from "/klineoutside.jpg";
|
||||
import klinetrain from "/klinetrain.jpg";
|
||||
import lamp from "/lamp.gif";
|
||||
import mirror from "/mirror.jpg";
|
||||
import ohio from "/ohio.jpg";
|
||||
import sashaklineburrito from "/sashaklineburrito.jpg";
|
||||
import sashaklinecar from "/sashaklinecar.jpg";
|
||||
import solderkitty from "/solderkitty.jpg";
|
||||
import sunsetkline from "/sunsetkline.jpg";
|
||||
|
||||
const background = document.getElementById("background")!;
|
||||
|
||||
const prefersReducedMotion = window.matchMedia(
|
||||
"(prefers-reduced-motion: reduce)",
|
||||
).matches;
|
||||
|
||||
const setImages = () => {
|
||||
let images: string[] = [];
|
||||
let alts: string[] = [];
|
||||
if (prefersReducedMotion) {
|
||||
images = [
|
||||
backwalkgeorge,
|
||||
fieldnotes,
|
||||
flowers,
|
||||
georgetoilet,
|
||||
heron,
|
||||
klinefloor,
|
||||
klinemirror,
|
||||
klineoutside,
|
||||
klinetrain,
|
||||
mirror,
|
||||
ohio,
|
||||
sashaklineburrito,
|
||||
sashaklinecar,
|
||||
solderkitty,
|
||||
sunsetkline,
|
||||
];
|
||||
alts = [
|
||||
"A small child holding a stuffed monkey and a santa hat walking away from the camera",
|
||||
"Animated gif of a notebook with a pretty landscape illustration cover",
|
||||
"A field of violet flowers",
|
||||
"A woman smiling next to a stuffed monkey",
|
||||
"A heron standing in a pond",
|
||||
"A woman in a green sweater and jeans sitting on the floor and smiling",
|
||||
"A woman in bed taking a mirror selfie where her face is distorted",
|
||||
"A selfie of a woman in a driveway next to a truck",
|
||||
"A young girl smiling in front of a train",
|
||||
"A shattered mirror",
|
||||
"Two adjacent houses lit by an early morning sunrise",
|
||||
"A selfie of two friends holding burritos, one of whom is wearing a cammo hat",
|
||||
"A selfie of two friends in a car, one of whom is wearing a cammo hat",
|
||||
"A pink porcelain kitty figurine supporting a soldering iron",
|
||||
"A selfie of a woman indoors, behind her the sun is setting in the window",
|
||||
];
|
||||
} else {
|
||||
images = [
|
||||
sunsetfourteenth,
|
||||
backwalkgeorge,
|
||||
ducklings,
|
||||
ermine,
|
||||
fieldnotes,
|
||||
flowers,
|
||||
georgerasp,
|
||||
georgetoilet,
|
||||
heron,
|
||||
klinefloor,
|
||||
klinemirror,
|
||||
klineoutside,
|
||||
klinetrain,
|
||||
lamp,
|
||||
mirror,
|
||||
ohio,
|
||||
sashaklineburrito,
|
||||
sashaklinecar,
|
||||
solderkitty,
|
||||
sunsetkline,
|
||||
];
|
||||
alts = [
|
||||
"Animated gif of a sunrise on a city street",
|
||||
"A small child holding a stuffed monkey and a santa hat walking away from the camera",
|
||||
"Animated gif of a duck and ducklings swimming in a pond",
|
||||
"Animated gif of an ermine peeking up out of a crack in concrete",
|
||||
"Animated gif of a notebook with a pretty landscape illustration cover",
|
||||
"A field of violet flowers",
|
||||
"Animated gif of an amber CRT screen with flashing text and Raspberry Pi logo",
|
||||
"A woman smiling next to a stuffed monkey",
|
||||
"A heron standing in a pond",
|
||||
"A woman in a green sweater and jeans sitting on the floor and smiling",
|
||||
"A woman in bed taking a mirror selfie where her face is distorted",
|
||||
"A selfie of a woman in a driveway next to a truck",
|
||||
"A young girl smiling in front of a train",
|
||||
"Animated gif of a lamp behind which cars drive past in the snow",
|
||||
"A shattered mirror",
|
||||
"Two adjacent houses lit by an early morning sunrise",
|
||||
"A selfie of two friends holding burritos, one of whom is wearing a cammo hat",
|
||||
"A selfie of two friends in a car, one of whom is wearing a cammo hat",
|
||||
"A pink porcelain kitty figurine supporting a soldering iron",
|
||||
"A selfie of a woman indoors, behind her the sun is setting in the window",
|
||||
];
|
||||
}
|
||||
const randn_bm = (mean = 0, stdev = 0.4) => {
|
||||
const u = 1 - Math.random();
|
||||
const v = Math.random();
|
||||
const z = Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v);
|
||||
return z * stdev + mean;
|
||||
};
|
||||
|
||||
const randNums = (count: number, minDistance: number): number[] => {
|
||||
const numbers: number[] = [];
|
||||
|
||||
function isFarEnough(num: number): boolean {
|
||||
for (const n of numbers) {
|
||||
if (Math.abs(num - n) < minDistance) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
while (numbers.length < count) {
|
||||
const newNumber = randn_bm();
|
||||
if (isFarEnough(newNumber)) {
|
||||
numbers.push(newNumber);
|
||||
}
|
||||
}
|
||||
|
||||
return numbers;
|
||||
};
|
||||
|
||||
const lefts = randNums(images.length, 0.05);
|
||||
const tops = randNums(images.length, 0.05);
|
||||
|
||||
for (let index in images) {
|
||||
const img = document.createElement("img");
|
||||
img.setAttribute("src", images[index]);
|
||||
img.setAttribute("alt", alts[index]);
|
||||
let seedX = Math.random() * Math.random() * 100;
|
||||
let seedY = Math.random() * Math.random() * 100;
|
||||
img.setAttribute("seedX", seedX.toString());
|
||||
img.setAttribute("seedY", seedY.toString());
|
||||
const left = lefts[index];
|
||||
const top = tops[index];
|
||||
const z = (Math.abs(left) + Math.abs(top)) / 2;
|
||||
const size = Math.random() * 5 + 9;
|
||||
const range = { x: window.innerWidth * 0.7, y: window.innerHeight * 0.7 };
|
||||
img.style.setProperty(
|
||||
"left",
|
||||
`${left * range.x + window.innerWidth / 2}px`,
|
||||
);
|
||||
img.style.setProperty("top", `${top * range.y + window.innerHeight / 2}px`);
|
||||
img.style.setProperty("--translate-z", `${z * 3000}px`);
|
||||
img.style.setProperty("inline-size", `${size}vmax`);
|
||||
background.append(img);
|
||||
}
|
||||
};
|
||||
|
||||
const mobile = window.matchMedia("(hover: none) and (pointer: coarse)").matches;
|
||||
|
||||
if (!mobile) {
|
||||
const root = document.documentElement;
|
||||
const onMove = (ev: MouseEvent) => {
|
||||
const rotateY = `${-(ev.clientX - window.innerWidth / 2) * 0.003}deg`;
|
||||
const rotateX = `${(ev.clientY - window.innerHeight / 2) * 0.003}deg`;
|
||||
root.style.setProperty("--rotate-x", rotateX);
|
||||
root.style.setProperty("--rotate-y", rotateY);
|
||||
};
|
||||
document.addEventListener("mousemove", onMove);
|
||||
}
|
||||
|
||||
window.addEventListener("load", () => {
|
||||
background.setAttribute("loaded", "");
|
||||
|
||||
const noise = (t: number) => {
|
||||
return Math.sin(2 * t) + Math.sin(Math.PI * t);
|
||||
};
|
||||
|
||||
const toDomPrecision = (v: number) => {
|
||||
return Math.round(v * 1e4) / 1e4;
|
||||
};
|
||||
|
||||
const dpi = window.devicePixelRatio;
|
||||
const moveImages = (t: number) => {
|
||||
const background = document.getElementById("background")!;
|
||||
const images = background.getElementsByTagName("img");
|
||||
for (let i = 0; i < images.length; i++) {
|
||||
const img = images[i];
|
||||
let top = toDomPrecision(
|
||||
Number(img.style.top.slice(0, img.style.top.length - 2)),
|
||||
);
|
||||
let left = toDomPrecision(
|
||||
Number(img.style.left.slice(0, img.style.left.length - 2)),
|
||||
);
|
||||
top += (noise(Number(img.getAttribute("seedY")) + t) * 0.4) / dpi; // move faster on lower-res displays to improve jitter
|
||||
left += (noise(Number(img.getAttribute("seedX")) + t) * 0.4) / dpi;
|
||||
img.style.setProperty("top", `${top}px`);
|
||||
img.style.setProperty("left", `${left}px`);
|
||||
}
|
||||
t += 0.0005;
|
||||
window.requestAnimationFrame(moveImages.bind(this, t));
|
||||
};
|
||||
|
||||
if (!prefersReducedMotion) {
|
||||
moveImages(0);
|
||||
}
|
||||
});
|
||||
|
||||
setImages();
|
|
@ -1 +0,0 @@
|
|||
/// <reference types="vite/client" />
|
|
@ -1,23 +0,0 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2020",
|
||||
"useDefineForClassFields": true,
|
||||
"module": "ESNext",
|
||||
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
||||
"skipLibCheck": true,
|
||||
|
||||
/* Bundler mode */
|
||||
"moduleResolution": "bundler",
|
||||
"allowImportingTsExtensions": true,
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"noEmit": true,
|
||||
|
||||
/* Linting */
|
||||
"strict": true,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"noFallthroughCasesInSwitch": true
|
||||
},
|
||||
"include": ["src"]
|
||||
}
|
186
vite.config.ts
|
@ -1,186 +0,0 @@
|
|||
import { defineConfig } from "vite";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { marked, Token, Tokens } from "marked";
|
||||
import xml from "xml";
|
||||
import matter from "gray-matter";
|
||||
import highlight from "highlight.js";
|
||||
|
||||
const blogDir = path.resolve(__dirname, "src/blog");
|
||||
const outputDir = path.resolve(__dirname, "dist/blog");
|
||||
const rssFeedPath = path.resolve(__dirname, "dist/feed.xml");
|
||||
|
||||
const hostname = "https://augustkline.com";
|
||||
const blogUrl = `${hostname}/blog`;
|
||||
|
||||
interface Articles {
|
||||
title: string;
|
||||
link: string;
|
||||
description: string;
|
||||
pubDate: string;
|
||||
}
|
||||
|
||||
const renderer = new marked.Renderer();
|
||||
|
||||
renderer.code = ({ text, lang }: Tokens.Code) => {
|
||||
const validLang = highlight.getLanguage(lang!) ? lang! : "plaintext";
|
||||
const highlightedCode = highlight.highlight(text!, { language: validLang });
|
||||
return `<pre><code class="language-${validLang}">${highlightedCode.value}</code></pre>`;
|
||||
};
|
||||
|
||||
marked.setOptions({
|
||||
renderer,
|
||||
gfm: true,
|
||||
breaks: true,
|
||||
});
|
||||
|
||||
function generateBlogHtml() {
|
||||
fs.mkdirSync(outputDir, { recursive: true });
|
||||
|
||||
const articles: Articles[] = [];
|
||||
|
||||
let blurbs: { date: string; content: string }[] = [];
|
||||
|
||||
fs.readdirSync(blogDir).forEach((file) => {
|
||||
if (file.endsWith(".md")) {
|
||||
const filePath = path.join(blogDir, file);
|
||||
const str = fs.readFileSync(filePath, "utf-8");
|
||||
let { data, content } = matter(str);
|
||||
|
||||
const slug = `${data.date!}-${data.title!.replace(/ /g, "-")}`;
|
||||
|
||||
const html_content = marked.parse(content);
|
||||
|
||||
const blogPostsPath = path.join(outputDir, `${slug}.html`);
|
||||
|
||||
const postHtml = `
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>${data.title!}</title>
|
||||
<link rel="stylesheet" type="text/css" href="/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="/github.css">
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
${html_content}
|
||||
<a href="/">Back to Home</a>
|
||||
</main>
|
||||
<div id="background">
|
||||
</div>
|
||||
</body>
|
||||
<script type="module" src="/main.js"></script>
|
||||
</html>
|
||||
`;
|
||||
|
||||
const link = `/blog/${slug}.html`;
|
||||
const blurbHtml = `
|
||||
<div>
|
||||
<a href="${link}">
|
||||
<h2>${data.title!}</h2>
|
||||
<p>${new Date(data.date!).toDateString()}</p>
|
||||
<p>${data.desc!}</p>
|
||||
</a>
|
||||
</div>
|
||||
`;
|
||||
|
||||
blurbs.push({ date: data.date!, content: blurbHtml });
|
||||
|
||||
fs.writeFileSync(blogPostsPath, postHtml);
|
||||
|
||||
// Store article data for RSS
|
||||
articles.push({
|
||||
title: data.title!,
|
||||
link: link,
|
||||
description: data.desc!,
|
||||
pubDate: data.date!,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
const blogIndexPath = path.join(outputDir, "index.html");
|
||||
blurbs.sort((a, b) => {
|
||||
return new Date(b.date).getTime() - new Date(a.date).getTime();
|
||||
});
|
||||
let blurbsHtml: string = "";
|
||||
for (let blurb in blurbs) {
|
||||
blurbsHtml = blurbsHtml.concat(blurbs[blurb].content);
|
||||
}
|
||||
const blogIndexHtml = `
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>august kline's blog</title>
|
||||
<link rel="stylesheet" type="text/css" href="/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="/github.css">
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<h1>ʕ·ᴥ·ʔ-☆ august kline's blog ☆</h1>
|
||||
${blurbsHtml}
|
||||
</main>
|
||||
<div id="background">
|
||||
</div>
|
||||
</body>
|
||||
<script type="module" src="/main.js"></script>
|
||||
</html>
|
||||
`;
|
||||
fs.writeFileSync(blogIndexPath, blogIndexHtml);
|
||||
return articles;
|
||||
}
|
||||
|
||||
// Function to generate RSS feed
|
||||
function generateRssFeed(articles: Articles[]) {
|
||||
const feedItems = articles.map((article) => ({
|
||||
item: [
|
||||
{ title: article.title },
|
||||
{ link: article.link },
|
||||
{ description: article.description },
|
||||
{ pubDate: article.pubDate },
|
||||
],
|
||||
}));
|
||||
|
||||
const rss = {
|
||||
rss: [
|
||||
{
|
||||
channel: [
|
||||
{ title: "ʕ·ᴥ·ʔ-☆ august kline's blog ☆" },
|
||||
{ link: `${blogUrl}` }, // Update with your domain
|
||||
{
|
||||
description:
|
||||
"whatever's on my mind, short essays, tech stuff, etc :)",
|
||||
},
|
||||
...feedItems,
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
const rssXml = xml(rss, { declaration: true });
|
||||
fs.writeFileSync(rssFeedPath, rssXml);
|
||||
}
|
||||
|
||||
// Export Vite config
|
||||
export default defineConfig({
|
||||
build: {
|
||||
rollupOptions: {
|
||||
output: {
|
||||
entryFileNames: `main.js`,
|
||||
},
|
||||
plugins: [
|
||||
{
|
||||
name: "generate-blog-html-and-rss",
|
||||
writeBundle() {
|
||||
// parses blog markdown, writes the blog endpoints and returns array of article data
|
||||
const articles = generateBlogHtml();
|
||||
generateRssFeed(articles);
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
});
|