<?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: S.Babas</title>
    <description>The latest articles on DEV Community by S.Babas (@sbabas).</description>
    <link>https://dev.to/sbabas</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4075147%2Ff174c743-d40a-40d3-ad73-30ad3db942e5.jpg</url>
      <title>DEV Community: S.Babas</title>
      <link>https://dev.to/sbabas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sbabas"/>
    <language>en</language>
    <item>
      <title>How I migrated from GitHub to Codeberg</title>
      <dc:creator>S.Babas</dc:creator>
      <pubDate>Fri, 09 Oct 2026 08:03:20 +0000</pubDate>
      <link>https://dev.to/sbabas/how-i-migrated-from-github-to-codeberg-177h</link>
      <guid>https://dev.to/sbabas/how-i-migrated-from-github-to-codeberg-177h</guid>
      <description>&lt;h2&gt;
  
  
  Why I migrated from GitHub to Codeberg?
&lt;/h2&gt;

&lt;p&gt;I migrated from GitHub to Codeberg mainly because GitHub is a proprietary platform, which is a sovereignty issue for me (notably because their Copilot AI is trained on public code).&lt;/p&gt;

&lt;p&gt;My main goal was to find simplicity: fewer unused features, a platform that gets straight to the point.&lt;/p&gt;

&lt;h3&gt;
  
  
  My steps to migrate my project from GitHub to Codeberg:
&lt;/h3&gt;

&lt;p&gt;I used these commands to perform the migration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Change the remote URL to point to Codeberg&lt;/span&gt;
git remote set-url origin https://codeberg.org/NuxiPro/Core.git

&lt;span class="c"&gt;# 2. Push all branches and tags&lt;/span&gt;
git push &lt;span class="nt"&gt;--all&lt;/span&gt;
git push &lt;span class="nt"&gt;--tags&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I could have used Codeberg's native import tool, but since the NuxiPro Core repository was private, I preferred to do the transfer manually by choice. It took a few minutes and everything went very well.&lt;/p&gt;




&lt;h3&gt;
  
  
  What I gain and what I lose leaving GitHub for Codeberg
&lt;/h3&gt;

&lt;h4&gt;
  
  
  What I gain:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Everyday simplicity&lt;/li&gt;
&lt;li&gt;No overload of unused features&lt;/li&gt;
&lt;li&gt;Sovereignty (Codeberg is hosted in Germany by a European non-profit)&lt;/li&gt;
&lt;li&gt;Ethics: no business model based on exploiting your code&lt;/li&gt;
&lt;li&gt;A calmer, cleaner environment, without proprietary tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  What I lose:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Less visibility than on GitHub&lt;/li&gt;
&lt;li&gt;Fewer out-of-the-box tools, but more control over what I add&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Self-hosted Forgejo runner on my personal PC
&lt;/h3&gt;

&lt;p&gt;I decided to self-host my own runner on my personal machine.&lt;/p&gt;

&lt;p&gt;I use the Docker-in-Docker (DinD) strategy: jobs run in a separate Docker daemon, without direct access to my host's Docker socket, which guarantees good isolation for my build environments.&lt;/p&gt;

&lt;p&gt;I made this choice so I don't saturate Codeberg's shared community resources during my testing and deployment phases. Eventually, I will move this runner to a dedicated server so I no longer depend on my desktop PC.&lt;/p&gt;




&lt;h3&gt;
  
  
  Quick note about the demo
&lt;/h3&gt;

&lt;p&gt;I kept the &lt;a href="https://demo.nuxipro.com/" rel="noopener noreferrer"&gt;demo&lt;/a&gt; repository on GitHub for now, because it will very soon be stopped and deleted. Since it was a test version requiring unnecessary maintenance, it will be replaced directly. I will let you know before its final removal.&lt;/p&gt;

</description>
      <category>opensource</category>
    </item>
    <item>
      <title>Building NuxiPro Cloud: What's new</title>
      <dc:creator>S.Babas</dc:creator>
      <pubDate>Wed, 16 Sep 2026 08:01:00 +0000</pubDate>
      <link>https://dev.to/sbabas/building-nuxipro-cloud-whats-new-1bgl</link>
      <guid>https://dev.to/sbabas/building-nuxipro-cloud-whats-new-1bgl</guid>
      <description>&lt;p&gt;I decided to make the Cloud version of NuxiPro secure and minimalist on a day-to-day basis, so I never have to worry about the tool itself, especially since it will store my own personal and professional data.&lt;/p&gt;

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

&lt;p&gt;For now, this version of my project isn't ready or functional enough yet to handle real, critical data in production.&lt;/p&gt;




&lt;h3&gt;
  
  
  My backend tech stack
&lt;/h3&gt;

