<?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: Alvarito1983</title>
    <description>The latest articles on Forem by Alvarito1983 (@alvarito1983).</description>
    <link>https://forem.com/alvarito1983</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%2F3858088%2Fa0fbc217-d69f-4570-b98d-c85a5e01ed1d.png</url>
      <title>Forem: Alvarito1983</title>
      <link>https://forem.com/alvarito1983</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/alvarito1983"/>
    <language>en</language>
    <item>
      <title>Claude Code: The Complete Guide from Zero to Autonomous Development</title>
      <dc:creator>Alvarito1983</dc:creator>
      <pubDate>Tue, 07 Apr 2026 09:15:58 +0000</pubDate>
      <link>https://forem.com/alvarito1983/claude-code-the-complete-guide-from-zero-to-autonomous-development-2fk</link>
      <guid>https://forem.com/alvarito1983/claude-code-the-complete-guide-from-zero-to-autonomous-development-2fk</guid>
      <description>&lt;p&gt;Claude Code is not a code editor plugin. It's not a chatbot you paste code into. It's an autonomous agent that lives in your terminal, reads your entire codebase, plans multi-step work, executes it, checks the results, and fixes what breaks.&lt;/p&gt;

&lt;p&gt;This guide covers everything: what it is, how it thinks, how to set it up, and how to use it at a level most developers haven't reached yet.&lt;/p&gt;




&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;What Claude Code actually is&lt;/li&gt;
&lt;li&gt;How it works under the hood&lt;/li&gt;
&lt;li&gt;Installation and setup&lt;/li&gt;
&lt;li&gt;The CLAUDE.md file — your most important tool&lt;/li&gt;
&lt;li&gt;Writing prompts that work&lt;/li&gt;
&lt;li&gt;Phase-based development&lt;/li&gt;
&lt;li&gt;Slash commands and shortcuts&lt;/li&gt;
&lt;li&gt;What Claude Code can and cannot do&lt;/li&gt;
&lt;li&gt;Workflow patterns that scale&lt;/li&gt;
&lt;li&gt;Common mistakes and how to avoid them&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  1. What Claude Code actually is
&lt;/h2&gt;

&lt;p&gt;Most AI coding tools work like this: you write a prompt, you get code back, you copy it somewhere.&lt;/p&gt;

&lt;p&gt;Claude Code works differently. It has direct access to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your file system (read and write)&lt;/li&gt;
&lt;li&gt;Your terminal (execute bash commands)&lt;/li&gt;
&lt;li&gt;Your project structure (it reads everything before acting)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you give it a task, it doesn't guess at your codebase. It reads the relevant files first, builds a mental model of what exists, then acts. It can create files, edit files, run builds, check logs, install packages, and verify its own output.&lt;/p&gt;

&lt;p&gt;The mental model shift: stop thinking of it as a code generator. Think of it as a developer you can delegate to.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. How it thinks
&lt;/h2&gt;

&lt;p&gt;Claude Code follows a loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Read context (files, structure, your CLAUDE.md)
2. Plan the approach
3. Execute step by step
4. Verify output
5. Fix problems it finds
6. Report back
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This loop runs autonomously. It doesn't wait for you to approve each file. It moves forward, and if something fails (a build error, a missing dependency, a broken import), it diagnoses and fixes it.&lt;/p&gt;

&lt;p&gt;The implication: your job is to set context well at the start, then review the result at the end. Not to supervise every step.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Installation and setup
&lt;/h2&gt;

&lt;p&gt;Claude Code runs as a CLI tool. Install it via npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @anthropic-ai/claude-code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Authenticate with your Anthropic account:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This opens a browser for OAuth. Once authenticated, you're ready.&lt;/p&gt;

&lt;p&gt;To start a session in your project:&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="nb"&gt;cd &lt;/span&gt;your-project
claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Claude Code will read your project structure on first use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Platform notes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;macOS/Linux: works natively&lt;/li&gt;
&lt;li&gt;Windows: use PowerShell or CMD. Note that &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; chaining doesn't work in PowerShell — Claude Code knows this and uses separate commands automatically&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. The CLAUDE.md file — your most important tool
&lt;/h2&gt;

&lt;p&gt;This is the single highest-leverage thing you can do. A &lt;code&gt;CLAUDE.md&lt;/code&gt; file at the root of your project is read automatically at the start of every session. It's your persistent context.&lt;/p&gt;

&lt;p&gt;Without it: Claude Code reads your code and makes reasonable guesses about conventions, stack, and intent.&lt;/p&gt;

&lt;p&gt;With it: Claude Code knows exactly what you're building, how it's structured, what decisions you've already made, and what rules to follow.&lt;/p&gt;

&lt;h3&gt;
  
  
  What to put in CLAUDE.md
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Project name and purpose&lt;/span&gt;
Brief description of what this is and what it does.

&lt;span class="gu"&gt;## Tech stack&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Framework: React 18 + Vite
&lt;span class="p"&gt;-&lt;/span&gt; Backend: Node.js + Express
&lt;span class="p"&gt;-&lt;/span&gt; Styling: CSS custom properties (no Tailwind)
&lt;span class="p"&gt;-&lt;/span&gt; Icons: Lucide React
&lt;span class="p"&gt;-&lt;/span&gt; Auth: JWT

&lt;span class="gu"&gt;## Architecture&lt;/span&gt;
Explain the key structural decisions. What talks to what.
Where the main files live. How modules are organized.

