<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Djamel Bougouffa</title>
    <description>The latest articles on Forem by Djamel Bougouffa (@strawbang).</description>
    <link>https://forem.com/strawbang</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1028973%2F88627db9-f3d6-450a-b846-03af8fbbc0ed.jpg</url>
      <title>Forem: Djamel Bougouffa</title>
      <link>https://forem.com/strawbang</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/strawbang"/>
    <language>en</language>
    <item>
      <title>How I Use Claude Code and Jira MCP to Modernize Legacy Codebases</title>
      <dc:creator>Djamel Bougouffa</dc:creator>
      <pubDate>Thu, 30 Apr 2026 17:25:24 +0000</pubDate>
      <link>https://forem.com/strawbang/how-i-use-claude-code-and-jira-mcp-to-modernize-legacy-codebases-3176</link>
      <guid>https://forem.com/strawbang/how-i-use-claude-code-and-jira-mcp-to-modernize-legacy-codebases-3176</guid>
      <description>&lt;p&gt;Legacy code is the skeleton of every successful company. It runs billing, processes orders, and holds business rules that nobody has fully understood in years. It’s not going anywhere, and that’s exactly why modernizing it matters.&lt;/p&gt;

&lt;p&gt;For the past several months, I’ve been using &lt;strong&gt;Claude Code&lt;/strong&gt; alongside &lt;strong&gt;Jira MCP&lt;/strong&gt; and a carefully crafted &lt;code&gt;CLAUDE.md&lt;/code&gt; to navigate and implement changes in legacy Java codebases. This article is a practical breakdown of that workflow: what it looks like, why it works, and where it still fails.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem with Legacy Codebases
&lt;/h2&gt;

&lt;p&gt;Before diving into the setup, it’s worth naming the actual problem. Legacy code isn’t hard because it’s old. It’s hard because of everything tha surrounds it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No documentation&lt;/strong&gt; (or worse, documentation that lies)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implicit business rules&lt;/strong&gt; buried in conditionals nobody dares touch&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing tests&lt;/strong&gt; that would tell you if your change breaks something&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Original authors gone&lt;/strong&gt;, their knowledge left with them&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fear&lt;/strong&gt;, the real killer of velocity on legacy projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The traditional approach is to read the code, ask around, and make cautious changes. It works, but it’s slow. An AI agent doesn’t solve all of this, but it dramatically reduces the time spent on the archaeology part.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;p&gt;My setup has three components.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Claude Code
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://claude.ai/code" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt; is Anthropic’s agentic coding tool. It runs in your terminal, has access to your filesystem, can execute commands, and iterates on its own. Unlike a chat interface, it doesn’t just suggest code it reads files, makes changes, runs tests, and fixes errors.&lt;/p&gt;

&lt;p&gt;What makes it powerful for legacy work is that it can navigate a large codebase without me directing every step. I give it a task and context, and it figures out which files to read.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;code&gt;CLAUDE.md&lt;/code&gt; The Project Handbook
&lt;/h3&gt;

&lt;p&gt;Every project gets a &lt;code&gt;CLAUDE.md&lt;/code&gt; at the root. This file is Claude Code’s onboarding document. It tells the agent what it needs to know before touching anything.&lt;/p&gt;

&lt;p&gt;Here’s the kind of content I put in a &lt;code&gt;CLAUDE.md&lt;/code&gt; for a typical enterprise Java project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Overview&lt;/span&gt;

Maven multi-module Spring Boot application, Java 17.
Two databases: PostgreSQL (application data) + Oracle (legacy ERP, read-only).
All services run in Docker locally.

&lt;span class="gu"&gt;## Daily commands&lt;/span&gt;

&lt;span class="gu"&gt;### Environment&lt;/span&gt;
docker compose up -d          # start all containers
docker compose logs -f api    # follow API logs
docker compose down           # stop all containers

&lt;span class="gu"&gt;### Build &amp;amp; run&lt;/span&gt;
./mvnw clean install -DskipTests   # full build
./mvnw -pl api spring-boot:run     # run API module only
./mvnw test -pl api                # run unit tests for api module

&lt;span class="gu"&gt;### Database&lt;/span&gt;
&lt;span class="gh"&gt;# PostgreSQL localhost:5432, db: appdb, user: appuser&lt;/span&gt;
./scripts/db-reset.sh              # drop + recreate + seed local DB
./scripts/db-load-dump.sh prod     # load anonymized prod dump (slow, ~5min)

