<?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: EMMANUEL UDODIRIM </title>
    <description>The latest articles on Forem by EMMANUEL UDODIRIM  (@emmytronix).</description>
    <link>https://forem.com/emmytronix</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%2F3400928%2F01f9c907-96f9-4d4c-aebf-9dc1c06b6ea9.png</url>
      <title>Forem: EMMANUEL UDODIRIM </title>
      <link>https://forem.com/emmytronix</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/emmytronix"/>
    <language>en</language>
    <item>
      <title>📌 Building a Dynamic Profile API Endpoint: My HNG Stage Zero Journey</title>
      <dc:creator>EMMANUEL UDODIRIM </dc:creator>
      <pubDate>Fri, 17 Oct 2025 07:59:04 +0000</pubDate>
      <link>https://forem.com/emmytronix/building-a-dynamic-profile-api-endpoint-my-hng-stage-zero-journey-28gb</link>
      <guid>https://forem.com/emmytronix/building-a-dynamic-profile-api-endpoint-my-hng-stage-zero-journey-28gb</guid>
      <description>&lt;p&gt;I'm excited to share my latest project as part of the HNG Internship Stage Zero task! I built a simple yet functional REST API endpoint that serves dynamic content. This project helped me apply my backend development skills using Node.js and Express.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Project Overview
&lt;/h2&gt;

&lt;p&gt;I created a &lt;code&gt;/me&lt;/code&gt; endpoint that returns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My personal information &lt;/li&gt;
&lt;li&gt;Current UTC timestamp&lt;/li&gt;
&lt;li&gt;A random cat fact that changes with each request&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's what the response looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"emmanueludodirim4@gmail.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Emmanuel Udodirim"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"stack"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Node.js/Express"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-10-17T07:37:07Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"fact"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Cats have 32 muscles in each ear."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  💻 Tech Stack &amp;amp; Implementation
&lt;/h2&gt;

&lt;p&gt;For this project, I used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Node.js/Express&lt;/strong&gt;: For creating the RESTful API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Axios&lt;/strong&gt;: For fetching external data from Cat Facts API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Railway&lt;/strong&gt;: For deployment and hosting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The implementation involved:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// GET /me endpoint&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/me&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Fetch cat fact from external API&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;catFactResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://catfact.ninja/fact&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt; &lt;span class="c1"&gt;// 5 second timeout&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="c1"&gt;// Create response object&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;success&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;USER_EMAIL&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;emmanueludodirim4@gmail.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;USER_NAME&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Emmanuel Udodirim&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;USER_STACK&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Node.js/Express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toISOString&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="c1"&gt;// Current UTC time in ISO 8601&lt;/span&gt;
      &lt;span class="na"&gt;fact&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;catFactResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fact&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Error handling&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;h2&gt;
  
  
  🔍 Challenges &amp;amp; Learnings
&lt;/h2&gt;

&lt;p&gt;During this project, I encountered several challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deployment Issues&lt;/strong&gt;: Navigating Railway's configuration requirements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Port Configuration&lt;/strong&gt;: Ensuring my app listened on the correct port&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎯 The Result
&lt;/h2&gt;

&lt;p&gt;The final API is live at: &lt;a href="https://hng-stage-zero-backend-production-1abf.up.railway.app/me" rel="noopener noreferrer"&gt;https://hng-stage-zero-backend-production-1abf.up.railway.app/me&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can view the code on GitHub: &lt;a href="https://github.com/emmytronix/hng-stage-zero-backend.git" rel="noopener noreferrer"&gt;https://github.com/emmytronix/hng-stage-zero-backend.git&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>node</category>
      <category>hng13</category>
      <category>backenddevelopment</category>
    </item>
    <item>
      <title>📌 Building a Dynamic Profile API Endpoint: My HNG Stage Zero Journey</title>
      <dc:creator>EMMANUEL UDODIRIM </dc:creator>
      <pubDate>Fri, 17 Oct 2025 07:59:04 +0000</pubDate>
      <link>https://forem.com/emmytronix/building-a-dynamic-profile-api-endpoint-my-hng-stage-zero-journey-49g9</link>
      <guid>https://forem.com/emmytronix/building-a-dynamic-profile-api-endpoint-my-hng-stage-zero-journey-49g9</guid>
      <description>&lt;p&gt;I'm excited to share my latest project as part of the HNG Internship Stage Zero task! I built a simple yet functional REST API endpoint that serves dynamic content. This project helped me apply my backend development skills using Node.js and Express.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Project Overview
