diff --git a/capsule/content/logs/longlog/2025-01-19_newsboat-post.webp b/capsule/content/images/longlog/2025-01-19_newsboat-post.webp similarity index 100% rename from capsule/content/logs/longlog/2025-01-19_newsboat-post.webp rename to capsule/content/images/longlog/2025-01-19_newsboat-post.webp diff --git a/capsule/content/logs/longlog/2025-01-19_newsboat.webp b/capsule/content/images/longlog/2025-01-19_newsboat.webp similarity index 100% rename from capsule/content/logs/longlog/2025-01-19_newsboat.webp rename to capsule/content/images/longlog/2025-01-19_newsboat.webp diff --git a/capsule/content/logs/longlog/2025-01-19_ranger.webp b/capsule/content/images/longlog/2025-01-19_ranger.webp similarity index 100% rename from capsule/content/logs/longlog/2025-01-19_ranger.webp rename to capsule/content/images/longlog/2025-01-19_ranger.webp diff --git a/capsule/content/logs/longlog/2025-01-19_w3m.webp b/capsule/content/images/longlog/2025-01-19_w3m.webp similarity index 100% rename from capsule/content/logs/longlog/2025-01-19_w3m.webp rename to capsule/content/images/longlog/2025-01-19_w3m.webp diff --git a/capsule/content/logs/longlog/2026-04-12_bramble.webp b/capsule/content/images/longlog/2026-04-12_bramble.webp similarity index 100% rename from capsule/content/logs/longlog/2026-04-12_bramble.webp rename to capsule/content/images/longlog/2026-04-12_bramble.webp diff --git a/capsule/content/logs/longlog/2025-01-19.gmi b/capsule/content/logs/longlog/2025-01-19.gmi index f09a5e3..f49c5ef 100644 --- a/capsule/content/logs/longlog/2025-01-19.gmi +++ b/capsule/content/logs/longlog/2025-01-19.gmi @@ -2,7 +2,7 @@ I've been sprucing up how I follow what's happening on the Internet. I can now read all the things I want to read pretty efficiently, and enjoy doing it, which is exciting. -Published on: 19 Jan 2025 +Published on: 19 Jan 2025 ## The problem @@ -18,7 +18,7 @@ For a while, I've been hosting CommaFeed on PikaPods. This has been OK (OMG, RSS => https://www.commafeed.com => https://www.pikapods.com -=> gemini://joeac.net/blog/2024/05-02_no_more_youtube +=> gemini://joeac.net/blog/2024/05-02_no_more_youtube It also hasn't been any good for distinguishing between stuff I don't want to read *ever*, and stuff I don't want to read *right now* but will get round to later. I could in theory use the bookmarking feature built-in to my browser, but removing things after I've read them is too clunky, so I don't do it. @@ -26,14 +26,14 @@ It also hasn't been any good for distinguishing between stuff I don't want to re Every morning, I open my terminal and run newsboat. -=> https://newsboat.org -=> ./2025-01-19_newsboat.webp newsboat showing how many unread posts I have at a glance in the opening view +=> https://newsboat.org +=> /images/longlog/2025-01-19_newsboat.webp newsboat showing how many unread posts I have at a glance in the opening view I know the unread count is pretty fresh, because I've set up a systemd service to run newsboat at startup to fetch the feeds. I press `l` twice to open a post. Then I press `n` to navigate to the next unread post until I run out of unread posts. -=> ./2025-01-19_newsboat-post.webp newsboat displaying a post +=> /images/longlog/2025-01-19_newsboat-post.webp newsboat displaying a post If I encounter something I want to read later, but don't have time right now, I press `b`, which runs a home-made bookmarking script. Here it is: @@ -56,8 +56,8 @@ I can also run this script manually and pass it a URL of my choice at any time, When I want to read from my reading list, I run `readnow.sh`, which simply opens my reading list folder, `~/readlist/unread`, in my terminal file browser of choice: namely, ranger. -=> https://ranger.github.io -=> ./2025-01-19_ranger.webp ranger showing the contents of my reading list with a preview +=> https://ranger.github.io +=> /images/longlog/2025-01-19_ranger.webp ranger showing the contents of my reading list with a preview Although ranger has a preview, I'll typically open the file up in my terminal web browser of choice, which is w3m (plus a couple of custom key-bindings). @@ -76,7 +76,7 @@ I've configured this to be my preferred web browser in ranger by shifting it to Having configured my default web browser in my ranger config, all I need to do is press `l`. -=> ./2025-01-19_w3m.webp A post displaying in w3m +=> /images/longlog/2025-01-19_w3m.webp A post displaying in w3m No ads, no cookie popups, no giant banner images taking 2 seconds to load and shifting the content all over the place: just the text I want to read. Isn't it beautiful? @@ -113,12 +113,12 @@ I can now keep up to date, and I enjoy doing it. I get not everyone likes to live in the terminal. I think the key takeaways are: -* Make it really easy to sift through new posts -* When you sift, sift through every post, and for each one, either read it straight away, or add it to your reading list -* Sift daily -* Make it really easy to add things to your reading list -* Make it really easy to browse, read things, and mark things read in your reading list -* Set aside time to catch up on your reading list +* Make it really easy to sift through new posts +* When you sift, sift through every post, and for each one, either read it straight away, or add it to your reading list +* Sift daily +* Make it really easy to add things to your reading list +* Make it really easy to browse, read things, and mark things read in your reading list +* Set aside time to catch up on your reading list * Make the whole thing joyful (both because joy is good, and because you won't do it otherwise) ## Next steps @@ -127,11 +127,10 @@ I still haven't really figured out social media. I'd like to stay up to date wit I still need to know: -* Are my friends posting stuff on the Internet? -* If so, where? -* What's the best way of subscribing to their posts -* even if they live on different websites and in different formats? +* Are my friends posting stuff on the Internet? +* If so, where? +* What's the best way of subscribing to their posts +* even if they live on different websites and in different formats? * What's the best way of sending and receiving comments/replies/reactions? TBC. Answers on a postcard please. - diff --git a/capsule/content/logs/longlog/2026-04-12.gmi b/capsule/content/logs/longlog/2026-04-12.gmi index eb13f7e..df51ea5 100644 --- a/capsule/content/logs/longlog/2026-04-12.gmi +++ b/capsule/content/logs/longlog/2026-04-12.gmi @@ -60,7 +60,7 @@ Where green apocalypse succeeds, it succeeds by delving into the riches of myth- In ‘The Lost Words,’ apparently ordinary characters from the British environment – as ordinary as dandelions, acorns, and ferns – are depicted in beautiful illustrated portraits on gold leaf, in the manner of a religious icon. In the pages in-between, illustrations of fields, thickets, and moors are scattered with a jumble of golden letters, waiting to be assembled. Each icon is accompanied by an acrostic poem. Consider ‘Bramble’: -=> /logs/longlong/2026-04-12_bramble.webp ‘Bramble’ icon +=> /images/longlog/2026-04-12_bramble.webp ‘Bramble’ icon > Bramble is on the march again, > Rolling and arching along the hedges, @@ -79,7 +79,7 @@ In ‘The Lost Words,’ apparently ordinary characters from the British environ Picture it! The human world tied up, people pushed out. Bramble barging through, conquering cities, streets, houses. Bramble is on the march again. It is decisively not fact-speak. It is imaginative – myth-speak, perhaps? -You could also study ‘Weasel,’ who ‘acts on land like spark on tinder – / Scorches grass, turns fields to pyre, sand to glass, tree to cinder.’ Or there is willow, the wise one, who will never, can never, share willow-wisdom with us: ‘ou will never know a word of willow – for we are willow and you are not.’ +You could also study ‘Weasel,’ who ‘acts on land like spark on tinder – / Scorches grass, turns fields to pyre, sand to glass, tree to cinder.’ Or there is willow, the wise one, who will never, can never, share willow-wisdom with us: ‘you will never know a word of willow – for we are willow and you are not.’ My thoughts are not quite there yet, but I sense there’s something here. We’re not just being given a scientific account of bramble, weasel, willow. We’re being given more than that – a mythic account, peeling back ordinary reality to find something more precious behind. Can this refocus our eyes on what really matters? Can this transcend eco-anxiety? Can this ground hope instead of despair? @@ -94,4 +94,3 @@ Since I have fixed the concept ‘apocalypse’ into the scope of my project, th Therefore, my project amounts to an attempt to explain (at least) one way in which the Apocalypse might have once grounded hope instead of despair, and then to explore how green stories can do something similar today. I’ll be handing this in on the 5th of August. Wish me luck! - diff --git a/compose.yml b/compose.yml index f27b1ff..8097829 100644 --- a/compose.yml +++ b/compose.yml @@ -7,7 +7,8 @@ services: website: build: - context: website + context: . + dockerfile: website.Dockerfile args: LOCAL_SMTP_HOST: smtp LOCAL_SMTP_PORT: 2500 diff --git a/website.Dockerfile b/website.Dockerfile new file mode 100644 index 0000000..84e5963 --- /dev/null +++ b/website.Dockerfile @@ -0,0 +1,39 @@ +FROM node:lts-alpine3.22 +WORKDIR /app + +RUN apk add --no-cache git +COPY website/package.json website/package-lock.json ./ +RUN npm install && apk del git + +COPY website/astro.config.mjs website/redirects.mjs ./ +COPY website/db ./db/ +ARG DB_URL=file:/app/db.sqlite +ENV ASTRO_DB_REMOTE_URL=$DB_URL +RUN mkdir -p "$(dirname "$(echo "$ASTRO_DB_REMOTE_URL" | cut -d':' -f 2)")" +RUN npm run astro db push + +COPY website . + +ENV HOST=0.0.0.0 +ENV PORT=4321 +EXPOSE 4321 + +ARG LOCAL_SMTP_HOST +ARG LOCAL_SMTP_PASSWORD +ARG LOCAL_SMTP_PORT +#ENV LOCAL_SMTP_ENVELOPE_FROM=$LOCAL_SMTP_ENVELOPE_FROM \ +#ENV LOCAL_SMTP_USER=$LOCAL_SMTP_USER \ + #LOCAL_SMTP_HOST=$LOCAL_SMTP_HOST \ + #LOCAL_SMTP_PASSWORD=$LOCAL_SMTP_PASSWORD \ +# LOCAL_SMTP_PORT=$LOCAL_SMTP_PORT \ +# REMOTE_SMTP_HOST=$REMOTE_SMTP_HOST \ +# REMOTE_SMTP_PORT=$REMOTE_SMTP_PORT \ +# REMOTE_SMTP_USER=$REMOTE_SMTP_USER \ +# MAX_DAILY_EMAILS=$MAX_DAILY_EMAILS + +RUN npm run build #&& rm -rf public src + +RUN mkdir -p /capsule/content/logs +COPY capsule/content/logs/longlog /capsule/content/logs/longlog + +CMD ["node", "./dist/server/entry.mjs"] diff --git a/website/public/images/capsule b/website/public/images/capsule new file mode 120000 index 0000000..327764f --- /dev/null +++ b/website/public/images/capsule @@ -0,0 +1 @@ +../../../capsule/content/images/ \ No newline at end of file diff --git a/website/src/pages/blog/[...slug].astro b/website/src/pages/blog/[...slug].astro index 28d5ec0..4fe82c2 100644 --- a/website/src/pages/blog/[...slug].astro +++ b/website/src/pages/blog/[...slug].astro @@ -31,6 +31,11 @@ const GemtextHTMLRenderer: Gemtext.Renderer = { return `

${htmlEscape(content)}

` }, link: function (url: string, alt: string): string { + url = url.replaceAll(/^\/images\//g, '/images/capsule/'); + const imgExtensions: (string | undefined)[] = ['webp', 'png', 'svg', 'gif', 'jpg', 'jpeg', 'apng'] + if (imgExtensions.includes(url.split('.').at(-1)?.toLowerCase())) { + return `${alt}`; + } return `

=> ${alt}

`; }, preformatted: function (content: string[], alt: string): string {