<?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>Forem: szokker</title>
    <description>The latest articles on Forem by szokker (@szokker_8e4b90d9e4e1).</description>
    <link>https://forem.com/szokker_8e4b90d9e4e1</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%2F3779243%2F9f7feeac-4045-427d-ac61-c4dd46daf40a.png</url>
      <title>Forem: szokker</title>
      <link>https://forem.com/szokker_8e4b90d9e4e1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/szokker_8e4b90d9e4e1"/>
    <language>en</language>
    <item>
      <title>I’m Trying to Pay My Car Insurance With an Automated Website</title>
      <dc:creator>szokker</dc:creator>
      <pubDate>Sun, 01 Mar 2026 21:24:58 +0000</pubDate>
      <link>https://forem.com/szokker_8e4b90d9e4e1/im-trying-to-pay-my-car-insurance-with-an-automated-website-51oi</link>
      <guid>https://forem.com/szokker_8e4b90d9e4e1/im-trying-to-pay-my-car-insurance-with-an-automated-website-51oi</guid>
      <description>&lt;p&gt;A few months ago I had a simple idea.&lt;/p&gt;

&lt;p&gt;What if I could build a small technical website that runs mostly on automation… and eventually makes just enough money to cover one monthly expense?&lt;/p&gt;

&lt;p&gt;Not rent.&lt;br&gt;
Not financial freedom.&lt;br&gt;
Just my car insurance.&lt;/p&gt;

&lt;p&gt;€67 per month.&lt;/p&gt;

&lt;p&gt;That’s it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Build Phase&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I started building TutorialsHub as a multilingual technical tutorial site (English, Dutch, French).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;At first it was messy:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Triple-language routing bugs&lt;/li&gt;
&lt;li&gt;Content formatting breaking refresh&lt;/li&gt;
&lt;li&gt;YAML indentation issues&lt;/li&gt;
&lt;li&gt;Search not working&lt;/li&gt;
&lt;li&gt;Language switch not updating content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every fix felt like progress.&lt;/p&gt;

&lt;p&gt;I automated content generation with Python.&lt;br&gt;
Fixed the formatting pipeline.&lt;br&gt;
Structured the folders properly.&lt;br&gt;
Cleaned up the deployment.&lt;/p&gt;

&lt;p&gt;It slowly stopped feeling like a “project” and started feeling like a system.&lt;/p&gt;

&lt;p&gt;The Real Goal&lt;/p&gt;

&lt;p&gt;Not “passive income guru lifestyle”.&lt;/p&gt;

&lt;p&gt;Just this:&lt;/p&gt;

&lt;p&gt;If the site can generate €67/month from ads,&lt;br&gt;
it pays for my car insurance.&lt;/p&gt;

&lt;p&gt;Which means:&lt;/p&gt;

&lt;p&gt;My website pays for a real-world expense.&lt;/p&gt;

&lt;p&gt;Code turns into something tangible.&lt;/p&gt;

&lt;p&gt;The project becomes an asset.&lt;/p&gt;

&lt;p&gt;At an estimated €10 RPM, I need around 6,000–7,000 monthly pageviews.&lt;/p&gt;

&lt;p&gt;That’s not crazy.&lt;br&gt;
That’s achievable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where It Is Now&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. - Multilingual structure works&lt;/li&gt;
&lt;li&gt;2. - Automated publishing works&lt;/li&gt;
&lt;li&gt;3. - SEO slowly kicking in&lt;/li&gt;
&lt;li&gt;4. - Some pages already ranking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now I’m in the polish + distribution phase:&lt;br&gt;
Fix UX.&lt;br&gt;
Improve search.&lt;br&gt;
Engage in communities.&lt;br&gt;
Write better tutorials.&lt;/p&gt;

&lt;p&gt;I’ll update this post when the insurance is officially paid by traffic.&lt;/p&gt;

&lt;p&gt;€67/month.&lt;/p&gt;

&lt;p&gt;That’s the milestone.&lt;/p&gt;

&lt;p&gt;If you’re curious about the journey, want to see how I’m structuring the automation, or just want to follow the experiment — feel free to check it out and give honest feedback.&lt;/p&gt;