&lt;/h2&gt;

&lt;p&gt;I created a &lt;code&gt;/me&lt;/code&gt; endpoint that returns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My personal information &lt;/li&gt;
&lt;li&gt;Current UTC timestamp&lt;/li&gt;
&lt;li&gt;A random cat fact that changes with each request&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's what the response looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"emmanueludodirim4@gmail.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Emmanuel Udodirim"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"stack"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Node.js/Express"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-10-17T07:37:07Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"fact"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Cats have 32 muscles in each ear."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  💻 Tech Stack &amp;amp; Implementation
&lt;/h2&gt;

&lt;p&gt;For this project, I used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Node.js/Express&lt;/strong&gt;: For creating the RESTful API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Axios&lt;/strong&gt;: For fetching external data from Cat Facts API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Railway&lt;/strong&gt;: For deployment and hosting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The implementation involved:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// GET /me endpoint&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/me&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Fetch cat fact from external API&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;catFactResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://catfact.ninja/fact&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt; &lt;span class="c1"&gt;// 5 second timeout&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="c1"&gt;// Create response object&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;success&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;USER_EMAIL&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;emmanueludodirim4@gmail.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;USER_NAME&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Emmanuel Udodirim&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;USER_STACK&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Node.js/Express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toISOString&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="c1"&gt;// Current UTC time in ISO 8601&lt;/span&gt;
      &lt;span class="na"&gt;fact&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;catFactResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fact&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Error handling&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;h2&gt;
  
  
  🔍 Challenges &amp;amp; Learnings
&lt;/h2&gt;

&lt;p&gt;During this project, I encountered several challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deployment Issues&lt;/strong&gt;: Navigating Railway's configuration requirements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Port Configuration&lt;/strong&gt;: Ensuring my app listened on the correct port&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎯 The Result
&lt;/h2&gt;

&lt;p&gt;The final API is live at: &lt;a href="https://hng-stage-zero-backend-production-1abf.up.railway.app/me" rel="noopener noreferrer"&gt;https://hng-stage-zero-backend-production-1abf.up.railway.app/me&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can view the code on GitHub: &lt;a href="https://github.com/emmytronix/hng-stage-zero-backend.git" rel="noopener noreferrer"&gt;https://github.com/emmytronix/hng-stage-zero-backend.git&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>node</category>
      <category>hng13</category>
      <category>backenddevelopment</category>
    </item>
    <item>
      <title>🏗️ Building Bivy Restaurant Microservices: My Role in the ERD Design &amp; User/Menu Services</title>
      <dc:creator>EMMANUEL UDODIRIM </dc:creator>
      <pubDate>Wed, 30 Jul 2025 19:17:45 +0000</pubDate>
      <link>https://forem.com/emmytronix/building-bivy-restaurant-microservices-my-role-in-the-erd-design-usermenu-services-3oeo</link>
      <guid>https://forem.com/emmytronix/building-bivy-restaurant-microservices-my-role-in-the-erd-design-usermenu-services-3oeo</guid>
      <description>&lt;p&gt;In today’s fast-paced digital restaurant ecosystem, scalability and modularity are non-negotiable. That’s why our team is engineering Bivy Restaurant Microservices — a backend system powered by FastAPI (Python) and NestJS (TypeScript) to streamline restaurant operations.&lt;/p&gt;

