2025-11-29 22:21:00
It’s 1970. You walk into the store, grab a bunch of apples, go to the cash register, pay with cash, and walk out.
What kinds of data have been automatically processed about you while doing that? Very little. Most likely, none, as CCTV footage relied on the development of VHS to be viable, and IP cameras transmitting video over networks only took off in the 90s.
Fast forward to today. Depending on where you live, your supermarket has good cameras everywhere; some, like the super fancy new experiments, have recognition technology that detects what items you grab so that you can just pay without scanning, or even just walk out, having it subtracted automatically from your account. This isn’t just Amazon stores; German store Rewe is trying to get into that too, as I know someone personally who works in their sub-company Lekkerland’s “Smart Store Rollout” department.
A more mundane but very common thing for the big stores is tracking you with RFID technology: They track where you are and how long you stay at specific spots by using a network of fixed RFID readers via the RFID tag on the loyalty card or shopping cart (or the individual scanners Rewe offers nowadays!). By noting the time and location of each tag read, the system can create a map of your path and duration of stay within the store.
Your supermarket might also have an app to get specific sales and offers. Mine, for a little period, even made it seem as if you could only buy specific products if you pay through their app instead. They dropped that after a while, but I’m sure it got many to download it and make an account - as, of course, you could not use it without one.
At the checkout, you might opt for self-checkout now. I’ve seen that stores in the US distinctly record your face and your hands scanning the products, so in case you try to sneak something, they have clear proof and identification options. That video gets analyzed and stored for a while.
Either way, you might use a loyalty card you signed up for with your real name and address to collect points or get a discount, tracking exactly what you bought, and you’ll likely pay via card. Your bank account has a bit more information about where you shop and when than if you had just withdrawn cash. If you’re like me, you also pay contactless via phone or watch, giving the processor like Google Pay or Apple Pay some info as well.
All that for quickly getting something at the grocery store, something that would not have given the companies much meaningful data about you specifically even just 55 years ago. Of course, some of these things are avoidable and no one forces you to use apps, bank and loyalty cards, but still. These things are not presented as the data harvesters they are, but as convenience and a way to save money or time, targeting vulnerable groups the most.
But why even go to the store? Maybe you live in a country with delivery options like Instacart and the like. One more service related to the groceries you buy that is an app, a user account. What if you can’t or don’t wanna cook? Just get a delivery via DoorDash, UberEats, Lieferando or the equivalent in your country. More data about you, and that’s just food.
What if you aren’t buying apples at the grocery store, but you’re buying lamps, frames, or a new bed cover? Nowadays, you’d most likely either have a similar shop experience as in the grocery stores, or you’ll online shop on the company’s website or app, that may or may not also show ads and place tracking cookies or reads other data on your phone. They might get you with a 5% off coupon if you just sign up for their newsletter! So you do. Not many use a throwaway mail address or immediately unsubscribe. Now they have constant access to you and your attention if they want to, not just while you’re at their physical stores. A marketing email popping up at the right time creates desires and a suggestion to do some online window shopping, again creating data as you use their website or app. And then there’s the shipping companies…
What about the news? You can still buy magazines and newspapers at the store and the corner shop/kiosk, or maybe those little newspaper vending machines that drop one if you put in a coin. But everything is moving to digital nowadays, saving waste and printing costs, so to read the same newspaper online, you have to either pay with your data or pay more than print used to cost, and even then, still pay with your data.
Subscribing to the digital version or unlocking a single article via a one-time-payment still tracks you and still shows you ads on many, many news sites. And what do you pay for? If you’re unlucky, it is the same article copy pasted across 10 different newspapers, or a completely AI generated article with zero human effort. For comparison: Just buying the print at a coin vending machine leaves them completely in the dark about you. That was just normal.
I notice this in all kinds of industries and parts of life now - it’s why everything now requires an app and a sign-up. Your local café, your hairdresser, your e-scooter. Hell, I even saw nailbiter nail polish now comes with an app. New washing machines and refrigerators are reporting back to their companies.
Why is every place, every product company now accepted to be a data aggregation company as well? Why is my data the cookie jar that companies frequently get their hand stuck in while acting entitled? Hello, I already paid you, why are you not ashamed of your obvious greed?
What tires me about all of this is that we are supposed to pretend this is all normal and as if it has always been that way, and pretend that this isn’t just double-dipping.
I pay money, and then I also generate money with my data. In cases of the loyalty cards and discounts, you could say that there is a fair trade as the price gets lowered, but this is the minority. The majority of the time, we are tracked and profiled with no advantage for us, no compensation. And even if there is, and default pricing is higher if you don‘t share data, that ends up being financial discrimination and affects your choice significantly.
As prices rise everywhere, paying with our data gets us almost no relief and is just an ever-growing additional income stream on the side for these companies. Despite having this pile of digital gold to pad their wallets, they still pretend that they have to raise prices all the time for all kinds of situations, and then never lower them when they resolve, as the profit of doing so and selling to advertisers and AI companies is concentrated at the top of the chain.
Companies used to be fine selling via means that did not track and invade your life this hard, now we’re supposed to pretend these things are essential. Essential for what? More ads? More manipulation? Better sales numbers? More money for the CEO?
They are not essential. We could drop 3/4ths of these mechanisms with no discernible changes to the user experience or product access. The reality is that literal essentials are gatekept by being subjected to this constant harassment and evaluation.
How long until not complying with this surveillance regime downright hurts?
When you cannot pay cash, or you cannot get into the store without scanning a QR code via their app for authentication, or pricing is personalized based on the profile they have about you - compiled with not just the store data, but other data they bought from data brokers? Your loyalty status, past purchases, your income information, credit score, propensity-to-pay algorithms, Meta social media info, …? Premium loyalty tiers where you ironically pay for more privacy? Predictive technology wrongfully classifying you as a high risk for stealing and banning you from the store?
I’m tired of every niche jumping on this opportunity to be the next Cambridge Analytica. You are a hardware store, not a data broker company! I keep swatting your hand out of the jar, but you are just back in there every time I look.
Reply via email
Published {{ post_published_date }}
2025-11-29 20:27:00
I recently learned that Swedish theaters rarely use smoke on stage these days. The formula is water based, so it doesn’t smell and it won’t cause you to start coughing.
So what’s the problem? The audience starts coughing.
It’s so ingrained to react that way when seeing smoke that people do it even when there’s no need for it.
It’s fascinating how we naturally respond in certain situations. Often it’s a great thing, like blinking or throwing up a hand if something unexpected comes toward us.
Other times it’s neither good nor bad. For example when someone yawns on the subway and others follow without even thinking about it.
But sometimes it can be a hindrance. It can stop us from making progress. It can keep a lid on the creative force inside of us.
Since this is a blog post, let’s take blogging as an example. One of my favorite bloggers is Annie Mueller. I will never be able to write like her. That’s a fact.
If I compared each of my drafts to her posts or any of my other favorite bloggers, I would hardly publish anything at all. It would all be “not good enough, not quirky enough, not personal enough...”
That’s what happens when we have fixed ideas about what blogging “should look like”. It’s silly and it turns into a creative nightmare.
I hope I never write like Annie, Tiramisu, Jedda, or any of the other fantastic bloggers I admire for what they do.
And I hope that you who reads this never blogs like me or any other blogger. I want to read what you feel the need to write. Pure and unfiltered, straight from the heart.
If you haven’t already, I hope you go ahead and press that publish button. I’d love to read what you write.
2025-11-29 01:30:00
Both my wife and I are going through the annoying process of trying to search for new jobs. I’m still at my current one, but I want to see if something better is out there in the region we wanna move to.
But it is absolutely nuts. How have these services not gone out of business?
My experience, almost entirely the same across many websites like StepStone, Indeed, and more:
And for what? So that you’ll make an account and give up all that data and get harassed via e-mail for information that is freely available on the company’s own career page!
What are we doing? This is silly. Companies have already revealed that they hate and don’t consider the “Quick Apply” options these platforms offer, so what gives? And why are companies still using these slop platforms? It can’t be about getting more applicants, because these websites do anything they can to not show you the relevant job postings or information about them. If the search sucks, the preview is half-blurred and I can’t click on it without a pop-up urging me to make an account, you guessed it: I am actively discouraged from applying, prevented even, in many cases. I shouldn’t have to make an account with a third party just to even consider an employer! No, I will not create an account, and I will also not make a LinkedIn or Xing.
These services are not helping anyone, they are leeches. They have an interest in keeping you on their site searching jobs for a long time, and that goal is antithetical to connecting you with potential employers quickly. Companies are better off advertising elsewhere and keeping it on their own website so all potential candidates can access it. It’s a bad look seeing you on these enshittified platforms.
The way I have been coping with this job search is just using these websites to get a list of companies that have jobs in my niche and then researching them separately, using their own career pages and application portals. Also, relying on job listing websites ran by the government as these don’t use deceptive tactics to get you to sign up.
If you’re lucky, your professional niche has their own jobmarket websites (see, for example, rustjobs.fyi), or popular magazine publishers that are relevant in your field have a career sub-category on their website.
If you have any other tips I missed, let me know (email or your own post is fine!) and I’ll add it.
Reply via email
Published {{ post_published_date }}
2025-11-29 00:32:00
Are you also tired of the Black Friday shopping mania? Let’s make it fun in a free way instead of stressful in a “don’t really need it, but my gosh it’s cheap” way.
Simply copy the theme styles below, head over to your Bear theme settings, paste them in, and let the party begin. 🥳
If you’re using the wonderful Guestbooks by Meadow, the theme will take care of that too. Check my guestbook to see how it looks. If you’re in the mood, and who isn’t after some Pink Friday vibes, feel free to write me something.
To give you a taste of how lovely the quotes look, here are a few fitting lines from the beautiful song Society by Eddie Vedder:
Oh, it's a mystery to me
We have a greed, with which we have agreed
And you think you have to want more than you need
Until you have it all you won't be free
Disclaimer: While there’s no technical limitation stopping you from using this theme to celebrate Black Friday instead of dodging it, it’s considered bad karma. This may result in your posts getting fewer upvotes. Just saying...
/*
* Pink Friday — a joyful antidote to Black Friday madness
* Version 1.0.0 | 2025-11-28
* Author: Robert Birming
* URL: https://robertbirming.com
*/
*,
*::before,
*::after {
box-sizing: border-box;
}
:root {
color-scheme: light dark;
--bg: #fff7fb;
--txt: #261321;
--muted: #8f6a7a;
--line: #f0d3e3;
--accent: #e45ba8;
--accent-h: color-mix(in srgb, var(--accent) 80%, var(--txt) 20%);
--radius: 6px;
}
@media (prefers-color-scheme: dark) {
:root {
color-scheme: dark;
--bg: #1b1220;
--txt: #ffe9f8;
--muted: #c89bb4;
--line: #3c253f;
--accent: #ff7ec5;
--accent-h: color-mix(in srgb, var(--accent) 80%, #ffffff 20%);
}
footer::before {
background-image: linear-gradient(
90deg,
#ff9ad1,
#ffcaee,
#ff9ad1,
#f9a9ff
);
}
}
::selection {
background: color-mix(in srgb, var(--accent) 35%, var(--bg));
color: var(--txt);
}
body {
max-width: 640px;
margin: 36px auto;
padding: 0 20px;
font-family: system-ui, sans-serif;
font-size: 1.075rem;
line-height: 1.66;
letter-spacing: 0.01em;
color: var(--txt);
background: var(--bg);
overflow-wrap: break-word;
}
main > p:first-of-type {
margin-top: 0.2em;
}
p {
margin-block: 1.2em;
}
h1,
h2,
h3 {
margin-block: 1.4em 0.6em;
font-weight: 600;
line-height: 1.2;
letter-spacing: -0.01em;
color: var(--txt);
}
h1 {
margin-block: 0 0.4em;
}
h1 { font-size: 1.7rem; }
h2 { font-size: 1.45rem; }
h3 { font-size: 1.25rem; }
ul,
ol {
margin-block: 1.2em;
padding-left: 1.4em;
}
li + li {
margin-top: 0.25em;
}
a {
color: var(--accent);
text-decoration: underline;
text-decoration-thickness: 1px;
text-underline-offset: 3px;
transition:
color 0.15s ease,
text-decoration-thickness 0.15s ease;
}
a:hover {
color: var(--accent-h);
text-decoration-thickness: 2px;
}
blockquote {
margin-block: 2em;
margin-inline: 0;
padding: 0.85em 1rem;
border-left: 3px solid var(--accent);
background: color-mix(in srgb, var(--bg) 85%, var(--accent) 15%);
color: var(--muted);
font-style: italic;
border-radius: 10px;
box-shadow: 0 2px 6px color-mix(in srgb, var(--txt) 10%, transparent);
}
blockquote p {
margin: 0;
}
img {
max-width: 100%;
height: auto;
display: block;
margin-block: 1.4em;
border-radius: 8px;
}
hr {
border: none;
border-top: 1px solid var(--line);
margin-block: 2rem;
}
/* Header */
header {
margin-bottom: 2.4rem;
padding-bottom: 0;
display: flex;
flex-direction: column;
align-items: flex-start;
text-align: left;
gap: 1.2rem;
}
header a.title {
text-decoration: none;
color: var(--txt);
position: relative;
display: inline-block;
}
header a.title h1 {
margin: 0;
padding: 0;
font-size: 1.7rem;
line-height: 1.2;
letter-spacing: -0.01em;
display: inline-block;
filter:
drop-shadow(0 0 2px color-mix(in srgb, var(--accent) 45%, transparent))
drop-shadow(0 0 4px color-mix(in srgb, var(--accent-h) 35%, transparent));
transition: filter 0.25s ease, transform 0.25s ease;
}
header a.title:hover h1 {
filter:
drop-shadow(0 0 4px color-mix(in srgb, var(--accent) 70%, transparent))
drop-shadow(0 0 8px color-mix(in srgb, var(--accent-h) 55%, transparent));
transform: scale(1.012);
}
header a.title h1::after {
content: " *:・゚✧";
padding-left: 4px;
background: linear-gradient(
to right,
var(--txt),
var(--accent),
color-mix(in srgb, var(--accent) 65%, var(--txt) 35%)
);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
text-fill-color: transparent;
vertical-align: baseline;
opacity: 0.9;
}
/* Nav links */
header nav p {
margin: 0;
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 0.6rem;
font-size: 0.9rem;
}
header nav a {
text-decoration: none;
color: var(--accent);
padding: 0.25rem 0.8rem 0.18rem;
border-radius: 999px;
background: color-mix(in srgb, var(--bg) 94%, var(--accent) 6%);
border: 1px solid transparent;
box-shadow: 0 1px 2px color-mix(in srgb, var(--txt) 10%, transparent);
transition:
background-color 0.18s ease,
border-color 0.18s ease,
box-shadow 0.18s ease,
transform 0.18s ease;
}
@media (prefers-color-scheme: dark) {
header nav a {
background: color-mix(in srgb, var(--bg) 90%, var(--accent) 10%);
}
}
header nav a:hover {
color: var(--bg);
background: color-mix(in srgb, var(--accent) 80%, var(--bg) 20%);
border-color: color-mix(in srgb, var(--accent) 55%, var(--line));
box-shadow: 0 4px 10px color-mix(in srgb, var(--txt) 16%, transparent);
transform: translate(1px, 2px) rotate(2.5deg);
}
header nav a:active {
transform: translate(0, 0) rotate(0deg);
box-shadow: 0 1px 3px color-mix(in srgb, var(--txt) 20%, transparent);
}
/* Footer */
footer {
position: relative;
margin-top: 1rem;
padding: 30px 0 26px;
text-align: center;
color: var(--muted);
font-size: 0.95rem;
}
footer::before {
content: "✧";
display: block;
margin: 0 auto 1.8rem;
text-align: center;
color: var(--accent);
font-size: 1.25rem;
letter-spacing: 0.35em;
opacity: 0.95;
width: 70%;
background:
linear-gradient(to right, transparent, var(--line) 70%),
linear-gradient(to left, transparent, var(--line) 70%);
background-size: 48% 1.5px, 48% 1.5px;
background-position: left center, right center;
background-repeat: no-repeat;
}
footer a {
color: var(--accent);
text-decoration: none;
}
footer a:hover {
text-decoration: underline;
}
/* Blog */
time {
font-style: normal;
color: var(--muted);
font-variant-numeric: tabular-nums;
font-size: 0.9rem;
}
p > time,
p > i > time {
display: inline-block;
margin-top: 0.2rem;
}
ul.blog-posts {
list-style: none;
padding: 0;
margin: 1.6rem 0 0;
}
ul.blog-posts li {
display: flex;
align-items: baseline;
gap: 0.9rem;
padding-block: 0.4em;
border-bottom: 1px solid color-mix(in srgb, var(--line) 60%, transparent);
}
ul.blog-posts li:first-child {
border-top: 1px solid color-mix(in srgb, var(--line) 60%, transparent);
}
ul.blog-posts li span {
flex: 0 0 140px;
color: var(--muted);
font-size: 0.9rem;
}
ul.blog-posts li a {
color: var(--accent);
text-decoration: none;
font-weight: 500;
display: inline-block;
transition:
color 0.15s ease,
text-decoration-thickness 0.15s ease;
}
ul.blog-posts li a:hover {
text-decoration: underline;
text-decoration-thickness: 2px;
color: var(--accent-h);
}
@media (max-width: 540px) {
ul.blog-posts li {
flex-direction: column;
align-items: flex-start;
padding-block: 0.7em;
gap: 0.25em;
}
ul.blog-posts li span {
order: 1;
flex: none;
font-size: 0.85rem;
}
ul.blog-posts li a {
order: 0;
}
}
/* Upvote button */
:is(.post, .page) .upvote-button {
display: inline-flex !important;
flex-direction: row !important;
align-items: center !important;
gap: 0.35rem;
padding: 0.18rem 0.55rem;
border-radius: 999px;
border: 1px solid color-mix(in srgb, var(--line) 80%, transparent);
background: color-mix(in srgb, var(--bg) 96%, var(--accent) 4%);
color: var(--txt);
font: inherit;
line-height: 1;
cursor: pointer;
white-space: nowrap;
transition:
background-color 0.15s ease,
border-color 0.15s ease,
transform 0.12s ease;
}
:is(.post, .page) .upvote-button svg {
display: none !important;
}
:is(.post, .page) .upvote-button::before {
content: "♡";
font-size: 1.25rem;
line-height: 1;
color: var(--accent);
transform: translateY(1px);
transition:
color 0.15s ease,
transform 0.12s ease;
}
:is(.post, .page) .upvote-button .upvote-count {
display: inline-block !important;
width: auto !important;
flex: 0 0 auto !important;
margin: 0 !important;
padding: 0 !important;
font-size: 0.85rem;
color: var(--muted);
opacity: 0.85;
white-space: nowrap;
transform: translateY(1px);
}
:is(.post, .page) .upvote-button:hover {
background: color-mix(in srgb, var(--bg) 90%, var(--accent) 10%);
border-color: color-mix(in srgb, var(--accent) 50%, var(--line));
transform: translateY(-1px);
}
:is(.post, .page) .upvote-button:hover::before {
transform: translateY(0);
}
:is(.post, .page) .upvote-button:is(.upvoted, [aria-pressed="true"], [disabled])::before {
content: "♥";
color: var(--accent-h);
}
:is(.post, .page) .upvote-button[disabled] {
cursor: default;
opacity: 0.85;
}
:is(.post, .page) .upvote-button:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 2px;
}
/* Guestbook */
#guestbooks___guestbook-form-container form {
display: grid;
gap: 0.6rem;
margin: 1.6rem 0;
}
#guestbooks___guestbook-form-container :is(input, textarea, button) {
font: inherit;
padding: 0.6rem 0.7rem;
border-radius: var(--radius);
border: 1px solid var(--line);
background: var(--bg);
color: var(--txt);
}
#guestbooks___guestbook-form-container :is(input, textarea) {
width: 100%;
line-height: 1.5;
}
#guestbooks___guestbook-form-container :is(input, textarea):focus {
outline: none;
border-color: var(--accent);
box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 35%, transparent);
}
#guestbooks___guestbook-form-container :is(button, input[type="submit"]) {
cursor: pointer;
font-weight: 600;
align-self: flex-start;
background: var(--accent);
color: var(--bg);
border-color: var(--accent);
transition:
background-color 0.2s ease,
transform 0.15s ease;
}
#guestbooks___guestbook-form-container :is(button, input[type="submit"]):hover {
background: var(--accent-h);
transform: translateY(-1px);
}
#guestbooks___guestbook-messages-container > div {
margin: 1.2rem 0;
padding: 1rem 1.1rem;
font-size: 0.95rem;
border-radius: calc(var(--radius) + 2px);
border: 1px solid color-mix(in srgb, var(--accent) 40%, var(--bg));
background: color-mix(in srgb, var(--bg) 93%, var(--accent) 7%);
}
#guestbooks___guestbook-messages-container blockquote {
margin: 0 0 0.4rem;
padding: 0;
border: 0;
background: none;
box-shadow: none;
border-radius: 0;
font-style: normal;
color: var(--txt);
}
#guestbooks___guestbook-messages-container p {
margin: 0 0 0.4rem;
}
#guestbooks___guestbook-made-with {
margin-top: 0.8rem;
font-size: 0.85rem;
color: var(--muted);
}
2025-11-28 23:55:07
Yesterday it was Thanksgiving and I had the privilege of spending the holiday with my family. We have a tradition of doing a toast going around the table and sharing at least one thing for which we are grateful.
I want to share with you a story that started last year, in January of 2024, when a family friend named Germán reached out to me for help with a website for his business.
Germán is in his 50s, he went to school for mechanical engineering in Mexico and about twenty years ago he moved to the United States. Today he owns a restaurant in Las Vegas with his wife and also runs a logistics company for distributing produce.
We met the last week of January, he told me that he was looking to build a website for his restaurant and eventually build up his infrastructure so most of his business could be automated. His current workflow required his two sons to run the business along with him. They managed everything manually on expensive proprietary software.
There were lots of things that could be optimized, so I agreed to jump on board and we have been collaborating ever since. What I assumed would be a developer type of position instead became more of a peer-mentorship relationship.
Germán is curious, intelligent, and hard working. It didn't take long for me to notice that he didn't just want to have software or services running "in the background" while he occupied himself with other tasks. He wanted to have a thorough understanding of all the software he adopted.
"I want to learn but I simply don't have the patience," he told me during one of our first meetings. At first I admit I thought this was a bit of a red flag (sorry Germán haha) but it all began to make sense when he showed me his books.
He had paid thousands of dollars for a Wordpress website that only listed his services and contact information. The company he had hired offered an expensive SEO package for a monthly fee. My time in open source and the indieweb had blinded me to how abusive the "web development" industry had become. I'm referring to those local agencies that take advantage of unsuspecting clients and charge them for every little thing.
I began making Germán's website and we went back and forth on assets, copy, menus, we began putting together a project and everything went smoothly. He was happy that he got to see how I built things. During this time I would journal through my work on his project and e-mail my notes to him. He loved it.
Next came a new proposition. While the static site was nice to have an online presence, what he was after was getting into e-commerce. His wife, Sarah, makes artisanal beauty products and custom clothes. Her friends would message her on Facebook to ask what new stuff she was working on and she would send pictures to them from her phone. She would have benefitted from having a website, but after the bad experience they had had with the agency, they weren't too enthused about the prospect of hiring them for another project.
I met with both of them again for this new project and we talked for hours, more like coworkers this time around. We eventually came to the conclusion that it would be more rewarding for them to really learn how to put their own shop together. I acted more as a coach or mentor than a developer. We'd sit together and activate accounts, fill out pages, choose themes. I was providing a safe space for them to be curious about technology, make mistakes, learn from them, and immediately get feedback on technical details so they could stay on a safe path.
I'm so grateful for that opportunity afforded to me by Germán and his family. I've thought about how that approach would look if applied to the indieweb. It's always so exciting for me to see what the friends I've made here are working on. I know the open web becomes stronger when more independent projects are released, as we have more options to free ourselves from the corporate web that has stifled so much of the creativity and passion that I love and miss from the internet.
I want to keep doing this. If you are building something on your own, have been out of the programming world for a while but want to start again, or maybe you are almost done and need a little boost in confidence (or accountability!) to reach the finish line and ship, I'm here to help.
Check out my coaching page to find out more.
I'm excited about the prospect of a community of builders who care about self-reliance and releasing software that puts people first.
Perhaps this Black Friday you could choose to invest in yourself :-)