<?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: Victor Osaikhuiwuomwan</title>
    <description>The latest articles on DEV Community by Victor Osaikhuiwuomwan (@victorion0).</description>
    <link>https://dev.to/victorion0</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%2F3574481%2F9fa6b279-acd8-4fcb-b0f9-4d05e076e212.png</url>
      <title>DEV Community: Victor Osaikhuiwuomwan</title>
      <link>https://dev.to/victorion0</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/victorion0"/>
    <language>en</language>
    <item>
      <title>I Built a Testable Profile Card Using Only Vanilla HTML, CSS &amp; JavaScript</title>
      <dc:creator>Victor Osaikhuiwuomwan</dc:creator>
      <pubDate>Thu, 16 Apr 2026 20:14:29 +0000</pubDate>
      <link>https://dev.to/victorion0/i-built-a-testable-profile-card-using-only-vanilla-html-css-javascript-1lm</link>
      <guid>https://dev.to/victorion0/i-built-a-testable-profile-card-using-only-vanilla-html-css-javascript-1lm</guid>
      <description>&lt;p&gt;Hey everyone,&lt;/p&gt;

&lt;p&gt;I recently completed a frontend challenge to build a Profile Card using only plain HTML, CSS, and JavaScript — no frameworks allowed.&lt;/p&gt;

&lt;p&gt;The requirements were quite strict. I had to include specific &lt;code&gt;data-testid&lt;/code&gt; attributes on every key element so the automated tests could verify everything easily. The card needed to show a name, bio, avatar, live epoch time in milliseconds, social links, hobbies, and dislikes.&lt;/p&gt;

&lt;p&gt;I focused on making it responsive: it stacks cleanly on mobile and switches to a side-by-side layout with the avatar on the left on larger screens using CSS Grid.&lt;/p&gt;

&lt;p&gt;Accessibility was important to me too — I added meaningful alt text, made sure all links are keyboard navigable, and used &lt;code&gt;aria-live&lt;/code&gt; for the updating time.&lt;/p&gt;

&lt;p&gt;The live time was implemented with &lt;code&gt;Date.now()&lt;/code&gt; and refreshes every 600ms. After finishing the card, I wrote Playwright tests to automatically check all the requirements, and they all passed.&lt;/p&gt;

&lt;p&gt;Live Demo: &lt;a href="https://profile-intelligence-service-beige.vercel.app/" rel="noopener noreferrer"&gt;https://profile-intelligence-service-beige.vercel.app/&lt;/a&gt;&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%2Fgdjg9a32oyuv3mmj6lbr.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%2Fgdjg9a32oyuv3mmj6lbr.png" alt=" " width="800" height="449"&gt;&lt;/a&gt; &lt;br&gt;
GitHub: &lt;a href="https://github.com/victorion0/profile-card" rel="noopener noreferrer"&gt;https://github.com/victorion0/profile-card&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It was a good exercise in paying attention to details and writing testable, accessible code with just the basics.&lt;/p&gt;

&lt;p&gt;Would love to hear your thoughts or suggestions!&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>css</category>
      <category>javascript</category>
      <category>html</category>
    </item>
    <item>
      <title>From zero to $10M empire!” – Me &amp; my future yacht!</title>
      <dc:creator>Victor Osaikhuiwuomwan</dc:creator>
      <pubDate>Sat, 29 Nov 2025 21:23:56 +0000</pubDate>
      <link>https://dev.to/victorion0/from-zero-to-10m-empire-in-one-day-me-my-future-yacht-38a3</link>
      <guid>https://dev.to/victorion0/from-zero-to-10m-empire-in-one-day-me-my-future-yacht-38a3</guid>
      <description>&lt;p&gt;I Built a Task Manager Empire in One Day — And Deployed It for Free!&lt;/p&gt;

&lt;p&gt;Okay, maybe not $10M &lt;strong&gt;yet&lt;/strong&gt;… but I shipped a complete Task Manager API with Node.js, Express, MySQL — and it’s already live on the real internet, 24/7, for exactly &lt;strong&gt;$0&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here’s the live empire 👑&lt;br&gt;&lt;br&gt;
🔗&lt;a href="https://task-manager-empire-victorion014-z7znahfd.leapcell.dev" rel="noopener noreferrer"&gt;https://task-manager-empire-victorion014-z7znahfd.leapcell.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go ahead, spam &lt;code&gt;GET /api/tasks&lt;/code&gt; — it’s serverless, I literally pay nothing 😎&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Built This (The Quick Origin Story)
&lt;/h2&gt;

&lt;p&gt;I was grinding backend with freeCodeCamp and wanted a project that checks every box:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real database (no fake JSON files)&lt;/li&gt;
&lt;li&gt;Actually live on the internet forever&lt;/li&gt;
&lt;li&gt;Costs me $0 forever&lt;/li&gt;
&lt;li&gt;Looks amazing on my GitHub and resume&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I built &lt;strong&gt;Task Manager Empire&lt;/strong&gt; in a couple or more crazy days — and now I’m giving you the full blueprint so you can clone and flex your own empire in under 10 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack (Simple, Free, Powerful)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Runtime&lt;/td&gt;
&lt;td&gt;Node.js v20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Framework&lt;/td&gt;
&lt;td&gt;Express.js&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;MySQL via PlanetScale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hosting&lt;/td&gt;
&lt;td&gt;Leapcell.io (serverless)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dev Tools&lt;/td&gt;
&lt;td&gt;nodemon, Postman, Git&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Zero lock-in. Zero cost. 100% production-ready.&lt;/p&gt;

&lt;h2&gt;
  
  
  API Endpoints (Clean &amp;amp; RESTful)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Endpoint&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/api/tasks&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Get all tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/api/tasks&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Create a new task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUT&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/api/tasks/:id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Update a task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DELETE&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/api/tasks/:id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Delete a task&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Try It Live Right Now!