&lt;span class="gh"&gt;# Oracle (legacy ERP) read-only, localhost:1521&lt;/span&gt;
&lt;span class="gh"&gt;# Never write directly use the dedicated OracleService wrapper&lt;/span&gt;

&lt;span class="gu"&gt;## Architecture&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; api/          REST controllers + business logic
&lt;span class="p"&gt;-&lt;/span&gt; domain/       Entities, repositories (Spring Data JPA)
&lt;span class="p"&gt;-&lt;/span&gt; integration/  Adapters to Oracle ERP (polling via Apache Camel)
&lt;span class="p"&gt;-&lt;/span&gt; scheduler/    Batch jobs (Spring Batch)
&lt;span class="p"&gt;-&lt;/span&gt; common/       DTOs, utils, shared constants

&lt;span class="gu"&gt;## Known landmines&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Oracle ERP is read-only never attempt a write, it will corrupt downstream data
&lt;span class="p"&gt;-&lt;/span&gt; OrderService.createOrder() is NOT idempotent always check for duplicates first
&lt;span class="p"&gt;-&lt;/span&gt; LegacyCodeMapper uses reflection, adding new fields breaks silently without tests
&lt;span class="p"&gt;-&lt;/span&gt; Do NOT add @Transactional to scheduler jobs they hold connections for minutes

&lt;span class="gu"&gt;## Git&lt;/span&gt;
Branches: main (prod), develop (integration), PROJ-XXXX-short-description (feature)
Commits: always prefix with ticket "PROJ-123: add VAT calculation for EU orders"
Push: --force-with-lease only, never --force
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This file is the difference between Claude Code making a confident, correct change and blindly guessing.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Known landmines&lt;/strong&gt; section is the most valuable part. These are the things that would take a new developer weeks to discover. Writing them down once saves everyone including the agent from painful regressions.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Jira MCP
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://github.com/sooperset/mcp-atlassian" rel="noopener noreferrer"&gt;Jira MCP&lt;/a&gt; exposes your Jira project as a set of tools that Claude Code can call. In practice, this means Claude Code can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read the ticket description, acceptance criteria, and comments&lt;/li&gt;
&lt;li&gt;Understand the full context before writing a single line&lt;/li&gt;
&lt;li&gt;Reference related tickets and sub-tasks&lt;/li&gt;
&lt;li&gt;Post a comment back with a summary of what was done&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the most powerful thing I’ve built on top of this is a &lt;strong&gt;custom skill in &lt;code&gt;CLAUDE.md&lt;/code&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Available skills&lt;/span&gt;

| Command                    | Description                                       |
|---------------------------|---------------------------------------------------|
| &lt;span class="sb"&gt;`/test-ticket &amp;lt;PROJ-XXXX&amp;gt;`&lt;/span&gt;| Run Playwright acceptance tests for a Jira ticket |
| &lt;span class="sb"&gt;`/mr-push [app|connector]`&lt;/span&gt;| Amend + rebase + force-push with lease            |
| &lt;span class="sb"&gt;`/mr-comment [reply|post]`&lt;/span&gt;| Read and reply to GitLab MR comments              |
| &lt;span class="sb"&gt;`/build [app|connector]`&lt;/span&gt;  | Build the app or connector                        |
| &lt;span class="sb"&gt;`/sonar [app|connector]`&lt;/span&gt;  | Run local SonarQube analysis                      |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;/test-ticket&lt;/code&gt; skill is the one that changed how I work. I give it a ticket reference, Claude Code reads the acceptance criteria from Jira, maps them to the right Playwright test files, runs them, and reports back. The full feedback loop write code, test against the actual ticket without leaving the terminal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Honest caveat though&lt;/strong&gt;: it burns a significant number of tokens per run. Reading the ticket, navigating the test files, running Playwright, interpreting results it all adds up. On a complex ticket with multiple acceptance criteria, a single &lt;code&gt;/test-ticket&lt;/code&gt; run can cost more than the rest of the session combined. I still use it, but selectively not as a default step on every change.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Workflow: From Ticket to Implementation
&lt;/h2&gt;

&lt;p&gt;Here’s what a typical session looks like.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1 Kick off with a ticket reference
&lt;/h3&gt;

&lt;p&gt;I open a terminal in the project root and start Claude Code with a simple prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Read JIRA ticket PROJ-4821 and implement the requested change.
Use CLAUDE.md for project context before touching any files.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it. Claude Code reads &lt;code&gt;CLAUDE.md&lt;/code&gt; first, then calls Jira MCP to fetch the ticket, reads the description and acceptance criteria, and starts exploring the codebase.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2 Claude Code explores the codebase
&lt;/h3&gt;

