<?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>DEV Community: Fiewor John</title>
    <description>The latest articles on DEV Community by Fiewor John (@fiewor).</description>
    <link>https://dev.to/fiewor</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%2F750787%2Ff563f113-a603-4f72-b89c-ea6b94613f65.png</url>
      <title>DEV Community: Fiewor John</title>
      <link>https://dev.to/fiewor</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fiewor"/>
    <language>en</language>
    <item>
      <title>My Updated Dev Portfolio</title>
      <dc:creator>Fiewor John</dc:creator>
      <pubDate>Mon, 02 Feb 2026 06:53:54 +0000</pubDate>
      <link>https://dev.to/fiewor/my-updated-dev-portfolio-307k</link>
      <guid>https://dev.to/fiewor/my-updated-dev-portfolio-307k</guid>
      <description>&lt;h2&gt;
  
  
  New Year, New You Portfolio Challenge Submission
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Portfolio
&lt;/h2&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__cloud-run"&gt;
  &lt;iframe height="600px" src="https://portfolio-943768265988.us-central1.run.app"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;




&lt;h2&gt;
  
  
  About Me
&lt;/h2&gt;

&lt;p&gt;I am a software engineer who builds full-stack web applications with an emphasis on pragmatic, maintainable code and strong developer experience. For this portfolio refresh, I aimed to present a concise, modern summary of my skills and projects while improving performance, accessibility, and responsiveness so the site better represents my current capabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Overview &amp;amp; Goals
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Modernize an old Create React App portfolio I last updated four years ago.
&lt;/li&gt;
&lt;li&gt;Improve developer experience (faster dev server, smaller builds).
&lt;/li&gt;
&lt;li&gt;Improve end-user experience (dark mode, responsive layout, clearer project highlights).
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tools &amp;amp; Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React migrated from CRA → Vite (for faster dev feedback and smaller build times).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build / Bundler:&lt;/strong&gt; Vite (ESM-first, fast HMR).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting / Deployment:&lt;/strong&gt; Google Cloud Run (containerized, serverless deployment).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Containerization:&lt;/strong&gt; Docker with multi-stage builds, small production image, gzip compression, SPA routing.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google AI:&lt;/strong&gt; Antigravity — AI-first development environment to refactor, suggest improvements, and accelerate repetitive tasks.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development practices:&lt;/strong&gt; prompt engineering best practices, incremental commits, dependency hygiene, CI/CD practices.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key Development Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CRA → Vite Migration&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replaced CRA-specific scripts and configs with Vite-compatible equivalents.
&lt;/li&gt;
&lt;li&gt;Updated imports and adjusted environment variable usage to match Vite conventions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dependency Updates&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upgraded major frontend dependencies to current stable releases (React 18 for compatibility).
&lt;/li&gt;
&lt;li&gt;Resolved peer dependency conflicts between React, React DOM, and testing libraries.
&lt;/li&gt;
&lt;li&gt;Removed deprecated or unmaintained packages.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dark Mode&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System-preference-aware theme with manual toggle persisted in &lt;code&gt;localStorage&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;CSS variables for theme tokens for maintainability and compact implementation.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Responsive &amp;amp; Accessibility Improvements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adjusted layout breakpoints and touch targets for mobile devices.
&lt;/li&gt;
&lt;li&gt;Improved semantic HTML and ARIA attributes where appropriate.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Containerization &amp;amp; Cloud Run Deployment&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-stage Docker build:

&lt;ul&gt;
&lt;li&gt;Node build stage for dependency installation and Vite production build.
&lt;/li&gt;
&lt;li&gt;Nginx runtime stage with gzip compression and SPA routing.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ensured cross-platform compatibility by building &lt;code&gt;amd64/linux&lt;/code&gt; image for Cloud Run.
&lt;/li&gt;
&lt;li&gt;Pushed Docker image to Artifact Registry and deployed to Cloud Run.
&lt;/li&gt;
&lt;li&gt;Embedded the live Cloud Run deployment in this post.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  How I Used Antigravity
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Performed targeted refactors (e.g., simplifying a large portfolio component).
&lt;/li&gt;
&lt;li&gt;Generated guided migration snippets for CRA → Vite.
&lt;/li&gt;
&lt;li&gt;Used iterative prompt → change → test cycles to keep changes minimal and reversible.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What I'm Most Proud Of
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Successful migration from CRA → Vite with faster builds and improved developer feedback loop.
&lt;/li&gt;
&lt;li&gt;Dark mode implementation that respects system preference with a simple toggle.
&lt;/li&gt;
&lt;li&gt;Dependency hygiene and modernized build process.
&lt;/li&gt;
&lt;li&gt;Cloud Run deployment with a multi-stage Docker build and gzip, making the portfolio lightweight, fast, and embeddable.
&lt;/li&gt;
&lt;li&gt;AI-augmented development workflow significantly reduced time spent on repetitive refactors.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What to Look for in the Demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Project cards linking to code samples and short implementation notes.
&lt;/li&gt;
&lt;li&gt;Clear, scannable “About / Skills / Contact” section.
&lt;/li&gt;
&lt;li&gt;Theme toggle and responsive behavior — try resizing the viewport or switching system dark/light mode.
&lt;/li&gt;
&lt;li&gt;Accessible semantic structure and keyboard navigability for main sections.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Thank you for reviewing my submission — I look forward to feedback from the Google AI team and the community.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>googleaichallenge</category>
      <category>portfolio</category>
      <category>gemini</category>
    </item>
    <item>
      <title>Using GitHub Actions to Battle Racism (or at least contribute to the process)!</title>
      <dc:creator>Fiewor John</dc:creator>
      <pubDate>Sun, 21 Nov 2021 13:38:30 +0000</pubDate>
      <link>https://dev.to/fiewor/using-github-actions-to-battle-racism-or-at-least-contribute-to-the-process-5fpf</link>
      <guid>https://dev.to/fiewor/using-github-actions-to-battle-racism-or-at-least-contribute-to-the-process-5fpf</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;GitHub Actions are event-driven workflows which are very useful for automating processes in software development lifecycle. They're even more awesome because they're located where all the fun stuff happens - GitHub! This takes resolving of issues, collaboration and deployment to a whole other level and makes it even easier too.&lt;/p&gt;