&lt;/h2&gt;

&lt;p&gt;Create an epic task:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
POST https://task-manager-empire.leapcell.app/api/tasks
Content-Type: application/json

{
  "title": "Buy Lambo",
  "description": "After this post goes viral"
}

You’ll get back:json

{
  "id": 123,
  "title": "Buy Lambo",
  "description": "After this post goes viral",
  "status": "pending",
  "created_at": "2025-11-29T23:59:59.000Z"
}

Feel free to break it — it auto-scales and costs me nothing!!!

Project Structure (No Confusion)

task-manager-empire/
├── server.js                    # Entry point
├── config/db.js                 # PlanetScale connection
├── routes/tasks.js              # All routes
├── controllers/taskController.js# Logic
├── leapcell.yml                 # Deployment config
├── .env                         # Secrets (gitignored)
├── package.json
└── README.md

Run Your Own Empire Locally (5 minutes)bash

git clone https://github.com/victorion0/task-manager-empire.git
cd task-manager-empire
npm install

Create your .env file (get free credentials from PlanetScale):

DB_HOST=xxxxxxxx.us-east.connect.psdb.cloud
DB_USER=xxxxxxxx
DB_PASSWORD=xxxxxxxx
DB_NAME=taskmanager
DB_PORT=3306

Then: bash

npm run dev

API runs at http://localhost:5000 Deploy in 60 Seconds on Leapcell.io (Free Forever Plan)Push your code to GitHub  
Go to https://leapcell.io → New Project → Connect your repo  
Add the same PlanetScale env vars  
Click Deploy

Done. Your empire is live forever. No credit card needed. 

What’s Next for the Empire? 

User authentication with JWT
React frontend (already sketching it)
React Native mobile app
Email/SMS reminders
Pro plan: $5/month for unlimited tasks + golden crown badge

Final Words: This is a backend project that actually lives on the real internet, scales automatically, and costs nothing to run. If you're learning Node.js, Express, or backend in general — stop watching tutorials all day. Build your own empire today. Star the repo if this helped you
https://github.com/victorion0/task-manager-empireFollow me for more “zero to hero” projects, and drop a comment:

What should the empire conquer next?

#nodejs #beginners #webdev #api #mysql #serverless #javascript #programming

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

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>My First RESTful API: A Beginner's Journey</title>
      <dc:creator>Victor Osaikhuiwuomwan</dc:creator>
      <pubDate>Sun, 19 Oct 2025 23:36:15 +0000</pubDate>
      <link>https://dev.to/victorion0/my-first-restful-api-a-beginners-journey-cbo</link>
      <guid>https://dev.to/victorion0/my-first-restful-api-a-beginners-journey-cbo</guid>
      <description>&lt;p&gt;On October 20, 2025, I built my first RESTful API with Node.js and Express. Here's my journey!&lt;/p&gt;

&lt;h2&gt;
  
  
  The Task
&lt;/h2&gt;

&lt;p&gt;Create a GET &lt;code&gt;/me&lt;/code&gt; endpoint with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Profile: &lt;code&gt;victorosaikh@gmail.com&lt;/code&gt;, &lt;code&gt;Victor Osaikhuiwuomwan&lt;/code&gt;, &lt;code&gt;Node.js/Express&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Dynamic UTC timestamp&lt;/li&gt;
&lt;li&gt;Random cat fact from &lt;a href="https://catfact.ninja/fact" rel="noopener noreferrer"&gt;https://catfact.ninja/fact&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My Process
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Setup&lt;/strong&gt;: Installed Node.js, VS Code, and ran &lt;code&gt;npm init -y&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coding&lt;/strong&gt;: Built an Express server with Axios for cat facts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debugging&lt;/strong&gt;: Fixed &lt;code&gt;SyntaxError: Unexpected token '('&lt;/code&gt; and Git branch mismatch (&lt;code&gt;master&lt;/code&gt; vs &lt;code&gt;main&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing&lt;/strong&gt;: Tested with &lt;code&gt;curl http://localhost:3000/me&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: Added &lt;code&gt;.gitignore&lt;/code&gt;, &lt;code&gt;README.md&lt;/code&gt;, and pushed to &lt;code&gt;main&lt;/code&gt; branch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment&lt;/strong&gt;: Deployed on Railway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt;: Fixed missing &lt;code&gt;README.md&lt;/code&gt; issue and wrote this post.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Challenges and Lessons
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Challenge&lt;/strong&gt;: Git branch mismatch (&lt;code&gt;master&lt;/code&gt; vs &lt;code&gt;main&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lesson&lt;/strong&gt;: Align local and remote branches with &lt;code&gt;git branch -m&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Challenge&lt;/strong&gt;: Missing &lt;code&gt;README.md&lt;/code&gt; in GitHub.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lesson&lt;/strong&gt;: Verify commits and pushes to the correct branch.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Out!
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Demo&lt;/strong&gt;: &lt;a href="//profile-api-production-94d0.up.railway.app"&gt;profile-api-production-94d0.up.railway.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repo&lt;/strong&gt;: &lt;a href="https://github.com/victorion0/profile-api" rel="noopener noreferrer"&gt;https://github.com//profile-api/victorion0&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimgur.com%2Fa%2Fd4qZ4X9" 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%2Fimgur.com%2Fa%2Fd4qZ4X9" alt="Server Running" width="800" height="400"&gt;&lt;/a&gt;&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%2Fimgur.com%2FuAqOQ27" 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%2Fimgur.com%2FuAqOQ27" alt="API Response" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Next?
&lt;/h2&gt;

&lt;p&gt;I want to explore databases or more endpoints. Tips?&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>api</category>
      <category>node</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
