<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Niclas</title>
    <description>The latest articles on DEV Community by Niclas (@driftya).</description>
    <link>https://dev.to/driftya</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3740640%2F8948c69d-c239-4fca-a772-f87f3d8797cb.png</url>
      <title>DEV Community: Niclas</title>
      <link>https://dev.to/driftya</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/driftya"/>
    <language>en</language>
    <item>
      <title>Designing respectful notifications in a social platform.</title>
      <dc:creator>Niclas</dc:creator>
      <pubDate>Tue, 03 Mar 2026 15:36:33 +0000</pubDate>
      <link>https://dev.to/driftya/designing-respectful-notifications-in-a-social-platform-41pc</link>
      <guid>https://dev.to/driftya/designing-respectful-notifications-in-a-social-platform-41pc</guid>
      <description>&lt;p&gt;Most social platforms treat notifications as engagement drivers. The more you return, the better it is for the system. Notifications become a lever to pull people back in, often regardless of whether they have shown recent activity.&lt;/p&gt;

&lt;p&gt;Questioning that assumption while building a small social platform. If a user has not interacted with the app in days or weeks, does it really make sense to keep sending notifications? At some point, reminders stop being helpful and start feeling like spam.&lt;/p&gt;

&lt;p&gt;The idea I settled on was simple: notifications should respond to user activity, not just system events.&lt;/p&gt;

&lt;p&gt;Instead of sending a notification for every qualifying action, the system allows only one notification per user activity window. If the user has already received a notification but has not returned to the platform, additional notifications are suppressed. In other words, inactivity acts as a natural brake.&lt;/p&gt;

&lt;p&gt;Technically, this is implemented using Redis as a persistent cache layer. When a notification is sent, a suppression key is written with a configurable expiration time. As long as that key exists, further notifications of that type are not delivered. If the user returns and interacts with the platform, the key can be cleared or reset. If they remain inactive, the suppression window eventually expires on its own.&lt;/p&gt;

&lt;p&gt;The expiration time is configurable per notification type. Some events are more time-sensitive than others, and the system allows different reset periods. In my current setup, the default window is seven days, but this can be adjusted without changing the core logic.&lt;/p&gt;

&lt;p&gt;This approach does introduce tradeoffs. A user who cares but checks the platform infrequently might miss intermediate updates. However, the design assumption is that meaningful engagement should restart when the user actively returns. Notifications are not meant to accumulate in the background; they are meant to signal something new once the user has shown interest again.&lt;/p&gt;

&lt;p&gt;The broader goal is to make notifications feel respectful. Instead of optimizing for frequency or return rate, the system optimizes for restraint. If someone is inactive, the platform should not keep tapping them on the shoulder.&lt;/p&gt;

&lt;p&gt;Designing notifications this way shifts the focus slightly. It moves away from maximizing engagement and toward minimizing unnecessary interruption. It is a small change technically, but it significantly changes the tone of the product.&lt;/p&gt;

&lt;p&gt;I am still refining the definition of “inactive” and exploring edge cases where suppression might hide something important. But the core principle remains the same: activity should trigger notifications, not the absence of it.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>redis</category>
      <category>backend</category>
      <category>architecture</category>
    </item>
    <item>
      <title>How important is Web Accessibility?</title>
      <dc:creator>Niclas</dc:creator>
      <pubDate>Sun, 15 Feb 2026 01:06:13 +0000</pubDate>
      <link>https://dev.to/driftya/how-important-is-web-accessibility-i8k</link>
      <guid>https://dev.to/driftya/how-important-is-web-accessibility-i8k</guid>
      <description>&lt;p&gt;Since I learned web programming I always thought just like security is somethings we should never skip I also think of web accessibility in the same regards for public sites but I also try to always implement it on internal tools as well. &lt;/p&gt;

