<?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: Abdulsalam Abdulrahman (Amtech Digital)</title>
    <description>The latest articles on Forem by Abdulsalam Abdulrahman (Amtech Digital) (@abdulsalamamtech).</description>
    <link>https://forem.com/abdulsalamamtech</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%2F1448685%2F188fc6b7-07e2-427e-9dda-9ab00d22761d.jpeg</url>
      <title>Forem: Abdulsalam Abdulrahman (Amtech Digital)</title>
      <link>https://forem.com/abdulsalamamtech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/abdulsalamamtech"/>
    <language>en</language>
    <item>
      <title>Resolving GitHub conflict: merge, rebase and fast-forward only</title>
      <dc:creator>Abdulsalam Abdulrahman (Amtech Digital)</dc:creator>
      <pubDate>Wed, 19 Nov 2025 14:02:47 +0000</pubDate>
      <link>https://forem.com/abdulsalamamtech/resolving-github-conflict-merge-rebase-and-fast-forward-only-50fj</link>
      <guid>https://forem.com/abdulsalamamtech/resolving-github-conflict-merge-rebase-and-fast-forward-only-50fj</guid>
      <description>&lt;p&gt;Difference between:&lt;/p&gt;

&lt;p&gt;hint: git config pull.rebase false # merge&lt;br&gt;
hint: git config pull.rebase true # rebase&lt;br&gt;
hint: git config pull.ff only #&lt;br&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%2Fklkjdvzcjmy9bx0k03q8.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%2Fklkjdvzcjmy9bx0k03q8.png" alt=" " width="800" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'll explain the three git pull strategies and help you choose the best one for your situation:&lt;/p&gt;

&lt;p&gt;Updated todo list&lt;/p&gt;

&lt;p&gt;Three Git Pull Strategies Explained&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;pull.rebase false (Merge Strategy) 🔀&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;git config pull.rebase false&lt;br&gt;
What it does:&lt;/p&gt;

&lt;p&gt;Creates a merge commit when pulling changes&lt;br&gt;
Combines your local commits with remote commits&lt;br&gt;
Preserves full history of both branches&lt;br&gt;
Visual:&lt;/p&gt;

&lt;p&gt;Before pull:  Local:  A — B — C  Remote: A — X — YAfter pull:  A — B — C — M (merge commit)       \   /        X — Y&lt;br&gt;
Pros:&lt;br&gt;
✅ Full history preserved&lt;br&gt;
✅ Easy to see when integrations happened&lt;br&gt;
✅ Safe for collaborative work&lt;/p&gt;

&lt;p&gt;Cons:&lt;br&gt;
❌ Messy commit graph with many merge commits&lt;br&gt;
❌ Harder to read git log&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;pull.rebase true (Rebase Strategy) 📚&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;git config pull.rebase true&lt;br&gt;
What it does:&lt;/p&gt;

&lt;p&gt;Replays your local commits on top of remote changes&lt;br&gt;
Creates a linear history (no merge commits)&lt;br&gt;
Rewrites commit history&lt;br&gt;
Visual:&lt;/p&gt;

&lt;p&gt;Before pull:  Local:  A — B — C  Remote: A — X — YAfter pull:  A — X — Y — B' — C'&lt;br&gt;
Pros:&lt;br&gt;
✅ Clean, linear history&lt;br&gt;
✅ Easier to read and understand flow&lt;br&gt;
✅ No merge commit clutter&lt;/p&gt;

&lt;p&gt;Cons:&lt;br&gt;
❌ Rewrites history (changes commit hashes)&lt;br&gt;
❌ Can cause issues if commits are already pushed&lt;br&gt;
⚠️ Slightly risky if you don't understand rebase&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;pull.ff only (Fast-Forward Only) ⚡&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;git config pull.ff only&lt;br&gt;
What it does:&lt;/p&gt;

&lt;p&gt;Only allows fast-forward merges (linear history without new commits)&lt;br&gt;
Rejects any pull that would require a merge or rebase&lt;br&gt;
Forces you to manually resolve conflicts&lt;br&gt;
Visual:&lt;/p&gt;

&lt;p&gt;✅ ALLOWED (fast-forward):  &lt;/p&gt;

&lt;p&gt;Local:  A — B — C  &lt;br&gt;
Remote: A — B — C — X — Y  &lt;br&gt;
Result: A — B — C — X — Y❌ &lt;/p&gt;

&lt;p&gt;REJECTED (non-fast-forward):  &lt;br&gt;
Local:  A — B — C  &lt;br&gt;
Remote: A — X — Y  → Pull fails! You must rebase or merge manually&lt;/p&gt;

&lt;p&gt;Pros:&lt;br&gt;
✅ Guarantees clean, linear history&lt;br&gt;
✅ Forces intentional conflict resolution&lt;br&gt;
✅ No accidental messy merges&lt;/p&gt;

&lt;p&gt;Cons:&lt;br&gt;
❌ Very strict; many pulls will fail&lt;br&gt;
❌ Requires extra manual steps&lt;br&gt;
❌ Not ideal for team collaboration&lt;/p&gt;

&lt;p&gt;📊 Comparison Table&lt;br&gt;
Feature merge   rebase  ff only&lt;br&gt;
History shape   Non-linear (branchy)    Linear  Linear&lt;br&gt;
Merge commits&lt;br&gt;&lt;br&gt;
✅ Created &lt;br&gt;
❌ None&lt;br&gt;&lt;br&gt;
❌ None&lt;/p&gt;

&lt;p&gt;Rewrites commits&lt;br&gt;&lt;br&gt;
❌ No&lt;br&gt;&lt;br&gt;
✅ Yes Depends&lt;/p&gt;

&lt;p&gt;Easy to read git log&lt;br&gt;&lt;br&gt;
❌ No&lt;br&gt;&lt;br&gt;
✅ Yes &lt;br&gt;
✅ Yes&lt;/p&gt;

&lt;p&gt;Safe for shared branches&lt;br&gt;&lt;br&gt;
✅ Yes &lt;br&gt;
❌ No&lt;br&gt;&lt;br&gt;
✅ Yes&lt;/p&gt;

&lt;p&gt;Risk of conflicts   Low Medium  High&lt;br&gt;
Best for teams&lt;br&gt;&lt;br&gt;
✅ Yes &lt;br&gt;
❌ Not really&lt;br&gt;&lt;br&gt;
✅ Sometimes&lt;/p&gt;