&lt;p&gt;Here are the technologies I've added to Cloud NuxiPro:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Better Auth&lt;/strong&gt; (for authentication)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drizzle&lt;/strong&gt; (ORM for PostgreSQL)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hono&lt;/strong&gt; (for the backend server)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fractional indexing&lt;/strong&gt; (for managing task position on the Kanban board)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nginx&lt;/strong&gt; (reverse proxy planned in front of the backend before Cloud NuxiPro launches)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; (main backend language)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bun&lt;/strong&gt; (runtime to run the backend)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;date-fns&lt;/strong&gt; (for date handling)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zod / Hono validator&lt;/strong&gt; (for validating incoming and outgoing data)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenObserve&lt;/strong&gt; (for centralized log management)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F14t383hed66vovueiawm.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F14t383hed66vovueiawm.webp" alt="Diagram of my project's overall infrastructure" width="600" height="306"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h4&gt;
  
  
  Why this choice for the backend?
&lt;/h4&gt;

&lt;p&gt;I chose this stack to make NuxiPro efficient, predictable, and to guarantee resilient security. Since I'll be storing my own data there, and I regularly see SaaS products get hacked, I refused to be next on that list. My goal is to build a system where users are safe thanks to a sovereign tool, hosted in Finland with &lt;strong&gt;UpCloud&lt;/strong&gt; (sovereign, performant, and very appealing in terms of price).&lt;/p&gt;

&lt;p&gt;I went with &lt;strong&gt;Hono&lt;/strong&gt; and &lt;strong&gt;Better Auth&lt;/strong&gt; because they're simple to use, highly efficient, and help me build solid security.&lt;/p&gt;

&lt;p&gt;I also integrated &lt;strong&gt;Fractional indexing&lt;/strong&gt; to manage card position on the Kanban board as efficiently as possible. It lets you drag and drop a task between two columns or above another one without having to rewrite the value of every other task. In short, it avoids collisions while keeping things smooth day to day.&lt;/p&gt;

&lt;p&gt;To centralize my logs and handle errors, I use &lt;strong&gt;OpenObserve&lt;/strong&gt;. The goal is to spot and fix crashes very quickly. Even before the Cloud version ships, I'm going to run a battery of intensive tests with the explicit goal of trying to crash the system. That will let me confirm it's truly robust. Of course, that won't rule out 100% of future bugs, but these crash tests will prove the tool's solidity.&lt;/p&gt;




