diff --git a/assets/favicons/android-chrome-192x192.png b/assets/favicons/android-chrome-192x192.png
new file mode 100644
index 0000000..3c511aa
Binary files /dev/null and b/assets/favicons/android-chrome-192x192.png differ
diff --git a/assets/favicons/android-chrome-512x512.png b/assets/favicons/android-chrome-512x512.png
new file mode 100644
index 0000000..c78d5de
Binary files /dev/null and b/assets/favicons/android-chrome-512x512.png differ
diff --git a/assets/favicons/apple-touch-icon.png b/assets/favicons/apple-touch-icon.png
new file mode 100644
index 0000000..0dba612
Binary files /dev/null and b/assets/favicons/apple-touch-icon.png differ
diff --git a/assets/favicons/favicon-16x16.png b/assets/favicons/favicon-16x16.png
new file mode 100644
index 0000000..03a2b22
Binary files /dev/null and b/assets/favicons/favicon-16x16.png differ
diff --git a/assets/favicons/favicon-32x32.png b/assets/favicons/favicon-32x32.png
new file mode 100644
index 0000000..e3724d8
Binary files /dev/null and b/assets/favicons/favicon-32x32.png differ
diff --git a/assets/favicons/favicon.ico b/assets/favicons/favicon.ico
new file mode 100644
index 0000000..2a9a382
Binary files /dev/null and b/assets/favicons/favicon.ico differ
diff --git a/assets/favicons/site.webmanifest b/assets/favicons/site.webmanifest
new file mode 100644
index 0000000..45dc8a2
--- /dev/null
+++ b/assets/favicons/site.webmanifest
@@ -0,0 +1 @@
+{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
\ No newline at end of file
diff --git a/assets/links/bluesky.svg b/assets/links/bluesky.svg
new file mode 100644
index 0000000..10fe9cc
--- /dev/null
+++ b/assets/links/bluesky.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/assets/links/keyoxide.svg b/assets/links/keyoxide.svg
new file mode 100644
index 0000000..4feca3e
--- /dev/null
+++ b/assets/links/keyoxide.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/links/mastodon.svg b/assets/links/mastodon.svg
new file mode 100644
index 0000000..39a116b
--- /dev/null
+++ b/assets/links/mastodon.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/noise.svg b/assets/noise.svg
new file mode 100644
index 0000000..6936c8a
--- /dev/null
+++ b/assets/noise.svg
@@ -0,0 +1,7 @@
+
+
diff --git a/assets/pfp.gif b/assets/pfp.gif
new file mode 100644
index 0000000..668e451
Binary files /dev/null and b/assets/pfp.gif differ
diff --git a/assets/pfp.jpg b/assets/pfp.jpg
new file mode 100644
index 0000000..1ad25f6
Binary files /dev/null and b/assets/pfp.jpg differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..472e591
--- /dev/null
+++ b/index.html
@@ -0,0 +1,62 @@
+
+
+
+
+ Gaiety's Linkery
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/reset.css b/reset.css
new file mode 100644
index 0000000..e29c0f5
--- /dev/null
+++ b/reset.css
@@ -0,0 +1,48 @@
+/* http://meyerweb.com/eric/tools/css/reset/
+ v2.0 | 20110126
+ License: none (public domain)
+*/
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure,
+footer, header, hgroup, menu, nav, section {
+ display: block;
+}
+body {
+ line-height: 1;
+}
+ol, ul {
+ list-style: none;
+}
+blockquote, q {
+ quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+ content: '';
+ content: none;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
diff --git a/styles.css b/styles.css
new file mode 100644
index 0000000..f344b63
--- /dev/null
+++ b/styles.css
@@ -0,0 +1,146 @@
+:root {
+ --color-text: #cdd6f4;
+ --color-subtext-1: #bac2de;
+ --color-subtext-0: #a6adc8;
+ --color-overlay-2: #9399b2;
+ --color-overlay-1: #7f849c;
+ --color-overlay-0: #6c7086;
+ --color-surface-2: #585b70;
+ --color-surface-1: #45475a;
+ --color-surface-0: #313244;
+ --color-base: #1e1e2e;
+ --color-mantle: #181825;
+ --color-crust: #11111b;
+
+ --color-lavender: #b4befe;
+ --color-mauve: #cba6f7;
+ --color-yellow: #f9e2af;
+}
+
+html {
+ color: var(--color-text);
+ font-family: sans-serif;
+ background: var(--color-surface-2);
+
+ &:before {
+ position: absolute;
+ inset: 0;
+ z-index: -1;
+ content: '';
+ /* https://codepen.io/tomhermans/pen/wBvwomx */
+ background: radial-gradient(circle at 50% 30%, var(--color-yellow), 18%, var(--color-mauve), var(--color-lavender), 20%, var(--color-base), var(--color-crust));
+ background-size: cover;
+ filter: url(#dither);
+ transform: scale(1.3);
+ }
+}
+
+#container {
+ margin: 6rem auto;
+ max-width: 900px;
+ position: relative;
+ z-index: 1;
+
+ header {
+ color: var(--color-subtext-0);
+ text-align: center;
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+ }
+
+ .headline {
+ background: radial-gradient(circle at center, var(--color-surface-0), 90%, transparent);
+ padding: 0.6rem 1.5rem;
+ display: inline-flex;
+ flex-direction: column;
+ gap: 0.2rem;
+
+ h1 {
+ font-size: 2rem;
+ }
+ h2 {
+ font-size: 1.4rem;
+ color: var(--color-text)
+ }
+
+ small {
+ color: var(--color-lavender);
+ text-transform: uppercase;
+ }
+ }
+}
+
+#pfp {
+ margin: 0 auto;
+ position: relative;
+ width: 250px;
+ height: 250px;
+
+ img {
+ border-radius: 10%;
+ width: 250px;
+ }
+
+ img.animated {
+ position: absolute;
+ left: 0;
+ opacity: 0;
+ cursor: not-allowed;
+
+ &:hover, &:active {
+ opacity: 1;
+ }
+ }
+}
+
+main {
+ margin-top: 2rem;
+ display: flex;
+ flex-direction: column;
+ gap: 2rem;
+
+ .icons-only {
+ justify-content: center;
+ display: flex;
+ flex-direction: row;
+ gap: 2rem;
+
+ a {
+ transition: transform 100ms ease-out;
+
+ &:hover, &:focus, &:active {
+ transform: scale(1.2);
+ }
+
+ img {
+ height: 3rem;
+ }
+ }
+ }
+
+ .links {
+ a {
+ border-radius: 1rem;
+ background: var(--color-base);
+ display: block;
+ text-decoration: none;
+ position: relative;
+ height: 5rem;
+
+ img {
+ position: absolute;
+ height: 5rem;
+ }
+
+ span {
+ color: var(--color-text);
+ padding: 1rem;
+ font-size: 3rem;
+ text-align: center;
+ display: block;
+ width: 100%;
+ }
+ }
+ }
+}