&lt;p&gt;And I’m genuinely curious:&lt;/p&gt;

&lt;p&gt;What’s the smallest “real-world expense” you’d like your side project to cover?&lt;/p&gt;

&lt;p&gt;Coffee?&lt;br&gt;
Gym membership?&lt;br&gt;
Hosting costs?&lt;br&gt;
Something bigger?&lt;/p&gt;

&lt;p&gt;Let’s see how many of us are quietly trying to make our code pay for something tangible.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why I Built My Own To-Do App (Even Though There Are Thousands Already)</title>
      <dc:creator>szokker</dc:creator>
      <pubDate>Thu, 26 Feb 2026 09:34:19 +0000</pubDate>
      <link>https://forem.com/szokker_8e4b90d9e4e1/why-i-built-my-own-to-do-app-even-though-there-are-thousands-already-334b</link>
      <guid>https://forem.com/szokker_8e4b90d9e4e1/why-i-built-my-own-to-do-app-even-though-there-are-thousands-already-334b</guid>
      <description>&lt;p&gt;A few months ago I realized something slightly ridiculous. I had more than five different to-do systems and still felt disorganized. I had one app on my phone, another one in the browser, something inside a project management tool, and even a physical notebook that I kept going back to because somehow it felt more reliable than all the digital options combined. Every time I thought “this is the one,” a few weeks later I was switching again.&lt;/p&gt;

&lt;p&gt;The problem wasn’t that these apps were bad. Most of them were polished, feature-rich, and designed by teams of people who clearly understood productivity psychology better than I ever will. They had reminders, syncing, priorities, tags, smart suggestions, statistics, streaks — everything. But none of them actually felt right.&lt;/p&gt;

&lt;p&gt;At some point I realized that I was constantly adapting myself to the app instead of the app adapting to how I think. I was reorganizing tasks because the structure demanded it, not because it made sense to me. I was clicking around features I didn’t even need. It started to feel like I was managing the tool more than managing my work.&lt;/p&gt;

&lt;p&gt;One evening, instead of reorganizing my tasks for the tenth time, I opened my editor and thought: what if I just build the simplest possible to-do app for myself? Not something revolutionary. Not something to compete with the big players. Just something that works exactly the way my brain works.&lt;/p&gt;

&lt;p&gt;No feature overload. No gamification. No “you’ve completed 73% of your weekly productivity goals.” Just tasks. Simple, clear, structured in a way that makes sense to me.&lt;/p&gt;

&lt;p&gt;That’s how I ended up building my own to-do app with React.&lt;/p&gt;

&lt;p&gt;It wasn’t about proving anything. It wasn’t about launching the next startup idea. It was more like reclaiming control. When you build your own tool, every decision has a reason. If something feels unnecessary, you remove it. If something feels missing, you add it. There’s no friction between you and the system because you are the one designing it.&lt;/p&gt;

&lt;p&gt;The interesting part is that building it actually helped me more than using it. It forced me to think about how I prioritize tasks, how I break down bigger ideas, how I move things from “I should do this” to “this is done.” It became less about having a to-do list and more about understanding how I structure my work.&lt;/p&gt;

&lt;p&gt;And there’s something satisfying about using something you built yourself. Even if it’s simple. Especially if it’s simple. It doesn’t feel like just another app. It feels like your own system.&lt;/p&gt;

&lt;p&gt;I documented the whole process of building it, the structure, the thinking behind it, and how it evolved. &lt;a href="https://www.tutorialshub.be/en/building-a-to-do-app-with-react/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=todo_story" rel="noopener noreferrer"&gt;If you’re curious, you can see the full progress here:&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The Day Docker Refused to Start My Website (And Why It Was My Fault)</title>
      <dc:creator>szokker</dc:creator>
      <pubDate>Sun, 22 Feb 2026 14:16:43 +0000</pubDate>
      <link>https://forem.com/szokker_8e4b90d9e4e1/the-day-docker-refused-to-start-my-website-and-why-it-was-my-fault-26ng</link>
      <guid>https://forem.com/szokker_8e4b90d9e4e1/the-day-docker-refused-to-start-my-website-and-why-it-was-my-fault-26ng</guid>
      <description>&lt;p&gt;A few weeks ago, everything was running perfectly.&lt;br&gt;