&lt;p&gt;As a core backend contributor, I took ownership of:&lt;/p&gt;

&lt;p&gt;✅ Designing critical parts of the Entity-Relationship Diagram (ERD)&lt;br&gt;
✅ Leading the User Service (authentication + RBAC)&lt;br&gt;
✅ Architecting the Menu Service (dynamic categorization + inventory sync)&lt;/p&gt;

&lt;p&gt;In this article, I’ll walk you through:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;📐 My ERD design process&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🛠 The microservices I own&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🧭 Key technical decisions &amp;amp; what’s coming next&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;ol&gt;
&lt;li&gt;🧩 Designing the Database: My ERD Contributions&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A well-designed database is the heartbeat of any microservice architecture. Here’s how I approached Bivy’s schema design.&lt;/p&gt;

&lt;p&gt;👤 A. User Service Schema&lt;/p&gt;

&lt;p&gt;The Challenge:&lt;br&gt;
We needed secure authentication + flexible role management for admins, staff, and customers.&lt;/p&gt;

&lt;p&gt;My Solution:&lt;/p&gt;

&lt;p&gt;Built a normalized schema with USER and USER_ROLE tables&lt;/p&gt;

&lt;p&gt;Designed it to be JWT-ready and role-extensible&lt;/p&gt;

&lt;p&gt;erDiagram&lt;br&gt;
    USER {&lt;br&gt;
        int id PK&lt;br&gt;
        string email&lt;br&gt;
        string password_hash&lt;br&gt;
        string name&lt;br&gt;
        int role_id FK&lt;br&gt;
    }&lt;br&gt;
    USER_ROLE {&lt;br&gt;
        int id PK&lt;br&gt;
        string name&lt;br&gt;
    }&lt;br&gt;
    USER ||--o{ USER_ROLE : "has"&lt;/p&gt;

&lt;p&gt;Why It Works:&lt;br&gt;
✔ Passwords are stored using bcrypt hashing&lt;br&gt;
✔ Roles are decoupled, enabling easy future expansions (like moderators or vendors)&lt;/p&gt;




&lt;p&gt;🍽 B. Menu Service Schema&lt;/p&gt;

&lt;p&gt;The Challenge:&lt;br&gt;
Restaurants need menus that evolve — with categories, pricing, and availability — all while syncing with inventory without tight coupling.&lt;/p&gt;

&lt;p&gt;My Solution:&lt;/p&gt;

&lt;p&gt;Designed MENU_ITEM and CATEGORY tables&lt;/p&gt;

&lt;p&gt;Introduced available flag for toggling visibility without touching inventory directly&lt;/p&gt;

&lt;p&gt;erDiagram&lt;br&gt;
    MENU_ITEM {&lt;br&gt;
        int id PK&lt;br&gt;
        string name&lt;br&gt;
        float price&lt;br&gt;
        int category_id FK&lt;br&gt;
        bool available&lt;br&gt;
    }&lt;br&gt;
    CATEGORY {&lt;br&gt;
        int id PK&lt;br&gt;
        string name&lt;br&gt;
    }&lt;br&gt;
    MENU_ITEM }|--|| CATEGORY : "belongs_to"&lt;/p&gt;

&lt;p&gt;Benefits:&lt;br&gt;
✔ Fully decoupled from inventory DB&lt;br&gt;
✔ Filtering is index-optimized for better performance&lt;/p&gt;




&lt;p&gt;🔗 C. Cross-Service Collaboration&lt;/p&gt;

&lt;p&gt;To maintain modularity, we ensured services communicate via event-driven architecture instead of direct DB joins.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;Orders reference both user_id and menu_item_id&lt;/p&gt;

&lt;p&gt;Inventory syncs availability via Apache Kafka events&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;🚀 Microservices I Lead&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🔐 A. User Service – FastAPI + JWT&lt;/p&gt;

&lt;p&gt;Stack: Python, FastAPI, PostgreSQL, JWT&lt;/p&gt;