&lt;p&gt;I am using this great tool from WAVE Web Accessibility Evaluation Tools (&lt;a href="https://wave.webaim.org/" rel="noopener noreferrer"&gt;https://wave.webaim.org/&lt;/a&gt;), does anyone else use it? I wonder if there are any alternatives that is better.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Farnc0mi12svszrhyluzd.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Farnc0mi12svszrhyluzd.webp" alt=" " width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>web</category>
      <category>discuss</category>
    </item>
    <item>
      <title>IndexNow: Struggle with implementation (C#)</title>
      <dc:creator>Niclas</dc:creator>
      <pubDate>Thu, 12 Feb 2026 16:12:37 +0000</pubDate>
      <link>https://dev.to/driftya/indexnow-struggle-with-implementation-c-5fn4</link>
      <guid>https://dev.to/driftya/indexnow-struggle-with-implementation-c-5fn4</guid>
      <description>&lt;p&gt;Some days ago I have been struggling with implementing IndexNow, I did almost exactly as mentioned here in this tutorial &lt;a href="https://www.bing.com/indexnow/getstarted#implementation" rel="noopener noreferrer"&gt;https://www.bing.com/indexnow/getstarted#implementation&lt;/a&gt;, but it did not work.&lt;/p&gt;

&lt;p&gt;The payload was correct and the data and the endpoint was right but I got bad request, I had no clue what to fix. &lt;/p&gt;

&lt;p&gt;The error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{\"code\":\"InvalidRequestParameters\",\"message\":\"Given request parameters are null or invalid\"}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After finding &lt;a href="https://stackoverflow.com/questions/72629964/given-request-parameters-are-null-or-invalid-when-using-curl-to-submit-urls-wi" rel="noopener noreferrer"&gt;https://stackoverflow.com/questions/72629964/given-request-parameters-are-null-or-invalid-when-using-curl-to-submit-urls-wi&lt;/a&gt; on stackoverflow I changed endpoint to "&lt;a href="https://www.bing.com/IndexNow" rel="noopener noreferrer"&gt;https://www.bing.com/IndexNow&lt;/a&gt;" I finally found the cause.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;IndexNow submission failed with status LengthRequired.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The whole issue has been the http version all along which I never thought of as I have never had any reasons before to set that manually.&lt;/p&gt;

&lt;p&gt;The solution to fix the issue:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;            var request = new HttpRequestMessage(HttpMethod.Post, endpoint)
            {
                Version = HttpVersion.Version11,
                VersionPolicy = HttpVersionPolicy.RequestVersionExact,
                Content = new StringContent(
                    JsonSerializer.Serialize(payload, JsonSerializerOptions.Web),
                    Encoding.UTF8,
                    "application/json")
            };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I hope it help someone who may struggle with the same issue.&lt;br&gt;
A small note, the correct endpoint is &lt;a href="https://api.indexnow.org/indexnow" rel="noopener noreferrer"&gt;https://api.indexnow.org/indexnow&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>indexnow</category>
      <category>csharp</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Remember what you vibe?</title>
      <dc:creator>Niclas</dc:creator>
      <pubDate>Tue, 03 Feb 2026 07:43:00 +0000</pubDate>
      <link>https://dev.to/driftya/learn-what-you-vibe-219m</link>
      <guid>https://dev.to/driftya/learn-what-you-vibe-219m</guid>
      <description>&lt;p&gt;Hello, &lt;/p&gt;

&lt;p&gt;I recently started vibe coding and yes the output is fast but I feel personally the long term memory for knowing your project is declining.&lt;/p&gt;

&lt;p&gt;When I did commit and pullrequests I read the code and understand what it did and if it required any changes, but in long term I needed to go back again to remember the details. &lt;/p&gt;

&lt;p&gt;Writing my code myself it was much easier to remember the details. &lt;strong&gt;So how did I solve it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What I did, first make sure the agent follow the SOLID principle and KISS as much as possible, iterate over the code and extract all methods as much as possible (A lesson from Uncle Bob). Then I writes unit test myself, this make me remember the code much better when doing vibe coding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I am curious on how you solved it. Any Ideas?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>Reasonable security baseline for self-hosted services 2026?</title>
      <dc:creator>Niclas</dc:creator>
      <pubDate>Sun, 01 Feb 2026 01:06:05 +0000</pubDate>
      <link>https://dev.to/driftya/reasonable-security-baseline-for-self-hosted-services-2026-1jjk</link>
      <guid>https://dev.to/driftya/reasonable-security-baseline-for-self-hosted-services-2026-1jjk</guid>
      <description>&lt;p&gt;Running a hobby project on a self-hosted server and wanted a quick sanity check on whether this counts as a reasonable minimum security baseline in 2026.&lt;/p&gt;

&lt;p&gt;High-level setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux host&lt;/li&gt;
&lt;li&gt;Dockerized services&lt;/li&gt;
&lt;li&gt;Only 80/443 exposed publicly&lt;/li&gt;
&lt;li&gt;Reverse proxy terminating TLS (HTTPS enforced)&lt;/li&gt;
&lt;li&gt;ASP.NET (.NET 10) with built-in Identity + OAuth&lt;/li&gt;
&lt;li&gt;EF Core/ORM only (no raw SQL)&lt;/li&gt;
&lt;li&gt;auto-encoding, no user HTML rendering&lt;/li&gt;
&lt;li&gt;Basic security headers (CSP, HSTS, nosniff, referrer, permissions)&lt;/li&gt;
&lt;li&gt;Host firewall enabled (default deny incoming)&lt;/li&gt;
&lt;li&gt;Regular security updates (OS + container rebuilds, unattended upgrades)&lt;/li&gt;
&lt;li&gt;Rate limiting policies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn’t meant to be enterprise-grade, just sensible for a hobby app.&lt;br&gt;
Does this sound like a reasonable baseline?&lt;/p&gt;

&lt;p&gt;Any common blind spots people usually miss at this stage (ops, maintenance, or process-wise)? &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>security</category>
      <category>network</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Vibe coding before writing code?</title>
      <dc:creator>Niclas</dc:creator>
      <pubDate>Fri, 30 Jan 2026 11:32:55 +0000</pubDate>
      <link>https://dev.to/driftya/vibe-coding-before-writing-code-2ko6</link>
      <guid>https://dev.to/driftya/vibe-coding-before-writing-code-2ko6</guid>
      <description>&lt;p&gt;Before I wrote much code on my current project, I wrote documents.&lt;/p&gt;

&lt;p&gt;The idea started after some frustration with social media. I spent time comparing different platforms and noticed how similar they all felt in practice. Most of them optimize for quick reactions and passive engagement. I kept wondering what kind of interaction would actually feel satisfying to respond to, where the creator might genuinely care about the reply, and where responding felt better than just clicking a like.&lt;/p&gt;

&lt;p&gt;I gave the idea space by discussing it back and forth with different AI models. Over time this turned into a large, unstructured dataset of thoughts, constraints, and possibilities. Instead of trying to code from that directly, I treated it as raw material that needed processing.&lt;/p&gt;

&lt;p&gt;Before doing that processing, I focused on orientation. As a programmer, what felt important to me was defining a Table of Contents in a README, writing a CONTRIBUTING guide, and creating an Agent.md file as an explicit entry point for prompting and discussion. These weren’t meant to lock decisions, but to give the project a shared mental baseline, even if that baseline was only for myself.&lt;/p&gt;

&lt;p&gt;I wrote down best practices, architectural boundaries, coding rules, and style decisions as early constraints. I then refined those documents iteratively, again using AI models, before moving deeper into implementation.&lt;/p&gt;

&lt;p&gt;These were the first steps I took before I could really start building.&lt;br&gt;
I’m curious how others approach this phase. Do you do something similar, or are there other practices you’ve found useful early on?&lt;/p&gt;

</description>
      <category>vibecoding</category>
      <category>programming</category>
      <category>ai</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