My tutorial site was fully automated.&lt;br&gt;
Every morning:&lt;br&gt;
Content generated&lt;br&gt;
Astro built the static files&lt;br&gt;
Docker restarted NGINX&lt;br&gt;
The new version went live&lt;br&gt;
It felt clean. Controlled. Professional.&lt;br&gt;
Then one restart killed the entire site.&lt;br&gt;
No warning.&lt;br&gt;
No partial failure.&lt;br&gt;
Just… dead.&lt;br&gt;
The Error&lt;br&gt;
Docker wouldn’t start the NGINX container.&lt;br&gt;
The only message:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Bind mount failed: '/volume1/docker/tutorialshub/dist' does not exist&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That was it.&lt;br&gt;
No stack trace.&lt;br&gt;
No helpful explanation.&lt;br&gt;
Just refusal.&lt;br&gt;
And the site was offline.&lt;br&gt;
My First Thought: “Docker is Broken.”&lt;br&gt;
I checked:&lt;br&gt;
docker-compose.yml&lt;br&gt;
NGINX config&lt;br&gt;
Port mappings&lt;br&gt;
Permissions&lt;br&gt;
Everything looked correct.&lt;br&gt;
The volume mapping was simple:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;./dist:/usr/share/nginx/html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This had been working for weeks.&lt;br&gt;
So what changed?&lt;br&gt;
The Missing Folder&lt;br&gt;
I SSH’d into my Synology NAS and navigated to:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/volume1/docker/tutorialshub/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;There was no dist folder.&lt;br&gt;
And suddenly everything made sense.&lt;br&gt;
Astro generates /dist during build.&lt;br&gt;
No build → no folder.&lt;br&gt;
No folder → Docker refuses to mount it.&lt;br&gt;
Docker wasn’t broken.&lt;br&gt;
It was protecting me.&lt;br&gt;
The Real Problem: Deployment Order&lt;br&gt;
Here’s what happened:&lt;br&gt;
I triggered a container restart&lt;br&gt;
The build step hadn’t completed&lt;br&gt;
/dist didn’t exist&lt;br&gt;
Docker tried to mount it&lt;br&gt;
Docker aborted startup&lt;br&gt;
Static sites look simple.&lt;br&gt;
But they depend entirely on build artifacts.&lt;br&gt;
If your artifact doesn’t exist,&lt;br&gt;
your “application” doesn’t exist.&lt;br&gt;
Why Docker Refuses Missing Paths&lt;br&gt;
I learned something important that day.&lt;br&gt;
Docker bind mounts are strict by design.&lt;br&gt;
If you use a bind mount:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;./dist:/usr/share/nginx/html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Docker assumes:&lt;br&gt;
“You, the operator, guarantee that this path exists.”&lt;br&gt;
If it doesn’t, Docker fails immediately.&lt;br&gt;
It doesn’t auto-create.&lt;br&gt;
It doesn’t guess.&lt;br&gt;
It doesn’t forgive.&lt;br&gt;
And honestly — that’s good.&lt;br&gt;
Because silent failures are worse.&lt;br&gt;
The Fix (And the Embarrassment)&lt;br&gt;
The solution was painfully simple.&lt;br&gt;
Run the build first.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run build&lt;br&gt;
docker-compose down&lt;br&gt;
docker-compose up -d&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That’s it.&lt;br&gt;
But the lesson wasn’t about the command.&lt;br&gt;
It was about architecture.&lt;br&gt;
Static Sites Shift Complexity&lt;br&gt;
We love static sites because:&lt;br&gt;
No backend&lt;br&gt;
No runtime logic&lt;br&gt;
No database&lt;br&gt;
Fast performance&lt;br&gt;
But static doesn’t remove complexity.&lt;br&gt;
It shifts it.&lt;br&gt;
From runtime → to deployment time.&lt;br&gt;
Your build artifact becomes your application.&lt;br&gt;
If you mishandle that artifact,&lt;br&gt;
everything breaks instantly.&lt;br&gt;
The SEO Side Effect&lt;br&gt;
While the container was failing:&lt;br&gt;
Pages returned 404&lt;br&gt;
Sitemap became inaccessible&lt;br&gt;
Google Search Console stalled indexing&lt;br&gt;
Infrastructure stability isn’t just DevOps vanity.&lt;br&gt;
It directly affects SEO trust.&lt;br&gt;
That was an unexpected lesson.&lt;br&gt;
What I Changed After&lt;br&gt;
I stopped relying on manual sequencing.&lt;br&gt;
Instead of:&lt;br&gt;
Build → Restart → Hope&lt;br&gt;
I added validation.&lt;br&gt;
Now my deploy script:&lt;br&gt;
Builds&lt;br&gt;
Verifies /dist exists&lt;br&gt;
Only then restarts containers&lt;br&gt;
I’m also experimenting with a multi-stage Docker build&lt;br&gt;
to remove bind mounts completely.&lt;br&gt;
Because the cleanest solution is:&lt;br&gt;
No filesystem dependency at all.&lt;br&gt;
What This Taught Me&lt;br&gt;
Self-hosting teaches you fast.&lt;br&gt;
Docker isn’t “magic.”&lt;br&gt;
Static sites aren’t “simple.”&lt;br&gt;
Automation hides fragility.&lt;br&gt;
But failures like this are valuable.&lt;br&gt;
Because they expose architectural weaknesses.&lt;br&gt;
And once you see them,&lt;br&gt;
you can design better systems.&lt;br&gt;
If you're containerizing static frameworks like Astro,&lt;br&gt;
double-check your build artifacts before restarting anything.&lt;br&gt;
That one missing folder cost me an afternoon —&lt;br&gt;
and temporarily killed my site.&lt;br&gt;
Lesson learned.&lt;br&gt;
If there’s interest, I can write a deeper technical breakdown of the deployment architecture and the improvements I’m implementing next.&lt;br&gt;
&lt;a href="https://www.tutorialshub.be/en/docker-bind-mount-failure-astro-multilingual-deployment/?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=docker_bind_mount_story" rel="noopener noreferrer"&gt;The full technical write-up is here:&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>selfhosted</category>
      <category>automation</category>
      <category>docker</category>
    </item>
    <item>
      <title>How I Built an Advanced SQL Tutorial — and Self-Hosted It on My Own NAS</title>
      <dc:creator>szokker</dc:creator>
      <pubDate>Fri, 20 Feb 2026 11:01:12 +0000</pubDate>
      <link>https://forem.com/szokker_8e4b90d9e4e1/how-i-built-an-advanced-sql-tutorial-and-self-hosted-it-on-my-own-nas-20ge</link>
      <guid>https://forem.com/szokker_8e4b90d9e4e1/how-i-built-an-advanced-sql-tutorial-and-self-hosted-it-on-my-own-nas-20ge</guid>
      <description>&lt;p&gt;A few days ago I ran into a small frustration.&lt;/p&gt;