&lt;p&gt;🎯 Recommendation for Your Situation&lt;br&gt;
For resolving your current merge conflict in api-docs.json:&lt;/p&gt;

&lt;p&gt;Use pull.rebase false (Merge) ← RECOMMENDED&lt;/p&gt;

&lt;p&gt;git config pull.rebase false&lt;br&gt;
Why?&lt;/p&gt;

&lt;p&gt;✅ You're working in a team repo (hngprojects/HNG-Portal-BE)&lt;br&gt;
✅ Your commits are likely already shared/pushed&lt;br&gt;
✅ Safe - doesn't rewrite history&lt;br&gt;
✅ Preserves the full narrative of changes&lt;br&gt;
✅ Standard practice for collaborative projects&lt;/p&gt;

&lt;p&gt;Your next steps:&lt;/p&gt;

&lt;p&gt;1. Resolve the conflict manually in api-docs.json (You need to combine the auth endpoints + job-types endpoints)&lt;/p&gt;

&lt;p&gt;2. Stage the resolved filegit add storage/api-docs/api-docs.json&lt;/p&gt;

&lt;p&gt;3. Complete the mergegit commit -m "Merge: resolve conflicts in api-docs.json - combine auth and job-types endpoints"# 4. Push to remotegit push origin feature/add-job-types&lt;/p&gt;

&lt;p&gt;Would you like me to:&lt;/p&gt;

&lt;p&gt;✅ Help you resolve the conflicts in the file manually?&lt;br&gt;
📝 Generate a merged version of api-docs.json with both sets of endpoints?&lt;br&gt;
🔍 Review what content exists in each branch first?&lt;br&gt;
Let me know which you prefer!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://share.google/aimode/Tg8IfStKYvxoySTxN" rel="noopener noreferrer"&gt;Learn more about git rebase&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>softwaredevelopment</category>
      <category>development</category>
      <category>abdulsalamamtech</category>
    </item>
    <item>
      <title>Building a medical emergency AI agent boot using A2A protocol for HNG backend stage.</title>
      <dc:creator>Abdulsalam Abdulrahman (Amtech Digital)</dc:creator>
      <pubDate>Mon, 03 Nov 2025 23:32:30 +0000</pubDate>
      <link>https://forem.com/abdulsalamamtech/building-a-medical-emergency-ai-agent-boot-using-a2a-protocol-for-hng-backend-stage-2l99</link>
      <guid>https://forem.com/abdulsalamamtech/building-a-medical-emergency-ai-agent-boot-using-a2a-protocol-for-hng-backend-stage-2l99</guid>
      <description>&lt;p&gt;Building a medical emergency AI agent boot using A2A protocol for HNG backend stage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Motivation:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Building Emergent AI and AI Agent that answers medical emergency related questions and give tips on what to do based on described emergency.&lt;/p&gt;

&lt;p&gt;It is a difficult thing to exactly know what to do in different emergency situation, the data is already out their is just to have the exact information of what to do on different situation before help arise can save lives and property.&lt;/p&gt;

&lt;p&gt;I wanted to be able to have an AI agent that can easily guide someone through this situation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tech stack:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PHP/Laravel&lt;br&gt;
Laragent library&lt;br&gt;
Railway&lt;/p&gt;

&lt;p&gt;In short Emergent is a chat bot that answers #medical #emergency related questions &amp;amp; help with tips!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;System design:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;User Message &lt;span class="o"&gt;(&lt;/span&gt;Telex&lt;span class="o"&gt;)&lt;/span&gt;
    ↓
JSON-RPC 2.0 Request
    ↓
Railway App Service &lt;span class="o"&gt;(&lt;/span&gt;NGINX Server&lt;span class="o"&gt;)&lt;/span&gt;
    ↓
Laravel Framework &amp;amp; API
    ↓
Gemini AI Agent
    ↓
Format &amp;amp; Return
    ↓
A2A Response
    ↓
Telex.im Display
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;💻 Building the Agent:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I set up Laravel&lt;br&gt;
Install Laragent&lt;br&gt;
Register my API KEY on Gemini&lt;br&gt;
Add the API_KEY to my .env file&lt;br&gt;
I test the agent ability&lt;br&gt;
I Implement the A2A Protocol&lt;br&gt;
I test it again&lt;br&gt;
I push to GitHub and deployed to Railway&lt;br&gt;
Result&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The challenges:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  I wasn't able to understand how a2a works.
&lt;em&gt;I go through the documentation and articles multiple times.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;  I wast not getting the right message.
&lt;em&gt;I went on to test and debug the codebase again.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;  Other AI model I used wasn't working.
&lt;em&gt;I tried multiple LLM before finally using Gemini.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;  Formatting the response and error.
&lt;em&gt;I created different methods to format the responses for error and success.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;  I have production error while deploying to Railway.
&lt;em&gt;I changed the PHP version from 8.2 to 8.3.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;  I wasn't able to integrate it with telex.
&lt;em&gt;An article and step by step guide was later sent to the slack group that is want I used to be able to setup my Agent.&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Response agent api time &amp;lt;500ms&lt;br&gt;
Total response time ~2-3s&lt;br&gt;
Uptime 99.9%&lt;br&gt;
Success rate 99%&lt;/p&gt;

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