&lt;span class="gu"&gt;## Conventions&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; One component per file
&lt;span class="p"&gt;-&lt;/span&gt; No inline styles — use CSS variables
&lt;span class="p"&gt;-&lt;/span&gt; All API routes under /api/
&lt;span class="p"&gt;-&lt;/span&gt; Error responses always { error: string }

&lt;span class="gu"&gt;## Design system (if applicable)&lt;/span&gt;
Color tokens, spacing rules, typography scale.
The more specific, the better the UI output.

&lt;span class="gu"&gt;## Infrastructure&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Dev path: /your/local/path
&lt;span class="p"&gt;-&lt;/span&gt; Production: where it runs
&lt;span class="p"&gt;-&lt;/span&gt; Ports: which service runs where
&lt;span class="p"&gt;-&lt;/span&gt; CI/CD: how deploys work

&lt;span class="gu"&gt;## Known issues / current state&lt;/span&gt;
What's in progress. What's broken. What to avoid.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Initialize it automatically
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude
/init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This generates a starter CLAUDE.md from your existing project. Edit and expand it — the generated version is a starting point, not a finished document.&lt;/p&gt;

&lt;h3&gt;
  
  
  CLAUDE.md at multiple levels
&lt;/h3&gt;

&lt;p&gt;You can have CLAUDE.md files at different levels:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;your-project/
  CLAUDE.md          ← root: ecosystem-wide context
  service-a/
    CLAUDE.md        ← service-specific context
  service-b/
    CLAUDE.md        ← service-specific context
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude Code reads both — root first, then the most specific one for the files it's working in.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Writing prompts that work
&lt;/h2&gt;

&lt;p&gt;The quality of Claude Code's output is directly proportional to the quality of your prompt. Here's the difference:&lt;/p&gt;

&lt;h3&gt;
  
  
  Weak prompt
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add authentication to the app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works, but the result will be generic. Claude Code will make decisions you'd probably make differently.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strong prompt
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add JWT authentication to the Express backend following the existing 
pattern in src/routes/users.js. 

The middleware should:
- Verify the token from the Authorization: Bearer header
- Attach req.user with { id, username, role }
- Return 401 { error: 'Unauthorized' } if invalid
- Skip auth for POST /api/auth/login and GET /health

Add the middleware to all routes in src/routes/ except auth.js.
Do not change the existing token generation logic.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same task. Completely different output.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key principles
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Reference specific files.&lt;/strong&gt; "Follow the pattern in &lt;code&gt;src/services/docker.js&lt;/code&gt;" is worth more than "follow existing patterns".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;State what not to do.&lt;/strong&gt; "Do not modify the database schema" or "do not change the auth flow" prevents unwanted side effects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specify the output format.&lt;/strong&gt; If you want a specific response structure, API contract, or file layout — say so explicitly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ask for analysis first.&lt;/strong&gt; For complex tasks, start with: "Read these files and tell me what you find before writing any code". This catches misunderstandings before they become wrong code.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Phase-based development
&lt;/h2&gt;

&lt;p&gt;For large tasks, break the work into numbered phases. This is the pattern that makes Claude Code genuinely powerful for complex projects.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## PHASE 1 — Analysis (no code yet)&lt;/span&gt;
Read and understand:
&lt;span class="p"&gt;-&lt;/span&gt; src/backend/server.js
&lt;span class="p"&gt;-&lt;/span&gt; src/backend/src/routes/ (all files)
&lt;span class="p"&gt;-&lt;/span&gt; src/frontend/src/App.jsx

Identify and report:
&lt;span class="p"&gt;1.&lt;/span&gt; How authentication currently works
&lt;span class="p"&gt;2.&lt;/span&gt; What routes exist and their patterns
&lt;span class="p"&gt;3.&lt;/span&gt; Any inconsistencies or potential conflicts

Do not write any code until you've reported your findings.

&lt;span class="gu"&gt;## PHASE 2 — Backend changes&lt;/span&gt;
[detailed instructions]

&lt;span class="gu"&gt;## PHASE 3 — Frontend changes  &lt;/span&gt;
[detailed instructions]

&lt;span class="gu"&gt;## PHASE 4 — Tests and verification&lt;/span&gt;
[what to check]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why this works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phase 1 forces analysis before action. You catch wrong assumptions early.&lt;/li&gt;
&lt;li&gt;Numbered phases give Claude Code a clear structure to follow.&lt;/li&gt;
&lt;li&gt;You can pause between phases to review.&lt;/li&gt;
&lt;li&gt;If something goes wrong in Phase 2, Phases 3 and 4 haven't been touched.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Slash commands and shortcuts
&lt;/h2&gt;

&lt;p&gt;Claude Code has built-in commands you can use mid-session:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/init          &lt;span class="c"&gt;# Generate CLAUDE.md from your project&lt;/span&gt;
/clear         &lt;span class="c"&gt;# Clear conversation context (start fresh)&lt;/span&gt;
/compact       &lt;span class="c"&gt;# Summarize conversation to save context space&lt;/span&gt;
/cost          &lt;span class="c"&gt;# Show token usage for the current session&lt;/span&gt;
/help          &lt;span class="c"&gt;# List all available commands&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;Ctrl+C&lt;/code&gt; behavior: pressing once interrupts the current action. Claude Code stops, tells you what it was doing, and waits. You can then redirect or continue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The &lt;code&gt;--print&lt;/code&gt; flag&lt;/strong&gt; — useful for scripting:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude &lt;span class="nt"&gt;--print&lt;/span&gt; &lt;span class="s2"&gt;"What does this function do?"&lt;/span&gt; &amp;lt; src/utils/parser.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Outputs directly to stdout, no interactive session needed.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. What Claude Code can and cannot do
&lt;/h2&gt;

