#dev 2026-07-17

2026-07-17 UTC
ZodiacalComet, hypha, rossabaker, grufwub and hypha_ joined the channel
#
WinnerWind
going to undertake something big: going to add LSP support for my SSG. was wondering if people have done this before, and if so, how the experience was
hypha_, mahboubine and blacklight joined the channel
#
[capjamesg]
What is LSP?
#
Loqi
It looks like we don't have a page for "LSP" yet. Would you like to create it? (Or just say "LSP is ____", a sentence describing the term)
#
WinnerWind
[capjamesg]: LSP stands for Language Server Protocol, it provides autocomplete/documentation when programming
#
WinnerWind
something that understands the source code provides an LSP server for something that doesn't understand the source code (eg. text editors), to hook into and use for user friendly features
#
WinnerWind
this is mainly plumbing though
#
[capjamesg]
Got it. Autocomplete is always fun!
#
WinnerWind
indeed! it would save me a lot of sanity too, right now im getting really tired of having to open 30 files to see the documentation i wrote
#
[capjamesg]
I could use some opinions on a URL pattern I have been designing.
#
WinnerWind
shoot! im interested :)
#
[capjamesg]
My category pages list all my posts in that category (i.e. https://jamesg.blog/coffee).
#
[capjamesg]
Today I wanted to share a link showing when I did most of my coffee writing, which was in 2021-2022.
#
[capjamesg]
I can now use #2021-01-02 to link to the most recent post published on January 2nd 2021, #2021-01 to link to the most recent post published in January 2021, and #2021 to see the most recent post published in 2021.
#
[capjamesg]
The downside of this approach is that for the current year and day, the anchors might vary. Linking to #2026-07 today will point you to a different point on the page tomorrow if I published a post today.
#
[capjamesg]
Maybe this is okay? But I thought I’d share here in case anyone had thoughts!
#
[capjamesg]
(I don’t want to do /coffee/2022, etc.; I want to keep everything on a single page)
Saphire joined the channel
#
WinnerWind
dont URL anchors only work within one page?
#
[capjamesg]
Exactly. So these links would be /coffee#2021-01-02, /coffee#2021-01, etc.
#
[capjamesg]
You can try it out now if you’d like 😄
#
WinnerWind
ah! it clicked
#
[capjamesg]
I didn’t include full links everywhere here because Slack is doing a weird thing where it doesn’t even show me the anchor I have typed if I put it in a link and send the message,
#
[capjamesg]
Looking at my messages, I think this is what I want? Sometimes writing things out helps 😂
barnaby, Saphire and d1s1nf3ct joined the channel
#
WinnerWind
that sounds like a lovely way to structure things, but i wonder what's the point of this? as in, what does it do that linking the article itself, doesn't
#
WinnerWind
does the use of the anchor highlight multiple entires?
#
[capjamesg]
Great question. I don’t want to link to the specific article, I want to link to the time so that people can explore further (i.e. to look at all my 2021 coffee posts).
#
[capjamesg]
The idea of highlighting multiple entries is a _really_ good one.
#
[capjamesg]
That will take a bit more engineering though haha.
#
[capjamesg]
[artlung] gRegor I wrote a blog post about our discussion at FrESH last night, now with updated code: https://jamesg.blog/2026/07/17/multi-line-links-on-my-home-page
#
WinnerWind
[capjamesg]: i see, i can't see how text anchors could be used to highlight multiple entries, though :( maybe there's a way? the way I'd do it is make a heading for each year and subheadings for each month then anchor to those
#
WinnerWind
that would highlight the anchor only, though
#
[capjamesg]
I was just tinkering with this. You can do it with CSS, but you also need a sprinkle of JS.
#
[capjamesg]
`li[id^="2025"]` would select all `li` with an ID that starts with `2025` , but you’d need JS to know that you want to select the year 2025.
#
[capjamesg]
I could enclose the `li` in a div for each year, year/month, year/month/day but I’d prefer not to do that haha.
#
WinnerWind
I see, personally not a fan of JS but if it makes the work easier, why not, i guess?
#
WinnerWind
though the anchors would immediately break for users of noscript (myself included)
#
[capjamesg]
The anchors would still work, but the colour wouldn’t.
#
[capjamesg]
What is progressive enhancement?
#
Loqi
progressive enhancement is the web development practice of building web pages, sites, apps so they are at least readable, and preferably allow for most if not all interactions, from any kind of browser, and optionally take advantage of additional capabilities (like various CSS & JS features) when available https://indieweb.org/progressive_enhancement
#
[capjamesg]
I really love this idea ^^
#
[capjamesg]
Yeah I can’t see a way do to this CSS only without the divs. Hm…
#
[pcarrier]
[capjamesg] `:target .post { … }` then enclose in elements for years and months that you can target with `#2025-03` seems like the cleanest solution though?
#
[capjamesg]
Yeah 😭
#
[capjamesg]
I was hoping I wouldn’t need divs haha.
#
[pcarrier]
You can use <section> 🙂
#
[capjamesg]
Aghh this template is going to be a mess 😂
#
[pcarrier]
bake the data structures outside the template so it can traverse sections cleanly?
#
[capjamesg]
Yeah that’s a good idea.
d1s1nf3ct joined the channel
#
[capjamesg]
Maybe a task for another day!
#
[capjamesg]
But thanks WinnerWind++
#
Loqi
WinnerWind has 8 karma in this channel over the last year (17 in all channels)
#
[capjamesg]
and [pcarrier]++
#
Loqi
[pcarrier] has 5 karma in this channel over the last year (16 in all channels)
#
[capjamesg]
for the ideas!
#
[pcarrier]
[capjamesg] you're using cloudflare turnstile? I'm sad
#
[capjamesg]
Yeah I actually don’t think I have a reason for that on my main site…
#
[capjamesg]
I just turned off proxying on my main site.
ZodiacalComet joined the channel
#
[pcarrier]
oops
#
[pcarrier]
might only happen with https://cc.me/shot which is kinda weird given it only drives a local chromium
blacklight joined the channel
#
[capjamesg]
[pcarrier] -> #indieweb-random
#
[tantek]
capjamesg my old blog had one page per month then fragment links for each day, post inside that day, and occasionally subcategories of content inside each post!
#
[capjamesg]
Ooh thanks for the context!
#
[artlung]
Folks were discussing text fragment styling? As in https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/:target ? I am not seeing an example where someone had something that was not working.
#
[artlung]
[capjamesg]++ nice FrESH writeup
#
Loqi
[capjamesg] has 28 karma in this channel over the last year (226 in all channels)
#
[capjamesg]
The issue is that :target can’t read the fragment on the page, so I can’t do li[id^=:target]
#
[capjamesg]
Admittedly I haven’t tried that but I don’t think it would work?
#
[pcarrier]
hmmm wdym can't read the fragment?
#
[capjamesg]
:target says if the element is the target. It doesn’t return the value of the #xyz part of the fragment in a URL.
#
[capjamesg]
I’d have to do li[id^=“2025”] but there’s no way to get the 2025 from http://example.com/#2025 without JS.
#
[pcarrier]
well, if you have a <li id="2025"> and navigate to #2025 and use `:target` as the selector that `li` will be selected no? I'm lost
#
[pcarrier]
I don't quite understand why you need JS here?
#
[capjamesg]
I’d want to select every ID that starts with 2025.
#
[capjamesg]
(^= 2025 checks for text that starts with)
#
[capjamesg]
That way I wouldn’t have to add the extra divs/sections/etc.
#
[tantek]
Target an ancestor container then use that attribute selector to turn on their display and turn off display for others?
#
[pcarrier]
ah yes, "starts with" is addressed by having id=2025 parent of id=2025-01 parent of id=2025-01-31 and then targetting descendants of :target not :target itself?
#
[pcarrier]
I don't think there's a JS-free way to avoid the hierarchy
#
[tantek]
Correct pcarrier
#
WinnerWind
what if you wrapped divs in divs?
#
[pcarrier]
that's what we're suggesting WinnerWind
#
WinnerWind
<div id="2025"><div id="2025-05"><div id="2025-05-02">
#
WinnerWind
oh, my bad
#
[pcarrier]
no worries, great minds
#
[artlung]
I am using `figure:not(:target) { }` and `figure:target { }` to do this on https://artlung.com/art/#galletas-de-mar
#
WinnerWind
my irc client didnt load in the historical messages when i sent that
#
[artlung]
I am having a hard time visualizing the markup but I think a combination of `:has()` and `:not(:target)` gets you the tools you need for whatever the goal is.
#
[capjamesg]
Okay I have 90% of this working in my jinja template haha.
#
[capjamesg]
If this could work with CSS though that would be amazing.
#
WinnerWind
[capjamesg]: you use jinja too? neato!
#
[capjamesg]
jinja is great!
#
[capjamesg]
TIL there is a loop.nextitem to get the next item in a loop.
#
WinnerWind
indeed! i use it for my ssg too and i spend less time writing python and more time writing jinja markup
#
[capjamesg]
Ah the jinja logic has gotten way too complex. Maybe I’ll get to this some other time.
#
[artlung]
[capjamesg] if we're talking about your posts page, your nesting is not what you intend.
#
[artlung]
check this style `div[id]:has(:target) a { outline: 10px solid hotpink; }`
#
[capjamesg]
Yeah sorry please refresh.
#
[capjamesg]
I just removed the nesting.
ax562 joined the channel
#
[artlung]
no worries, never mind my css it can't apply. but there's a real power in using :not, :target and maybe :has depending on your intent. And me, years are finite, right, I'd be content with running SCSS to do the years one at a time.
blacklight joined the channel
#
[artlung]
There was (is?) apparently an issue with Cloudflare handling of POST requests https://www.cloudflarestatus.com - like, they were not doing it. Not sure how large, but seeing a few folks mentioning it around.
#
[artlung]
_Impact on IndieWeb folks would be any action requiring POST, e.g. webmention sends and receives for anyone whose endpoint was on Cloudflare._
#
[tantek]
Yeah that sounds bad
#
gRegor
Oof, thank you. Was just pulling my hair out why CSRF was breaking all over a client site.
#
gRegor
We disabled the proxy and got it working, but I was thinking "surely not a CF issue" so was combing through our changes, lol
#
[artlung]
This edition of the Internet Weather Report brought to you by... Friday deployments, probably.
#
gRegor
Resolved apparently, though we're not gonna touch it till next week :) https://new.cloudflarestatus.com/incidents/652w59bvnbsj
#
gRegor
capjamesg, nice! I didn't know about that text-indent hanging option
#
[capjamesg]
Neither did I!
#
[capjamesg]
MDN to the rescue again.
#
[capjamesg]
It’s always nice to remove a line of code and maintain feature parity 😄
#
[capjamesg]
If I ever write an EDM album that’s what I will call it ^^
#
gRegor
MDN++
#
Loqi
MDN has 2 karma over the last year
#
[capjamesg]
What about EDM?
ttybitnik and [keithjgrant] joined the channel
#
[keithjgrant]
One of the most constant points of friction & frustration for me has been maintaining a micropub server and figuring out where to host it for cheap (or better, free). It recently occurred to me (in a dream, believe it or not 😆) that I could just run a server locally to do it. Since Omnibear supports manual editing of the micropub endpoint and auth token, I can just point it at my local server with a hand-created auth token.
#
[keithjgrant]
So here's a minimal micropub server for static sites, meant to run on localhost. It creates the MD file and commits/pushes the change to git: https://github.com/keithjgrant/local-micropub
#
gRegor
Nice!
#
girlonthemoon
[keithjgrant]: this is so cool!
[Al_Abut] joined the channel
#
[artlung]
!tell aciccarello to check out https://github.com/keithjgrant/local-micropub by [keithjgrant] when you get back from vacation
#
Loqi
Ok, I'll tell them that when I see them next
#
[artlung]
[keithjgrant]++ nice!
#
Loqi
[keithjgrant] has 1 karma over the last year
#
Loqi
[preview] [keithjgrant] local-micropub: Basic micropub server for eleventy
blacklight and barnaby joined the channel
#
[capjamesg]
Are there any feed readers that tell you when a feed for which you have set a custom name has changed its name?
#
[capjamesg]
The example I have right now is People and Blogs is now run by Zachary. I had the feed under “Manuel”. It would be cool if a reader automatically told you that the name has changed.
#
[capjamesg]
(“Manuel” was the person who started the series, for context.)
#
[social]
Didn’t the feed location change as well?
#
gRegor
Interesting idea, not aware of any readers that do that
kussich, karmaten and barnaby joined the channel
#
girlonthemoon
i've seen that girl scouts message in two channels now, from different users. wonder if it's a spam thing?
#
[capjamesg]
Most likely 😭
#
gRegor
Yep, IRC spam, account already offline
blacklight, bterry and claudinec joined the channel
#
[pcarrier]
I have automatic HTTPS support through LetsEncrypt, not even something you can disable or override, [tantek]. Feel I'd need to offer a choice for IndieAuth, but opt-out feels better specially when the options are set through a config file rather than a UI?
#
[pcarrier]
That does feel a bit intrusive as a feature though, claiming automatically that I can authenticate you
#
[tantek]
I'd say it's worth making them consistent. if it's something automatically "on" then keep it that way for both
#
[tantek]
treat it as a domain-feature rather than a "you" feature and it's not weird/intrusive
#
[tantek]
as in IndieAuth is an upgrade from automatic https support
#
[pcarrier]
OK OK. baked-in, opt-out IndieAuth coming to my hosting platform tonightthen :)
#
[tantek]
amazing
#
[pcarrier]
there we go
blacklight, thatoddshade and rey joined the channel