<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Software Engineering and Product]]></title><description><![CDATA[Software Engineer | Mentor | Speaker | Aspiring PO]]></description><link>https://blog.fredthedev.com</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 15:25:36 GMT</lastBuildDate><atom:link href="https://blog.fredthedev.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How I Finally Made AI Write Code I Don't Hate]]></title><description><![CDATA[You open a new ChatGPT window. The cursor blinks. It's a clean slate. You have a complex bug in your codebase, a subtle logical error that spans three different files and a service class.
You begin the dance.
"Here is my UserService.ts file," you typ...]]></description><link>https://blog.fredthedev.com/how-i-finally-made-ai-write-code-i-dont-hate</link><guid isPermaLink="true">https://blog.fredthedev.com/how-i-finally-made-ai-write-code-i-dont-hate</guid><category><![CDATA[Web Development]]></category><category><![CDATA[claude.ai]]></category><category><![CDATA[windsurf]]></category><category><![CDATA[copilot]]></category><category><![CDATA[code review]]></category><dc:creator><![CDATA[Freddy Agbona (FredTheDev)]]></dc:creator><pubDate>Fri, 10 Oct 2025 15:54:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1759423597324/f75467a7-17bf-4520-8665-134ee184bf78.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You open a new ChatGPT window. The cursor blinks. It's a clean slate. You have a complex bug in your codebase, a subtle logical error that spans three different files and a service class.</p>
<p>You begin the dance.</p>
<p>"Here is my <code>UserService.ts</code> file," you type, pasting in 150 lines of code. The AI gives a generic summary. "Okay," you continue, "now here is the <code>OrderController.ts</code> that uses it." Another 200 lines go into the chat box. "And finally, here's the <code>api-types.ts</code> file with the data structures."</p>
<p>You've spent five minutes just setting the stage, and you haven't even asked your question yet. You feel less like a programmer and more like a human copy-paste machine.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759790968924/d32a8d88-2439-4d26-9d50-a884da312e0c.webp" alt class="image--center mx-auto" /></p>
<p>If this feels familiar, it's because we've all been treating AI like a magic eight ball instead of what it really is: an infinitely fast, incredibly knowledgeable, but utterly amnesiac junior developer. Each time you open a new chat, you've hired a new intern who has no idea who you are, what your project does, or what you did five minutes ago.</p>
<p>The era of just "prompting" this intern is over. Welcome to the age of <strong>Context Engineering</strong>.</p>
<h3 id="heading-the-paradigm-shift-your-intern-needs-a-brain">The Paradigm Shift: Your Intern Needs a Brain</h3>
<p>A <a target="_blank" href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents">recent article</a> from the brilliant minds at Anthropic (the creators of Claude) finally gave this concept a name. They explain that the real skill is no longer just finding the right words for a prompt, but "curating and maintaining the optimal set of tokens (information) during LLM inference."</p>
<p>In plain English? The AI's performance is directly tied to the quality of the "brain" you give it for a task.</p>
<p>This is critical because of something called <strong>"context rot."</strong> Like us, LLMs have a finite "attention budget." The more stuff you cram into their head at once (a huge prompt, long chat history, multiple files), the less attention they can pay to any single piece of it. They start to forget the instructions you gave them at the beginning.</p>
<p>So, the goal is to give the AI the <em>smallest possible set of the most relevant information</em> to get the job done right. After thousands of hours of integrating AI into my daily coding, I've learned that this "context curation" boils down to three simple principles.</p>
<h3 id="heading-the-role-give-your-intern-a-job-title">The Role: Give Your Intern a Job Title</h3>
<p>You would never tell a new hire, "Just do some stuff." You give them a role: "You're the front-end specialist," or "You're the database expert." You must do the same for your AI. Its entire perspective changes when it has a persona.</p>
<p><strong>Bad example:</strong></p>
<p>"Look at this SQL query and make it better."</p>
<p><strong>Good example:</strong></p>
<p>"You are a Senior PostgreSQL DBA with 20 years of experience specializing in query optimization for large-scale time-series data. Your task is to analyze the following query for performance bottlenecks. Rewrite it to be more efficient, and explain your changes by referencing index usage and execution plan improvements."</p>
<p>One is a vague request; the other is a professional assignment. The results you get will be worlds apart.</p>
<h3 id="heading-the-documents-give-your-intern-access-to-the-repo">The Documents: Give Your Intern Access to the Repo</h3>
<p>This is the biggest game-changer. An AI in a standard chat window is working in a vacuum. It doesn't know your codebase.</p>
<p>This is why context-aware tools are no longer a luxury; they are a necessity for any serious developer. Tools like <strong>Windsurf</strong>, <strong>Cursor</strong>, and <strong>Sourcegraph Cody</strong> are built for this. They plug directly into your IDE and use techniques like embeddings to create a vector representation of your <em>entire</em> codebase.</p>
<p>What does that mean? It means the AI has already "read" every file before you even ask a question.</p>
<p>I was recently debugging an issue where a user's permissions weren't updating correctly on the front end after their role was changed in the backend. This involved a journey through a NestJS controller, a Prisma service, a Next.js API route, and finally, a React component. In the "old world" (i.e., last year), that would have been 20 minutes of copy-pasting into ChatGPT.</p>
<p>Instead, I highlighted the four relevant files in my IDE and typed into Windsurf: <em>"The user's role is updated in the database here, but the front-end component isn't reflecting the change on re-render. Walk me through the data flow and tell me where the state is getting lost."</em></p>
<p>Two minutes later, it had not only identified the stale state issue in my React hook but had also suggested using a specific library we were already using elsewhere in the project to fix it. It knew this because it had context.</p>
<p>That's the difference between a blind intern and one who has full access to your project's documentation and source code.</p>
<h3 id="heading-the-format-give-your-intern-a-template-to-fill-out">The Format: Give Your Intern a Template to Fill Out</h3>
<p>If you need a specific output, don't describe it, <em>show</em> it. This technique, called "few-shot prompting," is the ultimate way to eliminate ambiguity.</p>
<p><strong>Bad example:</strong></p>
<p>"Generate some user data for my tests."</p>
<p><strong>Good example:</strong></p>
<p>"You are going to generate a JSON array of 10 user objects for a test database. You must follow this exact format and these rules.</p>
<p><strong>Rules:</strong></p>
<ul>
<li><p><code>id</code> must be a UUIDv4.</p>
</li>
<li><p><code>email</code> must be a unique, realistic-looking email.</p>
</li>
<li><p><code>membership</code> must be one of these three values: 'free', 'premium', 'enterprise'.</p>
</li>
</ul>
<p><strong>Example of a single object:</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"id"</span>: <span class="hljs-string">"a1b2c3d4-e5f6-7890-1234-567890abcdef"</span>,
  <span class="hljs-attr">"email"</span>: <span class="hljs-string">"example.user@email.com"</span>,
  <span class="hljs-attr">"membership"</span>: <span class="hljs-string">"premium"</span>
}
</code></pre>
<p>Now, generate the array of 10 objects."</p>
<p>You're not hoping for the right answer; you're guaranteeing it. I use this for everything: creating API documentation that matches my style, writing commit messages that follow the Conventional Commits standard, and scaffolding new components based on an existing one.</p>
<h3 id="heading-beyond-the-basics-giving-your-intern-a-long-term-memory">Beyond the Basics: Giving Your Intern a Long-Term Memory</h3>
<p>The real magic happens when you chain these tasks together. The Anthropic team talks about techniques for "long-horizon tasks" complex jobs that require the AI to remember things from one step to the next.</p>
<p>Two techniques I now use daily are:</p>
<p>1. <strong>Structured Note-Taking:</strong> It's as simple as it sounds. I have my AI agent maintain a <a target="_blank" href="http://SCRATCHPAD.md"><code>SCRATCHPAD.md</code></a> or <a target="_blank" href="http://PLAN.md"><code>PLAN.md</code></a> file in the project directory. Before it starts a complex task like a big refactor, its first instruction is to write out a step-by-step plan in that file. After each step, it updates the file, checking off what's done. If the process gets interrupted, it can just read the file to pick up exactly where it left off. It's a persistent memory.</p>
<p>2. <strong>Compaction:</strong> As the AI works, the conversation history (the context) gets cluttered. Compaction is like telling your intern, "Okay, before we move on, summarize the key decisions and unresolved issues from our last task into five bullet points." You then start the next task with that clean, dense summary instead of the entire messy history. The signal-to-noise ratio skyrockets.</p>
<p>This Is the New Skill Mastering context engineering changes your relationship with AI. It stops being a frustrating toy and becomes a genuine collaborator. A partner. It's the difference between hiring a new intern every five minutes and working with a junior developer who learns, remembers, and grows with your project. And that is becoming the single most valuable skill for any developer in the AI age.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759791911926/81649d59-72b6-4635-9d18-8816af793672.webp" alt class="image--center mx-auto" /></p>
<h3 id="heading-okay-youre-convinced-now-lets-actually-do-context-engineering">Okay, You're Convinced. Now Let's <em>Actually</em> Do Context Engineering.</h3>
<p>Let's move from the <em>why</em> to the <em>how</em>. This is my practical, no-fluff guide to integrating context engineering into your daily workflow.</p>
<h3 id="heading-step-1-choose-your-weapon-your-context-aware-toolkit">Step 1: Choose Your Weapon (Your Context-Aware Toolkit)</h3>
<p>First things first, you can't do this in a standard ChatGPT window. You need a tool that lives where your code lives: in your IDE. These tools are designed to read your entire codebase and feed it to the AI. Here are my favorites:</p>
<ul>
<li><p><strong>Windsurf (formerly Codeium):</strong> This is my daily driver. It's a supercharged extension that you add to your existing IDE (VS Code, JetBrains, etc.). It excels at codebase-aware chat and a ridiculously good autocomplete. <strong>Choose this if:</strong> You love your current editor setup and want to add superpowers to it.</p>
</li>
<li><p><strong>Cursor:</strong> This is a complete, standalone IDE that's been forked from VS Code and rebuilt from the ground up for AI. The integration is seamless because the entire editor <em>is</em> the AI tool. <strong>Choose this if:</strong> You want the most tightly integrated experience possible and are open to adopting a new (but very familiar) editor.</p>
</li>
<li><p><strong>Sourcegraph Cody:</strong> Cody is an expert at understanding massive, complex codebases. It's built by a code search company, and it shows. It can pull context from your entire organization's code, not just what's on your local machine. <strong>Choose this if:</strong> You work in a large enterprise environment with many repositories and need the AI to understand cross-team dependencies.</p>
</li>
</ul>
<p><strong>Your First, Most Important Task:</strong> After you install one of these, it will ask to <strong>"index your project."</strong> <em>Do not skip this</em>. This is the step where the AI reads everything, your files, your dependencies, your folder structure, and builds its "brain." It can take a few minutes on a large project. Go get a coffee. Let it cook. This is the foundation for everything that follows.</p>
<h3 id="heading-step-2-a-practical-workflow-the-multi-file-bug-hunt">Step 2: A Practical Workflow : The Multi-File Bug Hunt</h3>
<p>Let's revisit that permissions bug I mentioned. Here's the play-by-play of how I used <strong>Windsurf</strong> to solve it.</p>
<p><strong>The Scenario:</strong> A user's role is updated in the database, but their dashboard on the front end still shows the old, cached permissions.</p>
<p><strong>My Old Process:</strong></p>
<ol>
<li><p>Read the backend controller code.</p>
</li>
<li><p>Read the service that talks to the database.</p>
</li>
<li><p>Read the API route in the front-end codebase.</p>
</li>
<li><p>Read the React component that displays the dashboard.</p>
</li>
<li><p>Swear, because I still can't see the issue.</p>
</li>
<li><p>Start copy-pasting all four files into ChatGPT and pray.</p>
</li>
</ol>
<p><strong>My New, Context-Engineered Process:</strong></p>
<ol>
<li><p><strong>Gather the Evidence:</strong> Inside VS Code, I right-click on each of the four files involved (<code>permissions.controller.ts</code>, <code>permissions.service.ts</code>, <code>useUserPermissions.ts</code>, and <code>Dashboard.tsx</code>) and select "Add to Windsurf Chat." Now, the AI's context is surgically focused on only the relevant parts of the codebase.</p>
</li>
<li><p><strong>Assign the Role &amp; Task:</strong> My first prompt isn't "fix it." It's an investigation command:</p>
<blockquote>
<p>"You are a senior full-stack TypeScript developer. The files I've provided represent the flow for updating and displaying user permissions. A bug has been reported where the <code>Dashboard.tsx</code> component is showing stale data after the role is updated in the backend. Trace the data flow from the controller to the React hook. Explain where the caching is likely happening and why the front-end state isn't being revalidated."</p>
</blockquote>
</li>
<li><p><strong>Analyze the Output:</strong> Windsurf comes back and correctly identifies that the React Query hook (<code>useUserPermissions.ts</code>) has a <code>staleTime</code> set to 5 minutes, meaning it won't refetch the data from the API automatically within that window. The backend is working fine, but the front end is intentionally showing old data.</p>
</li>
<li><p><strong>Iterate for a Solution:</strong> The bug is found, but now I need a fix. My follow-up prompt is:</p>
<blockquote>
<p>"You're right. Based on the code for the <code>useUserPermissions</code> hook, what's the best way to manually invalidate the query's cache from another component after the update action is successful? Show me the code I would need to add to the component that triggers the role change."</p>
</blockquote>
</li>
</ol>
<p>It then provides the exact <code>queryClient.invalidateQueries(['userPermissions'])</code> line I need, tailored to the key I was already using in my hook.</p>
<p>The entire process took three minutes. No copy-pasting. No explaining my file structure. Just a focused conversation with an expert who had already read all the relevant documents.</p>
<h3 id="heading-step-3-a-second-workflow-building-a-new-feature">Step 3: A Second Workflow : Building a New Feature</h3>
<p>Context engineering isn't just for bugs. It's even more powerful for creating new things that match the style of your existing code.</p>
<p><strong>The Scenario:</strong> I need to build a new API endpoint, <code>/users/{id}/summary</code>, that returns a user's profile info and their last five login dates.</p>
<ol>
<li><p><strong>Find Your Template:</strong> I know I have another endpoint, <code>/users/{id}/profile</code>, that already does a good job of validation, error handling, and serialization.</p>
</li>
<li><p><strong>The "Mirror" Prompt:</strong> I create a new empty file, <code>user-summary.controller.ts</code>. I then add <em>both</em> the new empty file and the existing <code>user-profile.controller.ts</code> to the AI chat context. My prompt is:</p>
<blockquote>
<p>"Using <code>user-profile.controller.ts</code> as a template for structure, style, and error handling, create the controller logic for the new <code>user-summary.controller.ts</code> file. The new endpoint is <code>GET /users/{id}/summary</code>. It needs to call two services: <code>this.userService.findById(id)</code> and <code>this.authService.getLastFiveLogins(id)</code>. Combine the results into a single DTO and return it."</p>
</blockquote>
</li>
<li><p><strong>The Result:</strong> The AI generates the new controller, perfectly matching our project's coding style. It uses the right decorators, injects the correct services, and handles the <code>UserNotFound</code> error exactly like the other file does. It's not generic code; it's <em>my</em> code. 90% of the work is done in 30 seconds.</p>
</li>
</ol>
<h3 id="heading-the-real-takeaway-its-a-habit-not-a-hack">The Real Takeaway: It's a Habit, Not a Hack</h3>
<p>This isn't about finding a single "god prompt" that solves all your problems. It's about fundamentally changing your daily habits.</p>
<ul>
<li><p><strong>Before you write code, you gather context.</strong></p>
</li>
<li><p><strong>Before you ask for a fix, you provide the evidence.</strong></p>
</li>
<li><p><strong>Before you ask for a new feature, you show it an example.</strong></p>
</li>
</ul>
<p>You start thinking like an architect, deliberately providing your AI partner with the perfect briefing documents for every single task. When you make that shift, you'll stop fighting with your tools and start building with them.</p>
]]></content:encoded></item><item><title><![CDATA[Why Programming Roadmaps Are Broken (And How to Finally Learn to Code Effectively)]]></title><description><![CDATA[I still remember my first year mentoring students. There was this guy bright, motivated who followed a popular JavaScript roadmap he found online. HTML → CSS → JavaScript → React → Node. He ticked every box, memorized every topic. And yet, when we sa...]]></description><link>https://blog.fredthedev.com/why-programming-roadmaps-are-broken-and-how-to-finally-learn-to-code-effectively</link><guid isPermaLink="true">https://blog.fredthedev.com/why-programming-roadmaps-are-broken-and-how-to-finally-learn-to-code-effectively</guid><category><![CDATA[javascript roadmap]]></category><category><![CDATA[Developer]]></category><category><![CDATA[roadmap to full stack web developer]]></category><category><![CDATA[#roadmap #javascript #js]]></category><category><![CDATA[code]]></category><dc:creator><![CDATA[Freddy Agbona (FredTheDev)]]></dc:creator><pubDate>Mon, 04 Aug 2025 07:36:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1754261804930/0454e082-9740-4ec4-b8ef-73a2541a333a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I still remember my first year mentoring students. There was this guy bright, motivated who followed a popular JavaScript roadmap he found online. HTML → CSS → JavaScript → React → Node. He ticked every box, memorized every topic. And yet, when we sat down to build his first actual app? He froze.</p>
<p>That’s when it clicked: <strong>it’s not the learner that’s broken. It’s the roadmap.</strong></p>
<h2 id="heading-the-comfort-of-cookie-cutter-roadmaps">The Comfort of Cookie-Cutter Roadmaps</h2>
<p>When you’re starting out, a roadmap feels safe. It’s neat. Linear. Someone tells you: “Learn JavaScript, then React, then Node.” You print it out, highlight sections, and convince yourself that once you reach the end, you’ll be job-ready.</p>
<p>But here’s what really happens: halfway through React, you’re tangled in hooks, Redux, and jargon you don’t understand. Or you pick Python, grind through syntax exercises, and realize you still can’t automate a simple spreadsheet task.</p>
<p>I saw it over and over. Roadmaps feel like progress but they often skip the <em>real work</em>: projects, problem-solving, and context.</p>
<h2 id="heading-what-i-learned-from-mentoring-500-developers">What I Learned from Mentoring 500+ Developers</h2>
<p>I’ve mentored CS students, career changers in their 30s, and autodidacts teaching themselves after work. Everyone learns differently:</p>
<ul>
<li><p>A visual learner only grasped JavaScript after seeing flow diagrams.</p>
</li>
<li><p>A hands-on tinkerer thrived by breaking things first, debugging, then reading docs.</p>
</li>
<li><p>A career changer with kids had just 1 hour/day, they didn’t need 20 tools, they needed focus.</p>
</li>
</ul>
<p><strong>Generic roadmaps ignore all this.</strong> They treat everyone as if they learn the same way.</p>
<h2 id="heading-the-four-fatal-flaws-of-generic-roadmaps">The Four Fatal Flaws of Generic Roadmaps</h2>
<ol>
<li><p><strong>Too much theory upfront:</strong> Learners dive into closures before they’ve built a single DOM interaction.</p>
</li>
<li><p><strong>No real-world context:</strong> You know Python syntax but can’t automate a task at work.</p>
</li>
<li><p><strong>Zero personalization:</strong> Whether aiming for web dev, data science, or automation, the path is identical.</p>
</li>
<li><p><strong>The project gap:</strong> Reading code ≠ building apps. Most quit here.</p>
</li>
</ol>
<h2 id="heading-what-works-instead-the-lurnix-approach">What Works Instead (The Lurnix Approach)</h2>
<p>I changed my method:</p>
<ul>
<li><p><strong>7-Day Kickstart:</strong> Focus only on essentials : loops, functions, first app.</p>
</li>
<li><p><strong>Personalization:</strong> Our psychotype test tailors your learning. A fitness enthusiast built a workout tracker. A finance learner? An expense tracker.</p>
</li>
<li><p><strong>Guided, real projects:</strong> Python scripts, React apps, Node APIs.</p>
</li>
<li><p><strong>Community support:</strong> Fast answers, peer wins, steady motivation.</p>
</li>
</ul>
<h2 id="heading-why-i-built-lurnix">Why I Built Lurnix</h2>
<p>After years of watching learners quit, I built <strong>Lurnix</strong>:</p>
<ul>
<li><p><strong>7-Day PDF Kickstart</strong> to build fundamentals quickly.</p>
</li>
<li><p><strong>30-Day Personalized Roadmap</strong> aligned to your goals.</p>
</li>
<li><p><strong>Practical projects</strong> from day one.</p>
</li>
<li><p><strong>AI-powered app access</strong> combining editor + mentorship.</p>
</li>
</ul>
<p>This transforms “I’ve read 20 tutorials” into “I built my first real app.”</p>
<h2 id="heading-the-bottom-line">The Bottom Line</h2>
<p>Generic programming roadmaps fail because they ignore one truth: <strong>learning to code is personal.</strong> The best plan isn’t universal it’s yours.</p>
<p>If you’re tired of spinning in circles, try a smarter way. <strong>Lurnix isn’t another roadmap. It’s a compass.</strong></p>
<p>Ready to stop following and start building? <a target="_blank" href="https://lurnix.tech">Join Lurnix and get your personalized path.</a></p>
]]></content:encoded></item><item><title><![CDATA[Boosting Product Reliability: How I Built an In-Platform Issue Reporting API for Bolt.new]]></title><description><![CDATA[Introduction: From Friction to Feedback
StackBlitz's Bolt.new is revolutionizing full-stack development in the browser. But one friction point remained: how could non-technical users like designers, PMs, or QA teams report issues without jumping thro...]]></description><link>https://blog.fredthedev.com/in-platform-issue-reporting-api-stackblitz</link><guid isPermaLink="true">https://blog.fredthedev.com/in-platform-issue-reporting-api-stackblitz</guid><category><![CDATA[Node.js]]></category><category><![CDATA[TypeScript]]></category><category><![CDATA[Express]]></category><category><![CDATA[API Design]]></category><category><![CDATA[GitHub API]]></category><category><![CDATA[fredthedev]]></category><category><![CDATA[bolt.new]]></category><category><![CDATA[stackblitz]]></category><category><![CDATA[product]]></category><category><![CDATA[Feedback]]></category><dc:creator><![CDATA[Freddy Agbona (FredTheDev)]]></dc:creator><pubDate>Thu, 29 May 2025 16:23:03 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1748535196820/15186862-ead1-4f14-9ecc-77ae73d92037.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction-from-friction-to-feedback">Introduction: From Friction to Feedback</h2>
<p><a target="_blank" href="https://stackblitz.com/">StackBlitz</a>'s <a target="_blank" href="https://bolt.new/">Bolt.new</a> is revolutionizing full-stack development in the browser. But one friction point remained: how could non-technical users like designers, PMs, or QA teams report issues without jumping through hoops?</p>
<p>The answer: bring issue reporting <em>into</em> the platform.</p>
<p>In this article, I’ll walk you through how I built a lightweight Node.js REST API that connects Bolt.new directly to GitHub enabling one-click issue reporting, even for non-developers.</p>
<h2 id="heading-the-problem-silent-failures-amp-frustrated-users">The Problem: Silent Failures &amp; Frustrated Users</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1748438812042/30bbcc73-f322-4aaa-b9b4-46032aa75c5c.png" alt /></p>
<p>Before this solution, feedback from non-technical users was inconsistent and fragmented. Most bugs or errors experienced by product stakeholders went unreported or were communicated informally. For example this user created a github account just for submit an issue an he left a long message about his problem without guidance.</p>
<p>This led to:</p>
<ul>
<li><p>A lack of visibility into recurring issues.</p>
</li>
<li><p>Slower bug resolution.</p>
</li>
<li><p>A hit to overall user trust and platform reliability.</p>
</li>
</ul>
<h2 id="heading-the-solution-github-connected-issue-reporting-api">The Solution: GitHub-Connected Issue Reporting API</h2>
<p>I created a TypeScript-based Express API that:</p>
<ul>
<li><p>Accepts issue reports via a <code>POST</code> endpoint.</p>
</li>
<li><p>Validates and structures user-submitted data.</p>
</li>
<li><p>Authenticates via GitHub’s API using Octokit.</p>
</li>
<li><p>Automatically creates detailed GitHub issues in real-time.</p>
</li>
</ul>
<p>This solution empowers users to report directly from Bolt.new, no GitHub knowledge needed.</p>
<h2 id="heading-under-the-hood">Under the Hood</h2>
<p>This project was built with production-level tooling and quality standards in mind:</p>
<h3 id="heading-key-features">Key Features</h3>
<ul>
<li><p><strong>Zod</strong> for request validation (type-safe and runtime safe).</p>
</li>
<li><p><strong>Centralized logging</strong> and structured error handling.</p>
</li>
<li><p><strong>Environment variable validation</strong> to avoid silent config errors.</p>
</li>
<li><p><strong>Linting + formatting</strong> with ESLint, Prettier, Husky and lint-staged.</p>
</li>
<li><p><strong>Unit tests</strong> with Jest and <strong>integration tests</strong> using Supertest.</p>
</li>
</ul>
<h2 id="heading-endpoint-design-amp-expected-payload">Endpoint Design &amp; Expected Payload</h2>
<h3 id="heading-post-apireport">POST <code>/api/report</code></h3>
<h4 id="heading-request-body-json">Request Body (JSON):</h4>
<pre><code class="lang-json">{
  <span class="hljs-attr">"title"</span>: <span class="hljs-string">"Bug summary"</span>,
  <span class="hljs-attr">"description"</span>: <span class="hljs-string">"Detailed user-provided description"</span>,
  <span class="hljs-attr">"context"</span>: {
    <span class="hljs-attr">"url"</span>: <span class="hljs-string">"Bolt.new session link"</span>,
    <span class="hljs-attr">"errors"</span>: [<span class="hljs-string">"Error stack traces, if any"</span>],
    <span class="hljs-attr">"actions"</span>: [<span class="hljs-string">"User steps before the issue"</span>]
  }
}
</code></pre>
<p>This payload is translated into a structured GitHub issue with embedded context, accelerating dev triage.</p>
<h2 id="heading-evolution-toward-a-rich-feedback-interface">Evolution: Toward a Rich Feedback Interface</h2>
<p>While the initial version of the API handled structured text input, the next step is to <strong>enrich the user feedback experience</strong> by integrating a lightweight markdown or WYSIWYG editor.</p>
<p>This enhancement would allow users to:</p>
<ul>
<li><p>Format their descriptions with headings, lists, or code blocks.</p>
</li>
<li><p><strong>Embed screenshots</strong> directly into the issue report (via base64 upload or image hosting).</p>
</li>
<li><p>Provide clearer reproduction steps with visual support.</p>
</li>
</ul>
<p>This evolution aligns with our goal of making technical feedback accessible and useful for both technical and non-technical contributors.</p>
<h2 id="heading-tech-stack-amp-architecture">Tech Stack &amp; Architecture</h2>
<h3 id="heading-why-nodejs-express">Why Node.js + Express?</h3>
<ul>
<li><p>Fast to prototype.</p>
</li>
<li><p>Native JSON support.</p>
</li>
<li><p>Seamless GitHub API integration.</p>
</li>
</ul>
<h3 id="heading-why-typescript">Why TypeScript?</h3>
<ul>
<li><p>Strong typings for safer, more maintainable code.</p>
</li>
<li><p>Helpful for team collaboration and future scaling.</p>
</li>
</ul>
<h3 id="heading-why-octokit">Why Octokit?</h3>
<ul>
<li><p>Official GitHub SDK.</p>
</li>
<li><p>Simple authentication and repo interaction.</p>
</li>
</ul>
<h3 id="heading-project-structure">Project Structure:</h3>
<pre><code class="lang-plaintext">bolt-issue-api/
├── src/
│   ├── controllers/reportController.ts
│   ├── routes/reportRoutes.ts
│   ├── services/githubService.ts
│   ├── middleware/
│   │   ├── errorHandler.ts
│   │   └── validate.ts
│   ├── config/index.ts
│   ├── schemas/reportSchema.ts
│   ├── utils/logger.ts
│   └── server.ts
├── tests/
│   ├── services/githubService.test.ts
│   ├── routes/reportRoutes.test.ts
│   ├── utils/logger.test.ts
│   └── middleware/errorHandler.test.ts
├── openapi.yaml
├── .env.example
├── .eslintrc.js
├── .prettierrc
├── .gitignore
├── jest.config.js
├── package.json
├── tsconfig.json
└── README.md
</code></pre>
<h2 id="heading-results-what-this-changed">Results: What This Changed</h2>
<p>With this integration:</p>
<ul>
<li><p><strong>Users</strong> can now report bugs in 30 seconds or less.</p>
</li>
<li><p><strong>Devs</strong> get structured, actionable reports in GitHub.</p>
</li>
<li><p><strong>PMs</strong> and QA teams gain better visibility into platform issues.</p>
</li>
</ul>
<p>This single API reduced debugging turnaround and improved our response time to user pain points dramatically.</p>
<h2 id="heading-key-screenshots">Key ScreenShots</h2>
<p><strong>POST Request to submit an issue</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1748533822543/4b68c8d3-9ca6-453e-a77f-9b5f19e58e0c.png" alt="POST Request to submit an issue" /></p>
<p><strong>Issues Page from Github</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1748533945222/b1d61a2b-2f1d-4b42-90d0-193168abf589.png" alt="Issues Page from Github" /></p>
<p><strong>Issue created from api</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1748533961550/ff8349c5-8510-40db-b734-9d2559a9f63c.png" alt="Issue created from api" /></p>
<p><strong>Test Execution</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1748533979008/6c943c0d-ca54-4239-a6bd-c6a89ce74cca.png" alt="Issue created from api" /></p>
<p><strong>Test Execution</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1748533986906/5a3f732d-8d27-484d-a47a-f373c49da16c.png" alt /></p>
<p>Swagger Documentation</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1748533997399/3bf1b4d2-00fa-4c5e-b06a-5504128a9f4f.png" alt="Swagger Documentation" /></p>
<h2 id="heading-conclusion">Conclusion</h2>
<p><strong>Bolt.new</strong> has been one of the most surprising tools in my ongoing comparison series on AI-powered developer platforms. Its browser-first, instant-on approach to fullstack development makes it an excellent playground for quick iterations.</p>
<p>But more importantly, it’s a powerful foundation to build upon. This user feedback API is a concrete example: it solves a real product need, integrates seamlessly into the Bolt.new workflow, and opens the door to more advanced extensions contextual chat, AI assistance, session tracking, and beyond.</p>
<p>As a developer and SaaS builder, I deeply believe in this approach: enhancing the tools we already use with integrated, UX-friendly layers that bring value to all roles not just engineers.</p>
<p>This API is a first brick. If it inspires you, feel free to fork it, extend it, or reach out to discuss it!</p>
<p>I co-wrote another article where we tested <strong>bolt.new</strong> on a real project with feedback on the advantages and limitations of the tool: <a target="_blank" href="https://blog.fredthedev.com/episode-3-boltnew-lia-qui-genere-une-web-app-complete-sans-coder">read it here</a>.</p>
<h2 id="heading-relevant-links">Relevant Links:</h2>
<ul>
<li><p><a target="_blank" href="https://github.com/fredagbona/bolt-issue-api">Complete code on Github</a></p>
</li>
<li><p><a target="_blank" href="https://stackblitz.com/">StackBlitz</a></p>
</li>
<li><p><a target="_blank" href="https://bolt.new">Bolt.new</a></p>
</li>
<li><p><a target="_blank" href="https://github.com/stackblitz/bolt.new/issues">Bolt.new GitHub Issues</a></p>
</li>
</ul>
<h2 id="heading-references-amp-resources">References &amp; Resources</h2>
<ul>
<li><p><a target="_blank" href="https://docs.github.com/en/rest">GitHub REST API</a></p>
</li>
<li><p><a target="_blank" href="https://github.com/octokit/rest.js">Octokit SDK</a></p>
</li>
<li><p><a target="_blank" href="https://nodejs.org/">Node.js</a></p>
</li>
<li><p><a target="_blank" href="https://typescriptlang.org/">TypeScript</a></p>
</li>
<li><p><a target="_blank" href="https://expressjs.com/">Express.js</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Episode 3 - Bolt.new : l’IA qui génère une web app complète sans coder ?]]></title><description><![CDATA[Par Fred Komedja (Tonton Fred) et Freddy Agbona
Introduction
Les outils IA pour développeurs sont nombreux. Certains vous aident à écrire une fonction. D’autres corrigent votre code ou en proposent un meilleur. Mais aujourd’hui, on parle d’un outil b...]]></description><link>https://blog.fredthedev.com/episode-3-boltnew-lia-qui-genere-une-web-app-complete-sans-coder</link><guid isPermaLink="true">https://blog.fredthedev.com/episode-3-boltnew-lia-qui-genere-une-web-app-complete-sans-coder</guid><category><![CDATA[bolt.new]]></category><category><![CDATA[React]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[MongoDB]]></category><category><![CDATA[fredthedev]]></category><category><![CDATA[Comparatif IA]]></category><dc:creator><![CDATA[Freddy Agbona (FredTheDev)]]></dc:creator><pubDate>Wed, 28 May 2025 12:34:33 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1748433404684/0f2c9af2-45bc-4dd3-80f5-910ce9fa5aa9.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Par</strong> <a target="_blank" href="https://www.linkedin.com/in/fred-komedja-5812811b6/"><strong>Fred Komedja (Tonton Fred)</strong></a> <strong>et</strong> <a target="_blank" href="https://www.linkedin.com/in/fredthedev"><strong>Freddy Agbona</strong></a></p>
<h2 id="heading-introduction">Introduction</h2>
<p>Les outils IA pour développeurs sont nombreux. Certains vous aident à écrire une fonction. D’autres corrigent votre code ou en proposent un meilleur. Mais aujourd’hui, on parle d’un outil bien plus radical : <strong>Bolt.new</strong>.</p>
<p>Bolt promet de générer une application web entière à partir d’un simple prompt. Frontend, backend, base de données, API, auth... le tout dans une interface visuelle accessible depuis le navigateur. En gros, un <strong>assistant IA tout-en-un</strong> pour prototyper une application sans toucher à une ligne de code.</p>
<p>Mais est-ce réellement efficace ? Est-ce que ça tient sur un projet complet ?<br />C’est ce que <strong>Fred Komedja</strong>, alias <strong>Tonton Fred</strong>, a voulu vérifier avec le même projet que tous les autres participants de la série.</p>
<h2 id="heading-qui-est-fred-komedja">Qui est Fred Komedja ?</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1748435340607/eaf8ebda-8584-42c0-a8e2-8af1abbc1a3c.jpeg" alt /></p>
<p>Connu sous le pseudo <strong>Tonton Fred</strong>, <a target="_blank" href="https://www.linkedin.com/in/fred-komedja-5812811b6/"><strong>Fred Komedja</strong></a> est actuellement <strong>Head of SEO chez</strong> <a target="_blank" href="https://blue-sydney.com/"><strong>Blue-Sydney</strong></a>. Il maîtrise les enjeux de visibilité web, de contenu, mais aussi de développement.</p>
<p>Avant d'être stratège SEO, Fred était développeur web, avec un vrai passé tech solide. Aujourd’hui, il combine cette double compétence pour tester des outils comme Bolt.new, à la frontière entre « dev » et « no-code assisté par IA ».</p>
<h2 id="heading-le-projet-test-taskly">Le projet test : Taskly</h2>
<p>Comme les autres participants, Fred a travaillé sur <strong>Taskly</strong>, une application de gestion collaborative de tâches avec :</p>
<ul>
<li><p>Authentification (signup/login)</p>
</li>
<li><p>Création, édition et suppression de tâches</p>
</li>
<li><p>Assignation de tâches à d’autres utilisateurs</p>
</li>
<li><p>Affichage dynamique des statuts</p>
</li>
<li><p>Design propre avec Tailwind CSS</p>
</li>
</ul>
<p>Et il a tout réalisé… <strong>en quelques clics seulement</strong>.</p>
<h2 id="heading-experience-avec-boltnewhttpsboltnew">Expérience avec <a target="_blank" href="https://bolt.new/">Bolt.new</a></h2>
<h3 id="heading-le-prompt-de-depart">Le prompt de départ :</h3>
<blockquote>
<p>"Je veux une application de gestion de tâches avec authentification, possibilité d’ajouter, modifier et supprimer des tâches, et chaque tâche doit pouvoir être assignée à un utilisateur. Utilise React pour le frontend et Supabase pour le backend."</p>
</blockquote>
<p>En quelques secondes, Bolt a généré :</p>
<ul>
<li><p>Une interface web avec pages d’accueil, login et dashboard</p>
</li>
<li><p>Une base de données Supabase préconfigurée</p>
</li>
<li><p>Des fichiers de configuration backend/DB/API</p>
</li>
<li><p>Un frontend responsive avec Tailwind CSS</p>
</li>
</ul>
<p>Fred n’a pas eu à coder <strong>manuellement</strong>. Mais il a quand même dû :</p>
<ul>
<li><p>Modifier des labels et composants (textes anglais, ajustements UX)</p>
</li>
<li><p>Ajouter un système de suppression avec validation (non inclus par défaut)</p>
</li>
<li><p>Corriger des erreurs d’affichage (affichage conditionnel de tâches)</p>
</li>
</ul>
<h2 id="heading-pertinence-amp-limites-de-lia">Pertinence &amp; limites de l’IA</h2>
<p>Bolt est rapide, mais encore jeune.</p>
<p>👍 Ce qui fonctionne bien :</p>
<ul>
<li><p>Structure du projet complète</p>
</li>
<li><p>Authentification intégrée (via Supabase)</p>
</li>
<li><p>Cohérence générale frontend/backend</p>
</li>
<li><p>Facilité de déploiement immédiat</p>
</li>
</ul>
<p>👎 Ce qui coince :</p>
<ul>
<li><p>Traduction parfois incomplète (anglais/français)</p>
</li>
<li><p>Bugs mineurs à corriger manuellement</p>
</li>
<li><p>Aucune personnalisation fine possible depuis l’interface</p>
</li>
</ul>
<blockquote>
<p><em>« Bolt fait 80 % du boulot, mais tu dois finir les 20 % restants. Et il faut connaître un minimum de dev pour corriger intelligemment. »</em></p>
</blockquote>
<h2 id="heading-design-genere">Design généré</h2>
<p>Fred a apprécié la qualité de la structure visuelle :</p>
<ul>
<li><p>UI simple mais propre</p>
</li>
<li><p>Responsive sur desktop et mobile</p>
</li>
<li><p>Utilisation de Tailwind CSS proprement configurée</p>
</li>
</ul>
<p>Il a tout de même dû ajuster certains comportements de composants : listes de tâches non réactives à certains statuts, et quelques bugs de refresh.</p>
<h2 id="heading-cout-amp-accessibilite">Coût &amp; accessibilité</h2>
<p>Bolt.new propose une version gratuite limitée. Fred a utilisé la <strong>version gratuite avec les crédits de base</strong>, sans devoir payer pour ce test.</p>
<p>Pour générer plusieurs projets ou pousser en production, un abonnement payant devient vite nécessaire.</p>
<h2 id="heading-verdict-final">Verdict final</h2>
<p>Bolt.new est une plateforme puissante si tu veux aller vite, valider une idée ou prototyper un MVP.</p>
<p>Elle permet à des développeurs comme à des profils SEO, produit ou marketing de créer une web app fonctionnelle <strong>sans coder</strong>, ou presque.</p>
<p>Mais cela reste un outil jeune, et sa promesse "no-code total" n’est pas encore parfaitement tenue.</p>
<h3 id="heading-points-forts">✅ Points forts :</h3>
<ul>
<li><p>Génère une structure complète frontend/backend/DB</p>
</li>
<li><p>Supabase intégré sans friction</p>
</li>
<li><p>Responsive design propre et rapide</p>
</li>
<li><p>Idéal pour MVP, tests, hackathons</p>
</li>
</ul>
<h3 id="heading-points-faibles">⚠️ Points faibles :</h3>
<ul>
<li><p>Faible marge de personnalisation</p>
</li>
<li><p>Bugs et ajustements manuels nécessaires</p>
</li>
<li><p>Traductions non localisées</p>
</li>
<li><p>Code peu maintenable en cas de refacto</p>
</li>
</ul>
<h2 id="heading-liens-utiles">Liens utiles</h2>
<p>👉 <a target="_blank" href="https://github.com/fred-rom22/taskly-todo-app">Code source complet sur GitHub</a><br />👉 <a target="_blank" href="https://blog.fredthedev.com/series/comparatif-ia-developpeurs">Voir toute la série sur Hashnode</a></p>
<h2 id="heading-suivre-fred-komedja">Suivre Fred Komedja</h2>
<ul>
<li><p>🔗 <a target="_blank" href="https://github.com/fred-rom22">GitHub</a></p>
</li>
<li><p>🔗 <a target="_blank" href="https://www.linkedin.com/in/fred-komedja-5812811b6/">LinkedIn</a></p>
</li>
<li><p>🔗 <a target="_blank" href="https://x.com/CodjoFred">X / Twitter</a></p>
</li>
</ul>
<h2 id="heading-prochain-episode">Prochain épisode</h2>
<p>Dans 3 jours, <strong>un autre expert</strong> entre en jeu avec <strong>un autre outil</strong>.<br />Une IA bien connue... mais tient-elle la route sur un vrai projet complet ?</p>
<p>Rendez-vous dans le prochain épisode.</p>
]]></content:encoded></item><item><title><![CDATA[Episode 2 - Cursor : l’éditeur IA intégré qui code avec toi ?]]></title><description><![CDATA[Par Jacob Gomez et Freddy Agbona
Introduction
Après avoir découvert Claude dans le premier épisode, place aujourd’hui à Cursor, un outil moins connu que ChatGPT ou Copilot, mais qui prend une place de plus en plus sérieuse chez les développeurs.
Curs...]]></description><link>https://blog.fredthedev.com/episode-2-cursor-lediteur-ia-integre-qui-code-avec-toi</link><guid isPermaLink="true">https://blog.fredthedev.com/episode-2-cursor-lediteur-ia-integre-qui-code-avec-toi</guid><category><![CDATA[éditeur IA]]></category><category><![CDATA[IA pour développeurs]]></category><category><![CDATA[cursor]]></category><category><![CDATA[IA]]></category><category><![CDATA[fredthedev]]></category><category><![CDATA[React]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[Express]]></category><category><![CDATA[MongoDB]]></category><category><![CDATA[Comparatif IA]]></category><dc:creator><![CDATA[Freddy Agbona (FredTheDev)]]></dc:creator><pubDate>Tue, 20 May 2025 12:42:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1747393947989/dc83dbfc-8318-4281-9b20-553eccde2c16.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Par</strong> <a target="_blank" href="https://www.linkedin.com/in/jacob-ambroise-david-gomez-989b151b9"><strong>Jacob Gomez</strong></a> <strong>et</strong> <a target="_blank" href="https://www.linkedin.com/in/fredthedev"><strong>Freddy Agbona</strong></a></p>
<h2 id="heading-introduction">Introduction</h2>
<p>Après avoir découvert Claude dans le premier épisode, place aujourd’hui à <strong>Cursor</strong>, un outil moins connu que ChatGPT ou Copilot, mais qui prend une place de plus en plus sérieuse chez les développeurs.</p>
<p>Cursor, c’est un éditeur de code complet, basé sur VS Code, dopé à l’IA. Pas besoin de copier-coller des bouts de code dans un chatbot externe : <strong>l’IA est directement dans ton environnement de travail</strong>.</p>
<p>Mais alors, est-ce vraiment utile ? Est-ce que ça change la façon de développer ?<br />C’est ce que <strong>Jacob Gomez</strong> a voulu tester.</p>
<h2 id="heading-qui-est-gojanda-jacob-gomez">Qui est Gojanda / Jacob Gomez ?</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747394241507/9b7e0a31-0d56-430f-a44f-a555e8e76103.jpeg" alt /></p>
<p><a target="_blank" href="https://www.linkedin.com/in/jacob-ambroise-david-gomez-989b151b9"><strong>Jacob Gomez</strong></a>, alias <strong>Gojanda</strong>, est <strong>formateur</strong> et <strong>développeur web</strong>, passionné par la transmission et les outils qui font gagner du temps. Il est actif sur YouTube, où il partage ses retours techniques et pédagogiques, et toujours curieux de découvrir ce que l’IA peut vraiment apporter à son quotidien de dev.</p>
<h2 id="heading-presentation-de-cursorhttpswwwcursorcom">Présentation de <a target="_blank" href="https://www.cursor.com/">Cursor</a></h2>
<p>Cursor est un <strong>éditeur de code intelligent</strong> qui intègre l’IA directement dans l’IDE. Inspiré de VS Code, il permet de :</p>
<ul>
<li><p>Générer et corriger du code</p>
</li>
<li><p>Réécrire une fonction en quelques clics</p>
</li>
<li><p>Poser une question à ton code (ou sur ton code)</p>
</li>
<li><p>Itérer rapidement <strong>sans changer d’outil</strong></p>
</li>
</ul>
<p>Le vrai plus : <strong>le contexte de l’IA est conservé directement dans le fichier sur lequel tu travailles</strong>. Pas besoin de tout réexpliquer à chaque prompt.</p>
<h2 id="heading-le-projet-test-todo-app-challenge-ai">Le projet test : ToDo App Challenge AI</h2>
<p>Comme tous les autres participants, Jacob a travaillé sur une app collaborative de gestion de tâches, avec :</p>
<ul>
<li><p>Authentification (login/register)</p>
</li>
<li><p>Création, modification, suppression de tâches</p>
</li>
<li><p>Assignation de tâches à un autre utilisateur</p>
</li>
<li><p>Notifications en temps réel via Socket.io</p>
</li>
<li><p>Design soigné avec Tailwind CSS</p>
</li>
</ul>
<h2 id="heading-temps-de-developpement">Temps de développement</h2>
<p>Jacob a documenté <strong>chaque bloc fonctionnel</strong> généré avec Cursor, avec les prompts associés.</p>
<p>La séparation frontend/backend a été respectée, avec une série d’itérations bien structurées pour une durée total de 4h de dev.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747656632475/020401b8-9f9c-497f-a4f7-23dfe534d6a8.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-nombre-de-prompts-utilises">Nombre de prompts utilisés</h2>
<p>Cursor a été sollicité <strong>12 fois au total</strong> pour ce projet, répartis comme suit :</p>
<h3 id="heading-backend-6-prompts">Backend (6 prompts) :</h3>
<ol>
<li><p>Génération initiale de l’API en Express.js + MongoDB</p>
</li>
<li><p>Configuration des variables d’environnement</p>
</li>
<li><p>Correction de connexion MongoDB (IP non autorisée)</p>
</li>
<li><p>Implémentation des notifications avec Socket.io</p>
</li>
<li><p>Refactorisation pour éviter les dépendances circulaires</p>
</li>
<li><p>Intégration des notifications dans les routes</p>
</li>
</ol>
<h3 id="heading-frontend-6-prompts">Frontend (6 prompts) :</h3>
<ol>
<li><p>Génération initiale avec React + Tailwind CSS</p>
</li>
<li><p>Liste des packages à installer</p>
</li>
<li><p>Correction des composants manquants (ProtectedRoute, Layout)</p>
</li>
<li><p>Gestion du token utilisateur (bug résolu)</p>
</li>
<li><p>Ajout de l’assignation + affichage des échéances</p>
</li>
<li><p>Correction des erreurs JS (identifiants dupliqués, etc.)</p>
</li>
</ol>
<hr />
<h2 id="heading-qualite-du-code-genere">Qualité du code généré</h2>
<p>Cursor a produit un code :<br />✅ propre<br />✅ bien structuré<br />✅ facile à lire<br />✅ et souvent fonctionnel <strong>dès la première génération</strong></p>
<hr />
<h2 id="heading-pertinence-des-suggestions">Pertinence des suggestions</h2>
<blockquote>
<p><em>“J’ai eu un bug sur le token utilisateur. Cursor m’a suggéré une correction pertinente, et ça a marché sans que je reformule pendant 10 minutes.”</em></p>
</blockquote>
<h2 id="heading-experience-utilisateur-amp-ergonomie">Expérience utilisateur &amp; ergonomie</h2>
<ul>
<li><p>Basé sur VS Code</p>
</li>
<li><p>IA disponible directement dans l’interface</p>
</li>
<li><p>Suggestions ciblées, prompts fluides</p>
</li>
<li><p>Productivité boostée <strong>sans sortir de l’IDE</strong></p>
</li>
</ul>
<h2 id="heading-cout-de-loutil">Coût de l’outil</h2>
<p>Version gratuite utilisée ici. Suffisante pour ce projet.<br />Mais limitations en nombre de prompts → la version pro est à envisager pour une utilisation quotidienne.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747656743474/665f3c84-0642-4cc8-82af-9b6aa8be6349.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-verdict-de-jacob">Verdict de Jacob</h2>
<p>Cursor est un excellent assistant IA <strong>si tu es déjà à l’aise dans un IDE</strong>.<br />Il t’aide à rester concentré, à coder vite, proprement, et sans casser ton rythme de travail.</p>
<p>C’est un outil <strong>rapide, précis, puissant</strong>, qui te laisse garder la main tout en accélérant tes tâches courantes.<br />Mais il demande un minimum d’autonomie et de rigueur pour en tirer le meilleur.</p>
<h3 id="heading-points-forts">Points forts :</h3>
<ul>
<li><p>Intégré directement dans l’IDE (pas de friction)</p>
</li>
<li><p>Contexte de fichier conservé, pas besoin de tout repréciser</p>
</li>
<li><p>Suggestions pertinentes et bien ciblées</p>
</li>
<li><p>Bon équilibre entre vitesse et qualité du code</p>
</li>
</ul>
<h3 id="heading-points-faibles">Points faibles :</h3>
<ul>
<li><p>Version gratuite limitée en prompts</p>
</li>
<li><p>Moins pédagogique que ChatGPT (surtout pour les débutants)</p>
</li>
<li><p>Nécessite une structure mentale claire pour découper les prompts</p>
</li>
</ul>
<blockquote>
<p>“Cursor m’a vraiment aidé à aller vite sans sortir de mon environnement de travail. Je l’adopterais sur des projets perso ou des protos rapides.”</p>
</blockquote>
<h2 id="heading-interfaces-de-lapp-cursor">Interfaces de l’app Cursor</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747656525993/97849ec6-53e2-4e3a-94aa-9e4fad315ae0.png" alt /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747656530286/712f9d36-367f-4bc4-ac6a-3152488cd7ef.png" alt /></p>
<h2 id="heading-liens-utiles">Liens utiles</h2>
<p>👉 <a target="_blank" href="https://github.com/JacobGomez325/todo-app-challenge-ai-front">Frontend – GitHub</a><br />👉 <a target="_blank" href="https://github.com/JacobGomez325/todo-app-challenge-ai-backend">Backend – GitHub</a><br />👉 <a target="_blank" href="https://blog.fredthedev.com/series/comparatif-ia-developpeurs">Voir toute la série sur Hashnode</a></p>
<h2 id="heading-suivre-jacob-gojanda">Suivre Jacob (Gojanda)</h2>
<ul>
<li><p>🎥 <a target="_blank" href="https://youtube.com/@gojanda">YouTube – Gojanda</a></p>
</li>
<li><p>🔗 <a target="_blank" href="https://www.linkedin.com/in/jacob-ambroise-david-gomez-989b151b9">LinkedIn</a></p>
</li>
<li><p>💻 <a target="_blank" href="https://github.com/JacobGomez325">GitHub</a></p>
</li>
</ul>
<h2 id="heading-prochain-episode">Prochain épisode</h2>
<p>Dans 3 jours, <strong>un autre expert</strong> entre en scène avec <strong>un outil qui fait rage actuellement</strong>.<br />Une IA minimaliste, mais redoutable de structure. On verra si elle tient la cadence.</p>
]]></content:encoded></item><item><title><![CDATA[Épisode 1 - Claude pour les devs : que vaut l’IA d’Anthropic sur un vrai projet fullstack ?]]></title><description><![CDATA[Par Ouadoud & Freddy
Introduction
Ces derniers mois, les assistants IA pour développeurs se sont multipliés : Copilot, Cursor, Bolt, Claude, Windsurf…Mais lequel est vraiment utile quand on code un projet complet de A à Z ?
Pas une petite fonction. P...]]></description><link>https://blog.fredthedev.com/episode-1-claude-pour-les-devs-que-vaut-lia-danthropic-sur-un-vrai-projet-fullstack</link><guid isPermaLink="true">https://blog.fredthedev.com/episode-1-claude-pour-les-devs-que-vaut-lia-danthropic-sur-un-vrai-projet-fullstack</guid><category><![CDATA[Assistant IA]]></category><category><![CDATA[Comparatif IA]]></category><category><![CDATA[facdudev]]></category><category><![CDATA[fredthedev]]></category><category><![CDATA[Série IA 2025]]></category><category><![CDATA[claude.ai]]></category><category><![CDATA[claude]]></category><category><![CDATA[#anthropic]]></category><category><![CDATA[développement web]]></category><category><![CDATA[full stack]]></category><category><![CDATA[React]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[MongoDB]]></category><category><![CDATA[Productivity]]></category><dc:creator><![CDATA[Freddy Agbona (FredTheDev)]]></dc:creator><pubDate>Fri, 16 May 2025 09:44:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1747380927977/41a1061e-b53b-40fd-9288-d7137e677d2a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Par</strong> <a target="_blank" href="https://www.linkedin.com/in/abdoulouadoud"><strong>Ouadoud</strong></a> <strong>&amp;</strong> <a target="_blank" href="https://www.linkedin.com/in/fredthedev/"><strong>Freddy</strong></a></p>
<h2 id="heading-introduction">Introduction</h2>
<p>Ces derniers mois, les assistants IA pour développeurs se sont multipliés : Copilot, Cursor, Bolt, Claude, Windsurf…<br />Mais lequel est vraiment utile quand on code <strong>un projet complet</strong> de A à Z ?</p>
<p>Pas une petite fonction. Pas un bout de CSS.<br />Mais une vraie app : authentification, backend, frontend, base de données, logique métier… le tout sans raccourci.</p>
<p>Dans cette série, cinq développeurs ont accepté un défi simple mais ambitieux :</p>
<ul>
<li><p>Utiliser chacun <strong>un seul assistant IA</strong></p>
</li>
<li><p>Travailler sur <strong>le même projet fullstack</strong></p>
</li>
<li><p>Partager un retour <strong>brut, honnête et mesuré</strong></p>
</li>
</ul>
<p>Aujourd’hui, on ouvre le bal avec <strong>Claude AI</strong>, testé par <strong>Ouadoud</strong>, développeur frontend expérimenté.</p>
<h2 id="heading-qui-est-ouadoud">Qui est Ouadoud ?</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747141663696/a1efe362-9dfb-4796-b298-b07f9ec24345.jpeg" alt="BOURAIMA ABDOUL OUADOUD" class="image--center mx-auto" /></p>
<p><a target="_blank" href="https://www.linkedin.com/in/abdoulouadoud"><strong>BOURAIMA ABDOUL OUADOUD</strong></a> est développeur <strong>Frontend &amp; Blockchain</strong>. Toujours curieux de découvrir de nouvelles technologies, il explore autant le web que l’univers de la <strong>blockchain</strong>, de <strong>l’IoT</strong> ou encore de l’<strong>intelligence artificielle</strong>.</p>
<p>Son profil est à la croisée des mondes : rigoureux, mais ouvert ; technique, mais créatif. Il aime construire des interfaces intuitives, propres, efficaces, tout en gardant un œil sur les tendances qui bousculent l’industrie.</p>
<p>Et quand il n’est pas plongé dans du code ? Il nourrit sa créativité dans la <strong>science-fiction</strong> et le <strong>cinéma</strong>, deux sources d’inspiration qui influencent sa manière de penser les produits tech et les expériences utilisateurs.</p>
<p>Pour ce test, Ouadoud a joué franc-jeu : il n’avait <strong>jamais utilisé Express.js ni MongoDB</strong> avant ce projet. Et pourtant, il s’est lancé à fond, avec Claude comme copilote principal.</p>
<h2 id="heading-claude-aihttpsclaudeai-en-bref"><a target="_blank" href="https://claude.ai/">Claude AI</a> en bref</h2>
<p>Développé par <strong>Anthropic</strong>, Claude est un assistant IA pensé pour être plus "aligné", plus sûr, et plus pertinent que ses concurrents.</p>
<p>Ce qui distingue Claude :</p>
<ul>
<li><p>Une <strong>compréhension contextuelle très fine</strong></p>
</li>
<li><p>Une approche <strong>très conversationnelle</strong>, presque "humaine"</p>
</li>
<li><p>Une <strong>capacité à anticiper des besoins</strong>, pas juste à répondre</p>
</li>
</ul>
<p>Ouadoud a utilisé <strong>la version gratuite de Claude 3</strong>, accessible via interface en ligne.</p>
<blockquote>
<p>🧠 Claude ne se contente pas de te donner un morceau de code. Il comprend <strong>ce que tu veux faire</strong> — et parfois même mieux que toi.</p>
</blockquote>
<h2 id="heading-le-projet-test-taskly">Le projet test : Taskly</h2>
<p>Le projet commun à tous les participants s'appelle <strong>Taskly</strong> : une mini-app de gestion de tâches collaborative.</p>
<p><strong>Fonctionnalités clés</strong> :</p>
<ul>
<li><p>Authentification utilisateur (JWT)</p>
</li>
<li><p>Ajout, modification, suppression de tâches</p>
</li>
<li><p>Assignation d’une tâche à un autre utilisateur</p>
</li>
<li><p>Dashboard par utilisateur</p>
</li>
</ul>
<p><strong>Technologies imposées</strong> :</p>
<ul>
<li><p><strong>Frontend :</strong> React.js</p>
</li>
<li><p><strong>Backend :</strong> Node.js + Express</p>
</li>
<li><p><strong>Base de données :</strong> MongoDB</p>
</li>
</ul>
<blockquote>
<p><strong>Objectif</strong> : simuler un cas d’usage concret de développement fullstack, et voir ce que l’IA peut vraiment apporter ou non.</p>
</blockquote>
<h2 id="heading-temps-de-developpement">Temps de développement</h2>
<p><strong>3h de travail en tout</strong>, découpées comme suit :</p>
<ul>
<li><p>1h30 pour la partie frontend (HTML, CSS, logique React)</p>
</li>
<li><p>45 min pour installer MongoDB et découvrir Express.js</p>
</li>
<li><p>45 min de retouches, tests, corrections, intégrations finales</p>
</li>
</ul>
<blockquote>
<p>"Je n'avais <strong>jamais</strong> utilisé MongoDB ou Express, et pourtant, avec Claude, j’ai réussi à les intégrer en moins d’une heure."</p>
</blockquote>
<p>Le frontend a été généré <strong>quasiment en une seule passe</strong>, à partir d’un prompt bien structuré.<br />Le backend a demandé un peu plus de gymnastique :</p>
<ul>
<li><p>Claude a fourni la structure</p>
</li>
<li><p>Ouadoud a utilisé Copilot pour initier des fichiers</p>
</li>
<li><p>Puis Claude a été réinvoqué dans un <strong>autre chat</strong> pour générer le backend complet</p>
</li>
</ul>
<blockquote>
<p>⚠️ Claude ne garde pas le contexte entre chats. Il faut <strong>repréciser tout le prompt</strong>, ce qui rallonge un peu le processus si on n'anticipe pas bien.</p>
</blockquote>
<h2 id="heading-nombre-de-prompts-amp-iterations">Nombre de prompts &amp; itérations</h2>
<p><strong>30 interactions totales avec Claude</strong></p>
<ul>
<li><p><strong>Frontend :</strong> 3 prompts seulement</p>
<ul>
<li><p>1er prompt : structure de l’interface</p>
</li>
<li><p>2e &amp; 3e : demander à Claude de continuer (car il s’arrête souvent de lui-même)</p>
</li>
</ul>
</li>
<li><p><strong>Backend :</strong> 7 prompts en tout, répartis entre :</p>
<ul>
<li><p>Génération de la structure</p>
</li>
<li><p>Création des endpoints (CRUD, login, register)</p>
</li>
<li><p>Corrections ponctuelles</p>
</li>
</ul>
</li>
<li><p><strong>5 autres chats</strong> ont été ouverts pour gérer des cas spécifiques (bugs, compléments de fonctionnalité, erreurs d’intégration)</p>
</li>
</ul>
<blockquote>
<p>Claude t’oblige à être <strong>organisé</strong> : bien découper ton projet, isoler les fonctionnalités, avoir une checklist claire = moins de prompts, plus de résultats.</p>
</blockquote>
<h2 id="heading-qualite-du-code-genere">Qualité du code généré</h2>
<p>Le code généré par Claude est :</p>
<ul>
<li><p>Clair</p>
</li>
<li><p>Structuré</p>
</li>
<li><p>Facile à relire et maintenir</p>
</li>
<li><p>Annoté avec des commentaires utiles</p>
</li>
</ul>
<p>Claude <strong>explique où placer chaque fichier</strong>, propose des structures de dossiers, et justifie ses choix.</p>
<blockquote>
<p>"Claude m’a même proposé un découpage en composants React auquel je n’avais pas pensé. Et c’était pertinent."</p>
</blockquote>
<p>Sur le backend, les routes sont bien posées, les middlewares correctement intégrés, et la logique des contrôleurs est intelligemment découpée.</p>
<h2 id="heading-pertinence-des-suggestions">Pertinence des suggestions</h2>
<p>Là où Claude brille vraiment, c’est dans sa <strong>capacité à anticiper</strong> ce que tu veux sans que tu le dises mot pour mot.</p>
<blockquote>
<p>"Je lui ai demandé un login/register. Il m’a aussi proposé une gestion d’erreur, une redirection conditionnelle et même un toast pour la UX."</p>
</blockquote>
<p>Il est capable de deviner ton intention globale, de proposer des alternatives, et de t’amener plus loin que prévu.</p>
<h2 id="heading-integration-dans-le-workflow">Intégration dans le workflow</h2>
<p>Claude mâche une grosse partie du travail :</p>
<ul>
<li><p>Il génère le code <strong>avec la structure de fichiers complète</strong></p>
</li>
<li><p>Il précise <strong>où coller chaque bloc de code</strong></p>
</li>
<li><p>Il peut montrer des rendus HTML/CSS directement dans l’interface</p>
</li>
</ul>
<p>Mais attention :</p>
<ul>
<li><p>Il s’interrompt souvent (« Claude est fatigué ») → il faut penser à sauvegarder</p>
</li>
<li><p>Il n’a pas de mémoire de chat → chaque session = nouveau prompt complet</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747149623072/3500d7b7-3814-48e8-be1c-325bc19965bd.png" alt="Claude fatigué" /></p>
</li>
</ul>
<h2 id="heading-cout">Coût</h2>
<p>Claude a été utilisé <strong>en version gratuite</strong>.<br />Cela fonctionne… à condition d’être malin :</p>
<ul>
<li><p>Bien structurer ses demandes</p>
</li>
<li><p>Travailler fonctionnalité par fonctionnalité</p>
</li>
<li><p>Réduire les prompts inutiles</p>
</li>
</ul>
<blockquote>
<p>"Avec un bon découpage et des prompts propres, un seul chat peut suffire à générer une feature complète."</p>
</blockquote>
<p>Mais si tu dois revenir sur un bug ou une ancienne réponse, <strong>le manque de mémoire contextuelle peut être bloquant</strong>.</p>
<h2 id="heading-verdict-final">Verdict final</h2>
<p>Claude est un excellent assistant IA, <strong>surtout si tu sais ce que tu veux</strong>.<br />Il t’aide à aller plus loin, à penser ton projet comme un architecte, et t’évite des dizaines de clics inutiles.</p>
<p>C’est un outil <strong>gratuit</strong>, efficace, complet, à condition d’adopter <strong>une stratégie structurée</strong>.</p>
<p><strong>Points forts</strong> :</p>
<ul>
<li><p>Précision et pertinence</p>
</li>
<li><p>Qualité du code</p>
</li>
<li><p>Suggestions contextuelles intelligentes</p>
</li>
<li><p>Gratuit et puissant</p>
</li>
</ul>
<p><strong>Points faibles</strong> :</p>
<ul>
<li><p>Fatigue rapide (sessions courtes)</p>
</li>
<li><p>Pas de mémoire de contexte entre chats</p>
</li>
<li><p>Nécessite une bonne rigueur dans le prompting</p>
</li>
</ul>
<h2 id="heading-interfaces-du-projet">Interfaces du projet</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747149236910/f826190d-0d8e-40e0-a15f-557d16d8910e.png" alt /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747149278278/3a2d7f12-a816-448d-96f4-84ad900ba4ac.png" alt /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747149342148/c590b7a7-16ac-4429-95c8-a3f6d665e2db.png" alt /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747149352947/6ed8e0d0-e7a7-4e7f-a3e0-262f6612664c.png" alt /></p>
<h2 id="heading-liens-utiles">Liens utiles</h2>
<p>👉 <a target="_blank" href="https://github.com/AbdoulOuadoud/taskly-frontend">Frontend – GitHub</a><br />👉 <a target="_blank" href="https://github.com/AbdoulOuadoud/taskly-backend">Backend – GitHub</a><br />👉 <a target="_blank" href="https://blog.fredthedev.com/series/comparatif-ia-developpeurs">Voir toute la série sur Hashnode</a></p>
<h2 id="heading-suivre-ouadoud">Suivre Ouadoud</h2>
<p>Tu veux suivre Ouadoud et en savoir plus sur ses projets ?</p>
<ul>
<li><p>🔗 <a target="_blank" href="https://www.linkedin.com/in/abdoulouadoud">LinkedIn</a></p>
</li>
<li><p>🔗 <a target="_blank" href="https://x.com/abdoul_ouadoud">X</a></p>
</li>
<li><p>🔗 <a target="_blank" href="https://abdoul-ouadoud.netlify.app/">Site web</a></p>
</li>
</ul>
<h2 id="heading-prochain-episode">Prochain épisode</h2>
<p>Suis la série ici ou abonne-toi à la newsletter pour ne rien rater 💌</p>
]]></content:encoded></item><item><title><![CDATA[Mastering Boilerplate Code in Software Development: Best Practices & Tips]]></title><description><![CDATA[1. Introduction
In software engineering, the term “boilerplate” refers to repetitive or standardized code that appears in many projects with only minor changes. Although it might seem like a “copy-paste” approach, boilerplate is crucial for quick pro...]]></description><link>https://blog.fredthedev.com/mastering-boilerplate-code-in-software-development-best-practices-tips</link><guid isPermaLink="true">https://blog.fredthedev.com/mastering-boilerplate-code-in-software-development-best-practices-tips</guid><category><![CDATA[boilerplate]]></category><category><![CDATA[Software Engineering]]></category><category><![CDATA[styleguide]]></category><category><![CDATA[standardization]]></category><category><![CDATA[components]]></category><category><![CDATA[Springboot]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[Express]]></category><dc:creator><![CDATA[Freddy Agbona (FredTheDev)]]></dc:creator><pubDate>Wed, 22 Jan 2025 12:18:54 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1737547136343/6b0baf65-ba0d-456d-97b3-b2524d801c7d.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-1-introduction">1. Introduction</h2>
<p>In software engineering, the term <strong>“boilerplate”</strong> refers to <strong>repetitive or standardized code</strong> that appears in many projects with only minor changes. Although it might seem like a “copy-paste” approach, <strong>boilerplate</strong> is crucial for <strong>quick project setups</strong> and for <strong>enforcing best practices</strong> across a codebase. This article explores:</p>
<ol>
<li><p>A <strong>metaphor</strong> to understand boilerplate.</p>
</li>
<li><p>The <strong>definition</strong> of boilerplate.</p>
</li>
<li><p><strong>Types of boilerplate</strong> you might encounter.</p>
</li>
<li><p>The <strong>difference</strong> between boilerplate and templates.</p>
</li>
<li><p><strong>Why</strong> boilerplate is important.</p>
</li>
<li><p><strong>Downsides</strong> to watch out for.</p>
</li>
<li><p><strong>Best practices</strong> to manage it effectively.</p>
</li>
<li><p><strong>Style guide</strong> basics.</p>
</li>
<li><p><strong>Real-world examples</strong> with Spring Boot and a personal Node.js/TypeScript boilerplate.</p>
</li>
<li><p>A <strong>conclusion</strong> and further <strong>resources</strong>.</p>
</li>
</ol>
<h2 id="heading-2-a-simple-metaphor-blueprints-vs-pre-fabricated-parts">2. A Simple Metaphor: “Blueprints vs. Pre-Fabricated Parts”</h2>
<p>Imagine you are <strong>building a house</strong>. You have the <strong>blueprints</strong> that define the structure (rooms, floors, electrical wiring), but you also have <strong>pre-fabricated parts</strong> (windows, doors, frames) which can be used in almost any new house with little change. These pre-made parts save you a lot of time, since you don’t have to craft a new door or window from scratch for each house you build.</p>
<ul>
<li><p><strong>Blueprint</strong> = the overall idea or plan (similar to <em>architecture designs</em> in software).</p>
</li>
<li><p><strong>Pre-fabricated parts</strong> = repeated, standardized elements (similar to <em>boilerplate code</em> in software).</p>
</li>
</ul>
<p>Just as pre-fabricated parts <strong>ensure consistency and speed</strong> in construction, <strong>boilerplate code</strong> ensures <strong>reliability and efficiency</strong> in software projects.</p>
<h2 id="heading-3-what-is-boilerplate">3. What Is Boilerplate?</h2>
<p>Historically, <strong>“boilerplate”</strong> comes from the printing industry, where steel plates (called boilerplates) were used to stamp the same text repeatedly in newspapers. In software, <strong>boilerplate</strong> is any <strong>standardized code</strong> that is frequently reused across projects, such as:</p>
<ul>
<li><p><strong>Configuration files</strong> (e.g., <code>application.properties</code> in Spring or <code>.env</code> in Node.js).</p>
</li>
<li><p><strong>Basic project setup</strong> (folders like <code>src</code>, <code>test</code>, or standard classes/functions).</p>
</li>
<li><p><strong>Common scripts</strong> (build scripts, deployment YAML files).</p>
</li>
</ul>
<p>Boilerplate reduces the need to rewrite the same foundational elements each time you create a new application.</p>
<h2 id="heading-4-types-of-boilerplate">4. Types of Boilerplate</h2>
<p>Boilerplate can take different forms:</p>
<ol>
<li><p><strong>Framework Starter Kits</strong></p>
<ul>
<li><p>Example: <strong>Spring Initializr</strong> for Spring Boot (Java).</p>
</li>
<li><p>Example: <strong>Create React App</strong> for React (JavaScript).</p>
</li>
</ul>
</li>
<li><p><strong>Configuration Packages</strong></p>
<ul>
<li>A set of <strong>default config files</strong> (like ESLint/Prettier rules, <code>.editorconfig</code>) that ensure consistency across projects.</li>
</ul>
</li>
<li><p><strong>Infrastructure as Code</strong></p>
<ul>
<li>Basic <strong>Dockerfiles</strong>, Kubernetes <strong>manifests</strong>, or CI/CD <strong>pipeline scripts</strong> that can be reused across multiple microservices.</li>
</ul>
</li>
<li><p><strong>Company or Team Templates</strong></p>
<ul>
<li>An internal boilerplate with your team’s best practices: logging, monitoring setup, testing frameworks, etc.</li>
</ul>
</li>
</ol>
<h2 id="heading-5-boilerplate-vs-templates-whats-the-difference">5. Boilerplate vs. Templates: What’s the Difference?</h2>
<p>Sometimes, the words <strong>“boilerplate”</strong> and <strong>“template”</strong> are used interchangeably, but there can be subtle differences:</p>
<ul>
<li><p><strong>Boilerplate</strong>:</p>
<ul>
<li><p>Usually refers to <strong>ready-to-use code</strong> or files that you copy into a new project.</p>
</li>
<li><p>Often includes <strong>standard configurations</strong>, <strong>folder structures</strong>, and <strong>common dependencies</strong>.</p>
</li>
<li><p>Tends to be more <strong>concrete</strong> (like actual <code>.js</code> or <code>.java</code> files).</p>
</li>
</ul>
</li>
<li><p><strong>Template</strong>:</p>
<ul>
<li><p>Can be more <strong>abstract</strong>—a skeleton or blueprint (could even be a written guide or partial code).</p>
</li>
<li><p>Sometimes uses variables or placeholders (e.g., <code>{{projectName}}</code>) that you fill in.</p>
</li>
<li><p>Focuses on <strong>providing a pattern</strong> or structure, rather than fully fleshed-out files.</p>
</li>
</ul>
</li>
</ul>
<p>In practice, people mix these terms a lot. However, you can think of <strong>templates</strong> as more general patterns, and <strong>boilerplate</strong> as more tangible, ready-made code.</p>
<h2 id="heading-6-why-is-boilerplate-important">6. Why Is Boilerplate Important?</h2>
<ol>
<li><p><strong>Standardization</strong><br /> With consistent boilerplate, teams share the same <strong>structure</strong>, code style, and naming conventions. This improves <strong>readability</strong> and <strong>onboarding</strong>.</p>
</li>
<li><p><strong>Time Savings</strong><br /> Reusing code that is proven to work <strong>reduces setup time</strong>. You can focus on <strong>business logic</strong> rather than rewriting basic functionality.</p>
</li>
<li><p><strong>Reliability</strong><br /> Boilerplate is often <strong>well-tested</strong> because it’s reused so many times. This can reduce bugs in critical setup steps (e.g., database configuration).</p>
</li>
<li><p><strong>Promoting Best Practices</strong><br /> Companies or open-source communities typically <strong>bake best practices</strong> (e.g., security, testing) into their boilerplate. Developers learn from these examples and keep their projects more robust.</p>
</li>
</ol>
<h2 id="heading-7-potential-downsides">7. Potential Downsides</h2>
<ol>
<li><p><strong>Bloated or Irrelevant Code</strong><br /> A “one-size-fits-all” approach may include <strong>unneeded dependencies</strong> and features that make your project heavier.</p>
</li>
<li><p><strong>Lack of Understanding</strong><br /> Auto-generated boilerplate can be so <strong>complete</strong> that developers <strong>don’t learn</strong> how each piece works. Troubleshooting might become harder if they don’t understand the boilerplate components.</p>
</li>
<li><p><strong>Maintenance Overhead</strong><br /> Dependencies change rapidly, and an outdated boilerplate can cause <strong>compatibility issues</strong> or security vulnerabilities.</p>
</li>
</ol>
<h2 id="heading-8-best-practices-for-managing-boilerplate">8. Best Practices for Managing Boilerplate</h2>
<ol>
<li><p><strong>Customize Carefully</strong></p>
<ul>
<li>If you generate a project with a CLI or use a base repository, remove what you <strong>don’t need</strong> to keep it lean.</li>
</ul>
</li>
<li><p><strong>Automate Creation</strong></p>
<ul>
<li>Create internal scripts or starter repositories for your team. For example, a <code>shell</code> or <code>PowerShell</code> script that clones your boilerplate and <strong>renames</strong> it automatically.</li>
</ul>
</li>
<li><p><strong>Document Everything</strong></p>
<ul>
<li>A <strong>README</strong> that explains the file structure, how to build, how to test, etc., helps new developers quickly grasp the boilerplate.</li>
</ul>
</li>
<li><p><strong>Assign Ownership</strong></p>
<ul>
<li>Have one or more people in charge of <strong>updating</strong> dependencies, removing obsolete files, and adding improvements.</li>
</ul>
</li>
<li><p><strong>Keep It Modular</strong></p>
<ul>
<li>Break your boilerplate into <strong>optional modules</strong> (e.g., authentication, database layer, etc.) so projects can pick only what they need.</li>
</ul>
</li>
</ol>
<h2 id="heading-9-style-guide-basics">9. Style Guide Basics</h2>
<p>A <strong>style guide</strong> defines <strong>coding standards</strong> and <strong>conventions</strong> for a project or organization:</p>
<ul>
<li><p><strong>Linting rules</strong> (e.g., ESLint, TSLint) to enforce consistent syntax and prevent errors.</p>
</li>
<li><p><strong>Formatting preferences</strong> (e.g., Prettier, EditorConfig) for indentation, spaces vs. tabs, etc.</p>
</li>
<li><p><strong>Naming conventions</strong> for files, folders, variables, classes.</p>
</li>
</ul>
<p>Including a <strong>style guide</strong> in your boilerplate ensures every new project automatically follows <strong>consistent coding practices</strong>. This not only saves time on code reviews, but also helps unify the look and feel of the entire codebase.</p>
<h2 id="heading-10-real-world-example-1-spring-boot-boilerplate">10. Real-World Example 1: Spring Boot Boilerplate</h2>
<p><strong>Scenario</strong>: You want to build a new Java microservice using <strong>Spring Boot</strong>.</p>
<ol>
<li><p><strong>Use Spring Initializr</strong>:</p>
<ul>
<li><p>Generates a base <code>pom.xml</code> (Maven) or <code>build.gradle</code> (Gradle) with your selected dependencies.</p>
</li>
<li><p>Creates a main application class with <code>@SpringBootApplication</code>.</p>
</li>
<li><p>Includes a default folder structure (<code>src/main/java</code>, <code>src/test/java</code>).</p>
</li>
</ul>
</li>
<li><p><strong>Customize</strong>:</p>
<ul>
<li><p>Remove dependencies you don’t need (e.g., <code>Spring Security</code> if not required).</p>
</li>
<li><p>Add new dependencies for your specific database or logging framework.</p>
</li>
</ul>
</li>
<li><p><strong>Document</strong>:</p>
<ul>
<li>Write a simple <code>README.md</code> explaining how to run (<code>mvn spring-boot:run</code>) and how your folders are structured.</li>
</ul>
</li>
<li><p><strong>Maintain</strong>:</p>
<ul>
<li><p>Keep an eye on <strong>Spring Boot</strong> updates.</p>
</li>
<li><p>Store this boilerplate in a Git repo so others can reuse and improve it.</p>
</li>
</ul>
</li>
</ol>
<h2 id="heading-11-real-world-example-2-personal-nodejsexpresstypescript-boilerplate">11. Real-World Example 2: Personal Node.js/Express/TypeScript Boilerplate</h2>
<p>You prefer creating your own boilerplate from scratch (like me), without external scaffolding tools like Yeoman or Cookiecutter.</p>
<h3 id="heading-project-structure">Project Structure</h3>
<pre><code class="lang-plaintext">my-personal-boilerplate
├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .gitignore
├── .prettierrc
├── package.json
├── README.md
├── scripts
│   ├── build.sh
│   └── test.sh
├── src
│   ├── app.ts
│   ├── routes
│   │   └── index.ts
│   └── server.ts
├── tsconfig.json
└── yarn.lock
</code></pre>
<ul>
<li><p><code>src/app.ts</code> sets up <strong>Express</strong> middleware.</p>
</li>
<li><p><code>src/server.ts</code> defines how to <strong>start the server</strong>.</p>
</li>
<li><p>ESLint, Prettier, and EditorConfig files ensure a consistent <strong>style guide</strong> is pre-configured.</p>
</li>
</ul>
<h3 id="heading-advantages">Advantages</h3>
<ul>
<li><p><strong>Consistency</strong>: Every new Node/Express/TypeScript project starts with the same <strong>structure</strong> and <strong>linting</strong> rules.</p>
</li>
<li><p><strong>Time Savings</strong>: No need to set up TypeScript, ESLint, or scripts manually each time.</p>
</li>
<li><p><strong>Full Control</strong>: You understand every file because you built it.</p>
</li>
<li><p><strong>Continuous Improvement</strong>: If you discover a new best practice (CI/CD config, Dockerfile, etc.), you can add it to the boilerplate for future projects.</p>
</li>
</ul>
<hr />
<h2 id="heading-12-conclusion">12. Conclusion</h2>
<p><strong>Boilerplate code</strong> is like <strong>pre-fabricated parts</strong> in construction <strong>repetitive, reliable, and time-saving</strong>. By reusing established patterns, you ensure faster project setups and consistent <strong>best practices</strong>. However, it’s important to <strong>understand</strong> what each piece of boilerplate does, <strong>trim</strong> unnecessary features, and <strong>maintain</strong> it as technologies evolve.</p>
<p>Whether you use a <strong>framework-provided</strong> starter (like Spring Initializr) or create your own <strong>personal</strong> Node.js/Express/TypeScript boilerplate, you gain <strong>efficiency</strong>, <strong>consistency</strong>, and better <strong>code quality</strong>. Adding a <strong>style guide</strong> including linting rules and formatting settings ensures your code remains <strong>uniform</strong> across multiple projects and contributors.</p>
<p>Remember: keep your boilerplate <strong>modular</strong>, <strong>documented</strong>, and <strong>up to date</strong> you will enjoy a smoother development process and cleaner code across all your projects.</p>
]]></content:encoded></item><item><title><![CDATA[Coding with AI as partner : Get more efficient using GPT]]></title><description><![CDATA[Introduction
Software development is evolving rapidly, and AI coding tools like GPT are becoming indispensable. This isn’t just a new gadget for developers; it’s like having an extra pair of hands—ones that can quickly draft code, suggest solutions, ...]]></description><link>https://blog.fredthedev.com/coding-with-ai-as-partner-get-more-efficient-using-gpt</link><guid isPermaLink="true">https://blog.fredthedev.com/coding-with-ai-as-partner-get-more-efficient-using-gpt</guid><category><![CDATA[AI]]></category><category><![CDATA[GPT 4]]></category><category><![CDATA[chatgpt]]></category><category><![CDATA[coding]]></category><dc:creator><![CDATA[Freddy Agbona (FredTheDev)]]></dc:creator><pubDate>Thu, 12 Dec 2024 15:50:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1734018073601/1b30c33b-454a-4c93-aae8-ca91cd3e20e9.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-introduction">Introduction</h3>
<p>Software development is evolving rapidly, and AI coding tools like GPT are becoming indispensable. This isn’t just a new gadget for developers; it’s like having an extra pair of hands—ones that can quickly draft code, suggest solutions, and even help troubleshoot issues. Embracing this technology means unlocking productivity and efficiency that weren’t possible before.</p>
<h3 id="heading-getting-in-the-right-mindset">Getting in the Right Mindset</h3>
<h4 id="heading-think-of-gpt-as-a-partner">Think of GPT as a Partner</h4>
<p>Imagine starting a new project. You have an assistant who knows all programming languages, can churn out code at lightning speed, and never gets tired. However, this assistant relies on you to set goals, provide context, and make key decisions. That’s GPT in a nutshell. It’s a powerful tool, but your expertise drives the outcomes.</p>
<h4 id="heading-focus-on-high-level-decisions">Focus on High-Level Decisions</h4>
<p>Let GPT handle implementation details so you can focus on:</p>
<ul>
<li><p>Choosing between WebSocket and REST APIs for real-time communication.</p>
</li>
<li><p>Structuring backend services for scalability.</p>
</li>
<li><p>Defining reusable components in Vue.js for the frontend.</p>
</li>
<li><p>Ensuring the solution aligns with business requirements and user needs.</p>
</li>
</ul>
<p>GPT can execute tasks, but it’s your guidance that ensures everything works seamlessly.</p>
<h3 id="heading-starting-strong-with-gpt">Starting Strong with GPT</h3>
<h4 id="heading-context-is-key">Context is Key</h4>
<p>Start by clearly explaining your project’s goals and requirements. For instance:</p>
<blockquote>
<p>"We’re building an e-commerce platform. Here are the details:</p>
<ul>
<li><p>Frontend uses Vue.js.</p>
</li>
<li><p>Backend is a Node.js API with PostgreSQL.</p>
</li>
<li><p>The cart functionality needs to support persistent sessions and guest users.</p>
</li>
</ul>
<p>Let’s begin with the user authentication system. I’ll show you the existing setup."</p>
</blockquote>
<h4 id="heading-define-your-environment">Define Your Environment</h4>
<p>Provide GPT with the necessary context for your project:</p>
<blockquote>
<p>"Here’s our setup:</p>
<ol>
<li><p>Tests are run with <code>npm test</code>.</p>
</li>
<li><p>Code quality is enforced with ESLint and Prettier.</p>
</li>
<li><p>API endpoints follow the pattern: <code>/api/[resource]/[action]</code>.</p>
</li>
<li><p>Docker is used for local database management."</p>
</li>
</ol>
</blockquote>
<h3 id="heading-tackling-projects-with-gpt">Tackling Projects with GPT</h3>
<p>Divide tasks into manageable steps for better collaboration:</p>
<h4 id="heading-define-a-clear-scope">Define a Clear Scope</h4>
<p>Avoid vague requests like:</p>
<blockquote>
<p>"Build a cart feature."</p>
</blockquote>
<p>Instead, provide specifics:</p>
<blockquote>
<p>"We need a shopping cart feature with these requirements:</p>
<ul>
<li><p>Items are stored in the database.</p>
</li>
<li><p>Support guest and authenticated users.</p>
</li>
<li><p>Include a REST API for adding/removing items.</p>
</li>
</ul>
<p>Let’s start by designing the database schema and basic API endpoints."</p>
</blockquote>
<h4 id="heading-guide-gpt-through-the-codebase">Guide GPT Through the Codebase</h4>
<p>Help GPT understand your existing codebase and patterns:</p>
<blockquote>
<p>"Check these files first:</p>
<ul>
<li><p><code>models/Cart.js</code> for the existing schema.</p>
</li>
<li><p><code>routes/cart.js</code> for API structure.</p>
</li>
<li><p><code>utils/session.js</code> for session handling logic.</p>
</li>
</ul>
<p>Follow the conventions used in <code>Cart.js</code> for validation."</p>
</blockquote>
<h4 id="heading-plan-the-implementation">Plan the Implementation</h4>
<p>Work with GPT to outline a detailed implementation plan. Here’s an example:</p>
<pre><code class="lang-markdown"><span class="hljs-section"># Shopping Cart Feature</span>