&lt;h3&gt;
  
  
  It can
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Read and write any file in your project&lt;/li&gt;
&lt;li&gt;Run bash commands (builds, tests, installs, docker commands)&lt;/li&gt;
&lt;li&gt;Fix its own errors when a build fails&lt;/li&gt;
&lt;li&gt;Work across multiple files and services simultaneously&lt;/li&gt;
&lt;li&gt;Remember context within a session&lt;/li&gt;
&lt;li&gt;Follow complex multi-step instructions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  It cannot
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Remember anything between sessions (CLAUDE.md solves this)&lt;/li&gt;
&lt;li&gt;Access the internet during a task&lt;/li&gt;
&lt;li&gt;Start system processes it doesn't have permission for&lt;/li&gt;
&lt;li&gt;Make git commits or pushes (by design — you stay in control)&lt;/li&gt;
&lt;li&gt;Replace code review (it makes mistakes, especially on subtle logic)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The git boundary
&lt;/h3&gt;

&lt;p&gt;Claude Code deliberately doesn't push to git. This is the right call. Every commit should be a human decision. Claude Code generates the code; you review, commit, and push. This keeps you in the loop on what's actually going into your repository.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Workflow patterns that scale
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The morning brief
&lt;/h3&gt;

&lt;p&gt;Start each session by telling Claude Code the current state:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Context for this session:
- We're working on the authentication module
- Last session we completed the backend JWT middleware
- Today's goal: add the login/logout UI components
- Known issue: the token refresh endpoint returns 500 intermittently
- Do not touch src/backend/auth.js — it's being refactored separately
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This takes 2 minutes and saves a lot of confusion.&lt;/p&gt;

&lt;h3&gt;
  
  
  The reference pattern
&lt;/h3&gt;

&lt;p&gt;When building something new, always point to the closest existing thing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a new NotificationsPanel component.
Follow the exact structure of src/components/SettingsPanel.jsx —
same file layout, same CSS variable usage, same props pattern.
Only change the content and specific functionality.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This keeps your codebase consistent even as it grows.&lt;/p&gt;

&lt;h3&gt;
  
  
  The verification step
&lt;/h3&gt;

&lt;p&gt;Always end complex tasks with an explicit verification instruction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;After completing the changes:
1. Run the build and confirm it succeeds
2. Check that these endpoints respond correctly: /health, /api/auth/login
3. Report any warnings in the build output
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude Code will do this and tell you what it found.&lt;/p&gt;

&lt;h3&gt;
  
  
  Splitting sessions for large projects
&lt;/h3&gt;

&lt;p&gt;Context has limits. For very large tasks, split into sessions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Session 1: Backend changes → verify → commit&lt;/li&gt;
&lt;li&gt;Session 2: Frontend changes → verify → commit
&lt;/li&gt;
&lt;li&gt;Session 3: Integration and testing → verify → commit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each session starts fresh but CLAUDE.md provides continuity.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Common mistakes and how to avoid them
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Vague task descriptions&lt;/strong&gt;&lt;br&gt;
The vaguer the prompt, the more decisions Claude Code makes for you. Those decisions may not match your intent. Be specific.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skipping the analysis phase&lt;/strong&gt;&lt;br&gt;
Jumping straight to "build this" on complex tasks leads to code that doesn't fit your existing patterns. Always read first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not updating CLAUDE.md&lt;/strong&gt;&lt;br&gt;
Every architectural decision you make should go into CLAUDE.md. If you decide to use a specific error handling pattern, write it down. Future sessions will inherit that decision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Letting it run too long without review&lt;/strong&gt;&lt;br&gt;
For tasks over 15-20 minutes, check in. Ask it to report what it's done so far. This catches drift early.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not using explicit file references&lt;/strong&gt;&lt;br&gt;
Generic instructions produce generic code. Specific file references produce code that fits your project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Treating it as infallible&lt;/strong&gt;&lt;br&gt;
It makes mistakes. Especially on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complex business logic&lt;/li&gt;
&lt;li&gt;Security-sensitive code&lt;/li&gt;
&lt;li&gt;Subtle state management bugs&lt;/li&gt;
&lt;li&gt;Anything requiring domain knowledge you haven't documented&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Review the output. Always.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Claude Code is most powerful when you treat it as a skilled developer who:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Needs good context to do good work&lt;/li&gt;
&lt;li&gt;Benefits from explicit instructions over implicit expectations
&lt;/li&gt;
&lt;li&gt;Should be given clear scope and boundaries&lt;/li&gt;
&lt;li&gt;Needs review on their output, not rubber-stamping&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The developers who get the most out of it aren't the ones who give it the least guidance. They're the ones who invest in their CLAUDE.md, structure their prompts carefully, and review the output critically.&lt;/p&gt;

&lt;p&gt;The ceiling on what a solo developer can ship has moved. But the floor — the minimum investment in clear thinking and good specification — hasn't.&lt;/p&gt;