&lt;h3&gt;
  
  
  My frontend tech stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; (for simplicity and type safety)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TanStack Router / Query&lt;/strong&gt; (for handling dynamic pages and state)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React&lt;/strong&gt; (for building the user interface)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zod &amp;amp; React Hook Form&lt;/strong&gt; (for validating form input data)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;shadcn/ui&lt;/strong&gt; (so I don't recreate the interface from scratch and waste time on pointless UI bugs)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tiptap&lt;/strong&gt; (for building the Markdown editor)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;dnd kit&lt;/strong&gt; (for smooth drag &amp;amp; drop in the Kanban board)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bun, Vite &amp;amp; Hono Client&lt;/strong&gt; (for building, bundling, and communicating with the API)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F15vo16antzkjvxk32v4o.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F15vo16antzkjvxk32v4o.webp" alt="Moving task in done column" width="600" height="354"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h4&gt;
  
  
  Why this choice for the frontend?
&lt;/h4&gt;

&lt;p&gt;I chose this stack because it's simple, maintainable over the long run, and built to last several years without becoming obsolete.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why did I choose this overall stack?
&lt;/h3&gt;

&lt;p&gt;I designed this stack mainly to build an efficient, simple daily work tool, free of unnecessary visual noise that wastes time.&lt;/p&gt;

&lt;p&gt;My priority was (and still is) a tool suited to people who work solo. Nowadays, most software keeps piling on features instead of simplifying, which creates friction on a daily basis.&lt;/p&gt;

&lt;p&gt;Being someone very demanding about security, performance, and freedom from bugs, I want my own work tool to be efficient and require zero energy to manage. NuxiPro is here to serve me every day, both in my professional and personal projects.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>architecture</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Sovereignty &amp; Compliance</title>
      <dc:creator>S.Babas</dc:creator>
      <pubDate>Fri, 28 Aug 2026 06:36:00 +0000</pubDate>
      <link>https://dev.to/sbabas/sovereignty-compliance-4cmo</link>
      <guid>https://dev.to/sbabas/sovereignty-compliance-4cmo</guid>
      <description>&lt;p&gt;I am currently focusing on sovereignty and compliance for NuxiPro. My goal is to build a truly helpful, privacy-first tool that respects user data.&lt;/p&gt;

&lt;p&gt;Here is the roadmap I am executing before pushing forward with NuxiPro's cloud version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GDPR Compliance:&lt;/strong&gt; Clearly document data storage locations, processing methods, and third-party sub-processors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Legal Hub:&lt;/strong&gt; Centralize all legal and compliance documents directly on the landing page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GDPR Traceability:&lt;/strong&gt; Implement a strategy to track user consent, permissions, and privacy preferences accurately.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ultimately, my goal is to deliver a sovereign, privacy-respecting, minimalist alternative to Trello.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>security</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Hiding tasks instead of archiving them in their dedicated zone slows down the tool</title>
      <dc:creator>S.Babas</dc:creator>
      <pubDate>Tue, 18 Aug 2026 14:36:47 +0000</pubDate>
      <link>https://dev.to/sbabas/hiding-tasks-instead-of-archiving-them-in-their-dedicated-zone-slows-down-the-tool-ffm</link>
      <guid>https://dev.to/sbabas/hiding-tasks-instead-of-archiving-them-in-their-dedicated-zone-slows-down-the-tool-ffm</guid>
      <description>&lt;p&gt;I tested this approach of hiding completed tasks, similar to what most tools on the market do&lt;/p&gt;

&lt;p&gt;However, I quickly realized that it doesn’t solve the problem of interface clutter. &lt;br&gt;
By simply hiding them, these tasks remain present in the background. &lt;/p&gt;

&lt;p&gt;As soon as you click on "show archives," the interface gets overloaded due to this pseudo-archiving system.&lt;br&gt;
The result? The tool slows down progressively, and the frontend keeps trying to load data that was never actually moved to a dedicated archive zone.&lt;/p&gt;

&lt;p&gt;This is why I created a minimalist Kanban board, stripped of unnecessary features, which truly archives completed tasks by moving them out of the main workflow.&lt;/p&gt;

&lt;p&gt;I am currently building NuxiPro in public, sharing my journey and insights in case they can be helpful.&lt;/p&gt;

&lt;p&gt;Have you ever encountered this slowdown issue in your daily use of productivity tools?&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>frontend</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>First days of NuxiPro's launch on Product Hunt, here's what it revealed</title>
      <dc:creator>S.Babas</dc:creator>
      <pubDate>Thu, 13 Aug 2026 14:01:16 +0000</pubDate>
      <link>https://dev.to/sbabas/first-days-of-nuxipros-launch-on-product-hunt-heres-what-it-revealed-20db</link>
      <guid>https://dev.to/sbabas/first-days-of-nuxipros-launch-on-product-hunt-heres-what-it-revealed-20db</guid>
      <description>&lt;p&gt;NuxiPro is a tool that automatically archives your tasks to stop the "Done" column from turning into a graveyard of completed tasks, freeing up your workspace visually and keeping the tool clean and minimalist, without it trying to load tons of tasks into the Done column and starting to slow down.&lt;/p&gt;

&lt;p&gt;Early in the launch, I quickly noticed that NuxiPro's demo had a barrier to entry: the product tour.&lt;/p&gt;

&lt;p&gt;A product tour is a simple guided walkthrough that shows users, the first time they land on a tool they just discovered, the value of that tool, i.e. what they gain by using it.&lt;/p&gt;

&lt;p&gt;My mistake was leaving the NuxiPro demo raw, with no guide to help users understand the tool and reach their aha moment.&lt;/p&gt;

&lt;p&gt;The result: a user would land on the demo, not know what to do, click around a bit, then close the tab out of frustration and leave without understanding what they stood to gain.&lt;/p&gt;

&lt;p&gt;Even for a product that solves a real, painful problem, if there's no guide helping the user understand what they gained from using it, they just leave.&lt;/p&gt;

&lt;p&gt;How did I spot this problem?&lt;/p&gt;

&lt;p&gt;I integrated &lt;strong&gt;PostHog&lt;/strong&gt; to analyze engagement on the demo and understand the drop-off points. On the security/GDPR side, the &lt;code&gt;maskAllInputs&lt;/code&gt; option is pushed to the max:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="s2"&gt;`posthog.init(token, {
  session_recording: {
        maskAllInputs: true, // Blurs all input fields (inputs/forms)
 },
});`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;My solution was to integrate driver.js, a lightweight library that helps people get their bearings with your product, while guiding them toward the project's main goal.&lt;/p&gt;

&lt;p&gt;My steps were as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;`Start → [1: Hello] → Click "Let's go!"
       → [2: Drag task to DONE] → Drop successful
       → [3: Archives opened] → Close Archives
       → [4: Click waitlist] → Dialog opened → Tour complete`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I need beta testers and feedback on the demo before building the cloud version of NuxiPro.&lt;/p&gt;

&lt;p&gt;I'll give you early access before the official launch, on the day the cloud version is ready.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nuxipro.com/" rel="noopener noreferrer"&gt;nuxipro&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>analytics</category>
      <category>buildinpublic</category>
    </item>
  </channel>
</rss>