&lt;p&gt;There are tons of beginner SQL tutorials online…&lt;br&gt;
But when it comes to real-world, advanced queries used for data analysis, things get vague fast.&lt;/p&gt;

&lt;p&gt;So I decided to write one myself.&lt;/p&gt;

&lt;p&gt;Not on Medium.&lt;br&gt;
Not just here on Dev.to.&lt;/p&gt;

&lt;p&gt;But on a static site I built and host entirely from my own NAS.&lt;/p&gt;

&lt;p&gt;🧠 The Goal&lt;/p&gt;

&lt;p&gt;I wanted to create a tutorial that covers:&lt;/p&gt;

&lt;p&gt;Multi-table JOIN strategies&lt;/p&gt;

&lt;p&gt;Window functions&lt;/p&gt;

&lt;p&gt;Conditional aggregations with CASE&lt;/p&gt;

&lt;p&gt;Common Table Expressions (CTEs)&lt;/p&gt;

&lt;p&gt;Practical data-analysis style queries&lt;/p&gt;

&lt;p&gt;Something useful for people who already know SQL basics — and want to level up.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.tutorialshub.be/tutorials/advanced-sql-queries-for-data-analysis/?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=advanced_sql_story_1" rel="noopener noreferrer"&gt;Here is the tutorial&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🛠 Why I Self-Hosted It&lt;/p&gt;