&lt;p&gt;Based on the ticket content, the agent searches for relevant files. For a ticket like &lt;em&gt;“Fix incorrect VAT calculation for B2B orders in Germany”&lt;/em&gt;, it will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Search for &lt;code&gt;VAT&lt;/code&gt;, &lt;code&gt;tax&lt;/code&gt;, &lt;code&gt;germany&lt;/code&gt;, and &lt;code&gt;B2B&lt;/code&gt; across the codebase&lt;/li&gt;
&lt;li&gt;Read the relevant service and model files&lt;/li&gt;
&lt;li&gt;Follow the call chain to understand what feeds the calculation&lt;/li&gt;
&lt;li&gt;Check whether there are existing tests for that flow&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the archaeology phase. Doing it manually takes 30 to 60 minutes on an unfamiliar codebase. Claude Code does it in 2 to 3 minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3 Implementation with guardrails
&lt;/h3&gt;

&lt;p&gt;Claude Code proposes changes based on what it found. Because &lt;code&gt;CLAUDE.md&lt;/code&gt; establishes the constraints no Lombok, amounts in cents, don’t touch &lt;code&gt;legacy_&lt;/code&gt; tables the changes respect the project’s existing conventions.&lt;/p&gt;

&lt;p&gt;If the agent is uncertain, it asks. If it finds something suspicious in the code that might be related to the ticket, it surfaces it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4 Review and iterate
&lt;/h3&gt;

&lt;p&gt;I review the diff, run the tests, and iterate. Claude Code doesn’t replace the review it compresses the time spent before the review.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Actually Works Well
&lt;/h2&gt;

&lt;p&gt;After several months of using this workflow, here’s what consistently delivers value.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding data flows:&lt;/strong&gt; tracing how a value gets from the database to the API response through eight service layers is tedious. Claude Code handles it well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Writing tests for untested code:&lt;/strong&gt; this is underrated. Before making a change, I ask Claude Code to write characterization tests for the relevant code. It reads the existing behavior and writes tests that describe it. These tests catch regressions during the change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Surfacing related code:&lt;/strong&gt; the agent often finds code that’s related to the ticket but wasn’t mentioned in it. Duplicate logic, dead code, a similar function in another module. This knowledge compounds over time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Translating ticket language to code:&lt;/strong&gt; business stakeholders write tickets in business language. Developers have to mentally translate that into code changes. Claude Code bridges that gap more reliably than I expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Doesn’t Work Yet
&lt;/h2&gt;

&lt;p&gt;Honesty matters here. This workflow isn’t magic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implicit business rules:&lt;/strong&gt; if the rule isn’t written down in &lt;code&gt;CLAUDE.md&lt;/code&gt;, comments, or tests, Claude Code won’t infer it from code patterns. A legacy codebase full of silent assumptions is still full of silent assumptions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Highly coupled modules:&lt;/strong&gt; when everything depends on everything, the agent struggles to make a scoped change without touching too much. The fix there is architecture, not prompting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Token costs on automated test loops:&lt;/strong&gt; automating the full test-against-ticket cycle is technically impressive but expensive. The more context the agent needs to load ticket, test files, Playwright output the more tokens it burns. Some automations that look great on paper don’t survive contact with a real monthly bill.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;100% autonomous operation:&lt;/strong&gt; Claude Code is a senior junior developer. It’s fast, thorough, and follows instructions well. But it still needs a human to define what “correct” means and validate the output. Treating it as a fully autonomous agent leads to bad outcomes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-cutting concerns:&lt;/strong&gt; security, performance, and observability still require human judgment. I always review those separately.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;CLAUDE.md&lt;/code&gt; Is the Real Unlock
&lt;/h2&gt;

&lt;p&gt;If I had to name the single most impactful part of this setup, it’s the &lt;code&gt;CLAUDE.md&lt;/code&gt; not the model, not the tools.&lt;/p&gt;

&lt;p&gt;A good &lt;code&gt;CLAUDE.md&lt;/code&gt; captures institutional knowledge that would otherwise live only in the heads of the people who’ve worked on the project the longest. Writing it forces you to articulate things that are usually implicit. Once it exists, any developer human or AI onboards faster.&lt;/p&gt;