&lt;p&gt;If this was useful, I write about self-hosted tools, Docker, and AI-assisted development.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: github.com/Alvarito1983
&lt;/li&gt;
&lt;li&gt;Docker Hub: hub.docker.com/u/afraguas1983&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  claudecode #ai #programming #webdev #docker #devtools #opensource #productivity #softwaredevelopment
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>cli</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>NEXUS Ecosystem: I built a modular Docker management ecosystem in my spare time</title>
      <dc:creator>Alvarito1983</dc:creator>
      <pubDate>Mon, 06 Apr 2026 17:45:45 +0000</pubDate>
      <link>https://forem.com/alvarito1983/nexus-i-built-a-modular-docker-management-ecosystem-in-my-spare-time-3p1d</link>
      <guid>https://forem.com/alvarito1983/nexus-i-built-a-modular-docker-management-ecosystem-in-my-spare-time-3p1d</guid>
      <description>&lt;p&gt;I've been building NEXUS in my spare time for the past few months. What started as a simple Docker management panel has grown into something I'm genuinely proud of — a full ecosystem of self-hosted tools with a shared visual identity and a central control hub.&lt;/p&gt;

&lt;p&gt;Here's where the project stands today.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is NEXUS Ecosystem?
&lt;/h2&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%2Fisijdwphajcpv0n7chdr.png" 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%2Fisijdwphajcpv0n7chdr.png" alt=" " width="704" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;NEXUS is a modular ecosystem of self-hosted Docker management tools. Each tool works independently as a standalone app, but they're all designed to connect through a central hub — sharing authentication (SSO), service registry, and a unified dashboard.&lt;/p&gt;