&lt;p&gt;To learn more about GitHub actions and how you can begin to utilise them, check their easy-to-follow &lt;a href="https://docs.github.com/en/actions"&gt;documentation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  My Workflow
&lt;/h3&gt;

&lt;p&gt;During Hacktoberfest, I created two greeting bots and one stale bot for IBM's Call for Code for Racial Justice Open Source projects.&lt;br&gt;
Basically, the greeting bots greet new contributors to the project with a message.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: Greetings

on: [pull_request, issues]

jobs:
  greeting:
    runs-on: ubuntu-latest
    steps:
       ...
       issue-message: 'Thank you so much for contributing to our work!'
       pr-message: 'Thank you for your contribution! Someone will review it ASAP.'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The stale bot marks issues stale after a particular number of days. You might be wondering why this would be useful. Well, it helps notify contributors of issues that have been unattended to for too long and hence prioritize such issues.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: Mark stale issues and pull requests

on: 
  schedule:
    - cron: "0 0 * * *"

jobs:
  stale:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/stale@v1
        ....
          stale-issue-message: ':wave: Hi! This issue has been marked stale due to inactivity. If no further activity occurs within the next 7 days, it will automatically be closed.'
          ...
          stale-issue-label: 'stale'
          exempt-issue-label: 'keep-open'
          remove-stale-when-updated: true
          stale-issue-label: 'Stale'
          stale-pr-label: 'Stale'
          labels-to-add-when-unstale: 'help-wanted'
          days-before-stale: 60
          days-before-close: 7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These GitHub Action Bots are being used in two Call For Code for Racial Justice Projects&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/Call-for-Code-for-Racial-Justice/Truth-Loop"&gt;Truth Loop&lt;/a&gt; - a solution that helps communities simply understand the policies, regulations and legislation that will impact them the most and allows them to share their experiences around how policies have impacted them or how proposed policies could impact them using short video testimonials.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://github.com/Call-for-Code-for-Racial-Justice/TakeTwo-Marker-ChromeExtension"&gt;TakeTwo-Marker-ChromeExtension&lt;/a&gt; which is 'a plugin to facilitate the capture and categorization of words and phrases that could be racially biased through a browser.'&lt;/p&gt;
&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maintainer Must-Haves - since it makes the lives of open source maintainers easier.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Link to Code
&lt;/h3&gt;

&lt;p&gt;Stale Bot&lt;br&gt;
&lt;a href="https://github.com/Call-for-Code-for-Racial-Justice/Truth-Loop/pull/211/files"&gt;https://github.com/Call-for-Code-for-Racial-Justice/Truth-Loop/pull/211/files&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Greeting Bot&lt;br&gt;
TakeTwo-Marker-ChromeExtension&lt;br&gt;
&lt;a href="https://github.com/Call-for-Code-for-Racial-Justice/TakeTwo-Marker-ChromeExtension/pull/29/files"&gt;https://github.com/Call-for-Code-for-Racial-Justice/TakeTwo-Marker-ChromeExtension/pull/29/files&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Truth Loop&lt;br&gt;
&lt;a href="https://github.com/Call-for-Code-for-Racial-Justice/Truth-Loop/pull/195/files"&gt;https://github.com/Call-for-Code-for-Racial-Justice/Truth-Loop/pull/195/files&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional Resources / Info
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Here's the article by Call for Code in which I was featured:&lt;br&gt;
&lt;a href="https://medium.com/callforcode/hacktoberfest-fighting-racism-with-open-source-code-956559da7d6d"&gt;https://medium.com/callforcode/hacktoberfest-fighting-racism-with-open-source-code-956559da7d6d&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I was also a speaker in the Demo Day (somewhere between 8:00 and 13:00)&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=7VWlc5JiZ7Q"&gt;https://www.youtube.com/watch?v=7VWlc5JiZ7Q&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Most importantly, join the call, there's a lot more awesome stuff to be done!&lt;br&gt;
&lt;a href="https://developer.ibm.com/callforcode/racial-justice/"&gt;https://developer.ibm.com/callforcode/racial-justice/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>actionshackathon21</category>
      <category>hacktoberfest</category>
      <category>github</category>
      <category>blacklivesmatter</category>
    </item>
  </channel>
</rss>