&lt;p&gt;Core Features:&lt;/p&gt;

&lt;p&gt;Secure Login/Registration&lt;/p&gt;

&lt;p&gt;Role-Based Access Control (RBAC)&lt;/p&gt;

&lt;p&gt;User profile endpoints&lt;/p&gt;




&lt;p&gt;🍔 B. Menu Service – Dynamic &amp;amp; Real-Time&lt;/p&gt;

&lt;p&gt;Stack: Python, FastAPI, Redis, PostgreSQL, &lt;/p&gt;

&lt;p&gt;Core Features:&lt;/p&gt;

&lt;p&gt;Dynamic menu categories&lt;/p&gt;

&lt;p&gt;Real-time item availability toggling&lt;/p&gt;

&lt;p&gt;Image upload support (S3 integration)&lt;/p&gt;

&lt;p&gt;Workflow Example:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Admin adds a new item via /menu/items&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Menu service emits Kafka event to inventory&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If stock is available, item is flagged available=True and shown on the customer app&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;ol&gt;
&lt;li&gt;📍 Roadmap Ahead&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🧭 User Service&lt;/p&gt;

&lt;p&gt;[ ] OAuth 2.0 integration (Google / Facebook)&lt;/p&gt;

&lt;p&gt;[ ] Passwordless login via magic links&lt;/p&gt;

&lt;p&gt;🧭 Menu Service&lt;/p&gt;

&lt;p&gt;[ ] Redis caching for fast menu queries&lt;/p&gt;

&lt;p&gt;[ ] Seasonal menu activation (based on time or promo windows)&lt;/p&gt;

&lt;p&gt;🧭 DevOps Goals&lt;/p&gt;

&lt;p&gt;[ ] Kubernetes Helm Charts for scalable deployment&lt;/p&gt;

&lt;p&gt;[ ] Monitoring via Prometheus + Grafana&lt;/p&gt;




&lt;p&gt;🧠 Final Thoughts&lt;/p&gt;

&lt;p&gt;By prioritizing clean ERD design, modular services, and event-driven architecture, Bivy is built to scale. This system will power:&lt;/p&gt;

&lt;p&gt;💡 10,000+ concurrent users&lt;br&gt;
⚙️ Zero-downtime deployments&lt;br&gt;
🔄 Real-time menu updates across all customer touchpoints&lt;/p&gt;

&lt;p&gt;What I Learned:&lt;/p&gt;

&lt;p&gt;The power of database-first thinking&lt;/p&gt;

&lt;p&gt;The value of loose coupling between services&lt;/p&gt;

&lt;p&gt;The necessity of security-by-default principles&lt;/p&gt;




&lt;p&gt;💬 Let’s Talk!&lt;/p&gt;

&lt;p&gt;Have you ever built or contributed to a restaurant backend system?&lt;br&gt;
How did you handle user roles, menu changes, or inventory sync?&lt;br&gt;
Let’s discuss in the comments — I’d love to learn from your experience too.&lt;/p&gt;




&lt;p&gt;📡 Connect with Bivy Tech&lt;/p&gt;

&lt;p&gt;🟦 Follow us on X (Twitter)&lt;/p&gt;

&lt;p&gt;🟦 Connect on LinkedIn&lt;/p&gt;

</description>
      <category>backend</category>
      <category>fastapi</category>
      <category>python</category>
      <category>microservices</category>
    </item>
    <item>
      <title>🏗️ Building Bivy Restaurant Microservices: My Role in the ERD Design &amp; User/Menu Services</title>
      <dc:creator>EMMANUEL UDODIRIM </dc:creator>
      <pubDate>Wed, 30 Jul 2025 18:27:58 +0000</pubDate>
      <link>https://forem.com/emmytronix/building-bivy-restaurant-microservices-my-role-in-the-erd-design-usermenu-services-a8m</link>
      <guid>https://forem.com/emmytronix/building-bivy-restaurant-microservices-my-role-in-the-erd-design-usermenu-services-a8m</guid>
      <description>&lt;p&gt;In today’s fast-paced digital restaurant ecosystem, scalability and modularity are non-negotiable. That’s why our team is engineering Bivy Restaurant Microservices — a backend system powered by FastAPI (Python) and NestJS (TypeScript) to streamline restaurant operations.&lt;/p&gt;