&lt;p&gt;Building Emergent AI Agent allow people to be able to seek emergency tips before help arrive and I was able to work on something extra-ordinary using AI and combining it with a technology new to me Telex A2A protocol.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connect with me:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/abdulsalamamtech/hng-stage-3" rel="noopener noreferrer"&gt;https://github.com/abdulsalamamtech/hng-stage-3&lt;/a&gt;&lt;br&gt;
X (Twitter): &lt;a href="https://x.com/abdulsalamtech" rel="noopener noreferrer"&gt;https://x.com/abdulsalamtech&lt;/a&gt;&lt;br&gt;
Linkedin: &lt;a href="https://linkedin.com/in/abdulsalamamtech" rel="noopener noreferrer"&gt;https://linkedin.com/in/abdulsalamamtech&lt;/a&gt;&lt;br&gt;
Facebook: &lt;a href="https://facebook.com/abdulsalamamtech" rel="noopener noreferrer"&gt;https://facebook.com/abdulsalamamtech&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>showdev</category>
      <category>ai</category>
      <category>laravel</category>
    </item>
    <item>
      <title>Different type of action to take on delete in Laravel database migration</title>
      <dc:creator>Abdulsalam Abdulrahman (Amtech Digital)</dc:creator>
      <pubDate>Wed, 29 Oct 2025 11:01:36 +0000</pubDate>
      <link>https://forem.com/abdulsalamamtech/different-type-of-action-to-take-on-delete-in-laravel-database-migration-348o</link>
      <guid>https://forem.com/abdulsalamamtech/different-type-of-action-to-take-on-delete-in-laravel-database-migration-348o</guid>
      <description>&lt;p&gt;Different type of action to take on delete in Laravel database migration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr9geqn1xhb8wa28vn1ew.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%2Fr9geqn1xhb8wa28vn1ew.png" alt=" " width="224" height="98"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When defining a foreign key in a Laravel migration, the &lt;strong&gt;onDelete&lt;/strong&gt; method determines what happens to the child records when the parent record is deleted. This allows you to manage data integrity at the database level. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here are the different types of onDelete actions you can use:&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  cascade
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;CASCADE&lt;/strong&gt; action will automatically delete all child records when their parent record is deleted. This is useful for "has many" relationships &lt;em&gt;where the child records are meaningless&lt;/em&gt; without the parent. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: If a user is deleted, all of their posts are also deleted. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Migration code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;foreignId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'user_id'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;constrained&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;cascadeOnDelete&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Migration code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;
&lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;foreign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'user_id'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;references&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'id'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'users'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;onDelete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'cascade'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  set null
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;SET NULL&lt;/strong&gt; action will set the foreign key on all child records to null when the parent record is deleted. This is useful for optional relationships &lt;em&gt;where the child record can still exist without the parent&lt;/em&gt;. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: When a user is deleted, the user_id on their posts is set to null, allowing the posts to remain without an author.
&lt;strong&gt;Note:&lt;/strong&gt; Requirement: The foreign key column must be set as nullable() in the migration. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Migration code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;
&lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;foreignId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'user_id'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;nullable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;constrained&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;nullOnDelete&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Migration code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;unsignedBigInteger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'user_id'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;nullable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;foreign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'user_id'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;references&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'id'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'users'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;onDelete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'set null'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  restrict
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;RESTRICT&lt;/strong&gt; action &lt;em&gt;prevents the parent record from being deleted as long as there are still child records referencing it&lt;/em&gt;. This is the default behavior if no onDelete action is specified. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: If a category has associated products, you cannot delete the category until all products have been re-assigned or deleted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Migration code: No onDelete method is called.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;
&lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;foreignId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'category_id'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;constrained&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;# OR&lt;/span&gt;

&lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;foreign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'category_id'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;references&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'id'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'categories'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;onDelete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'restrict'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  no action
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;NO ACTION&lt;/strong&gt; action is similar to RESTRICT. It defers the integrity check until the end of the transaction, but in practice, most database engines implement it the same way as RESTRICT. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Migration code: You can explicitly add this, though RESTRICT or no action is sufficient.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;
&lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;foreign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'user_id'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;references&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'id'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'users'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;onDelete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'no action'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Choosing the right onDelete action&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Delete all child records&lt;/td&gt;
&lt;td&gt;cascade&lt;/td&gt;
&lt;td&gt;Deleting a user should also delete all of their comments.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keep child records and unset the foreign key&lt;/td&gt;
&lt;td&gt;set null&lt;/td&gt;
&lt;td&gt;Deleting an author should keep their articles, with the author field becoming blank.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prevent deletion until child records are removed&lt;/td&gt;
&lt;td&gt;restrict&lt;/td&gt;
&lt;td&gt;You cannot delete a product category if products are still assigned to it.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This is also similar to on update.&lt;/p&gt;

&lt;p&gt;Have a nice day!&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>ondelete</category>
      <category>abdulsalamamtech</category>
    </item>
    <item>
      <title>Deloy Next or React App to VPS</title>
      <dc:creator>Abdulsalam Abdulrahman (Amtech Digital)</dc:creator>
      <pubDate>Sat, 22 Mar 2025 20:55:28 +0000</pubDate>
      <link>https://forem.com/abdulsalamamtech/deloy-next-or-react-app-to-vps-2ald</link>
      <guid>https://forem.com/abdulsalamamtech/deloy-next-or-react-app-to-vps-2ald</guid>
      <description>&lt;p&gt;&lt;strong&gt;Step by Step how to deploy next or react application to vps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A. &lt;strong&gt;Login to your VPS&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; ssh user@hostname
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;B. &lt;strong&gt;Generate SSH public key and add it to your GitHub project&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat ~/.ssh/id_rsa.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;C. &lt;strong&gt;Clone the project to your VPS&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;clone git@github.com:username/project.git
cd project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;D. &lt;strong&gt;Install all necessary packages&lt;/strong&gt;&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
npm run build
npm install pm2 --save-dev
npx pm2 start npm --name my-project -- start -- --port=3001
npx pm2 restart my-project
npx pm2 save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sometime this work's for vite application&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx pm2 start npm --name app-name -- run dev -- --port=3001
npx pm2 save
npx pm2 status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Use this on CD like GitHub action&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx pm2 restart app-name
npx pm2 save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E. &lt;strong&gt;Visit the application on the provided port&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://hostname:3001

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Congratulations Your Website is live!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Note: There are some necessary adjustments you need to make based on the type of OS and application on the VPS.&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/abdulsalamamtech"&gt;@abdulsalamamtech&lt;/a&gt; #vps #deploy #next #react&lt;/p&gt;

</description>
      <category>abdulsalamamtech</category>
      <category>vps</category>
      <category>nextjs</category>
      <category>react</category>
    </item>
    <item>
      <title>A comprehensive guide on how to deploy laravel application to vps, using github action, ssh key, server permissions and more.</title>
      <dc:creator>Abdulsalam Abdulrahman (Amtech Digital)</dc:creator>
      <pubDate>Wed, 05 Mar 2025 23:01:14 +0000</pubDate>
      <link>https://forem.com/abdulsalamamtech/a-comprehensive-guide-on-how-to-deploy-laravel-application-to-vps-using-github-action-ssh-key-15g3</link>
      <guid>https://forem.com/abdulsalamamtech/a-comprehensive-guide-on-how-to-deploy-laravel-application-to-vps-using-github-action-ssh-key-15g3</guid>
      <description>&lt;h1&gt;
  
  
  Comprehensive Laravel Deployment Guide with GitHub Actions and VPS
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Hostinger
&lt;/h2&gt;

