2025-06-30 08:00:00
Hey there! Happy Pride 🏳️🌈!
I hope you’re comfortable and keeping chill/warm depending on which side of the world you are. This month, aside from finally launching v5 of my website, I’ve gathered up a few cool links for you to read.
Came across this website on Mastodon and oh wow, it’s so nice! I’ve seen a bunch of websites trying to mimic the old Windows vibes, but this one did it in a way that makes sense. Content is well laid-out and it doesn’t go too far into the “mimicking Windows” aspect.
The Internet Used to Be a Place, by Sarah Davis Baker (video)
Amazing video about the internet we’ve lost (or rather, was taken from us), and how we can rebuild it.
Absolute fan of Sarah’s storytelling here, the way she weaves through the topics and links (hah!) them to that Hypnospace game is amazing!
The New Separation of Concerns, by Brad Frost
I learned about separation of concerns over a decade ago, when I was still learning how to code. On the web side, it would very often be related to what language you were using; HTML is for markup, CSS for styles, JS for interactivity, whatever-backend-language-you-use for business logic. That made sense back then but now the lines have become much blurrier.
Brad Frost goes a bit into what a more modern version of that separation of concerns might look like. I haven’t tried out his course, so I can’t comment on how good it is. But I’m a big fan of his atomic design principles so I’d say it might be a good one!
Web Weekly newsletter, by Stefan Judis
I’ve been subscribed to this newsletter for over a year and it never occurred to me to recommend it here. Stefan Judis does a weekly roundup of web dev-related things and puts them out in a nice, easy-to-read, lighthearted newsletter. It’s been one of my favorites for a while and if you’re reading this, chances are you’ll enjoy his content too!
This is volume 12 of Cool Links, which means I’ve been gathering links like this for a year!
It was the first step in my plan to write more. I figured that by commenting on what other people wrote, I’d feel more comfortable with writing myself. Even though I haven’t actually written more posts here during the last year, I feel like it’s working. I have a few drafts that I haven’t developed enough to post, and some that I just discarded after a bit. But what matters is that I actually wrote something; posting it is just a consequence. 😅
Overall it’s been fun collecting links like these every month, and it’s a way of keeping the spirit of the web alive. It is, after all, a bunch of sites that link to each other. And if at least one person discovers a neat website because of posts like these, then it’s mission accomplished. 🫡
See you next month!
2025-06-28 08:00:00
If you’re reading this and you’re not from a distant future, this means that you are right now on version 5 of fantinel.dev!
Over a year ago, after posting about my blog’s 5th anniversary, I posted about my wish to redesign it. First of all: time flies! I hadn’t realized it was over a year ago. Secondly, it’s finally here! That means it’s been a year of me working on the new design, building it, refining it, and above all, procrastinating!
Of course, I didn’t actually work on it for a year. It’s been a very on-and-off process, mostly off. A lot of things happened during this year and I got busy with work, travel and prepping for a big move (that still didn’t happen). A lot of the free time I had also went into other things I like - mostly videogames. That’s fine! I never want any personal project to be anything more than a hobby. So I don’t feel bad at all for how long it took.
So the biggest chunks of my work on the new website were in short burst of hyperfocusing on it. Focusing can be my superpower quite often. For one or two weeks at a time, I’d wake up thinking about it, have breakfast thinking about it, work thinking about it, and then finally work on it while thinking about it, usually during the evenings. I don’t recall any dreams about the website but I wouldn’t be surprised if that happened.
I think I started working on the design itself right after that blog post, at the end of March/beginning of April, 2024. I started out with something much more similar to what I had before. My initial plan was to use Figma to rebuild what I had, then start experimenting inside the tool.
However, after working on this for a bit, I reflected on what I said on that redesign post:
I want my personal website to reflect a bit of who I am. Am I the same person I was 3-4 years ago?
And the answer is: not really. While I’ve not completely changed as a person, I like to think I’ve improved quite a bit since then. Some tastes changed, a lot of opinions evolved, the hair got whiter, and the back pains are now an almost daily visitor. And more importantly, I got bored of the old design. It was fun for a while but I eventually got tired and felt restricted by it.
As I became an even bigger fan of pastel colors since then, I decided I’d take the colors of my favorite code theme, Catppuccin, and take them for a spin on my new design. I liked it so much that I just decided to use that color palette for everything!
The previous design was built with light mode in mind and then adapted to dark mode. However, I like the dark Catppuccin palette so much that this time I did the opposite: it was designed entirely in dark mode and I only got to work on the light mode after I already started building it. I still want to respect the user’s theme preference above everything, so I don’t default to the dark mode.
Overall, that worked, but to me it’s clear that the dark mode looks much better than the light one. To me, at least. But I’m continuing to tweak light mode here and there whenever I see things I can improve.
I decided to start with just the basics: the home page, the blog archive and the blog post pages. Once I got those to a place I liked, the rest would come naturally.
Once I was satisfied with the design, I let it simmer in my mind for a few months before I started building anything. After coming back to the new design a few months later, I still liked what I saw. Good sign! So it was time to start building it.
However… I’m a web developer. Not just that, web development is my hobby too. So I couldn’t simply implement the new design in the existing project. The horror! Why would I keep using the code that was working well, decently organized and that would save me time?
That’s why @@I rebuilt it from scratch!@@
I had been eyeing Astro for a while, and decided it was worth a shot to at least experiment. I could still reuse the code for my components, since Astro is fully compatible with Svelte. I’d just have to rework the part that did the routing, endpoints, build and data handling. Good thing that was really easy! Astro works similarly to SvelteKit (what I used before) and other popular ones like NextJS. So if you’ve worked with any of them, most of the principles stay the same. Just need a few implementation tweaks here and there.
You see, there was nothing wrong with SvelteKit, which I used before. It is very easy to understand, does a lot of things automatically and builds a really performant website. The thing that drew me to Astro is that it shares a lot of the same principles, but is framework-agnostic. That means I could bring over my Svelte components, which is great, but also that the knowledge I get from using it might be useful if I ever need to build a website that uses React, Vue or, I don’t know, even PHP components. Astro doesn’t care.
Something I noticed while developing is that I imported my Theme Toggle, a Svelte component that uses JavaScript to toggle the current theme into a page. It rendered correctly, but clicking on it wasn’t doing anything.
Turns out, ==Astro does not ship any JavaScript by default==, even from your JS framework components! That is an amazing default behavior, as it encourages progressive enhancement, decreases the size of the website (have you ever seen those 10MB+ NextJS landing pages???) and is just overall a good development pattern. If I really need JavaScript for this component, I have to explicitly add the client
directive to it.
In my case, that theme toggle does actually need JS to work. Which is why it hides itself if JS is not available, only showing up if it has what it needs to work. But some components don’t need JS, they’re just better with JS. The Table of Contents in this blog post is dynamic. As you scroll down it will highlight the current chapter you’re in, and if you’re on mobile it will stick to the bottom of the screen and do its best to get out of your way.
However, at the end of the day it’s still just a table of contents, a collection of anchor links that link to sections of this page. If JS is not available, it shouldn’t break, it shouldn’t hide. It just doesn’t do the dynamic stuff, but it’s still useful by letting you click on it. This is the kind of thought that I always have in mind when building something, and that Astro seems to encourage.
I’ve used Svelte since v3 and loved it. It just made a lot of sense to me, I always vibed with its goals and principles, the performance gains it offered were awesome, and it was always a breath of fresh air to work with it. My previous site was using Svelte 4, which was a refinement over Svelte 3. I loved it.
On this rebuild, I naturally upgraded to Svelte 5, which came out recently. Svelte 5 is a big update, bringing some syntax changes, performance gains, and big things under the hood.
… I’m not sure I like it.
You see, to me what was magical about Svelte is that its syntax was just some sugar on top of JS and HTML. Add a $
character here and there for reactivity, a {#each}
over there for looping over a list of items, and you’re done. Svelte 5 still supports that syntax and it seems to me they will keep supporting it for a while, but they’ve introduced a new syntax in the form of “Runes”. I wanted to give the new stuff I try so I built everything with the new syntax.
After the initial learning curve I got used to it so it’s not a big deal anymore, but the fact that there was a learning curve was a letdown. I still like it better than working with other frameworks, though.
Some notes I took during development:
<slot>s
😭;$props
syntax is way more intuitive than the previous export let
one, although more verbose;I used to use Histoire for developing components in isolation, but it doesn’t seem they support Svelte 5 and development is quite slow for my taste. So, begrudgingly, I started using Storybook for that.
I always have issues setting up Storybook, and it was no different this time. I wrote up an article about my journey to getting it to work.
So, with the redesign now live, what’s next for this website? Hopefully a lot, actually!
You might notice there’s a big “Under construction” banner on the home page, and for good reason: I’m not even close to finishing everything I want to do with it. Honestly, I never will. This is, after all, my playground to experiment with things and do whatever I feel like.
If you want some spoilers, here’s what I think I’ll work on next:
To be honest, I’ll probably come up with something else before I’m done with those three. Who knows?
Thanks for reading it all the way down here! If you’re interested in seeing the code to see how everything works, everything is open source and available on GitHub.
2025-05-31 20:00:00
Hey there!
Winter has started to settle in where I live, and my hands are already freezing all the time. The cold and humid weather means more time inside, which means more links!
Sharing links to albums or songs in streaming apps sucks because not everyone uses the same one. This neat website takes in a link (although named after Spotify, it works with others as well) and spits out the link for the same music on whatever other platform you want.
Great for when you share a link with others too!
Pong Wars, by Koen van Gilst
This is a hypnotizing endless battle between two squares, pong-style. All built with JS, HTML and CSS! The source code surprisingly simple and a fun read too, if you’re into that sort of thing.
If you use any adblockers (you should!), this website is a neat way to test how effective your setup is. The higher, the better, but if you get a green result you should already feel safe browsing online. I got 98% with my NextDNS + UBlock Origin combo!
Kagi has been my search engine of choice for over a year now, and I just found out about their public stats page. Pretty cool they have this info open out there!
The most interesting part is the Domain Insights, that ranks the domains that get most blocked/prioritized on Kagi (Kagi allows you to prioritize results from specific domains, or simply block some altogether). It seems people really hate getting Pinterest results 😅
The Internet Archive opt out itch, by Stefan Judis
In this article, Stefan ponders the ethics of the Internet Archive’s opt-out behavior. The work they do is really good for the web in general — but, on an individual level, it kinda sucks that someone is archiving your website without asking?
He also raises the point that while you can ask for your website to be excluded from being archived, doing so might make you (or your company) look shady and untrustworthy. Like, what are you trying to hide so much?
Don’t Guess My Language, by Robert Vitonsky
As a bilingual person that’s soon moving to another country I really struggle with websites and apps that keep trying to serve you content in a specific language instead of the one you choose. Google is one of the worst in this regard.
Even worse is when the content is translated automatically. It sucks! Google again sucks at this. It keeps reverting things to Portuguese and even re-enabling automatic dubbing (gross, I know) on videos, even though I explicitly have my device, browser, and Google account set to English.
Moving from Notion to Obsidian, by Dave Rupert
I love Obsidian, and have been using it for over a year for taking notes about everything. The thing about his kind of app though is that you’re always looking for ways to tweak and improve your system. This article is great at explaining how Dave uses Obsidian for himself and as usual has a list of neat plugins.
One day, maybe, I’ll write my own post about how I use it. I’m just not confident enough on my system yet, probably…
Programming is a feeling, and AI is changing it, by Sean Voisen
Programming is an activity, but it’s also a feeling. For those of us who actually enjoy programming, there is a deep satisfaction that comes from solving problems through well-written code, a kind of ineffable joy found in the elegant expression of a system through our favorite syntax. It is akin to the same satisfaction a craftsperson might find at the end of the day after toiling away on well-made piece of furniture, the culmination of small dopamine hits that come from sweating the details on something and getting them just right. Maybe nobody will notice those details, but it doesn’t matter. We care, we notice, we get joy from the aesthetics of the craft.
The Who Cares Era, by Dan Sinker
If you don’t care, it’s miraculous.
I’ve had this talk with my wife a few times already. Around us, it just feels that nobody cares about anything. Everything is hastily produced so it can be ignored by other people. It’s just disheartening to be the only ones noticing AI slop everywhere and see people not only believing it’s real, but also not really caring if it’s real or not.
This article also reminded of this one that I posted back in December: Care Doesn’t Scale.
In a moment where machines churn out mediocrity, make something yourself. Make it imperfect. Make it rough. Just make it.
The promise that wasn’t kept, by Salma Alam-Naylor
Fantastic piece that highlights how much of a distraction AI has become to creating value, simply because everyone is too focused on the tools and not on the work.
But we can’t rely on tools as a shortcut to gain valuable experience. Experience takes time to develop, and your tools are only as good as your fundamental knowledge and skills. If you skip the knowledge and skills part, and if you fail to learn about what you’re doing and the implications of how you’re doing it and the human value you have the potential to deliver, then you have little hope of building human value into your software.
The Everything App is a symptom of Nothing Management (part 1)
This is a spot on overview of how pretty much every tech company now has no clear direction besides making more money. No vision, no goals, no passion, except for making the number go up.
Yea, every company needs to make money because workers need money to survive, but when a system only ever rewards those that seek money above everything else, that system has failed and will continue to fail unless a big shift happens.
The passionate, skilled, full-of-ideas people that could solve real problems and/or improve the lives of others have been crushed by the weight of big companies looking for one more way to exploit you.
Thanks for tuning in, and see you next month!
2025-04-30 20:00:00
Hey there! We’re a quarter of the way through 2025 already, can you believe it? This weekend (May 3rd) I’ll be in Rio de Janeiro trying to watch a free Lady Gaga concert in Copacabana beach. Fingers crossed I can actually see anything 🤞
For the Cool Links this month, we have a couple of “fun” ones, some web-dev related that were on my Read Later queue for a while, and some nuggets of wisdom on chaotic times.
Enjoy the reads!
This website simulates a TV schedule (with CRT-style filters!) with multiple channels, each featuring an interesting indie website. The programming changes often (just like shows on a tv channel), so it’s an interesting site to keep on your bookmarks and visit a few times a day.
The author here worries that so many people on Reddit are interacting with posters that are nothing more than robots, without any idea of that being the case. Even worse, some people are aware of that, but don’t care.
I saw a comment in a brazilian forum that deeply resonated: “Maybe the biggest pain this realization causes is that, deep down, almost nobody cares about anything. We’re the ones who are wrong for searching for meaning in environments dominated by chaos”.
Faster Rendering with the content-visibility CSS Property, by Umar Hansa
It’s like image lazy loading, but for page elements! I’ve got to try this out sometime and measure the effectiveness of this technique. Depending on the results, this might end up as its own blog post ;)
Cards, by Inclusive Components
Amazing step-by-step explanation on building Card components, with a special focus on accessibility. I love this kind of articles that explain the thinking behind every step and every line of code!
Card elements are everywhere and we all do them a bit differently. I’ll pay much more attention to the things mentioned here to ensure they’re as accessible as possible.
404s — gallery of error 404 page designs
This site collects all kinds of designs for 404 pages found in the wild. Pretty cool source for inspiration or to admire other people’s creativity!
European alternatives for digital products
We rely too much on software companies nowadays, and most of the popular ones are USA-based. With the USA becoming increasingly less trustworthy on an almost daily basis, people have started gathering EU-based alternatives to the most popular services.
This is interesting even if you’re not based in Europe, as companies there are forced to respect your data and privacy by law.
On TikTok, YouTube, X, and everywhere, “views” are a meaningless number, by David Pierce
Great article pointing out that “Views” are an useless metric and that the platforms that count it have zero incentive to not lie about them.
Thanks for tuning in, and see you next month!
2025-04-28 05:04:59
I really, really thought this was gonna be easy. But with front-end development, are things ever simple?
I’ve dropped a few hints here and there that I’m redesigning my website and blog. I’m also rewriting it from scratch, with Astro! It’s a meta-framework, which means it takes care of the part that handles routing and data-fetching, but stays out of component and reactivity. It’s like NextJS or SvelteKit.
The main appeal of Astro, though, is that it is framework-agnostic. You can use it as the base and then build all your components with React, Svelte, Vue, Vanilla JS, or even JQuery if that makes sense for you. It’s one of the main appeals of Astro alongside active development, a clear project direction, and the whole zero client-side JS by default philosophy.
My soon-to-be-website uses Astro as its foundation, but keeps Svelte as the framework used for the components, to handle reactivity and just the overall template niceties. It also allows me to just port over existing components from my current SvelteKit website, and it’s plug-and-play on Astro. Sweet!
Previously, I’ve used Histoire, a Vite-based simpler alternative to Storybook. It’s fast and really easy to set up, which was the main reason I used it. It’s not a fully-featured but I didn’t need all the extra features of Storybook anyway. The thing is, development on that one is quite slow and it apparently doesn’t work well with Svelte 5 yet. So, I figured I’d set up Storybook itself on my project. It’s just a simple collection of Svelte components, right? How hard could it be?
Significantly.
[!info] The post below was written from my experience getting frustrated with the lack of proper documentation and a lot of trial and error. I was only able to get things working after a few hours digging into Storybook (and its plugins)‘s documentation and source code, and a good deal of arguing with ChatGPT. I’m writing this guide so you don’t have to go through all the hoops I did.
Also, I’m using Svelte on my examples as it’s the framework I use, but I think the vast majority of this guide could apply to you if you use React, Vue, or none at all.
There are a lot of layers to the tech stack here. Astro uses Vite as a build tool to handle dependencies, dev servers, compiling, and whatever else it does. You might have heard of Webpack, which does the same. Vite is basically a newer, leaner version of that.
When you install Svelte (or React, or Vue) on an Astro project, you’re actually just installing the Vite integration for that specific framework. Astro doesn’t need to know what the client-side framework is because they’re pretty much separated.
When you use Storybook, you likely don’t want to interact with anything on the Astro side of things. You write stories for your components, and they will all be Svelte/React/Vue files that don’t need Astro to work. Which is why there’s no “Astro package” for Storybook, or any starting template.
Which means in this case, we want to setup Storybook for a Svelte + Vite project.
So, with my Astro + Svelte project in hands, these are the first steps I did:
npm create storybook@latest
npm uninstall @chromatic-com/storybook @storybook/experimental-addon-test @storybook/test @vitest/browser @vitest/coverage-v8 playwright vitest
This looks like it should be it, right? But if you run npm run storybook
, you’ll see that it gives out an error. The error on the browser is a bit generic but on the terminal you’ll see something like:
Internal server error: Failed to parse source for import analysis because the content contains invalid JS syntax. If you are using JSX, make sure to name the file with the .jsx or .tsx extension. Plugin: vite:import-analysis File:(…)/node_modules/@storybook/svelte/dist/components/SlotDecorator.svelte
Vite is trying to compile the Storybook code but is erroneously identifying a closing </script>
tag as JSX syntax, even though it’s a Svelte file. This hints to the fact that the Vite code that is running is not loading the plugin needed to make Svelte work (vite-plugin-svelte
). Astro does that automatically, but Storybook does not, as it just assumes a Svelte + Vite project would have that plugin installed as a dependency. So, to fix it, I:
npm install --save-dev @sveltejs/vite-plugin-svelte
.storybook/main.ts
file:~filename .storybook/main.ts
import type { StorybookConfig } from '@storybook/svelte-vite';
const config: StorybookConfig = {
"stories": [
"../src/**/*.stories.@(js|jsx|ts|tsx|svelte)"
],
"addons": [
"@storybook/addon-essentials",
"@storybook/addon-svelte-csf",
],
"framework": {
"name": "@storybook/svelte-vite",
"options": {}
},
"viteFinal": async (config) => {
// Needs to be dynamically imported
const { svelte } = await import('@sveltejs/vite-plugin-svelte');
config.plugins = config.plugins || [];
config.plugins.push(
svelte({
exclude: ["node_modules/@storybook/**"],
})
);
return config;
}
};
export default config;
And that should be enough for your stories to work!
If, like me, you’re struggling a bit to find a good example of the latest syntax for Svelte stories (the older still works though), I found some good ones in the addon-svelte-csf project on GitHub.
If you have a global SCSS file that your components rely on, you can just add a line to .storybook/preview.ts
:
~filename .storybook/preview.ts
import '../src/styles/global.scss'; // Or whatever your file path is
{...}
If you use aliases set up in tsconfig.json in your components, for example so you can use @components/button
instead of src/components/button
, you either need to re-configure them for Storybook, or you can reuse the ones from tsconfig instead. To do that, you’ll need:
npm install --save-dev vite-tsconfig-paths
~filename .storybook/main.ts
import type { StorybookConfig } from '@storybook/svelte-vite';
const config: StorybookConfig = {
{...}
"viteFinal": async (config) => {
// Needs to be dynamically imported
const tsconfigPaths = await import('vite-tsconfig-paths').then(m => m.default);
{...}
config.plugins.push(
{...}
tsconfigPaths({
projects: ['./tsconfig.json'],
})
);
return config;
}
{...}
};
export default config;
If your project uses aliases for SASS as well, you can alter the viteFinal
section of your .storybook/main.ts
file to make Vite resolve those aliases as well:
~filename .storybook/main.ts
import path from 'path';
{...}
"viteFinal": async (config) => {
{...}
// Add alias for SCSS @styles
config.resolve = config.resolve || {};
const stylesPath = path.resolve(process.cwd(), 'src/styles');
if (Array.isArray(config.resolve.alias)) {
config.resolve.alias.push({
find: '@styles',
replacement: stylesPath
});
} else {
config.resolve.alias = {
...(config.resolve.alias || {}),
'@styles': stylesPath
};
}
Looking back, it’s not really a lot of steps to get it working. But it was a journey to get to this point. Hopefully I’m saving you some time on this!
Both parts of the stack are actually working as they should - Astro does the website part and stays out of the rest, Vite builds the tools, Svelte handles the components, and Storybook renders them. It was just a lack of either clear documentation or better error messages that kept me in the dark for a while. Hopefully there’s more effort in improving this in the future!
I don’t have comments on my blog, but feel free to shoot me an email if you have questions or suggestions. I’ll be glad to help out (or be helped)!
2025-03-31 20:00:00
Hey there! Autumn is here in Brazil and the leaves have started to go yellow, which means it’s my favorite season of the year! Mainly because it’s neither too hot nor too cold, but also because it’s very pretty.
I’ve prepped a selection of links to read through while you drink your coffee, tea, or whatever’s your choice of beverage. The last one is a quite long video, but I highly recommend watching it!
It is as if you were on your phone
pretend to be on your phone so that you pass as human, but actually do essentially nothing instead
Do you feel pressured to be on your phone all the time, so you can pass as a human? This neat web app allows you to do just that, but while doing absolutely nothing instead.
(honestly, it’s a better use of your phone than scrolling through social media…)
The select element can now be customized with CSS 🎉
Customizing <select>
elements is something every web developer has had to do, probably. And the thing about that is that… you really can’t customize it. Or couldn’t, until now.
Having to implement a custom look on this field was always, to me, the perfect definition of “reinventing the wheel”. You gotta pick up this element that works reliably, is accessible, natively supported by all browsers, and users have been using for 30+ years, and then… build it from scratch, with JavaScript (which already kills the accessibility for some people).
Now, as of Chromium 135, you can finally customize them as you always expected you could! This will probably take a while to get to Safari and Firefox, but here’s the cool thing: if those browsers don’t support this new thing, the <select>
will just look like a normal field and work just as well. A perfect example of progressive enhancement!
CSS Relative Colors, by Ahmad Shadeed
Ahmad’s blog has been featured here a few times already, and here’s another gem! A fully interactive, well-written and just a plain joy to read article explaining different strategies to handle colors in CSS, focusing on all those little color variations we need to handle when building something.
In Loving Memory of Square Checkbox, by Nikita Prokopov
In times where software “needs” to stand out rather than be familiar, we lose our heroes. Rest in peace, square checkboxes!
Sooo many times I’ve had to debug something in a npm package dependency of a project I’m working on, only to realize I need to change some of the code to make it work.
That’s usually a pain though, since you either have to open a pull request with a fix and wait for it to be merged, or setup your own fork of the package and host it somewhere.
This package aims to avoid that. It applies patches to other packages in your project, so you don’t have to go through the process of setting up a fork.
The iPad’s “Sweet” Solution, by Federico Viticci
Really nice article that pretty much sums up the iPad situation: it is interesting hardware but that has pretty much no software that showcases what it does best.
The best iPad apps are… web apps. And the iPad’s only available browser being Safari doesn’t make things better.
Algorithms are breaking how we think, by Technology Connections
This is an incredibly well-articulated rant about how recommendation algorithms are changing how our brains work. Automation is good for us and it’s everywhere, but what about when thinking, the very thing that makes us human, starts being automated?
Letting recommendation algorithms (that, as we all know, prioritize revenue) decide the information we get, the tone of that information, and the context of every social interaction is pretty much giving up on our autonomy.
The entire video is worth watching, but this part about context collapse was one of the most interesting bits. It makes perfect sense, but I had never thought of it this way:
Algorithmic feeds on social media are unfortunately quite good at fostering something known as context collapse. To understand this, imagine you’re dining in a restaurant and you’re close enough to a table of people to hear snippets of their conversation. You don’t know who any of the people at that table are, but if you manage to overhear them talk about something you’re really interested in, you might feel tempted to join their conversation. But in the context of a restaurant setting, that’s considered very rude, so it rarely ever happens.
On social media, though, the same kinds of quasi-private conversations between parties who know each other are happening all the time, but since the platform is just one big space and it might decide to put that conversation in front of random people, that social boundary of etiquette which is normally respected is just not there. And lots of conflicts happen as a result.
A really common one you might accidentally step into on social media happens when you stumble across a conversation among friends making sarcastic jokes with each other, but since you don’t know who those people are, you don’t have the context you need to recognize they’re joking. And so, if you reply with a serious critique, well, that’s a social misfire which some will react poorly to.
And that’s a pretty mild form of context collapse. It can be much, much worse when people want to discuss things like politics. And unless we realize recommendation algorithms are what’s fostering these reactionary conflicts, they’re going to continue so long as we use platforms in the ways that we do. It’s for all these reasons that I believe algorithmic complacency is creating a crisis of both curiosity and human connection.
Thanks for tuning in another month, and I hope to see (write to? Be read by?) you again next month!