&lt;p&gt;The design language is what I call &lt;strong&gt;Dark Premium&lt;/strong&gt;: inspired by tools like Linear and Vercel. Dark-first, precise, no unnecessary decoration.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's already built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;NEXUS&lt;/strong&gt; (port 9090 · #00c896)&lt;br&gt;
The core panel. Container management, image control, volume and network inspection, stack deployment, real-time terminal, metrics view. This is the most mature tool in the ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watcher&lt;/strong&gt; (port 9091 · #F0A500)&lt;br&gt;
Monitors Docker images for updates in real time. Shows available updates with digest comparison, lets you pull new versions with a progress bar directly from the UI, and tracks update history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pulse&lt;/strong&gt; (port 9092 · #3b82f6)&lt;br&gt;
Performance metrics per container — CPU, memory, network I/O. Clean charts, real-time via Socket.io.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NEXUS Hub&lt;/strong&gt; (port 9095 · #534AB7)&lt;br&gt;
The ecosystem control center. Handles SSO across all tools, maintains a service registry, polls each tool's health endpoint every 30 seconds, and provides a unified overview dashboard. NEXUS and Watcher are already integrated.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I'm building right now
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt; (port 9093 · #ef4444)&lt;br&gt;
Visibility into exposed ports, container vulnerabilities, and attack surface across all registered hosts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notify&lt;/strong&gt; (port 9094 · #8b5cf6)&lt;br&gt;
Multi-channel alert system — Telegram, Discord, Webhook, Email. Triggered by ecosystem events: container down, image update available, high CPU, and more.&lt;/p&gt;

&lt;p&gt;Both Security and Notify will live as Hub-integrated modules rather than standalone tools — because their real value is cross-host visibility, not single-host monitoring.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: React 18 + Vite, CSS custom properties (no Tailwind), Lucide React&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Node.js + Express + Socket.io&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth&lt;/strong&gt;: JWT + SSO pattern between tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt;: SQLite / JSON per tool&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment&lt;/strong&gt;: Docker, published to Docker Hub and GHCR via GitHub Actions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI/CD&lt;/strong&gt;: push to main → build → publish automatically&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Architecture decision: standalone vs Hub-integrated
&lt;/h2&gt;

&lt;p&gt;One thing I had to think carefully about: which tools make sense as standalone apps and which ones only make sense inside the Hub.&lt;/p&gt;

&lt;p&gt;NEXUS, Watcher and Pulse work well standalone — they provide value on a single host without needing global context. Security and Notify don't. A security panel that only sees one host misses the point. An alert system that can't aggregate events across the whole ecosystem is just noise.&lt;/p&gt;

&lt;p&gt;So the roadmap split naturally into two product lines: standalone tools (independent, &lt;code&gt;:latest&lt;/code&gt; tags on Docker Hub) and Hub-integrated modules (centralized IdP, SSO, multi-host support).&lt;/p&gt;




&lt;h2&gt;
  
  
  Where to find it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: github.com/Alvarito1983&lt;/li&gt;
&lt;li&gt;Docker Hub: hub.docker.com/u/afraguas1983&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All open source. Still actively developing — if you're into self-hosting, Docker, or just building your own tools, feel free to follow along or contribute.&lt;/p&gt;

&lt;h1&gt;
  
  
  docker #selfhosted #opensource #react #nodejs #homelab #devtools #webdev
&lt;/h1&gt;

</description>
      <category>docker</category>
      <category>opensource</category>
      <category>nexus</category>
      <category>devops</category>
    </item>
    <item>
      <title>How Claude Code + Specialized Agents Changed My Development Workflow in 2026</title>
      <dc:creator>Alvarito1983</dc:creator>
      <pubDate>Sun, 05 Apr 2026 18:55:50 +0000</pubDate>
      <link>https://forem.com/alvarito1983/how-claude-code-specialized-agents-changed-my-development-workflow-in-2026-3al5</link>
      <guid>https://forem.com/alvarito1983/how-claude-code-specialized-agents-changed-my-development-workflow-in-2026-3al5</guid>
      <description>&lt;p&gt;I've been using Claude Code daily for months. Here's my honest take on what actually changed — and what didn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's not autocomplete. It's orchestration.
&lt;/h2&gt;

&lt;p&gt;The mental shift that made everything click: I'm the architect. Claude Code is the implementation layer. Once I stopped trying to use it as a smarter Copilot and started treating it as a capable collaborator that needs clear direction, everything improved.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does well
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Legacy refactoring&lt;/strong&gt; — Feed it an 800-line file with no tests and it reorganizes it into coherent modules with sensible names. What used to take an afternoon takes 10 minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contextual debugging&lt;/strong&gt; — Unlike pasting code into a chat window, Claude Code sees the entire project. When I say "this endpoint fails intermittently," it understands the middleware chain, the models, the dependencies. The diagnosis is much more precise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test generation&lt;/strong&gt; — It generates edge cases I wouldn't have thought of. Projects that had 30% coverage now sit at 90%+.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it falls short
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Architecture from scratch&lt;/strong&gt; — If you give it total freedom on a new project, it produces something that works but that you don't fully understand. Design the structure yourself first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Domain-specific code&lt;/strong&gt; — Legacy proprietary systems, niche APIs. It hallucinates more here.&lt;/p&gt;

&lt;h2&gt;
  
  
  The agent layer changed things again
&lt;/h2&gt;

&lt;p&gt;I recently installed the wshobson/agents plugin marketplace for Claude Code. It adds 182 specialized agents — Docker/Kubernetes, security scanning, CI/CD automation, distributed debugging, LLM application development.&lt;/p&gt;

&lt;p&gt;Instead of asking generic questions, you activate the expert agent for what you need. The full-stack orchestration workflow coordinates multiple agents for a feature: backend architect → database designer → frontend developer → test automator → security auditor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude plugin marketplace add wshobson/agents
claude plugin &lt;span class="nb"&gt;install &lt;/span&gt;kubernetes-operations@claude-code-workflows
claude plugin &lt;span class="nb"&gt;install &lt;/span&gt;security-scanning@claude-code-workflows
claude plugin &lt;span class="nb"&gt;install &lt;/span&gt;llm-application-dev@claude-code-workflows
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  My current workflow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;I design the architecture&lt;/li&gt;
&lt;li&gt;Claude Code implements&lt;/li&gt;
&lt;li&gt;I review and correct&lt;/li&gt;
&lt;li&gt;Claude Code adds tests and documentation&lt;/li&gt;
&lt;li&gt;Security agent audits before deploy&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Real example from 2026
&lt;/h2&gt;

&lt;p&gt;I'm building a self-hosted forum (React 18 + Node.js + SQLite + Docker) and a separate property tracker with WhatsApp notifications. Both built with Claude Code. The forum went from zero to a full invite-only community platform with real-time replies via Socket.io in a few sessions.&lt;/p&gt;

&lt;p&gt;The property tracker scrapes listings, detects price drops, and sends WhatsApp messages via whatsapp-web.js — all containerized, all running on my homelab server.&lt;/p&gt;

&lt;p&gt;Neither of these would have been practical solo projects before. Now they're weekend projects.&lt;/p&gt;

&lt;p&gt;I also maintain &lt;strong&gt;NEXUS&lt;/strong&gt; — an open source Docker management ecosystem (NEXUS, Watcher, Pulse) that I build entirely with Claude Code. What started as a simple container panel grew into a multi-host management platform with real-time metrics, image update detection, and uptime monitoring. All MIT licensed, all self-hosted.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest take
&lt;/h2&gt;

&lt;p&gt;Claude Code doesn't replace engineering judgment. It amplifies implementation speed. If you know what you're building and why, it's extraordinary. If you don't have a clear direction, it'll confidently build the wrong thing.&lt;/p&gt;

&lt;p&gt;The agents add genuine depth — a security agent that actually knows OWASP, a Kubernetes agent that understands production patterns. Not generic answers, specialized knowledge activated on demand.&lt;/p&gt;

&lt;p&gt;If you're a developer with a homelab or side projects, this is worth your time.&lt;/p&gt;

&lt;p&gt;→ NEXUS on GitHub: &lt;a href="https://github.com/Alvarito1983/NEXUS" rel="noopener noreferrer"&gt;https://github.com/Alvarito1983/NEXUS&lt;/a&gt;&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>ai</category>
      <category>devops</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Why I Built My Own Docker Dashboard Instead of Using Portainer</title>
      <dc:creator>Alvarito1983</dc:creator>
      <pubDate>Sat, 04 Apr 2026 17:22:01 +0000</pubDate>
      <link>https://forem.com/alvarito1983/why-i-built-my-own-docker-dashboard-instead-of-using-portainer-341c</link>
      <guid>https://forem.com/alvarito1983/why-i-built-my-own-docker-dashboard-instead-of-using-portainer-341c</guid>
      <description>&lt;p&gt;If you've ever managed more than a handful of Docker containers, you've probably heard of Portainer. It's the go-to answer whenever someone asks "how do I manage my Docker setup with a UI?" — and for good reason. It works, it's free, and it covers a lot of ground.&lt;br&gt;
I used it too. For a while, it was good enough.&lt;br&gt;
But "good enough" has a way of not staying good enough.&lt;/p&gt;

&lt;p&gt;What Portainer Does Well&lt;br&gt;
Let's be fair. Portainer is genuinely impressive for what it is — a full-featured, enterprise-ready container management platform. You get:&lt;/p&gt;

&lt;p&gt;A visual interface for containers, images, networks, and volumes&lt;br&gt;
Stack management with Docker Compose support&lt;br&gt;
Multi-environment support&lt;br&gt;
Role-based access control&lt;br&gt;
An active community and solid documentation&lt;/p&gt;

&lt;p&gt;For teams or complex enterprise setups, it's hard to argue against it. But I wasn't running a team. I was running a homelab.&lt;/p&gt;

&lt;p&gt;Where It Started Feeling Wrong&lt;br&gt;
The more I used Portainer, the more I felt like I was using a tool built for someone else's workflow.&lt;br&gt;
It's a big application. The UI has a lot going on — menus, submenus, settings buried three levels deep. Every time I just wanted to restart a container or check what image a service was running, I was navigating through more interface than I needed.&lt;br&gt;
And the visual design — while functional — never felt like mine. I know that sounds like a minor thing. But when you spend time every day in a tool, the aesthetic matters more than people admit.&lt;br&gt;
I also run Docker on Windows with a specific multi-host setup, and getting Portainer to behave exactly the way I wanted in that context required more configuration than felt reasonable for a personal project.&lt;br&gt;
I wasn't looking for less power. I was looking for the right power, in the right shape.&lt;/p&gt;

&lt;p&gt;The Moment I Decided to Build Something&lt;br&gt;
I remember the exact moment I stopped tweaking Portainer and started thinking about alternatives. I was trying to set up a clean view of just the containers I cared about, with the metrics I actually used, in a layout that made sense to me — and I realized I was fighting the tool instead of using it.&lt;br&gt;
So I asked myself: how hard would it actually be to build what I want?&lt;br&gt;
I already knew React and Node.js. I had a clear picture of what I needed — a clean, minimal dashboard that showed me exactly what I wanted and nothing else, with a UI I was proud of looking at.&lt;br&gt;
That became NEXUS.&lt;/p&gt;

&lt;p&gt;What NEXUS Does Differently&lt;br&gt;
NEXUS isn't trying to replace Portainer for enterprise use cases. It's built around a different philosophy: clarity over completeness.&lt;br&gt;
The core features I focused on:&lt;br&gt;
Container management — start, stop, restart, remove. Real-time status. No noise around the edges.&lt;br&gt;
Image management — pull, inspect, remove. Watcher (part of the ecosystem) handles automated update detection with Socket.io-powered real-time progress and image deduplication.&lt;br&gt;
Monitoring — Pulse gives me per-container CPU, memory, and network stats in a clean dark interface without having to navigate anywhere.&lt;br&gt;
Multi-host support — a lightweight Agent runs on remote hosts and reports back to the central NEXUS instance. No heavy infrastructure needed.&lt;br&gt;
Design system I actually like — dark premium UI inspired by Linear and Vercel aesthetics. CSS custom properties, Inter + JetBrains Mono typography, layered dark backgrounds. It looks exactly how I want it to look.&lt;br&gt;
Everything runs in Docker. The whole stack is up with a single docker compose up -d.&lt;/p&gt;

&lt;p&gt;Is Portainer Bad? No.&lt;br&gt;
I want to be clear: this isn't a takedown of Portainer. It's a great tool and the right choice for a lot of people — especially if you need enterprise features, team access control, or you're managing complex multi-environment setups professionally.&lt;br&gt;
But there's real value in building something tailored to your exact needs. Not just the functional value — the learning you get from it, the ownership you feel over the tool, and the fact that you can extend it in any direction you want without waiting for a feature request to be picked up.&lt;br&gt;
If you're a developer or sysadmin with a homelab and some free weekends, I'd genuinely recommend trying to build your own tooling at least once. You'll learn more than you expect.&lt;/p&gt;

&lt;p&gt;Where NEXUS Is Now&lt;br&gt;
NEXUS is open source (MIT license) and actively developed. Current versions: NEXUS v1.5.6, Watcher v1.3.0, Pulse v1.2.0.&lt;br&gt;
The roadmap includes standalone Security and Notify modules, and a Hub integration layer for centralized multi-tool management with SSO.&lt;br&gt;
If you're curious, you can find it on GitHub and Docker Hub under Alvarito1983 / afraguas1983.&lt;br&gt;
Feedback, issues, and stars are always welcome. 🙂&lt;/p&gt;

</description>
      <category>docker</category>
      <category>selfhosted</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
    <item>
      <title>I built a self-hosted Docker management ecosystem — NEXUS, Watcher and Pulse (open source, MIT)</title>
      <dc:creator>Alvarito1983</dc:creator>
      <pubDate>Thu, 02 Apr 2026 17:41:44 +0000</pubDate>
      <link>https://forem.com/alvarito1983/i-built-a-self-hosted-docker-management-ecosystem-nexus-watcher-and-pulse-open-source-mit-2d6j</link>
      <guid>https://forem.com/alvarito1983/i-built-a-self-hosted-docker-management-ecosystem-nexus-watcher-and-pulse-open-source-mit-2d6j</guid>
      <description>&lt;p&gt;A few months ago I got tired of Portainer.&lt;/p&gt;

&lt;p&gt;Not because it's a bad tool — it's excellent at what it does. But for managing my homelab it felt like driving a truck to buy groceries. Too much complexity, too many dependencies, too much noise for what I actually needed.&lt;/p&gt;

&lt;p&gt;So I built my own.&lt;/p&gt;

&lt;p&gt;What started as a simple panel to see my containers turned into a full ecosystem of tools for managing Docker infrastructure. This is the story of what I built, every technical decision I made, and where it's going.&lt;/p&gt;




&lt;h2&gt;
  
  
  NEXUS — Docker Manager
&lt;/h2&gt;

&lt;p&gt;NEXUS is a self-hosted Docker management panel. No external database, no cloud dependency. One &lt;code&gt;docker compose up&lt;/code&gt; and you're running at &lt;code&gt;http://localhost:9090&lt;/code&gt;.&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%2Fx2yaaop2y5rmtp1dfzps.png" 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%2Fx2yaaop2y5rmtp1dfzps.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Core features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-time metrics&lt;/strong&gt; — CPU &amp;amp; RAM per container with live sparkline history&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stack view&lt;/strong&gt; — containers grouped by docker-compose project&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrated terminal&lt;/strong&gt; — &lt;code&gt;docker exec&lt;/code&gt; directly from the browser, no SSH needed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-host&lt;/strong&gt; — manage multiple Docker servers from one panel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full management&lt;/strong&gt; — images, networks, volumes, stacks with built-in YAML editor&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crash alerts&lt;/strong&gt; — Telegram notification when a container stops unexpectedly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Roles&lt;/strong&gt; — Admin and Viewer, control who can do what&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PWA&lt;/strong&gt; — installable on desktop and mobile&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the most important technical decision wasn't any of those features. It was how to solve multi-host without compromising security.&lt;/p&gt;

&lt;h3&gt;
  
  
  The agent architecture
&lt;/h3&gt;

&lt;p&gt;The classic multi-host Docker problem: to manage a remote server you need access to the Docker socket. And the Docker socket is basically root access to the system.&lt;/p&gt;

&lt;p&gt;The common solution is to expose the socket over TCP. That's a massive security hole — you're putting root access on the network.&lt;/p&gt;

&lt;p&gt;NEXUS solves it differently:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser → NEXUS (:9090)
              ↓
         NEXUS Agent (remote host)
              ↓
         Docker socket (never leaves the host)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent is a lightweight process running on each remote host. It wraps the socket in its own authenticated API and only exposes the endpoints NEXUS needs. The socket never leaves the host. Communication between NEXUS and the agent uses JWT with 24h expiry.&lt;/p&gt;

&lt;p&gt;Result: multi-host management without compromising system security.&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;# Install NEXUS&lt;/span&gt;
curl &lt;span class="nt"&gt;-O&lt;/span&gt; https://raw.githubusercontent.com/Alvarito1983/NEXUS/main/docker-compose.yml
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;span class="c"&gt;# → http://localhost:9090&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  NEXUS Watcher — Image Update Monitor
&lt;/h2&gt;

&lt;p&gt;Once the panel is running, another problem surfaces: how do I know when updates are available for my images?&lt;/p&gt;

&lt;p&gt;The naive solution is tag comparison. If you have &lt;code&gt;nginx:latest&lt;/code&gt; and a newer version exists, the tag will have changed. Problem: many images use stable tags that don't change (&lt;code&gt;latest&lt;/code&gt;, &lt;code&gt;stable&lt;/code&gt;, &lt;code&gt;main&lt;/code&gt;) even when the image content has changed.&lt;/p&gt;

&lt;p&gt;NEXUS Watcher solves this with &lt;strong&gt;manifest digest comparison&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why digests instead of tags
&lt;/h3&gt;

&lt;p&gt;Every Docker image has a digest — a SHA256 hash of the manifest that describes the image. When a publisher updates an image, the digest changes even if the tag stays the same.&lt;/p&gt;

&lt;p&gt;Watcher's flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Gets the local digest of each installed image&lt;/li&gt;
&lt;li&gt;Queries the registry (Docker Hub or GHCR) for the current remote digest&lt;/li&gt;
&lt;li&gt;Compares both — if they differ, there's an update available&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For Docker Hub, this requires getting an OAuth token from &lt;code&gt;auth.docker.io&lt;/code&gt; first, then querying &lt;code&gt;registry-1.docker.io/v2/{repo}/manifests/{tag}&lt;/code&gt; and extracting the &lt;code&gt;docker-content-digest&lt;/code&gt; header.&lt;/p&gt;

&lt;p&gt;This method detects &lt;strong&gt;real&lt;/strong&gt; updates, not just tag changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-time update feedback
&lt;/h3&gt;

&lt;p&gt;One issue with earlier versions: you clicked "Update" and had no idea what was happening. Is it downloading? Did it finish? Did it fail?&lt;/p&gt;

&lt;p&gt;Dockerode (the Docker wrapper for Node.js) emits progress events during a pull — layer by layer, with percentages. The current version of Watcher exposes those events via Socket.io to the frontend, showing a real-time progress bar with per-layer detail.&lt;/p&gt;

&lt;p&gt;It also shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Short digest of the new version (first 12 chars of SHA256)&lt;/li&gt;
&lt;li&gt;Affected containers — which containers will be recreated&lt;/li&gt;
&lt;li&gt;Update history&lt;/li&gt;
&lt;li&gt;Digest-based rollback — one click to go back if something breaks
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install Watcher&lt;/span&gt;
curl &lt;span class="nt"&gt;-O&lt;/span&gt; https://raw.githubusercontent.com/Alvarito1983/nexus-watcher/main/docker-compose.yml
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;span class="c"&gt;# → http://localhost:9091&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  NEXUS Pulse — Uptime &amp;amp; Health Monitor
&lt;/h2&gt;

&lt;p&gt;Once containers are managed and images are updated, one question remains: are they actually working?&lt;/p&gt;

&lt;p&gt;NEXUS Pulse is a self-hosted uptime monitor. It monitors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Docker containers&lt;/strong&gt; — Running/Stopped/Other state&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web&lt;/strong&gt; — HTTP/HTTPS with SSL certificate verification and expiry date&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TCP&lt;/strong&gt; — port availability&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DNS&lt;/strong&gt; — domain resolution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database&lt;/strong&gt; — connection health check&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API&lt;/strong&gt; — endpoint response validation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each monitor has a &lt;strong&gt;30-check history bar&lt;/strong&gt; — the last 30 results represented as colored vertical bars (green = up, red = down, amber = pending). One glance and you know the recent history of any service.&lt;/p&gt;

&lt;p&gt;Alerts go via Telegram with status, response time and timestamp.&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;# Install Pulse&lt;/span&gt;
curl &lt;span class="nt"&gt;-O&lt;/span&gt; https://raw.githubusercontent.com/Alvarito1983/nexus-pulse/main/docker-compose.yml
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;span class="c"&gt;# → http://localhost:9092&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The technical stack
&lt;/h2&gt;

&lt;p&gt;All tools share the same architecture:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Tech&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Node.js + Express + Socket.io + Dockerode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;React 18 + Vite + Lucide React&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth&lt;/td&gt;
&lt;td&gt;JWT + scrypt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage&lt;/td&gt;
&lt;td&gt;JSON file (no database)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CI/CD&lt;/td&gt;
&lt;td&gt;GitHub Actions → Docker Hub + GHCR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Why JSON instead of a database
&lt;/h3&gt;

&lt;p&gt;Deliberate decision. For the use case of these tools (homelab, small teams) a database is overkill and adds a dependency that complicates deployment. The JSON file persists across restarts and is fast enough for the data volume these tools handle.&lt;/p&gt;

&lt;h3&gt;
  
  
  The design system
&lt;/h3&gt;

&lt;p&gt;The frontend uses a custom Dark Premium design system — inspired by tools like Linear and Vercel. Each tool has its own accent color (green for NEXUS, amber for Watcher, blue for Pulse) but they share the same visual foundation: Inter + JetBrains Mono typography, layered dark backgrounds (&lt;code&gt;#0a0a0f&lt;/code&gt; → &lt;code&gt;#111118&lt;/code&gt; → &lt;code&gt;#1a1a24&lt;/code&gt;), staggered entry animations.&lt;/p&gt;

&lt;p&gt;The goal was that each tool feels like part of the same family while working completely standalone.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's coming
&lt;/h2&gt;

&lt;p&gt;Each tool works independently but they're designed to integrate:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NEXUS Security&lt;/strong&gt; &lt;em&gt;(in development)&lt;/em&gt;&lt;br&gt;
CVE analysis on installed images, SSL certificate auditing, unnecessary exposed port detection. The goal is security visibility without depending on cloud services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NEXUS Notify&lt;/strong&gt;&lt;br&gt;
Unified alert routing. Instead of configuring Telegram in each tool separately, Notify acts as a notification hub — receives events from all tools and distributes them according to configurable rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NEXUS Hub&lt;/strong&gt;&lt;br&gt;
The central panel. SSO for the entire ecosystem — one login, one view of all hosts and all tools. Hub also acts as a shared host directory: add a host once and all tools see it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;All three tools are MIT licensed, fully open source, and self-contained.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔗 &lt;strong&gt;NEXUS&lt;/strong&gt;: &lt;a href="https://github.com/Alvarito1983/NEXUS" rel="noopener noreferrer"&gt;https://github.com/Alvarito1983/NEXUS&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🔗 &lt;strong&gt;Watcher&lt;/strong&gt;: &lt;a href="https://github.com/Alvarito1983/nexus-watcher" rel="noopener noreferrer"&gt;https://github.com/Alvarito1983/nexus-watcher&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🔗 &lt;strong&gt;Pulse&lt;/strong&gt;: &lt;a href="https://github.com/Alvarito1983/nexus-pulse" rel="noopener noreferrer"&gt;https://github.com/Alvarito1983/nexus-pulse&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🌐 &lt;strong&gt;Web&lt;/strong&gt;: &lt;a href="https://alvarito1983.github.io/nexus-web/" rel="noopener noreferrer"&gt;https://alvarito1983.github.io/nexus-web/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy to answer questions about the architecture, the digest-based detection approach, or the agent security model in the comments.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Tags: docker, selfhosted, opensource, node, react, homelab, devops&lt;/em&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>selfhosted</category>
      <category>opensource</category>
      <category>homelab</category>
    </item>
  </channel>
</rss>