<span class="hljs-section">## Phase 1: Backend Setup</span>
<span class="hljs-bullet">-</span> [ ] Define cart schema in PostgreSQL.
<span class="hljs-bullet">-</span> [ ] Create API endpoints for CRUD operations.
<span class="hljs-bullet">-</span> [ ] Implement validation for cart operations.
<span class="hljs-bullet">-</span> [ ] Write unit tests for the API.

<span class="hljs-section">## Phase 2: Frontend Integration</span>
<span class="hljs-bullet">-</span> [ ] Build the cart UI in Vue.js.
<span class="hljs-bullet">-</span> [ ] Connect the UI to the backend API.
<span class="hljs-bullet">-</span> [ ] Add features like item quantity updates.
<span class="hljs-bullet">-</span> [ ] Implement error handling and user feedback.

<span class="hljs-section">## Phase 3: Session Management</span>
<span class="hljs-bullet">-</span> [ ] Support persistent carts for authenticated users.
<span class="hljs-bullet">-</span> [ ] Implement guest cart functionality.
<span class="hljs-bullet">-</span> [ ] Add session cleanup jobs.
<span class="hljs-bullet">-</span> [ ] Write integration tests for session handling.
</code></pre>
<h3 id="heading-workflow-tips">Workflow Tips</h3>
<p>Maximize productivity by adopting a structured approach:</p>
<h4 id="heading-take-small-steps">Take Small Steps</h4>
<p>Focus on one task at a time:</p>
<blockquote>
<p>"Let’s define the cart schema in PostgreSQL first. Can you draft it based on our existing database patterns?"</p>
</blockquote>
<h4 id="heading-validate-as-you-go">Validate as You Go</h4>
<p>Test every piece of work before moving forward:</p>
<blockquote>
<p>"Run the unit tests for this API endpoint. If there’s an issue, we’ll debug it together."</p>
</blockquote>
<h4 id="heading-debug-collaboratively">Debug Collaboratively</h4>
<p>Work with GPT to resolve issues effectively:</p>
<blockquote>
<p>"The API isn’t returning the expected data. Let’s add logs to the database query and inspect the response."</p>
</blockquote>
<h3 id="heading-beyond-coding-automation-with-gpt">Beyond Coding: Automation with GPT</h3>
<p>GPT can also streamline tasks beyond writing code:</p>
<h4 id="heading-simplify-git-operations">Simplify Git Operations</h4>
<p>Use GPT to handle version control tasks:</p>
<blockquote>
<p>"Can you:</p>
<ol>
<li><p>Stage all the changes?</p>
</li>
<li><p>Write a commit message?</p>
</li>
<li><p>Push to the <code>feature/shopping-cart</code> branch?"</p>
</li>
</ol>
</blockquote>
<h4 id="heading-automate-environment-setup">Automate Environment Setup</h4>
<p>Offload setup tasks to GPT:</p>
<blockquote>
<p>"Set up a new project with:</p>
<ul>
<li><p>Node.js and TypeScript.</p>
</li>
<li><p>Docker for PostgreSQL.</p>
</li>
<li><p>ESLint and Prettier configurations."</p>
</li>
</ul>
</blockquote>
<h4 id="heading-documentation-assistance">Documentation Assistance</h4>
<p>Leverage GPT for creating documentation:</p>
<blockquote>
<p>"Draft a README file with:</p>
<ul>
<li><p>Instructions for local setup.</p>
</li>
<li><p>API documentation.</p>
</li>
<li><p>Deployment steps."</p>
</li>
</ul>
</blockquote>
<h3 id="heading-conclusion">Conclusion</h3>
<p>Using GPT as a coding partner doesn’t replace your skills—it amplifies them. By offloading repetitive tasks and leveraging GPT’s speed, you can focus on solving complex problems, refining your designs, and delivering exceptional software. Whether you’re prototyping, debugging, or automating workflows, GPT can help you work smarter and faster.</p>
<p>Why not let GPT handle the grunt work while you focus on innovation and creativity?</p>
]]></content:encoded></item><item><title><![CDATA[Beginner's Guide to Java: Essential Information to Get Started]]></title><description><![CDATA[Introduction
Welcome to the first article in the "Java Foundations" series. Before we dive into the world of Spring Boot, it's essential to build a strong foundation in Java. In this article, I'll introduce you to Java, explaining its history, featur...]]></description><link>https://blog.fredthedev.com/beginners-guide-to-java-essential-information-to-get-started</link><guid isPermaLink="true">https://blog.fredthedev.com/beginners-guide-to-java-essential-information-to-get-started</guid><category><![CDATA[Java]]></category><category><![CDATA[software development]]></category><category><![CDATA[oop]]></category><category><![CDATA[Beginner Developers]]></category><dc:creator><![CDATA[Freddy Agbona (FredTheDev)]]></dc:creator><pubDate>Mon, 20 May 2024 12:59:50 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1716119134075/1885f997-4469-4f90-926a-b536e4eb35c9.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<hr />
<h2 id="heading-introduction">Introduction</h2>
<p>Welcome to the first article in the "Java Foundations" series. Before we dive into the world of Spring Boot, it's essential to build a strong foundation in Java. In this article, I'll introduce you to Java, explaining its history, features, and why it's such a popular programming language. Whether you're new to programming or just new to Java, this guide will give you the context you need to start your journey.</p>
<h2 id="heading-what-is-java">What is Java?</h2>
<p>Java is a high-level, class-based, object-oriented programming language that is designed to have as few implementation dependencies as possible. It's a general-purpose language intended to let application developers write once, run anywhere (WORA), meaning that compiled Java code can run on all platforms that support Java without the need for recompilation.</p>
<h2 id="heading-key-features-of-java">Key Features of Java</h2>
<h3 id="heading-platform-independence">Platform Independence</h3>
<p>One of Java’s primary strengths is its platform independence. The compiled Java code (bytecode) runs on any device equipped with a Java Virtual Machine (JVM). This cross-platform capability is encapsulated in the mantra “write once, run anywhere.”</p>
<h3 id="heading-object-oriented">Object-Oriented</h3>
<p>Java is an object-oriented programming (OOP) language, which means it follows principles like inheritance, encapsulation, polymorphism, and abstraction. This paradigm helps in organizing complex programs and enhancing code reusability.</p>
<h3 id="heading-robust-and-secure">Robust and Secure</h3>
<p>Java provides strong memory management through its automatic garbage collection. Additionally, it has built-in security features, such as runtime checking and static type checking, which make Java applications less prone to security vulnerabilities.</p>
<h3 id="heading-multithreaded">Multithreaded</h3>
<p>Java has built-in support for multithreaded programming, allowing concurrent execution of two or more threads for maximum utilization of CPU.</p>
<h3 id="heading-rich-api">Rich API</h3>
<p>Java comes with a vast array of libraries and APIs that simplify many development tasks. From data structures to networking, from graphical user interfaces to web services, Java’s rich API set is invaluable.</p>
<h3 id="heading-community-support">Community Support</h3>
<p>Java has a large, vibrant community of developers, which means extensive resources, libraries, frameworks, and tools are available. This community support also ensures that Java remains up-to-date with industry trends and practices.</p>
<h2 id="heading-the-java-ecosystem">The Java Ecosystem</h2>
<p>The Java ecosystem is vast and includes:</p>
<ul>
<li><p><strong>Java Development Kit (JDK)</strong>: The JDK includes the Java Runtime Environment (JRE), an interpreter/loader (Java), a compiler (javac), an archiver (jar), a documentation generator (Javadoc), and other tools needed for Java development.</p>
</li>
<li><p><strong>Java Runtime Environment (JRE)</strong>: The JRE includes the JVM, core libraries, and other components necessary to run applications written in Java.</p>
</li>
<li><p><strong>Java Virtual Machine (JVM)</strong>: The JVM is the engine that runs Java applications. It converts bytecode into machine code, allowing Java applications to be platform-independent.</p>
</li>
</ul>
<h2 id="heading-why-learn-java">Why Learn Java?</h2>
<h3 id="heading-versatility">Versatility</h3>
<p>Java is used in various domains, from web applications (using frameworks like Spring) to mobile applications (Android development) to large-scale enterprise applications. This versatility makes Java a valuable skill for any developer.</p>
<h3 id="heading-high-demand">High Demand</h3>
<p>Java has consistently been one of the most popular programming languages and is in high demand in the job market. Learning Java can open up numerous career opportunities.</p>
<h3 id="heading-strong-community-and-resources">Strong Community and Resources</h3>
<p>With a large community of developers and a plethora of resources available, finding help and learning materials for Java is easy. This support network can be incredibly beneficial as you learn and grow as a developer.</p>
<h2 id="heading-getting-started-with-java">Getting Started with Java</h2>
<p>To start with Java, you'll need to set up your development environment. For a comprehensive guide on how to install Java, follow the steps outlined in <a target="_blank" href="https://blog.fredthedev.com/step-by-step-guide-to-installing-java">Step-by-Step Guide to Installing Java</a></p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Java is a powerful, versatile, and widely-used programming language that forms the backbone of many modern applications. Understanding its core concepts and features is essential before moving on to more advanced topics like Spring Boot. In the next articles, we'll delve deeper into Java's syntax, object-oriented principles, and more, laying a solid foundation for your future development projects.</p>
<hr />
]]></content:encoded></item><item><title><![CDATA[Step-by-Step Guide to Installing Java]]></title><description><![CDATA[Introduction
Java is a versatile and widely-used programming language. To start developing in Java, you first need to install the Java Development Kit (JDK) on your machine. This guide will walk you through the steps to install Java on Windows, macOS...]]></description><link>https://blog.fredthedev.com/step-by-step-guide-to-installing-java</link><guid isPermaLink="true">https://blog.fredthedev.com/step-by-step-guide-to-installing-java</guid><category><![CDATA[java install]]></category><category><![CDATA[Java]]></category><category><![CDATA[software development]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[beginnersguide]]></category><category><![CDATA[Linux]]></category><category><![CDATA[macOS]]></category><category><![CDATA[Windows]]></category><dc:creator><![CDATA[Freddy Agbona (FredTheDev)]]></dc:creator><pubDate>Mon, 20 May 2024 12:58:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1716135142994/c355daaf-b2f2-4638-a722-177a2953bf62.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<hr />
<h3 id="heading-introduction">Introduction</h3>
<p>Java is a versatile and widely-used programming language. To start developing in Java, you first need to install the Java Development Kit (JDK) on your machine. This guide will walk you through the steps to install Java on Windows, macOS, and Linux.</p>
<h3 id="heading-checking-for-existing-java-installation">Checking for Existing Java Installation</h3>
<p>Before installing Java, check if it is already installed on your system.</p>
<h4 id="heading-on-windows">On Windows</h4>
<ol>
<li><p>Open Command Prompt.</p>
</li>
<li><p>Type <code>java -version</code> and press Enter.</p>
</li>
</ol>
<h4 id="heading-on-macos">On macOS</h4>
<ol>
<li><p>Open Terminal.</p>
</li>
<li><p>Type <code>java -version</code> and press Enter.</p>
</li>
</ol>
<h4 id="heading-on-linux">On Linux</h4>
<ol>
<li><p>Open Terminal.</p>
</li>
<li><p>Type <code>java -version</code> and press Enter.</p>
</li>
</ol>
<p>If Java is installed, you will see the version number. If not, proceed with the installation steps below.</p>
<h3 id="heading-installing-java-on-windows">Installing Java on Windows</h3>
<ol>
<li><p><strong>Download the JDK</strong></p>
<ul>
<li><p>Go to the <a target="_blank" href="https://www.oracle.com/java/technologies/downloads/">Oracle JDK download page</a>.</p>
</li>
<li><p>Choose the latest JDK version and download the Windows installer (e.g., <code>jdk-XX_windows-x64_bin.exe</code>).</p>
</li>
</ul>
</li>
<li><p><strong>Run the Installer</strong></p>
<ul>
<li><p>Open the downloaded installer file.</p>
</li>
<li><p>Follow the on-screen instructions to complete the installation.</p>
</li>
</ul>
</li>
<li><p><strong>Set Up Environment Variables</strong></p>
<ul>
<li><p>Open the Start menu, search for "Environment Variables," and select "Edit the system environment variables."</p>
</li>
<li><p>In the System Properties window, click on "Environment Variables."</p>
</li>
<li><p>Under System Variables, click "New" and add a new variable:</p>
<ul>
<li><p>Variable name: <code>JAVA_HOME</code></p>
</li>
<li><p>Variable value: Path to your JDK installation (e.g., <code>C:\Program Files\Java\jdk-XX</code>).</p>
</li>
</ul>
</li>
<li><p>Edit the <code>Path</code> variable and add <code>%JAVA_HOME%\bin</code>.</p>
</li>
</ul>
</li>
</ol>
<h3 id="heading-installing-java-on-macos">Installing Java on macOS</h3>
<ol>
<li><p><strong>Download the JDK</strong></p>
<ul>
<li><p>Visit the <a target="_blank" href="https://www.oracle.com/java/technologies/downloads/">Oracle JDK download page</a>.</p>
</li>
<li><p>Download the macOS installer (e.g., <code>jdk-XX_macos-x64_bin.dmg</code>).</p>
</li>
</ul>
</li>
<li><p><strong>Install the JDK</strong></p>
<ul>
<li><p>Open the downloaded <code>.dmg</code> file.</p>
</li>
<li><p>Double-click the <code>.pkg</code> installer and follow the instructions.</p>
</li>
</ul>
</li>
<li><p><strong>Set Up Environment Variables</strong></p>
<ul>
<li><p>Open Terminal.</p>
</li>
<li><p>Edit the <code>.bash_profile</code> or <code>.zshrc</code> file (depending on your shell):</p>
<pre><code class="lang-sh">  nano ~/.bash_profile
</code></pre>
<p>  or</p>
<pre><code class="lang-sh">  nano ~/.zshrc
</code></pre>
</li>
<li><p>Add the following lines:</p>
<pre><code class="lang-sh">  <span class="hljs-built_in">export</span> JAVA_HOME=$(/usr/libexec/java_home)
  <span class="hljs-built_in">export</span> PATH=<span class="hljs-variable">$JAVA_HOME</span>/bin:<span class="hljs-variable">$PATH</span>