&lt;p&gt;Instead of publishing only on big platforms, I built my own stack:&lt;/p&gt;

&lt;p&gt;Astro (static site generator)&lt;/p&gt;

&lt;p&gt;Docker&lt;/p&gt;

&lt;p&gt;Nginx&lt;/p&gt;

&lt;p&gt;Nginx Proxy Manager&lt;/p&gt;

&lt;p&gt;Everything running on my Synology NAS&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because I wanted:&lt;/p&gt;

&lt;p&gt;Full control&lt;/p&gt;

&lt;p&gt;No dependency on external CI services&lt;/p&gt;

&lt;p&gt;Automated rebuilds&lt;/p&gt;

&lt;p&gt;Zero-downtime static deployment&lt;/p&gt;

&lt;p&gt;A playground to learn real infrastructure&lt;/p&gt;

&lt;p&gt;It turned into a fun DevOps + content hybrid project.&lt;/p&gt;

&lt;p&gt;📊 Unexpected Bonus&lt;/p&gt;

&lt;p&gt;After publ&lt;a href="https://dev.tourl"&gt;&lt;/a&gt;ishing, I started seeing:&lt;/p&gt;

&lt;p&gt;Google Search Console impressions&lt;/p&gt;

&lt;p&gt;Reddit traffic&lt;/p&gt;

&lt;p&gt;Organic indexing beginning&lt;/p&gt;

&lt;p&gt;Which is pretty motivating when you're running everything from your own hardware.&lt;/p&gt;

&lt;p&gt;🔥 What You’ll Actually Learn In The Tutorial&lt;/p&gt;

&lt;p&gt;This isn’t theory-heavy.&lt;/p&gt;

&lt;p&gt;It walks through:&lt;/p&gt;

&lt;p&gt;Complex analytical queries&lt;/p&gt;

&lt;p&gt;Real aggregation patterns&lt;/p&gt;

&lt;p&gt;SQL techniques used in reporting and dashboards&lt;/p&gt;

&lt;p&gt;Clean examples you can run on any relational database&lt;/p&gt;

&lt;p&gt;If you're into SQL for analytics, this might be useful.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.tutorialshub.be/tutorials/advanced-sql-queries-for-data-analysis/?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=advanced_sql_story_1" rel="noopener noreferrer"&gt;Here it is again:&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💬 Feedback Welcome&lt;/p&gt;

&lt;p&gt;I’m continuously improving both the content and the infrastructure behind it.&lt;/p&gt;

&lt;p&gt;If you’re into:&lt;/p&gt;

&lt;p&gt;SQL&lt;/p&gt;

&lt;p&gt;Self-hosting&lt;/p&gt;

&lt;p&gt;Docker&lt;/p&gt;

&lt;p&gt;Static site automation&lt;/p&gt;

&lt;p&gt;Or just building things from scratch&lt;/p&gt;

&lt;p&gt;I’d love to hear your thoughts.&lt;/p&gt;

&lt;p&gt;What advanced topic should I cover next?&lt;/p&gt;

</description>
      <category>sql</category>
      <category>tutorial</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>I Automated My Synology NAS to Generate and Deploy Tutorials Daily</title>
      <dc:creator>szokker</dc:creator>
      <pubDate>Thu, 19 Feb 2026 10:26:01 +0000</pubDate>
      <link>https://forem.com/szokker_8e4b90d9e4e1/i-automated-my-synology-nas-to-generate-and-deploy-tutorials-daily-1pff</link>
      <guid>https://forem.com/szokker_8e4b90d9e4e1/i-automated-my-synology-nas-to-generate-and-deploy-tutorials-daily-1pff</guid>
      <description>&lt;p&gt;A few weeks ago I started building a small tutorial website.&lt;/p&gt;

