src/components/layout/Footer.astro 1.5 K raw
1
---
2
const year = new Date().getFullYear();
3
import Image from "astro/components/Image.astro";
4
---
5
6
<footer
7
	class="mt-auto flex flex-col gap-y-3 pt-20 pb-12 text-zinc-500 text-xs"
8
>
9
<a class="underline" href="/">
10
		&copy; {year} stevedylan.dev
11
	</a>
12
  <a target="_blank" rel="noreferrer" class="underline" href="https://github.com/stevedylandev/stevedylan.dev">Source Code</a>
13
  <a class="underline" href="mailto:contact@stevedylan.dev">Contact</a>
14
  <a class="underline" href="/kill-your-lawn">Kill Your Lawn</a>
15
	<a href="/murmurations" class="flex items-center gap-1.5 murmuration-flock" aria-label="Murmurations">
16
		{Array.from({ length: 7 }).map(() => (
17
			<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 256 256" class="murmuration-bird">
18
				<path fill="currentColor" d="M237.33 106.21L61.41 41l-.16-.05a16 16 0 0 0-20.35 20.3a1 1 0 0 0 .05.16l65.26 175.92A15.77 15.77 0 0 0 121.28 248h.3a15.77 15.77 0 0 0 15-11.29l.06-.2l21.84-78l78-21.84l.2-.06a16 16 0 0 0 .62-30.38Zm-87.49 38.09a8 8 0 0 0-5.54 5.54l-23 82.16l-.06-.17L56 56l175.82 65.22l.16.06Z"/>
19
			</svg>
20
		))}
21
	</a>
22
	<script>
23
		document.querySelectorAll<SVGElement>('.murmuration-flock .murmuration-bird').forEach((el) => {
24
			const deg = Math.random() * 360;
25
			el.style.transform = `rotate(${deg}deg)`;
26
		});
27
	</script>
28
  <a href="https://blog.kagi.com/small-web-updates">
29
    <Image inferSize={true} src="https://kagifeedback.org/assets/files/2025-11-27/1764250950-635837-80x15-2.png" alt="Kagi Small Web badge"/>
30
  </a>
31
</footer>