<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Cloud Run | Joseph Wathika — Backend Engineer</title>
    <link>https://wathika.is-a.dev/tags/cloud-run/</link>
      <atom:link href="https://wathika.is-a.dev/tags/cloud-run/index.xml" rel="self" type="application/rss+xml" />
    <description>Cloud Run</description>
    <generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Fri, 22 May 2026 00:00:00 +0000</lastBuildDate>
    <image>
      <url>https://wathika.is-a.dev/media/icon_hu_982c5d63a71b2961.png</url>
      <title>Cloud Run</title>
      <link>https://wathika.is-a.dev/tags/cloud-run/</link>
    </image>
    
    <item>
      <title>Application Flow Tracker</title>
      <link>https://wathika.is-a.dev/projects/application-flow-tracker/</link>
      <pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate>
      <guid>https://wathika.is-a.dev/projects/application-flow-tracker/</guid>
      <description>&lt;h2 id=&#34;the-problem&#34;&gt;The problem&lt;/h2&gt;
&lt;p&gt;Teams reviewing grants, job applications, or admissions often lose context across spreadsheets, messages, and manual status updates. They need a clear record of each application, its review, the decision, and the comments behind it.&lt;/p&gt;
&lt;h2 id=&#34;what-i-built&#34;&gt;What I built&lt;/h2&gt;
&lt;p&gt;Application Flow Tracker separates a Django Ninja backend from a React and TypeScript frontend. It tracks applications from draft through submission, review, approval, rejection, or requests for more information. UUID-based tracking keeps references stable, while typed schemas define the API contract.&lt;/p&gt;
&lt;p&gt;The demo frontend is deployed on Vercel and the API has a Google Cloud Run endpoint, showing the path from local code to independently deployed services.&lt;/p&gt;
&lt;h2 id=&#34;engineering-decisions&#34;&gt;Engineering decisions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Typed API schemas&lt;/strong&gt; make request and response contracts explicit for both frontend and backend work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Separate services&lt;/strong&gt; allow the interface and API to evolve and deploy independently.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Structured review states&lt;/strong&gt; turn an informal process into a traceable workflow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anonymous throttling and validation&lt;/strong&gt; reduce abuse and malformed input at the boundary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;REST client examples and tests&lt;/strong&gt; provide quick, repeatable verification paths.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;what-this-demonstrates&#34;&gt;What this demonstrates&lt;/h2&gt;
&lt;p&gt;Workflow modelling, Python API design, TypeScript integration, cloud deployment, defensive API practices, and the ability to deliver a usable system across the stack.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;Scope note: The repository transparently documents follow-up work such as RBAC, Redis caching, Docker, and fuller CI/CD. These are improvement targets, not current-feature claims.&lt;/p&gt;
  &lt;/blockquote&gt;

</description>
    </item>
    
  </channel>
</rss>