&lt;p&gt;At first, everything was manual:&lt;/p&gt;

&lt;p&gt;Write content&lt;/p&gt;

&lt;p&gt;Add markdown&lt;/p&gt;

&lt;p&gt;Run build&lt;/p&gt;

&lt;p&gt;Restart container&lt;/p&gt;

&lt;p&gt;It worked… but it was boring.&lt;/p&gt;

&lt;p&gt;So I automated the entire pipeline on my Synology NAS.&lt;/p&gt;

&lt;p&gt;Now every morning:&lt;/p&gt;

&lt;p&gt;A Python script generates new content&lt;/p&gt;

&lt;p&gt;The content is validated&lt;/p&gt;

&lt;p&gt;Astro rebuilds the site inside Docker&lt;/p&gt;

&lt;p&gt;Nginx restarts&lt;/p&gt;

&lt;p&gt;The updated site goes live automatically&lt;/p&gt;

&lt;p&gt;All without me touching anything.&lt;/p&gt;

&lt;p&gt;🏗 My Stack&lt;/p&gt;

&lt;p&gt;Synology NAS&lt;/p&gt;

&lt;p&gt;Docker + Docker Compose&lt;/p&gt;

&lt;p&gt;Astro (static site)&lt;/p&gt;

&lt;p&gt;Python automation scripts&lt;/p&gt;

&lt;p&gt;Scheduled tasks (cron-like)&lt;/p&gt;

&lt;p&gt;🔄 The Automation Flow&lt;/p&gt;

&lt;p&gt;Here’s the simplified flow:&lt;/p&gt;

&lt;p&gt;Scheduled task runs every morning&lt;/p&gt;

&lt;p&gt;Python script generates tutorials&lt;/p&gt;

&lt;p&gt;Script validates output&lt;/p&gt;

&lt;p&gt;Docker Compose runs Astro build&lt;/p&gt;

&lt;p&gt;Nginx container restarts&lt;/p&gt;

&lt;p&gt;New content is live&lt;/p&gt;

&lt;p&gt;The rebuild takes ~1 minute.&lt;/p&gt;

&lt;p&gt;The old version of the site keeps running until the container restarts, so there’s no downtime.&lt;/p&gt;

&lt;p&gt;🧠 Why I Built It&lt;/p&gt;

&lt;p&gt;Two reasons:&lt;/p&gt;

&lt;p&gt;I wanted to learn more about automation in a real environment.&lt;/p&gt;

&lt;p&gt;I wanted a self-maintaining content system.&lt;/p&gt;

&lt;p&gt;It’s basically a mini CI/CD pipeline running on a NAS.&lt;/p&gt;

&lt;p&gt;⚙️ The Rebuild Script&lt;/p&gt;

&lt;p&gt;For those interested, this is the rebuild part:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;#!/bin/bash&lt;br&gt;
cd /volume1/docker/tutorialshub || exit 1&lt;br&gt;
/usr/local/bin/docker compose run --rm astro-builder&lt;br&gt;
/usr/local/bin/docker restart astro-nginx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Simple, but effective.&lt;/p&gt;

&lt;p&gt;📈 What I Learned&lt;/p&gt;

&lt;p&gt;Self-hosting forces you to understand your stack.&lt;/p&gt;

&lt;p&gt;Automation saves mental energy.&lt;/p&gt;

&lt;p&gt;Small systems compound over time.&lt;/p&gt;

&lt;p&gt;Build in public works — I shared the setup on Reddit and it sparked interesting discussions.&lt;/p&gt;

&lt;p&gt;I’m continuing to iterate on this system.&lt;/p&gt;

