Compare commits
5 Commits
4434a01341
...
362b876892
| Author | SHA1 | Date | |
|---|---|---|---|
| 362b876892 | |||
| f9b73851f3 | |||
| f910b44129 | |||
| 1d9eaa5bdd | |||
| 78eea262b2 |
@@ -27,9 +27,11 @@
|
|||||||
<div class="title-container">
|
<div class="title-container">
|
||||||
<div class="title-text-container">
|
<div class="title-text-container">
|
||||||
<h1 class="title">{title}</h1>
|
<h1 class="title">{title}</h1>
|
||||||
|
|
||||||
{#if subtitle}
|
{#if subtitle}
|
||||||
<p class="subtitle">[ {subtitle} ]</p>
|
<p class="subtitle">[ {subtitle} ]</p>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if tags.length}
|
{#if tags.length}
|
||||||
<div class="tag-container">
|
<div class="tag-container">
|
||||||
{#each tags as tag}
|
{#each tags as tag}
|
||||||
@@ -43,9 +45,11 @@
|
|||||||
{#if dateIndeterminate}
|
{#if dateIndeterminate}
|
||||||
<p class="date">:: {dateIndeterminate}</p>
|
<p class="date">:: {dateIndeterminate}</p>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if date}
|
{#if date}
|
||||||
<p class="date">posted :: {date}</p>
|
<p class="date">posted :: {date}</p>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if dateUpdated}
|
{#if dateUpdated}
|
||||||
<p class="date">last updated :: {dateUpdated}</p>
|
<p class="date">last updated :: {dateUpdated}</p>
|
||||||
{/if}
|
{/if}
|
||||||
@@ -57,13 +61,10 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
{#if banner && banner !== ""}
|
{#if banner && banner !== ""}
|
||||||
<a class="banner-container" href={banner}>
|
<a class="banner-container" href={banner}>
|
||||||
{#if pixelated}
|
<img class="banner {pixelated ? "pixelated-img" : ""}" src={banner} alt={bannerAlt}>
|
||||||
<img class="banner pixelated-img" src={banner} alt={bannerAlt}>
|
|
||||||
{:else}
|
|
||||||
<img class="banner" src={banner} alt={bannerAlt}>
|
|
||||||
{/if}
|
|
||||||
</a>
|
</a>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{@render titles({title, subtitle, date})}
|
{@render titles({title, subtitle, date})}
|
||||||
<hr>
|
<hr>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,100 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
let {
|
|
||||||
content,
|
|
||||||
type,
|
|
||||||
}: {
|
|
||||||
content: string[];
|
|
||||||
|
|
||||||
// valid values: warn, quote, info. defaults to warn
|
|
||||||
type: string;
|
|
||||||
} = $props();
|
|
||||||
</script>
|
|
||||||
|
|
||||||
{#snippet calloutContent()}
|
|
||||||
<p class="callout-symbol">
|
|
||||||
{#if type == "quote"}
|
|
||||||
»
|
|
||||||
{:else if type == "info"}
|
|
||||||
i
|
|
||||||
{:else}
|
|
||||||
!
|
|
||||||
{/if}
|
|
||||||
</p>
|
|
||||||
<div class="callout-text-container">
|
|
||||||
{#each content as p}
|
|
||||||
{#if type == "quote"}
|
|
||||||
<p class="callout-quote-text">"{@html p}"</p>
|
|
||||||
{:else}
|
|
||||||
<p class="callout-text">{@html p}</p>
|
|
||||||
{/if}
|
|
||||||
{/each}
|
|
||||||
</div>
|
|
||||||
{/snippet}
|
|
||||||
|
|
||||||
{#if type == "quote"}
|
|
||||||
<div class="callout-container blurred-background callout-quote">
|
|
||||||
{@render calloutContent()}
|
|
||||||
</div>
|
|
||||||
{:else if type == "info"}
|
|
||||||
<div class="callout-container blurred-background callout-info">
|
|
||||||
{@render calloutContent()}
|
|
||||||
</div>
|
|
||||||
{:else}
|
|
||||||
<div class="callout-container blurred-background callout-warn">
|
|
||||||
{@render calloutContent()}
|
|
||||||
</div>
|
|
||||||
{/if}
|
|
||||||
|
|
||||||
<style>
|
|
||||||
.callout-warn {
|
|
||||||
--color-callout: var(--color-callout-warn);
|
|
||||||
}
|
|
||||||
|
|
||||||
.callout-quote {
|
|
||||||
--color-callout: var(--color-callout-quote);
|
|
||||||
}
|
|
||||||
|
|
||||||
.callout-info {
|
|
||||||
--color-callout: var(--color-callout-info);
|
|
||||||
}
|
|
||||||
|
|
||||||
.callout-container {
|
|
||||||
--color-callout-background: color-mix(in srgb, var(--color-callout) 30%, transparent);
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
|
||||||
max-width: 800px;
|
|
||||||
margin: 12px auto 0;
|
|
||||||
align-items: center;
|
|
||||||
border: var(--border-style) var(--border-dash-size) var(--color-callout);
|
|
||||||
background-color: var(--color-callout-background);
|
|
||||||
border-radius: var(--border-radius);
|
|
||||||
padding: 16px;
|
|
||||||
gap: 16px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
.callout-symbol {
|
|
||||||
font-family: var(--font-mono);
|
|
||||||
font-size: 4.0rem;
|
|
||||||
font-weight: 700;
|
|
||||||
/* font-style: italic; */
|
|
||||||
}
|
|
||||||
|
|
||||||
:global {
|
|
||||||
.callout-text, .callout-text-container * {
|
|
||||||
margin: 0;
|
|
||||||
font-size: 1.0rem;
|
|
||||||
line-height: 1.4rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.callout-quote-text {
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.callout-text-container {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 8px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
let {
|
|
||||||
text,
|
|
||||||
onClick,
|
|
||||||
fullWidth,
|
|
||||||
}: {
|
|
||||||
text: string;
|
|
||||||
onClick: () => undefined;
|
|
||||||
fullWidth?: boolean;
|
|
||||||
} = $props();
|
|
||||||
</script>
|
|
||||||
|
|
||||||
{#if fullWidth}
|
|
||||||
<button class="outlined-button outlined-button-fullwidth" onclick={onClick}>{text}</button>
|
|
||||||
{:else}
|
|
||||||
<button class="outlined-button" onclick={onClick}>{text}</button>
|
|
||||||
{/if}
|
|
||||||
|
|
||||||
<style>
|
|
||||||
.outlined-button {
|
|
||||||
font-family: var(--font-mono);
|
|
||||||
font-size: var(--font-size-mono);
|
|
||||||
padding: 8px;
|
|
||||||
border: var(--border-style) var(--border-dash-size) var(--color-highlight);
|
|
||||||
color: var(--color-highlight);
|
|
||||||
font-weight: 700;
|
|
||||||
cursor: pointer;
|
|
||||||
transition: background-color var(--duration-animation) var(--anim-curve);
|
|
||||||
}
|
|
||||||
|
|
||||||
.outlined-button:hover {
|
|
||||||
background-color: var(--color-background-highlight);
|
|
||||||
}
|
|
||||||
|
|
||||||
.outlined-button-fullwidth {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
<div class="reaction-container blurred-background">
|
<div class="reaction-container blurred-background">
|
||||||
<div class="reaction-content-container">
|
<div class="reaction-content-container">
|
||||||
<img src="/reactions/{reaction}.webp" alt={getReactionAlt(reaction)}>
|
<img src="/reactions/{reaction}.webp" alt={getReactionAlt(reaction)}>
|
||||||
<p>{text}</p>
|
<p>{@html text}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -34,18 +34,24 @@
|
|||||||
<div class="webring-container">
|
<div class="webring-container">
|
||||||
<div class="webring-row">
|
<div class="webring-row">
|
||||||
<span>〔</span>
|
<span>〔</span>
|
||||||
|
|
||||||
<a href="{ringLink}">{highlightEmojiLeft} {ringName} {highlightEmojiRight ?? highlightEmojiLeft}</a>
|
<a href="{ringLink}">{highlightEmojiLeft} {ringName} {highlightEmojiRight ?? highlightEmojiLeft}</a>
|
||||||
|
|
||||||
<span>〕</span>
|
<span>〕</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="webring-row">
|
<div class="webring-row">
|
||||||
<span>〔</span>
|
<span>〔</span>
|
||||||
|
|
||||||
<a href="{prevLink}">{prevSymbol} prev</a>
|
<a href="{prevLink}">{prevSymbol} prev</a>
|
||||||
|
|
||||||
{#if randLink}
|
{#if randLink}
|
||||||
<a href="{randLink}">rand</a>
|
<a href="{randLink}">rand</a>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if listLink}
|
{#if listLink}
|
||||||
<a href="{listLink}">list</a>
|
<a href="{listLink}">list</a>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<a href="{nextLink}">next {nextSymbol}</a>
|
<a href="{nextLink}">next {nextSymbol}</a>
|
||||||
<span>〕</span>
|
<span>〕</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,34 +1,44 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
let y: number;
|
let y: number;
|
||||||
|
|
||||||
// TODO change out for <a href="#top"/>
|
|
||||||
function scrollToTop() {
|
|
||||||
document.documentElement.scrollTop = 0;
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:window bind:scrollY={y} />
|
<svelte:window bind:scrollY={y} />
|
||||||
|
|
||||||
{#if y > 2400}
|
<a
|
||||||
<button class="scroll-top-button blurred-background" onclick={scrollToTop}>↑</button>
|
href="#top"
|
||||||
{/if}
|
class="
|
||||||
|
scroll-top-button
|
||||||
|
blurred-background
|
||||||
|
{y > 2400 ? "scroll-top-button-visible" : ""}
|
||||||
|
"
|
||||||
|
>↑</a>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.scroll-top-button {
|
.scroll-top-button {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
bottom: 24px;
|
bottom: 24px;
|
||||||
right: 48px;
|
right: 48px;
|
||||||
font-size: 1.4rem;
|
font-size: 1.6rem;
|
||||||
|
font-weight: 700;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
border: var(--border-style) var(--border-dash-size) var(--color-highlight);
|
border-radius: var(--border-radius);
|
||||||
color: var(--color-highlight);
|
border-top: var(--border-style) var(--border-dash-size) var(--color-highlight-alt);
|
||||||
background-color: var(--color-background-highlight);
|
border-bottom: var(--border-style) var(--border-dash-size) var(--color-highlight-alt);
|
||||||
padding: 12px;
|
color: var(--color-text);
|
||||||
transition: background-color var(--duration-animation) var(--anim-curve);
|
background-color: var(--color-background-highlight-alt);
|
||||||
|
padding: 14px 22px;
|
||||||
|
transition: background-color var(--duration-animation) var(--anim-curve),
|
||||||
|
opacity var(--duration-animation) var(--anim-curve);
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
|
opacity: 0;
|
||||||
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.scroll-top-button:hover {
|
.scroll-top-button:hover {
|
||||||
background-color: var(--color-background-highlight-hover);
|
background-color: var(--color-background-highlight-hover-alt);
|
||||||
|
}
|
||||||
|
|
||||||
|
.scroll-top-button-visible {
|
||||||
|
opacity: 1;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -21,15 +21,31 @@
|
|||||||
} = $props();
|
} = $props();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#snippet subtitledImageContent()}
|
<a class="
|
||||||
|
subtitled-img-container
|
||||||
|
blurred-background
|
||||||
|
{smaller ? "subtitled-img-reduced-size" : ""}
|
||||||
|
{alignment == "left"
|
||||||
|
? "subtitled-img-container-left"
|
||||||
|
: alignment == "right"
|
||||||
|
? "subtitled-img-container-right"
|
||||||
|
: "subtitled-img-container-centred"
|
||||||
|
}
|
||||||
|
"
|
||||||
|
href="{image}"
|
||||||
|
>
|
||||||
|
|
||||||
{#if video}
|
{#if video}
|
||||||
<Video src={image} />
|
<Video src={image} />
|
||||||
{:else}
|
{:else}
|
||||||
{#if pixelated}
|
<img class="
|
||||||
<img class="subtitled-img pixelated-img" src="{image}" alt="{altText}">
|
subtitled-img
|
||||||
{:else}
|
{pixelated ? "pixelated-img" : ""}
|
||||||
<img class="subtitled-img" src="{image}" alt="{altText}">
|
{subtitle ? "subtitled-img-sub" : "subtitled-img-no-sub"}
|
||||||
{/if}
|
"
|
||||||
|
src="{image}"
|
||||||
|
alt="{altText}"
|
||||||
|
>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if subtitle}
|
{#if subtitle}
|
||||||
@@ -39,40 +55,7 @@
|
|||||||
<p class="subtitled-img-text">{subtitle}</p>
|
<p class="subtitled-img-text">{subtitle}</p>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
{/snippet}
|
</a>
|
||||||
|
|
||||||
<!-- this structure is ugly as fuck. there must be a better way of doing this -->
|
|
||||||
{#if alignment && alignment == "left"}
|
|
||||||
{#if smaller}
|
|
||||||
<a class="subtitled-img-container blurred-background subtitled-img-container-left subtitled-img-reduced-size" href="{image}">
|
|
||||||
{@render subtitledImageContent()}
|
|
||||||
</a>
|
|
||||||
{:else}
|
|
||||||
<a class="subtitled-img-container blurred-background subtitled-img-container-left" href="{image}">
|
|
||||||
{@render subtitledImageContent()}
|
|
||||||
</a>
|
|
||||||
{/if}
|
|
||||||
{:else if alignment && alignment == "right"}
|
|
||||||
{#if smaller}
|
|
||||||
<a class="subtitled-img-container blurred-background subtitled-img-container-right subtitled-img-reduced-size" href="{image}">
|
|
||||||
{@render subtitledImageContent()}
|
|
||||||
</a>
|
|
||||||
{:else}
|
|
||||||
<a class="subtitled-img-container subtitled-img-container-right" href="{image}">
|
|
||||||
{@render subtitledImageContent()}
|
|
||||||
</a>
|
|
||||||
{/if}
|
|
||||||
{:else}
|
|
||||||
{#if smaller}
|
|
||||||
<a class="subtitled-img-container blurred-background subtitled-img-container-centred subtitled-img-reduced-size" href="{image}">
|
|
||||||
{@render subtitledImageContent()}
|
|
||||||
</a>
|
|
||||||
{:else}
|
|
||||||
<a class="subtitled-img-container blurred-background subtitled-img-container-centred" href="{image}">
|
|
||||||
{@render subtitledImageContent()}
|
|
||||||
</a>
|
|
||||||
{/if}
|
|
||||||
{/if}
|
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.subtitled-img-container {
|
.subtitled-img-container {
|
||||||
@@ -82,11 +65,12 @@
|
|||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
transition: background-color var(--duration-animation) var(--anim-curve);
|
transition: background-color var(--duration-animation) var(--anim-curve);
|
||||||
|
border-radius: var(--border-radius);
|
||||||
}
|
}
|
||||||
|
|
||||||
.subtitled-img-container-centred {
|
.subtitled-img-container-centred {
|
||||||
width: var(--media-width);
|
max-width: var(--media-width);
|
||||||
/* width: fit-content; */
|
width: fit-content;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
@@ -96,9 +80,21 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.subtitled-img {
|
.subtitled-img {
|
||||||
width: 100%;
|
max-width: 100%;
|
||||||
|
/* margin: 0; */
|
||||||
|
width: fit-content;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subtitled-img-sub {
|
||||||
|
border-top-left-radius: var(--border-radius);
|
||||||
|
border-top-right-radius: var(--border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
.subtitled-img-no-sub {
|
||||||
|
border-radius: var(--border-radius);
|
||||||
}
|
}
|
||||||
|
|
||||||
hr {
|
hr {
|
||||||
|
|||||||
@@ -15,7 +15,8 @@
|
|||||||
.image-subtitle-container {
|
.image-subtitle-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
width: var(--media-width);
|
justify-content: center;
|
||||||
|
max-width: var(--media-width);
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
<p class="entry-date">
|
<p class="entry-date">
|
||||||
:: {post.post.date}
|
:: {post.post.date}
|
||||||
{#if post.post.dateUpdated}
|
{#if post.post.dateUpdated}
|
||||||
// {post.post.dateUpdated}
|
// {post.post.dateUpdated}
|
||||||
{/if}
|
{/if}
|
||||||
</p>
|
</p>
|
||||||
<p class="entry-description">{post.post.description}</p>
|
<p class="entry-description">{post.post.description}</p>
|
||||||
|
|||||||
@@ -120,10 +120,6 @@
|
|||||||
--color-link-visited: #ffd7f0;
|
--color-link-visited: #ffd7f0;
|
||||||
--color-link-hovered: #ffdad5;
|
--color-link-hovered: #ffdad5;
|
||||||
|
|
||||||
--color-callout-warn: var(--color-highlight-alt);
|
|
||||||
--color-callout-quote: #354CBE;
|
|
||||||
--color-callout-info: #AC7F31;
|
|
||||||
|
|
||||||
/* blurs */
|
/* blurs */
|
||||||
--blur-radius-background: 6px;
|
--blur-radius-background: 6px;
|
||||||
|
|
||||||
@@ -310,7 +306,7 @@
|
|||||||
|
|
||||||
video {
|
video {
|
||||||
max-width: var(--media-width);
|
max-width: var(--media-width);
|
||||||
height: var(--media-height);
|
/* height: var(--media-height); */
|
||||||
margin-top: 12px;
|
margin-top: 12px;
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,11 +36,7 @@
|
|||||||
<p class="tag-filter-header"># filter posts by tag:</p>
|
<p class="tag-filter-header"># filter posts by tag:</p>
|
||||||
<div class="tag-filter-container">
|
<div class="tag-filter-container">
|
||||||
{#each Object.values(BlogPostTag) as tag}
|
{#each Object.values(BlogPostTag) as tag}
|
||||||
{#if tag == filter}
|
<button class="post-tag tag-filter {tag == filter ? "tag-filter-selected" : ""}" onclick={() => { setFilter(tag) }}>{tag}</button>
|
||||||
<button class="post-tag tag-filter tag-filter-selected" onclick={() => { setFilter(tag) }}>{tag}</button>
|
|
||||||
{:else}
|
|
||||||
<button class="post-tag tag-filter" onclick={() => { setFilter(tag) }}>{tag}</button>
|
|
||||||
{/if}
|
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Callout from "$lib/components/callout.svelte";
|
import ReactionQuote from "$lib/components/reaction-quote.svelte";
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Callout
|
<ReactionQuote
|
||||||
type="info"
|
reaction="warn"
|
||||||
content={[
|
text="<b>Note</b>: as I'm constantly learning new things, this blog post is sort of outdated now. The information is still correct, but it feels inefficient and leads into a dead-end. I dislike this, as I wanted to write a guide that provides an expandable base. Therefore, I'll likely either update or replace this article and trim it down to focus on the important bits. Expect a Go API."
|
||||||
"<b>Note</b>: as I'm constantly learning new things, this blog post is sort of outdated now. The information is still correct, but it feels inefficient and leads into a dead-end. I dislike this, as I wanted to write a guide that provides an expandable base. Therefore, I'll likely either update or replace this article and trim it down to focus on the important bits.",
|
|
||||||
"Expect a Go API.",
|
|
||||||
]}
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
*Hey!*
|
*Hey!*
|
||||||
|
|||||||
@@ -1,18 +1,13 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import SubtitledImage from "$lib/components/subtitled-image.svelte";
|
import SubtitledImage from "$lib/components/subtitled-image.svelte";
|
||||||
import Callout from "$lib/components/callout.svelte";
|
|
||||||
import ReactionQuote from "$lib/components/reaction-quote.svelte";
|
import ReactionQuote from "$lib/components/reaction-quote.svelte";
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
fuck i'm so sick of this shit. i need to incoherently ramble about this
|
fuck i'm so sick of this shit. i need to incoherently ramble about this
|
||||||
|
|
||||||
<Callout
|
<ReactionQuote
|
||||||
type="info"
|
reaction="pointing"
|
||||||
content={[
|
text="hey. if you read the headline and agree with it but don't want to read some mildly infuriating content, skip this post. remember that you're cool and valid, and enjoy the rest of your day. if you are pro-AI, i also recommend you don't read this post. leave this page. in fact, kindly leave my website and reconsider your decisions. if you decide to stand your ground, do not interact with me."
|
||||||
"hey.",
|
|
||||||
"if you read the headline and agree with it but don't want to read some mildly infuriating content, skip this post. remember that you're cool and valid, and enjoy the rest of your day.",
|
|
||||||
"if you are pro-AI, i also recommend you don't read this post. leave this page. in fact, kindly leave my website and reconsider your decisions. if you decide to stand your ground, do not interact with me.",
|
|
||||||
]}
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
||||||
@@ -52,11 +47,9 @@ I may delete my Bluesky account over this. It would be a bit of a shame because
|
|||||||
|
|
||||||
## horny men and conservatives are pathetic
|
## horny men and conservatives are pathetic
|
||||||
|
|
||||||
<Callout
|
<ReactionQuote
|
||||||
type="warn"
|
reaction="warn"
|
||||||
content={[
|
text="<b>content warning</b>: abuse of women. also, discussion of conservative behaviour. <a href='#protecting-my-server-from-ai-using--ai-'>click here to skip</a>"
|
||||||
"<b>content warning</b>: abuse of women. also, discussion of conservative behaviour. <a href='#protecting-my-server-from-ai-using--ai-'>click here to skip</a>.",
|
|
||||||
]}
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
In Germany, the name Collien Fernandes has been making its rounds [in the media](https://www.tagesschau.de/inland/gesellschaft/deepfakes-ki-strafrecht-collien-fernandes-christian-ulmen-100.html). It's about Fernandes' ex spreading pornographic material of her on the internet. This has led to a discussion about deepfake pornography on the internet.
|
In Germany, the name Collien Fernandes has been making its rounds [in the media](https://www.tagesschau.de/inland/gesellschaft/deepfakes-ki-strafrecht-collien-fernandes-christian-ulmen-100.html). It's about Fernandes' ex spreading pornographic material of her on the internet. This has led to a discussion about deepfake pornography on the internet.
|
||||||
|
|||||||
@@ -45,11 +45,7 @@
|
|||||||
<p class="tag-filter-header"># filter projects by category:</p>
|
<p class="tag-filter-header"># filter projects by category:</p>
|
||||||
<div class="tag-filter-container">
|
<div class="tag-filter-container">
|
||||||
{#each Object.values(ProjectCategory) as tag}
|
{#each Object.values(ProjectCategory) as tag}
|
||||||
{#if tag == filter}
|
<button class="post-tag tag-filter {tag == filter ? "tag-filter-selected" : ""}" onclick={() => { setFilter(tag) }}>{tag}</button>
|
||||||
<button class="post-tag tag-filter tag-filter-selected" onclick={() => { setFilter(tag) }}>{tag}</button>
|
|
||||||
{:else}
|
|
||||||
<button class="post-tag tag-filter" onclick={() => { setFilter(tag) }}>{tag}</button>
|
|
||||||
{/if}
|
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -179,6 +175,7 @@
|
|||||||
|
|
||||||
.project-status {
|
.project-status {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
|
text-align: end;
|
||||||
}
|
}
|
||||||
|
|
||||||
.project-category, .project-status {
|
.project-category, .project-status {
|
||||||
|
|||||||
Reference in New Issue
Block a user