&lt;p&gt;As a core backend contributor, I took ownership of:&lt;/p&gt;

&lt;p&gt;✅ Designing critical parts of the Entity-Relationship Diagram (ERD)&lt;br&gt;
✅ Leading the User Service (authentication + RBAC)&lt;br&gt;
✅ Architecting the Menu Service (dynamic categorization + inventory sync)&lt;/p&gt;

&lt;p&gt;In this article, I’ll walk you through:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;📐 My ERD design process&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🛠 The microservices I own&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🧭 Key technical decisions &amp;amp; what’s coming next&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;ol&gt;
&lt;li&gt;🧩 Designing the Database: My ERD Contributions&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A well-designed database is the heartbeat of any microservice architecture. Here’s how I approached Bivy’s schema design.&lt;/p&gt;

&lt;p&gt;👤 A. User Service Schema&lt;/p&gt;

&lt;p&gt;The Challenge:&lt;br&gt;
We needed secure authentication + flexible role management for admins, staff, and customers.&lt;/p&gt;

&lt;p&gt;My Solution:&lt;/p&gt;

&lt;p&gt;Built a normalized schema with USER and USER_ROLE tables&lt;/p&gt;

&lt;p&gt;Designed it to be JWT-ready and role-extensible&lt;/p&gt;

&lt;p&gt;erDiagram&lt;br&gt;
    USER {&lt;br&gt;
        int id PK&lt;br&gt;
        string email&lt;br&gt;
        string password_hash&lt;br&gt;
        string name&lt;br&gt;
        int role_id FK&lt;br&gt;
    }&lt;br&gt;
    USER_ROLE {&lt;br&gt;
        int id PK&lt;br&gt;
        string name&lt;br&gt;
    }&lt;br&gt;
    USER ||--o{ USER_ROLE : "has"&lt;/p&gt;

&lt;p&gt;Why It Works:&lt;br&gt;
✔ Passwords are stored using bcrypt hashing&lt;br&gt;
✔ Roles are decoupled, enabling easy future expansions (like moderators or vendors)&lt;/p&gt;




&lt;p&gt;🍽 B. Menu Service Schema&lt;/p&gt;

&lt;p&gt;The Challenge:&lt;br&gt;
Restaurants need menus that evolve — with categories, pricing, and availability — all while syncing with inventory without tight coupling.&lt;/p&gt;

&lt;p&gt;My Solution:&lt;/p&gt;

&lt;p&gt;Designed MENU_ITEM and CATEGORY tables&lt;/p&gt;

&lt;p&gt;Introduced available flag for toggling visibility without touching inventory directly&lt;/p&gt;

&lt;p&gt;erDiagram&lt;br&gt;
    MENU_ITEM {&lt;br&gt;
        int id PK&lt;br&gt;
        string name&lt;br&gt;
        float price&lt;br&gt;
        int category_id FK&lt;br&gt;
        bool available&lt;br&gt;
    }&lt;br&gt;
    CATEGORY {&lt;br&gt;
        int id PK&lt;br&gt;
        string name&lt;br&gt;
    }&lt;br&gt;
    MENU_ITEM }|--|| CATEGORY : "belongs_to"&lt;/p&gt;

&lt;p&gt;Benefits:&lt;br&gt;
✔ Fully decoupled from inventory DB&lt;br&gt;
✔ Filtering is index-optimized for better performance&lt;/p&gt;




&lt;p&gt;🔗 C. Cross-Service Collaboration&lt;/p&gt;