&lt;p&gt;If there’s interest, I can write a deeper technical breakdown of the content generation + validation layer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wwww.tutorialshub.be" rel="noopener noreferrer"&gt;The project is live at tutorialshub.be if anyone’s curious.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>selfhosted</category>
      <category>docker</category>
      <category>automation</category>
      <category>webdev</category>
    </item>
    <item>
      <title>7 ES6 Features Every JavaScript Developer Should Know</title>
      <dc:creator>szokker</dc:creator>
      <pubDate>Wed, 18 Feb 2026 10:33:04 +0000</pubDate>
      <link>https://forem.com/szokker_8e4b90d9e4e1/7-es6-features-every-javascript-developer-should-know-3d5b</link>
      <guid>https://forem.com/szokker_8e4b90d9e4e1/7-es6-features-every-javascript-developer-should-know-3d5b</guid>
      <description>&lt;p&gt;ES6 completely changed how we write JavaScript.&lt;/p&gt;

&lt;p&gt;If you’re still using var everywhere… this is for you.&lt;/p&gt;

&lt;p&gt;Here are 7 essential ES6 features you should master.&lt;/p&gt;

&lt;p&gt;1️⃣ let &amp;amp; const&lt;/p&gt;

&lt;p&gt;&lt;code&gt;let name = "John";&lt;br&gt;
const pi = 3.14;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Block-scoped and safer than var.&lt;/p&gt;

&lt;p&gt;2️⃣ Arrow Functions&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const add = (a, b) =&amp;gt; a + b;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Shorter syntax + lexical this.&lt;/p&gt;

&lt;p&gt;3️⃣ Template Literals&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const greeting =&lt;/code&gt;Hello ${name}&lt;code&gt;;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Clean string interpolation.&lt;/p&gt;

&lt;p&gt;4️⃣ Destructuring&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const { name, age } = person;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Cleaner object handling.&lt;/p&gt;

&lt;p&gt;5️⃣ Default Parameters&lt;/p&gt;

&lt;p&gt;&lt;code&gt;function multiply(a, b = 1) {}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;6️⃣ Spread / Rest&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const newArray = [...oldArray];&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;7️⃣ Classes&lt;/p&gt;

&lt;p&gt;&lt;code&gt;class Dog extends Animal {}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;🎯 Why ES6 Matters&lt;/p&gt;

&lt;p&gt;Cleaner code&lt;/p&gt;

&lt;p&gt;Less boilerplate&lt;/p&gt;

&lt;p&gt;Modern patterns&lt;/p&gt;

&lt;p&gt;Industry standard&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.tutorialshub.be/tutorials/javascript-es6-moderne-features-helder-uitgelegd/" rel="noopener noreferrer"&gt;👉 Full detailed explanation with examples here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
      <category>es6</category>
    </item>
    <item>
      <title>Getting Started With Docker: Run Your First Container in 5 Minutes</title>
      <dc:creator>szokker</dc:creator>
      <pubDate>Wed, 18 Feb 2026 10:27:05 +0000</pubDate>
      <link>https://forem.com/szokker_8e4b90d9e4e1/getting-started-with-docker-run-your-first-container-in-5-minutes-468b</link>
      <guid>https://forem.com/szokker_8e4b90d9e4e1/getting-started-with-docker-run-your-first-container-in-5-minutes-468b</guid>
      <description>&lt;p&gt;If you’ve heard about Docker but never actually used it, this is your starting point.&lt;/p&gt;

&lt;p&gt;Let’s run your first container in under 5 minutes.&lt;/p&gt;

&lt;p&gt;No fluff.&lt;/p&gt;

&lt;p&gt;🐳 What Is Docker?&lt;/p&gt;

&lt;p&gt;Docker lets you package applications into containers so they run the same everywhere.&lt;/p&gt;

&lt;p&gt;No more:&lt;/p&gt;

&lt;p&gt;“It works on my machine.”&lt;/p&gt;

&lt;p&gt;🛠 Step 1: Install Docker&lt;/p&gt;

&lt;p&gt;Download Docker Desktop from docker.com.&lt;/p&gt;

&lt;p&gt;After installation, check:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker --version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you see a version number → you’re good.&lt;/p&gt;

&lt;p&gt;🚀 Step 2: Run Your First Container&lt;/p&gt;