&lt;p&gt;link to &lt;a href="https://www.hostinger.com/tutorials/how-to-deploy-laravel" rel="noopener noreferrer"&gt;hostinger blog post on how to deploy laravel on vps&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A GitHub repository with your Laravel project&lt;/li&gt;
&lt;li&gt;A VPS (Virtual Private Server) running Linux (Ubuntu recommended)&lt;/li&gt;
&lt;li&gt;SSH access to your VPS&lt;/li&gt;
&lt;li&gt;Basic understanding of Git, Laravel, and terminal commands&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Prepare Your Local Development Environment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 Ensure Your Laravel Project is Ready
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Make sure your project is in a GitHub repository&lt;/li&gt;
&lt;li&gt;Check your &lt;code&gt;.gitignore&lt;/code&gt; file to exclude unnecessary files:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/node_modules
/public/hot
/public/storage
/storage/*.key
/vendor
.env
.env.backup
.phpunit.result_cache
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1.2 Prepare Environment Configuration
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create a &lt;code&gt;.env.production&lt;/code&gt; file with production-specific configurations&lt;/li&gt;
&lt;li&gt;Ensure sensitive information is not hardcoded&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 2: Set Up SSH Keys for GitHub Actions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Generate SSH Keys on Your Local Machine
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Generate a new SSH key specifically for GitHub Actions&lt;/span&gt;
ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; ed25519 &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"github-actions-deployment"&lt;/span&gt;

&lt;span class="c"&gt;# Save the key in a specific location, e.g., ~/.ssh/github_actions_key&lt;/span&gt;
&lt;span class="c"&gt;# Do NOT use a passphrase for automated deployment&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.2 Set Up SSH on VPS
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Connect to your VPS via SSH
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh root@your_vps_ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Create a deployment user
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a new user for deployments&lt;/span&gt;
adduser deployer

&lt;span class="c"&gt;# Give sudo privileges (use carefully)&lt;/span&gt;
usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;deployer

&lt;span class="c"&gt;# Switch to deployer user&lt;/span&gt;
su - deployer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Set up SSH directory for the deployer user
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.ssh
&lt;span class="nb"&gt;chmod &lt;/span&gt;700 ~/.ssh
&lt;span class="nb"&gt;touch&lt;/span&gt; ~/.ssh/authorized_keys
&lt;span class="nb"&gt;chmod &lt;/span&gt;600 ~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.3 Configure GitHub Repository Secrets
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to your GitHub repository&lt;/li&gt;
&lt;li&gt;Navigate to Settings &amp;gt; Secrets and variables &amp;gt; Actions&lt;/li&gt;
&lt;li&gt;Add the following secrets:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;VPS_HOST&lt;/code&gt;: Your VPS IP address&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;VPS_PORT&lt;/code&gt;: SSH port (default 22)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;VPS_USER&lt;/code&gt;: deployer&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SSH_PRIVATE_KEY&lt;/code&gt;: Content of the private key generated in step 2.1&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SERVER_DESTINATION&lt;/code&gt;: Path on server (e.g., &lt;code&gt;/home/deployer/your-app&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DEPLOYMENT_ENV_FILE&lt;/code&gt;: Base64 encoded production &lt;code&gt;.env&lt;/code&gt; file contents&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 3: Prepare VPS for Laravel Deployment *[Skip to step 4 if you are using any VPS panel]
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 Install Required Software
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Update system&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;

&lt;span class="c"&gt;# Install PHP and extensions&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; php8.2-fpm php8.2-cli php8.2-common php8.2-mysql php8.2-zip php8.2-gd php8.2-mbstring php8.2-curl php8.2-xml php8.2-bcmath

&lt;span class="c"&gt;# Install Composer&lt;/span&gt;
curl &lt;span class="nt"&gt;-sS&lt;/span&gt; https://getcomposer.org/installer | php
&lt;span class="nb"&gt;sudo mv &lt;/span&gt;composer.phar /usr/local/bin/composer

&lt;span class="c"&gt;# Install Nginx&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nginx

&lt;span class="c"&gt;# Install MySQL (if not already installed)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; mysql-server

&lt;span class="c"&gt;# Install Node.js and NPM&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://deb.nodesource.com/setup_lts.x | &lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; bash -
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nodejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.2 Configure Nginx
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create Nginx configuration
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;your-domain.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;root&lt;/span&gt; &lt;span class="n"&gt;/home/deployer/your-app/public&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;index&lt;/span&gt; &lt;span class="s"&gt;index.php&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;charset&lt;/span&gt; &lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;try_files&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="n"&gt;/index.php?&lt;/span&gt;&lt;span class="nv"&gt;$query_string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;/favicon.ico&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kn"&gt;access_log&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="kn"&gt;log_not_found&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;/robots.txt&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kn"&gt;access_log&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="kn"&gt;log_not_found&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kn"&gt;error_page&lt;/span&gt; &lt;span class="mi"&gt;404&lt;/span&gt; &lt;span class="n"&gt;/index.php&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt; &lt;span class="sr"&gt;\.php$&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;fastcgi_pass&lt;/span&gt; &lt;span class="s"&gt;unix:/var/run/php/php8.2-fpm.sock&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;fastcgi_index&lt;/span&gt; &lt;span class="s"&gt;index.php&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;fastcgi_param&lt;/span&gt; &lt;span class="s"&gt;SCRIPT_FILENAME&lt;/span&gt; &lt;span class="nv"&gt;$realpath_root$fastcgi_script_name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="s"&gt;fastcgi_params&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt; &lt;span class="sr"&gt;/\.(?!well-known).*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;deny&lt;/span&gt; &lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Enable configuration
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; /etc/nginx/sites-available/your-app /etc/nginx/sites-enabled/
&lt;span class="nb"&gt;sudo &lt;/span&gt;nginx &lt;span class="nt"&gt;-t&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Create GitHub Actions Workflow *[Continue from here if you are using VPS panel on your server]
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 Create Workflow File
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;.github/workflows/laravel-deploy.yml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Laravel Deployment&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;main"&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v3&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Setup PHP&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;shivammathur/setup-php@v2&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;php-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;8.2'&lt;/span&gt;
        &lt;span class="na"&gt;extensions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mbstring, bcmath, zip&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install Composer Dependencies&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install NPM Dependencies&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm install&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build Frontend&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm run build&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Prepare Environment File&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
        &lt;span class="s"&gt;echo "${{ secrets.DEPLOYMENT_ENV_FILE }}" | base64 --decode &amp;gt; .env&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deploy to VPS&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;appleboy/ssh-action@master&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.VPS_HOST }}&lt;/span&gt;
        &lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.VPS_USER }}&lt;/span&gt;
        &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.SSH_PRIVATE_KEY }}&lt;/span&gt;
        &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;cd ${{ secrets.SERVER_DESTINATION }}&lt;/span&gt;
          &lt;span class="s"&gt;git pull origin main&lt;/span&gt;
          &lt;span class="s"&gt;composer install --no-interaction&lt;/span&gt;
          &lt;span class="s"&gt;php artisan migrate --force&lt;/span&gt;
          &lt;span class="s"&gt;php artisan config:clear&lt;/span&gt;
          &lt;span class="s"&gt;php artisan cache:clear&lt;/span&gt;
          &lt;span class="s"&gt;npm install&lt;/span&gt;
          &lt;span class="s"&gt;npm run build&lt;/span&gt;
          &lt;span class="s"&gt;sudo systemctl restart nginx&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: Final VPS Configuration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 Set Up Git on VPS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /home/deployer/your-app
git init
git remote add origin https://github.com/your-username/your-repo.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.2 Set Permissions
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; deployer:deployer /home/deployer/your-app
&lt;span class="nb"&gt;sudo chmod&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; 755 /home/deployer/your-app
&lt;span class="nb"&gt;sudo chmod&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; 775 /home/deployer/your-app/storage
&lt;span class="nb"&gt;sudo chmod&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; 775 /home/deployer/your-app/bootstrap/cache
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 6: Database Setup
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create MySQL database&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;mysql
CREATE DATABASE your_database_name&lt;span class="p"&gt;;&lt;/span&gt;
CREATE USER &lt;span class="s1"&gt;'your_username'&lt;/span&gt;@&lt;span class="s1"&gt;'localhost'&lt;/span&gt; IDENTIFIED BY &lt;span class="s1"&gt;'your_password'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
GRANT ALL PRIVILEGES ON your_database_name.&lt;span class="k"&gt;*&lt;/span&gt; TO &lt;span class="s1"&gt;'your_username'&lt;/span&gt;@&lt;span class="s1"&gt;'localhost'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
FLUSH PRIVILEGES&lt;span class="p"&gt;;&lt;/span&gt;
EXIT&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Troubleshooting Tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Check GitHub Actions logs for specific errors&lt;/li&gt;
&lt;li&gt;Verify SSH key permissions&lt;/li&gt;
&lt;li&gt;Ensure all secrets are correctly set&lt;/li&gt;
&lt;li&gt;Check Nginx and PHP-FPM logs for deployment issues&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security Recommendations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use strong, unique passwords&lt;/li&gt;
&lt;li&gt;Keep your system and dependencies updated&lt;/li&gt;
&lt;li&gt;Configure firewall (UFW)&lt;/li&gt;
&lt;li&gt;Use SSH key authentication&lt;/li&gt;
&lt;li&gt;Limit sudo access&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;if you need more elaboration on any specific part of this comprehensive deployment guide, paste on the comment section.&lt;/p&gt;

</description>
      <category>abdulsalamamtech</category>
      <category>laravel</category>
      <category>githubactions</category>
      <category>vps</category>
    </item>
    <item>
      <title>Level Up Your AI Knowledge: Tools, Tips, and Influencers to Watch</title>
      <dc:creator>Abdulsalam Abdulrahman (Amtech Digital)</dc:creator>
      <pubDate>Tue, 01 Oct 2024 23:00:00 +0000</pubDate>
      <link>https://forem.com/abdulsalamamtech/level-up-your-ai-knowledge-tools-tips-and-influencers-to-watch-3p32</link>
      <guid>https://forem.com/abdulsalamamtech/level-up-your-ai-knowledge-tools-tips-and-influencers-to-watch-3p32</guid>
      <description>&lt;h3&gt;
  
  
  The Rapid Pace of AI Development
&lt;/h3&gt;

&lt;p&gt;The field of AI is advancing at an unprecedented pace. New tools, techniques, and applications are constantly emerging, making it a challenge to stay current. However, keeping up with these developments is crucial for anyone involved in AI. The most powerful AI model to date, &lt;a href="https://openai.com/index/gpt-4o-and-more-tools-to-chatgpt-free/" rel="noopener noreferrer"&gt;GPT-4o&lt;/a&gt;, was released for free. GPTs are now publicly available, and video generation has evolved leaps and bounds (see &lt;a href="https://kling.kuaishou.com/" rel="noopener noreferrer"&gt;Kling&lt;/a&gt; and &lt;a href="https://deepmind.google/technologies/veo/" rel="noopener noreferrer"&gt;VEO&lt;/a&gt;). &lt;a href="https://www.udio.com/announcements" rel="noopener noreferrer"&gt;Udio&lt;/a&gt; added features like editing lyrics after you have created a song and allowing you to use your own audio clip to make music.&lt;/p&gt;

&lt;h3&gt;
  
  
  Staying Informed
&lt;/h3&gt;

&lt;p&gt;To stay current with the latest trends and news in AI, here are some valuable resources – some of which are technical for those who like that kind of thing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.technologyreview.com/topic/artificial-intelligence/" rel="noopener noreferrer"&gt;MIT Technology Review - AI&lt;/a&gt;:&lt;/strong&gt; In-depth articles and analysis on the latest AI advancements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://towardsdatascience.com/" rel="noopener noreferrer"&gt;Towards Data Science&lt;/a&gt;:&lt;/strong&gt; A platform for sharing concepts, ideas, and codes in AI and data science.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://arxiv.org/list/cs.AI/recent" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;:&lt;/strong&gt; Access to the latest research papers and technical reports in AI.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Stay Connected with Leading AI Content Creators
&lt;/h3&gt;

&lt;p&gt;To stay updated with the latest trends and insights in AI, follow these influential content creators:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://twitter.com/mattfarmerai" rel="noopener noreferrer"&gt;Matt Farmer&lt;/a&gt;:&lt;/strong&gt; Shares his expertise on AI tools and marketing across various platforms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://twitter.com/techfren" rel="noopener noreferrer"&gt;Techfren&lt;/a&gt;:&lt;/strong&gt; Offers cutting-edge coding and AI reviews and tutorials.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://twitter.com/thebrandnat" rel="noopener noreferrer"&gt;Brand Nat&lt;/a&gt;:&lt;/strong&gt; Brings insightful AI discussions related to AI productivity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://twitter.com/rajivshah" rel="noopener noreferrer"&gt;Rajiv Shah&lt;/a&gt;:&lt;/strong&gt; Provides deep dives into AI research and more fun AI content on TikTok.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://twitter.com/rachel_l_woods" rel="noopener noreferrer"&gt;Rachel Woods&lt;/a&gt;:&lt;/strong&gt; Regularly discusses AI business automation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  AI for Good
&lt;/h3&gt;

&lt;p&gt;As you continue your journey in the AI world, remember AI’s potential to bring about positive change and its potential for harm. Whether improving healthcare, enhancing education, or addressing environmental challenges, AI can be a powerful force for good. Be mindful of ethical considerations and strive to use AI that is inclusive, fair, and beneficial to all.&lt;/p&gt;

&lt;h3&gt;
  
  
  Being Community Champions
&lt;/h3&gt;

&lt;p&gt;You are now equipped to be champions of AI in your communities. Share your knowledge, mentor others, and contribute to discussions about the ethical use of AI. We can create an African AI voice by fostering a community of informed and responsible AI users in Africa.&lt;/p&gt;

&lt;p&gt;I share AI content on my &lt;a href="https://www.linkedin.com/in/abdulsalamamtech/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; other &lt;a href="https://bit.ly/abdulsalamamtech" rel="noopener noreferrer"&gt;social media&lt;/a&gt; every Wednesday. &lt;/p&gt;

&lt;p&gt;Let's use AI to make a positive impact on our world!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>how to share your project as a software developer</title>
      <dc:creator>Abdulsalam Abdulrahman (Amtech Digital)</dc:creator>
      <pubDate>Wed, 31 Jul 2024 10:02:33 +0000</pubDate>
      <link>https://forem.com/abdulsalamamtech/how-to-share-your-project-as-a-software-developer-24a2</link>
      <guid>https://forem.com/abdulsalamamtech/how-to-share-your-project-as-a-software-developer-24a2</guid>
      <description>&lt;h1&gt;
  
  
  How to share your project as a software developer
&lt;/h1&gt;

&lt;p&gt;Sometimes you might what to share your software project or design to people for reviews or to encourage upcoming developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Below are some important steps to consider:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu0gmsxzyy8h51se40v5f.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu0gmsxzyy8h51se40v5f.jpeg" alt="Image description" width="206" height="116"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;screen shots&lt;/li&gt;
&lt;li&gt;project name&lt;/li&gt;
&lt;li&gt;brief description&lt;/li&gt;
&lt;li&gt;inspiration (add links if available)&lt;/li&gt;
&lt;li&gt;what it does&lt;/li&gt;
&lt;li&gt;how you built it&lt;/li&gt;
&lt;li&gt;challenges you ran into&lt;/li&gt;
&lt;li&gt;accomplishments that you're proud of&lt;/li&gt;
&lt;li&gt;what you learned&lt;/li&gt;
&lt;li&gt;what's next for the project&lt;/li&gt;
&lt;li&gt;tech stack (what it's built with)&lt;/li&gt;
&lt;li&gt;repo, demo or live URL links to try out&lt;/li&gt;
&lt;li&gt;appreciation to supervisor, mentor, guidance, or team members&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Below is a sample and step by step guide:
&lt;/h2&gt;

&lt;p&gt;I'm using my project as a sample for you guys.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn6f0bm04rc3biyojyx7c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn6f0bm04rc3biyojyx7c.png" alt="Image description" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;screen shots&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;project name&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My portfolio.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;brief description&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My portfolio website contains information about me, my projects and contact form.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;inspiration (add links if available)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This project was inspired by my mentor portfolio website, Mr. Wakili Almustapha Abdullahi (&lt;a href="https://wakili.netlify.app/" rel="noopener noreferrer"&gt;https://wakili.netlify.app/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;what it does&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This project shows some of my recent projects to visitors and potential client as a proof to verify my potentials and skills.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;how you built it&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The project was built with HTML, CSS and JavaScript for its functionality, it is deployed to GitHub and hosted on Netlify.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;challenges you ran into.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I face some issues hosting this project to Netlify because it was my first time doing so. As a result, I had to do some research on how to host it on Netlify, which required additional time and effort for me to complete.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;accomplishments that you're proud of&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I am happy, I was able to host my portfolio website and share the URL to the public, friends and family to go through.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;what you learned&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I learnt a lot from this project from being able to use Git and GitHub to hosting my portfolio online for people to see.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;what's next for the project&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding some functionality with JavaScript and some useful content like, testimonial and downloadable resume.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;tech stack (what it is built with)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML, CSS, JS, GIT, GITHUB, Netlify.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;repo, demo or live URL links to try out&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/abdulsalamamtech/" rel="noopener noreferrer"&gt;https://github.com/abdulsalamamtech/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Live URL: &lt;a href="https://abdulsalamamtech.netlify.app/" rel="noopener noreferrer"&gt;https://abdulsalamamtech.netlify.app/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;YouTube Demo: &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;appreciation to supervisor, mentor, guidance, or team members&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This project was supervised by my mentor Mr. Abdulsalam and Mr. Muhammed, I truly appreciate their support and mentorship, they are the one that motivate me to move out of my comfort zone.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What else?
&lt;/h2&gt;

&lt;p&gt;You are now done with the guide on how to share your project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now follow and use the steps above:&lt;/li&gt;
&lt;li&gt;Push your project to &lt;a href="https://www.github.com" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Share your project on &lt;a href="https://www.linkedin.com" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;You can also tag me &lt;a class="mentioned-user" href="https://dev.to/abdulsalamamtech"&gt;@abdulsalamamtech&lt;/a&gt; on &lt;a href="https://www.linkedin.com/in/abdulsalamamtech" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>softwaredevelopment</category>
      <category>projectreview</category>
      <category>portfolio</category>
      <category>abdulsalamamtech</category>
    </item>
    <item>
      <title>AI for Good: Harnessing Technology for Positive Change</title>
      <dc:creator>Abdulsalam Abdulrahman (Amtech Digital)</dc:creator>
      <pubDate>Wed, 24 Jul 2024 06:00:00 +0000</pubDate>
      <link>https://forem.com/abdulsalamamtech/ai-for-good-harnessing-technology-for-positive-change-fp7</link>
      <guid>https://forem.com/abdulsalamamtech/ai-for-good-harnessing-technology-for-positive-change-fp7</guid>
      <description>&lt;h1&gt;
  
  
  The AI Train is Leaving the Station (But You Can Still Catch Up!)
&lt;/h1&gt;

&lt;p&gt;The world of AI is moving faster than ever before. New tools, techniques, and mind-blowing applications are popping up all the time. It can feel like you need a jetpack just to keep up! But fear not, fellow AI enthusiasts – staying informed is crucial, and luckily, it doesn't have to be a chore.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI's Greatest Hits (So Far!)
&lt;/h2&gt;

&lt;p&gt;Let's talk about some recent breakthroughs that are changing the game. The release of GPT-4, arguably the most powerful AI model to date, is a game-changer. And guess what? GPTs are now freely available for tinkerers and creators like you! Video generation has also taken a giant leap forward (check out Kling and VEO for some mind-bending examples). But wait, there's more! Udio just upped its game with features like post-creation lyric editing and the ability to use your own audio clips to make music.&lt;/p&gt;

&lt;h2&gt;
  
  
  Staying in the AI Know
&lt;/h2&gt;

&lt;p&gt;Want to keep your finger on the pulse of AI advancements? Here are some amazing resources (don't worry, there's something for everyone, even the code enthusiasts!):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MIT Technology Review - AI: Dive deep into articles and analysis from experts on the latest AI breakthroughs.&lt;/li&gt;
&lt;li&gt;Towards Data Science: This platform is like a playground for sharing ideas, concepts, and even code related to AI and data science.&lt;/li&gt;
&lt;li&gt;arXiv: Get access to the latest research papers and technical reports – perfect for those who love the nitty-gritty details.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Meet Your AI BFFs
&lt;/h2&gt;

&lt;p&gt;Sometimes, learning is more fun when you have a guide. Here are some amazing content creators who are passionate about sharing their AI knowledge:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Matt Farmer: This AI whiz shares his expertise on AI tools and marketing across various platforms.&lt;/li&gt;
&lt;li&gt;Techfren: Get your coding fix with cutting-edge AI reviews and tutorials.&lt;/li&gt;
&lt;li&gt;Brand Nat: Looking for insightful discussions on AI and productivity? Brand Nat has you covered.&lt;/li&gt;
&lt;li&gt;Rajiv Shah: Dive deep into AI research with Rajiv, who also brings the fun factor to TikTok with engaging AI content.&lt;/li&gt;
&lt;li&gt;Rachel Woods: Stay on top of AI's impact on business automation with Rachel's insights.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AI for Good: The Power to Change the World
&lt;/h2&gt;

&lt;p&gt;As you explore the fascinating world of AI, remember its immense potential for positive change. AI can be a powerful force for good, from improving healthcare and education to tackling environmental challenges. But with great power comes great responsibility! Let's strive to use AI ethically, ensuring it's inclusive, fair, and beneficial to everyone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Become an AI Champion in Your Community!
&lt;/h2&gt;

&lt;p&gt;Now that you're armed with knowledge, it's time to share it! Mentor others, participate in discussions about responsible AI use, and spread the word. Together, we can create a strong African voice in the AI conversation, fostering a community of informed and responsible AI users across the continent.&lt;/p&gt;

&lt;p&gt;This version uses a more conversational tone, highlights specific examples, and emphasizes the positive impact of AI. It also includes a call to action to encourage readers to get involved.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvumt452qiknvire8342u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvumt452qiknvire8342u.png" alt="Image description" width="672" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>aiforgood</category>
      <category>abdulsalamamtech</category>
      <category>aiwednesday</category>
    </item>
    <item>
      <title>THE DIFFERENT BETWEEN LIBRARY AND FRAMEWORK AND NOT USING BOTH WITH REAL LIFE  ILLUSTRATIONS</title>
      <dc:creator>Abdulsalam Abdulrahman (Amtech Digital)</dc:creator>
      <pubDate>Thu, 27 Jun 2024 23:00:00 +0000</pubDate>
      <link>https://forem.com/abdulsalamamtech/the-different-between-library-and-framework-and-not-using-both-with-real-life-illustrations-48o4</link>
      <guid>https://forem.com/abdulsalamamtech/the-different-between-library-and-framework-and-not-using-both-with-real-life-illustrations-48o4</guid>
      <description>&lt;p&gt;THE DIFFERENT BETWEEN LIBRARY AND FRAMEWORK&lt;br&gt;
AND NOT USING BOTH WITH REAL LIFE &lt;br&gt;
ILLUSTRATIONS&lt;/p&gt;

&lt;p&gt;It's sometimes very difficult to differentiate between library and framework on this small article, we are going to explain them both with some real-life illustrations.&lt;/p&gt;

&lt;p&gt;First, what is a library?&lt;br&gt;
Libraries are basically pre-programmed modules that can be used to speed up the development process. They typically do one specific thing.&lt;/p&gt;

&lt;p&gt;While frameworks are very similar to libraries, they are also pre-programmed, but instead of doing one specific thing, they are used to archive a lot of things at once.&lt;/p&gt;

&lt;h2&gt;
  
  
  A real-life illustration is about you deciding to take bread and eggs for a break.
&lt;/h2&gt;

&lt;p&gt;There are many ways to get your breakfast ready; let's illustrate them.&lt;/p&gt;

&lt;h3&gt;
  
  
  This is an example of a framework:
&lt;/h3&gt;

&lt;p&gt;You can just go and get the bread and eggs from a grocery store, fry your egg, and toss your bread, and you are ready to go, no stress; it's time-efficient and stress-free.&lt;/p&gt;

&lt;h3&gt;
  
  
  This is an example of using libraries:
&lt;/h3&gt;

&lt;p&gt;What about if you want to make the bread on yourself?&lt;br&gt;
First, you need to get flour, butter, an oven, sugar, salt, yeast, milk, and many more.&lt;br&gt;
The sugar, salt, and yeasts have been processed, but you aren't doing it yourself, nor are you making your flow or oven.&lt;/p&gt;

&lt;p&gt;But you are not yet done; how long do you think? It's going to take you to make the bread and take your breakfast?&lt;/p&gt;

&lt;h3&gt;
  
  
  This is an example of building from scratch:
&lt;/h3&gt;

&lt;p&gt;What about if you want to make the bread and egg on your own?&lt;br&gt;
First, you need to train a chicken to arch the egg, you also need to plant and process casava for the flour and make your own butter and yeast, create or manufacture your own oven, plant and process sugarcane for your sugar, process your own salt, and many more.&lt;/p&gt;

&lt;p&gt;How stressful and time-consuming do you think this is?&lt;br&gt;
How many months is it going to take? a lot, right?&lt;/p&gt;

&lt;p&gt;This is just the difference between using a framework,&lt;br&gt;
library and building from scratch, respectively.&lt;/p&gt;

&lt;p&gt;Framework: take minimal time to archive your goals, which included a lot of different other libraries.&lt;/p&gt;

&lt;p&gt;Making bread with all the important ingredients is a lot; this is like building from scratch.&lt;/p&gt;

&lt;h3&gt;
  
  
  An example of building it yourself:
&lt;/h3&gt;

&lt;p&gt;is using CSS, JavaScript, or PHP on your website.&lt;/p&gt;

&lt;h3&gt;
  
  
  Examples of libraries:
&lt;/h3&gt;

&lt;p&gt;is using Tailwind and jQuery on your website.&lt;/p&gt;

&lt;h3&gt;
  
  
  An example of a framework:
&lt;/h3&gt;

&lt;p&gt;using Bootstrap, Angular, and Laravel on your website&lt;/p&gt;

&lt;p&gt;I hope you get the real message from this article.&lt;/p&gt;

&lt;p&gt;Thanks for reading through!&lt;/p&gt;

</description>
      <category>framework</category>
      <category>library</category>
      <category>development</category>
      <category>illustration</category>
    </item>
    <item>
      <title>Understanding Libraries vs. Frameworks: Real-Life Illustrations By AbdulsalamAmtech</title>
      <dc:creator>Abdulsalam Abdulrahman (Amtech Digital)</dc:creator>
      <pubDate>Mon, 24 Jun 2024 09:16:09 +0000</pubDate>
      <link>https://forem.com/abdulsalamamtech/understanding-libraries-vs-frameworks-real-life-illustrations-by-abdulsalamamtech-52cg</link>
      <guid>https://forem.com/abdulsalamamtech/understanding-libraries-vs-frameworks-real-life-illustrations-by-abdulsalamamtech-52cg</guid>
      <description>&lt;p&gt;The difference between a library and a framework can be illustrated with real-life examples. &lt;/p&gt;

&lt;p&gt;A library is like buying bread and eggs: pre-made components that speed up development, doing one thing well. &lt;/p&gt;

&lt;p&gt;A framework is like getting a complete breakfast from the store: it simplifies many tasks at once. &lt;/p&gt;

&lt;p&gt;Building from scratch is like making bread and eggs entirely by yourself: time-consuming and complex. &lt;/p&gt;

&lt;p&gt;Libraries like jQuery and Tailwind help specific tasks, while frameworks like Laravel and Bootstrap offer comprehensive solutions.&lt;/p&gt;

</description>
      <category>cschallenge</category>
    </item>
    <item>
      <title>Twilio Intelligent Doctor By AbdulsalamAmtech</title>
      <dc:creator>Abdulsalam Abdulrahman (Amtech Digital)</dc:creator>
      <pubDate>Sun, 23 Jun 2024 13:46:14 +0000</pubDate>
      <link>https://forem.com/abdulsalamamtech/twilio-intelligent-doctor-by-abdulsalamamtech-431e</link>
      <guid>https://forem.com/abdulsalamamtech/twilio-intelligent-doctor-by-abdulsalamamtech-431e</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/twilio"&gt;Twilio Challenge &lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built an AI symptoms analyzer and emergency reporter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fagwoied9up2v4oyraf9b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fagwoied9up2v4oyraf9b.png" alt="Image description" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The demo link for my project called: &lt;a href="https://github.com/abdulsalamamtech/twilio-intelligent-doctor"&gt;Twilio Intelligent Doctor&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Twilio and AI
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Firstly,&lt;br&gt;
for AI symptoms analyzer a user on the app will enter his or her symptoms, choose sex (male or female) and age (e.g. 20 45 or 65), click on check condition button.&lt;br&gt;
The symptoms will be sent to an AI model to analyze and send back possible condition and healthcare personnel to meet, then a page will show up with what the AI has analyze with a button to contact the person the AI has suggested.&lt;br&gt;
If the button is clicked with a SMS or Voice options for Twilio to use and send the symptoms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Secondly,&lt;br&gt;
for the Emergency Reporter a user enters description of an emergency and address and click on the report button.&lt;br&gt;
The emergency will be sent to an AI model on possible agency to contact, then the emergency message will be sent to the emergency agency through SMS or Voice.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Additional Prize Categories
&lt;/h2&gt;

&lt;p&gt;My project qualifies for Twilio Impactful Innovation and Twilio Times Two.&lt;/p&gt;

&lt;p&gt;I credited myself &lt;a class="mentioned-user" href="https://dev.to/abdulsalamamtech"&gt;@abdulsalamamtech&lt;/a&gt; for building this project and @devAbdulsalam for his support. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvk5z6vcd3z3u4le1uwc1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvk5z6vcd3z3u4le1uwc1.png" alt="Image description" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for giving me the opportunity to participate in this twiliochallenge.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>twiliochallenge</category>
      <category>ai</category>
      <category>twilio</category>
    </item>
  </channel>
</rss>