&lt;p&gt;To maintain modularity, we ensured services communicate via event-driven architecture instead of direct DB joins.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;Orders reference both user_id and menu_item_id&lt;/p&gt;

&lt;p&gt;Inventory syncs availability via Kafka events&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;🚀 Microservices I Lead&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🔐 A. User Service – FastAPI + JWT&lt;/p&gt;

&lt;p&gt;Stack: Python, FastAPI, PostgreSQL, JWT&lt;br&gt;
Core Features:&lt;/p&gt;

&lt;p&gt;Secure Login/Registration&lt;/p&gt;

&lt;p&gt;Role-Based Access Control (RBAC)&lt;/p&gt;

&lt;p&gt;User profile endpoints&lt;/p&gt;




&lt;p&gt;🍔 B. Menu Service – Dynamic &amp;amp; Real-Time&lt;/p&gt;

&lt;p&gt;Stack: Python, FastAPI, Redis (caching), PostgreSQL&lt;br&gt;
Core Features:&lt;/p&gt;

&lt;p&gt;Dynamic menu categories&lt;/p&gt;

&lt;p&gt;Real-time item availability toggling&lt;/p&gt;

&lt;p&gt;AWS S3 image upload support&lt;/p&gt;

&lt;p&gt;Workflow Example:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Admin adds a new item via /menu/items&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Menu service emits Kafka event to inventory&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If stock is available, item is flagged available=True and shown on the customer app&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;ol&gt;
&lt;li&gt;📍 Roadmap Ahead&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🧭 User Service&lt;/p&gt;

&lt;p&gt;[ ] OAuth2.0 integration (Google, Facebook)&lt;/p&gt;

&lt;p&gt;[ ] Passwordless login via magic links&lt;/p&gt;

&lt;p&gt;🧭 Menu Service&lt;/p&gt;

&lt;p&gt;[ ] Redis caching for fast menu queries&lt;/p&gt;

&lt;p&gt;[ ] Seasonal menu activation (based on time or promo windows)&lt;/p&gt;

&lt;p&gt;🧭 DevOps Goals&lt;/p&gt;

&lt;p&gt;[ ] Kubernetes Helm Charts for scalable deployment&lt;/p&gt;

&lt;p&gt;[ ] Prometheus + Grafana for monitoring&lt;/p&gt;




&lt;p&gt;🧠 Final Thoughts&lt;/p&gt;

&lt;p&gt;By prioritizing clean ERD design, modular services, and event-driven architecture, Bivy is built to scale. This system will power:&lt;/p&gt;

&lt;p&gt;💡 10,000+ concurrent users&lt;/p&gt;

&lt;p&gt;⚙️ Zero-downtime deployments&lt;/p&gt;

&lt;p&gt;🔄 Real-time menu updates across all customer touchpoints&lt;/p&gt;

&lt;p&gt;What I Learned:&lt;/p&gt;

&lt;p&gt;The power of database-first thinking&lt;/p&gt;

&lt;p&gt;The value of loose coupling between services&lt;/p&gt;

&lt;p&gt;The necessity of security-by-default principles&lt;/p&gt;




&lt;p&gt;💬 Let’s Talk!&lt;/p&gt;

&lt;p&gt;Have you ever built or contributed to a restaurant backend system?&lt;br&gt;
How did you handle user roles, menu changes, or inventory sync?&lt;br&gt;
Let’s discuss in the comments — I’d love to learn from your experience too.&lt;/p&gt;




&lt;p&gt;📡 Connect with Bivy Tech&lt;/p&gt;

&lt;p&gt;🟦 X (Twitter)&lt;/p&gt;

&lt;p&gt;🟦 LinkedIn&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%2F2hv71io71ntpyva97j64.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%2F2hv71io71ntpyva97j64.png" alt=" " width="800" height="1035"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>backend</category>
      <category>fastapi</category>
      <category>python</category>
    </item>
  </channel>
</rss>