</code></pre>
</li>
<li><p>Save and close the file, then run <code>source ~/.bash_profile</code> or <code>source ~/.zshrc</code>.</p>
</li>
</ul>
</li>
</ol>
<h3 id="heading-installing-java-on-linux">Installing Java on Linux</h3>
<ol>
<li><p><strong>Download the JDK</strong></p>
<ul>
<li><p>Visit the <a target="_blank" href="https://www.oracle.com/java/technologies/downloads/">Oracle JDK download page</a>.</p>
</li>
<li><p>Download the Linux tar.gz file (e.g., <code>jdk-XX_linux-x64_bin.tar.gz</code>).</p>
</li>
</ul>
</li>
<li><p><strong>Install the JDK</strong></p>
<ul>
<li><p>Open Terminal.</p>
</li>
<li><p>Extract the tar.gz file to <code>/opt</code>:</p>
<pre><code class="lang-sh">  sudo tar -xzf jdk-XX_linux-x64_bin.tar.gz -C /opt
</code></pre>
</li>
<li><p>Set up the <code>JAVA_HOME</code> and <code>PATH</code> variables by adding the following lines to your <code>.bashrc</code> or <code>.zshrc</code> file:</p>
<pre><code class="lang-sh">  <span class="hljs-built_in">export</span> JAVA_HOME=/opt/jdk-XX
  <span class="hljs-built_in">export</span> PATH=<span class="hljs-variable">$PATH</span>:<span class="hljs-variable">$JAVA_HOME</span>/bin
</code></pre>
<p>  Save and close the file, then run <code>source ~/.bashrc</code> or <code>source ~/.zshrc</code>.</p>
</li>
</ul>
</li>
</ol>
<h3 id="heading-setting-up-environment-variables">Setting Up Environment Variables</h3>
<p>For all operating systems, ensure the environment variables are set correctly:</p>
<ul>
<li><p><strong>JAVA_HOME</strong>: Points to the JDK installation directory.</p>
</li>
<li><p><strong>PATH</strong>: Includes <code>$JAVA_HOME/bin</code> to ensure Java executables are available globally.</p>
</li>
</ul>
<h3 id="heading-verifying-the-installation">Verifying the Installation</h3>
<p>Open a new terminal or command prompt.</p>
<ol>
<li><p>Type <code>java -version</code> and press Enter.</p>
</li>
<li><p>You should see the installed Java version, indicating the installation was successful.</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1716119507425/28c17e08-e9a3-4186-8e80-90e9dc0c815e.png" alt="terminal java --version" /></p>
</li>
</ol>
<h2 id="heading-conclusion">Conclusion</h2>
<p>You've successfully installed Java on your system. Now you're ready to start developing Java applications.</p>
<hr />
]]></content:encoded></item></channel></rss>