&lt;p&gt;I update it every time I discover something that surprised me during a session. Over time, it becomes the living documentation the project never had.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;The combination of Claude Code, Jira MCP, and a well-maintained &lt;code&gt;CLAUDE.md&lt;/code&gt; doesn’t eliminate the hard parts of legacy modernization. It compresses the time spent on the mechanical parts reading code, tracing flows, writing boilerplate so more of your time goes to judgment, architecture, and actual problem-solving.&lt;/p&gt;

&lt;p&gt;That shift is worth more than any individual feature the tools provide.&lt;/p&gt;

&lt;p&gt;If you’re working on a legacy codebase and haven’t tried this workflow yet, start with the &lt;code&gt;CLAUDE.md&lt;/code&gt;. Even without Claude Code, forcing yourself to write down what the project needs newcomers to know is probably the most valuable 30 minutes you’ll spend this week.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>java</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>Building a Blazing-Fast Portfolio with Astro and Deploying with Netlify</title>
      <dc:creator>Djamel Bougouffa</dc:creator>
      <pubDate>Mon, 24 Jul 2023 07:40:08 +0000</pubDate>
      <link>https://forem.com/strawbang/building-a-blazing-fast-portfolio-with-astro-and-deploying-with-netlify-4ek0</link>
      <guid>https://forem.com/strawbang/building-a-blazing-fast-portfolio-with-astro-and-deploying-with-netlify-4ek0</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsgnrppxl605tx0rjqatx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsgnrppxl605tx0rjqatx.png" alt="Lighthouse about https:/djamel-bougouffa.com" width="800" height="776"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this article, we’ll explore how to create a lightning-fast portfolio using Astro with the Portfolio theme and then deploy it effortlessly using Netlify. With this powerful combination, you can quickly get your portfolio up and running to impress potential clients and employers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Astro?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Astro is a modern static site generator that combines the best features of traditional static site generators with the power of contemporary frameworks. Its unique approach compiles your website into a fully optimized JavaScript application, resulting in exceptional performance and a seamless user experience. Additionally, Astro supports popular frameworks like React, Vue, and Svelte, allowing developers to create complex web applications with ease.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introducing the Portfolio Theme&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This theme includes essential features such as project sections. It provides an excellent foundation for you to showcase your work and achievements effectively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Getting Started with Astro and the Portfolio Theme&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Follow these steps to create your fast portfolio using Astro and the Portfolio theme:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Set up your development environment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ensure you have Node.js and npm installed on your system. You can check their presence by running the following commands in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node -v
npm -v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Create a new Astro project with template portfolio&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open your terminal and create a new Astro project by running the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm create astro@latest -- --template portfolio
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Customize your portfolio&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Replace the default content in the src directory with your own projects, images, and information. You can easily modify the Portfolio theme's components and layouts to match your style and preferences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Test your portfolio locally&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To view your portfolio locally, run the development server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your portfolio should now be accessible at &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deploying with Netlify&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Netlify makes the deployment process incredibly simple, providing a seamless experience for deploying static sites. Follow these steps to deploy your Astro-powered portfolio with Netlify:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create a Netlify account&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you don’t already have one, sign up for a free account on Netlify at &lt;a href="https://www.netlify.com/" rel="noopener noreferrer"&gt;https://www.netlify.com/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Install Netlify CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Install the Netlify CLI globally on your machine to interact with Netlify from the command line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install netlify-cli -g
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Build your portfolio&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before deploying, build your Astro project to generate the optimized files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4: Deploy to Netlify&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Navigate to your project directory in the terminal and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;netlify init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Follow the prompts to link your Netlify account and select the project you want to deploy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Deploy your portfolio&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Finally, deploy your portfolio with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;netlify deploy — prod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your portfolio will be automatically deployed to Netlify, and you will receive a unique URL where your blazing-fast portfolio can be accessed by anyone, anywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Creating a fast and impressive portfolio has never been easier with Astro and the Portfolio theme. Astro’s performance-oriented approach and seamless integration with modern frameworks allow you to build a top-tier portfolio effortlessly. Additionally, deploying your portfolio with Netlify ensures that it is accessible to the world with just a few clicks. So, why wait? Create your dazzling portfolio with Astro and the Portfolio theme and showcase your skills to the global tech community today!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://djamel-bougouffa.com/" rel="noopener noreferrer"&gt;My portfolio&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/Strawbang/portfolio" rel="noopener noreferrer"&gt;Repository&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>astro</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
