+20
src/components/SiteButton.astro
+20
src/components/SiteButton.astro
···
···
1
+
---
2
+
const { url, name, filetype = ".gif" } = Astro.props;
3
+
---
4
+
5
+
<a href={url}>
6
+
<picture>
7
+
<source
8
+
srcset={`/img/sitebuttons/${name}.png`}
9
+
media="(prefers-reduced-motion: reduce)"
10
+
/>
11
+
<img srcset={`/img/sitebuttons/${name}${filetype}`} alt={name} />
12
+
</picture>
13
+
</a>
14
+
15
+
<style>
16
+
a {
17
+
display: inline-block;
18
+
margin-bottom: 6px;
19
+
}
20
+
</style>
+9
src/content/blog/v02.md
+9
src/content/blog/v02.md
···
···
1
+
---
2
+
title: Site update V0.2
3
+
bio: Added bookmarks page.
4
+
pub: 2025-11-03
5
+
---
6
+
7
+
There's now a [bookmarks](/bookmarks) page. It links to a bunch of other websites or tools that I personally find cool. Go check em out if you wanna.
8
+
9
+
Oh yea, I also made a 88x31 button for my site too.
+47
src/content/bookmarks/personalsites.ts
+47
src/content/bookmarks/personalsites.ts
···
···
1
+
import { type bookmark } from "../config";
2
+
3
+
export const buttonwall: bookmark[] = [
4
+
{
5
+
name: "doqmeat.com",
6
+
url: "https://doqmeat.com",
7
+
filetype: ".png",
8
+
},
9
+
{
10
+
name: "corru.observer",
11
+
url: "https://corru.observer",
12
+
filetype: ".gif",
13
+
},
14
+
{
15
+
name: "pocl.vip",
16
+
url: "https://pocl.vip",
17
+
filetype: ".gif",
18
+
},
19
+
{
20
+
name: "bensect.space",
21
+
url: "https://bensect.space",
22
+
filetype: ".png",
23
+
},
24
+
{
25
+
name: "espy.world",
26
+
url: "https://espy.world/",
27
+
filetype: ".gif",
28
+
},
29
+
{
30
+
name: "megaknecht.com",
31
+
url: "https://megaknecht.com/",
32
+
filetype: ".gif",
33
+
},
34
+
{
35
+
name: "myrrh.city",
36
+
url: "https://myrrh.city/",
37
+
filetype: ".png",
38
+
},
39
+
];
40
+
41
+
export const nobutton: bookmark[] = [
42
+
{
43
+
name: "yugoslavia.best",
44
+
url: "https://yugoslavia.best/",
45
+
description: "Click here to experience instant brain explosion.",
46
+
},
47
+
];
+16
src/content/bookmarks/resources.ts
+16
src/content/bookmarks/resources.ts
···
···
1
+
import { type bookmark } from "../config";
2
+
3
+
export const resources: bookmark[] = [
4
+
{
5
+
name: "Marginalia Search",
6
+
url: "https://marginalia-search.com/",
7
+
description:
8
+
"Internet search engine that doesn't shove ads down your throat, unlike google.",
9
+
},
10
+
{
11
+
name: "DaFont",
12
+
url: "https://www.dafont.com/",
13
+
description:
14
+
"Free fonts for commercial and personal use. Make sure to check the license on each font before using.",
15
+
},
16
+
];
+8
-1
src/content/config.ts
+8
-1
src/content/config.ts
···
1
import { defineCollection, z } from "astro:content";
2
+
import { glob, file } from "astro/loaders";
3
+
4
+
export type bookmark = {
5
+
name: string;
6
+
url: string;
7
+
description?: string;
8
+
filetype?: ".gif" | ".png";
9
+
};
10
11
const blog = defineCollection({
12
loader: glob({ pattern: "**/*.md", base: "./src/content/blog" }),
+59
src/pages/bookmarks.astro
+59
src/pages/bookmarks.astro
···
···
1
+
---
2
+
import Base from "../components/Base.astro";
3
+
import SinglePage from "../layouts/SinglePage.astro";
4
+
import SiteButton from "../components/SiteButton.astro";
5
+
import { buttonwall, nobutton } from "../content/bookmarks/personalsites.ts";
6
+
import { resources } from "../content/bookmarks/resources.ts";
7
+
---
8
+
9
+
<Base
10
+
title="BOOKMARKS"
11
+
graph={{
12
+
description: "Links to other cool sites.",
13
+
}}
14
+
>
15
+
<SinglePage>
16
+
<h1 slot="header">Bookmarks</h1>
17
+
<img src="/sitebutton.gif" alt="site button animated" />
18
+
<img src="/sitebutton.png" alt="site button static" class="hidebutton" />
19
+
<p>Button above you can use to link to my website.</p>
20
+
<p>
21
+
If you are here and you don't want your site listed please let me know to
22
+
remove it. Contact at
23
+
<a href="mailto:entomoviscera@gmail.com">entomoviscera@gmail.com</a>.
24
+
</p>
25
+
<h2>Cool zone</h2>
26
+
{
27
+
buttonwall.map((x) => (
28
+
<SiteButton name={x.name} url={x.url} filetype={x.filetype} />
29
+
))
30
+
}
31
+
<ul>
32
+
{
33
+
nobutton.map((x) => (
34
+
<li>
35
+
<a href={x.url}>{x.name}</a> - {x.description}
36
+
</li>
37
+
))
38
+
}
39
+
</ul>
40
+
<h2>Resources</h2>
41
+
<ul>
42
+
{
43
+
resources.map((x) => (
44
+
<li>
45
+
<a href={x.url}>{x.name}</a> - {x.description}
46
+
</li>
47
+
))
48
+
}
49
+
</ul>
50
+
</SinglePage>
51
+
</Base>
52
+
53
+
<style>
54
+
@media (prefers-reduced-motion: reduce) {
55
+
.hidebutton {
56
+
display: none;
57
+
}
58
+
}
59
+
</style>
+16
-5
src/pages/home.astro
+16
-5
src/pages/home.astro
···
25
<img src="/img/icons/poweroff.png" alt="return to landing page" />
26
</a>
27
</header>
28
<main class="grid">
29
<div class="bwbox flex flexcenter hidedeco">
30
<img src="/img/sprites/sunfl1.png" alt="" />
···
36
title={post[0].data.title}
37
time={`${post[0].data.pub.getFullYear()}-${post[0].data.pub.getMonth() + 1}-${post[0].data.pub.getDate()}`}
38
/>
39
-
<div class="center">
40
<a href="/blog" class="button">::ALL_POSTS::</a>
41
<a href="/rss.xml" class="button">::RSS_FEED::</a>
42
</div>
···
52
gap: 8px;
53
}
54
55
#blog {
56
grid-column: span 3;
57
}
58
59
.wrapper {
···
64
.grid {
65
display: grid;
66
grid-template-columns: repeat(4, 1fr);
67
-
}
68
-
69
-
.button {
70
-
margin-bottom: 13px;
71
}
72
73
@media (max-width: 86ch) {
···
25
<img src="/img/icons/poweroff.png" alt="return to landing page" />
26
</a>
27
</header>
28
+
<nav class="bwbox flex flexcenter center">
29
+
<a href="bookmarks" class="button">::BOOKMARKS::</a>
30
+
</nav>
31
<main class="grid">
32
<div class="bwbox flex flexcenter hidedeco">
33
<img src="/img/sprites/sunfl1.png" alt="" />
···
39
title={post[0].data.title}
40
time={`${post[0].data.pub.getFullYear()}-${post[0].data.pub.getMonth() + 1}-${post[0].data.pub.getDate()}`}
41
/>
42
+
<div class="blogbuttons center flex flexcenter">
43
<a href="/blog" class="button">::ALL_POSTS::</a>
44
<a href="/rss.xml" class="button">::RSS_FEED::</a>
45
</div>
···
55
gap: 8px;
56
}
57
58
+
nav {
59
+
gap: 13px 15px;
60
+
}
61
+
62
+
nav a, .blogbuttons a {
63
+
flex: 1 1;
64
+
}
65
+
66
#blog {
67
grid-column: span 3;
68
+
}
69
+
70
+
.blogbuttons {
71
+
gap: 8px;
72
}
73
74
.wrapper {
···
79
.grid {
80
display: grid;
81
grid-template-columns: repeat(4, 1fr);
82
}
83
84
@media (max-width: 86ch) {