&lt;p&gt;Pull and run the hello-world image:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker pull hello-world&lt;br&gt;
docker run hello-world&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you see a success message → Docker works.&lt;br&gt;
📦 Useful Beginner Commands&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker ps&lt;br&gt;
docker ps -a&lt;br&gt;
docker stop &amp;lt;container_id&amp;gt;&lt;br&gt;
docker rm &amp;lt;container_id&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;These let you manage containers.&lt;/p&gt;

&lt;p&gt;🧠 Why This Matters&lt;/p&gt;

&lt;p&gt;Once you understand this:&lt;/p&gt;

&lt;p&gt;You can run databases locally&lt;/p&gt;

&lt;p&gt;Test apps in isolation&lt;/p&gt;

&lt;p&gt;Deploy projects consistently&lt;/p&gt;

&lt;p&gt;Build real DevOps skills&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.tutorialshub.be/tutorials/getting-started-with-docker/" rel="noopener noreferrer"&gt;👉 I wrote the full beginner walkthrough here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>CSS Flexbox for Beginners: Build Responsive Layouts the Easy Way</title>
      <dc:creator>szokker</dc:creator>
      <pubDate>Wed, 18 Feb 2026 10:23:41 +0000</pubDate>
      <link>https://forem.com/szokker_8e4b90d9e4e1/css-flexbox-for-beginners-build-responsive-layouts-the-easy-way-3hfo</link>
      <guid>https://forem.com/szokker_8e4b90d9e4e1/css-flexbox-for-beginners-build-responsive-layouts-the-easy-way-3hfo</guid>
      <description>&lt;p&gt;f you're just starting with CSS layouts, Flexbox might look confusing at first.&lt;/p&gt;

&lt;p&gt;But once it clicks… it REALLY clicks.&lt;/p&gt;

&lt;p&gt;In this guide, I’ll walk you step-by-step through building a simple responsive layout using Flexbox — without overcomplicating things.&lt;/p&gt;

&lt;p&gt;🚀 Why Use Flexbox?&lt;/p&gt;

&lt;p&gt;Flexbox makes it easy to:&lt;/p&gt;

&lt;p&gt;Center elements (finally!)&lt;/p&gt;

&lt;p&gt;Distribute space evenly&lt;/p&gt;

&lt;p&gt;Build responsive layouts&lt;/p&gt;

&lt;p&gt;Align items vertically and horizontally&lt;/p&gt;

&lt;p&gt;And you don’t need complicated positioning hacks.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;div class="flex-container"&amp;gt;&lt;br&gt;
  &amp;lt;div class="flex-item"&amp;gt;Item 1&amp;lt;/div&amp;gt;&lt;br&gt;
  &amp;lt;div class="flex-item"&amp;gt;Item 2&amp;lt;/div&amp;gt;&lt;br&gt;
  &amp;lt;div class="flex-item"&amp;gt;Item 3&amp;lt;/div&amp;gt;&lt;br&gt;
&amp;lt;/div&amp;gt;&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Simple container + children. That’s it.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.flex-container {&lt;br&gt;
  display: flex;&lt;br&gt;
  justify-content: center;&lt;br&gt;
  align-items: center;&lt;br&gt;
  height: 100vh;&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Each item now grows equally.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;@media (max-width: 600px) {&lt;br&gt;
  .flex-container {&lt;br&gt;
    flex-direction: column;&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;On smaller screens → items stack vertically.&lt;/p&gt;

&lt;p&gt;That’s the magic.&lt;/p&gt;

&lt;p&gt;💡 Common Mistakes&lt;/p&gt;

&lt;p&gt;Forgetting display: flex&lt;/p&gt;

&lt;p&gt;Confusing justify-content and align-items&lt;/p&gt;

&lt;p&gt;Not using flex: 1 when needed&lt;/p&gt;

&lt;p&gt;🔥 Final Thoughts&lt;/p&gt;

&lt;p&gt;Flexbox removes 80% of layout headaches.&lt;/p&gt;

&lt;p&gt;If you're learning CSS, mastering Flexbox is non-negotiable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.tutorialshub.be/tutorials/css-flexbox-basics-for-responsive-layouts/" rel="noopener noreferrer"&gt;👉 I wrote a more detailed version with troubleshooting examples here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>webdev</category>
      <category>frontend</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
