<?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: Dev Rajput</title>
    <description>The latest articles on DEV Community by Dev Rajput (@dev_rajput_2d46f92f8a3418).</description>
    <link>https://dev.to/dev_rajput_2d46f92f8a3418</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3871240%2Fe734eb98-46c3-4cea-b6da-29e0680a10f8.jpg</url>
      <title>DEV Community: Dev Rajput</title>
      <link>https://dev.to/dev_rajput_2d46f92f8a3418</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dev_rajput_2d46f92f8a3418"/>
    <language>en</language>
    <item>
      <title>Soul in Motion — 3:22 PM | 2026-10-30</title>
      <dc:creator>Dev Rajput</dc:creator>
      <pubDate>Fri, 30 Oct 2026 10:10:01 +0000</pubDate>
      <link>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-322-pm-2026-10-30-28g0</link>
      <guid>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-322-pm-2026-10-30-28g0</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Orchestrated three AI subagents (Haiku, Sonnet, Opus) to run in parallel, pulling research and web data.&lt;/li&gt;
&lt;li&gt;Built an automated grant‑application pipeline after manually filling five forms for the ElevenLabs grant.&lt;/li&gt;
&lt;li&gt;Fixed a batch of QA‑reported bugs in WazanCheck, then refreshed marketing analytics and outreach copy.&lt;/li&gt;
&lt;li&gt;Took deliberate screen breaks with Marvel shows to reset focus.&lt;/li&gt;
&lt;li&gt;Architecture, grant pipeline, and product stability are all on track for tomorrow’s sprint.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Orchestrating AI and Chasing Grants: A Builder’s Log
&lt;/h2&gt;

&lt;p&gt;Today was a masterclass in wearing every founder hat—engineer, marketer, and grant‑hunter all at once. Below is a concrete look at what worked, what broke, and how I kept the ship steady.&lt;/p&gt;

&lt;h3&gt;
  
  
  Commanding the AI Fleet
&lt;/h3&gt;

&lt;p&gt;The morning was spent in the engine room of my core architecture. Instead of just writing code, I was conducting an orchestra of AI subagents—&lt;code&gt;Haiku&lt;/code&gt;, &lt;code&gt;Sonnet&lt;/code&gt;, and &lt;code&gt;Opus&lt;/code&gt;—all running in parallel, delivering reports and crunching massive amounts of research and web queries. The goal was to keep the data pipeline alive while I focused on higher‑level product decisions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Start all subagents in the background&lt;/span&gt;
python &lt;span class="nt"&gt;-m&lt;/span&gt; subagent.haiku &amp;amp;
python &lt;span class="nt"&gt;-m&lt;/span&gt; subagent.sonnet &amp;amp;
python &lt;span class="nt"&gt;-m&lt;/span&gt; subagent.opus &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each subagent writes its output to a dedicated directory under &lt;code&gt;./ai_outputs/&lt;/code&gt;. I added a simple watchdog script to ensure none of them die silently:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;

&lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;haiku&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;python -m subagent.haiku&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sonnet&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;python -m subagent.sonnet&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;opus&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;python -m subagent.opus&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cmd&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./ai_outputs/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/alive&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;] restarting&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Popen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The subagents now produce daily &lt;code&gt;report.json&lt;/code&gt; files that feed into the next stage of the pipeline: a lightweight ETL that normalises the data and pushes it into a PostgreSQL warehouse.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Business Pivot: Pitch Decks and Grants
&lt;/h3&gt;

&lt;p&gt;By midday I swapped the terminal for pitch decks. My current priority is securing capital, starting with the ElevenLabs grant. After carefully filling out the initial application and uploading supporting materials, I broadened the goal: find and apply for more grants.&lt;/p&gt;

&lt;p&gt;I manually worked through five different grant forms, then built and scheduled a recurring automation prompt to generate and process future applications. The automation is a two‑step process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Form Generation&lt;/strong&gt; – A prompt template that pulls the grant’s requirements and fills in the boilerplate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Submission&lt;/strong&gt; – A script that uploads the generated PDF to the grant portal via its API.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# grant_auto.py
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_application&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;grant_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;template_path&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;template_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;template&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ChatCompletion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;template&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;submit_application&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;grant_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pdf_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;api_token&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;grant_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.gov/api/submit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;api_token&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;file&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pdf_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
    &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;

&lt;span class="c1"&gt;# Example usage
&lt;/span&gt;&lt;span class="n"&gt;pdf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generate_application&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;elevenlabs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;templates/elevenlabs.txt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;elevenlabs_application.pdf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;write_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pdf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;submit_application&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;elevenlabs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;elevenlabs_application.pdf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When scaling a business, anything that can be automated must be automated. The script now runs nightly via a cron job, ensuring that any new grant opportunities are auto‑filled and queued for review.&lt;/p&gt;

&lt;h3&gt;
  
  
  Squashing Bugs and Spinning Narratives
&lt;/h3&gt;

&lt;p&gt;The afternoon split between product stability and public perception. I dove into &lt;strong&gt;WazanCheck&lt;/strong&gt;, hunting down a fresh batch of bugs reported by QA, documenting each patch and ensuring core functionality stayed spotless.&lt;/p&gt;

&lt;h4&gt;
  
  
  Bug 1: Incorrect Date Parsing
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# wazancheck/utils/date_parser.py
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parse_date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;date_str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Old logic failed on ISO 8601 strings
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strptime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;date_str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;%Y-%m-%d&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I replaced the hard‑coded format with &lt;code&gt;dateutil.parser.parse&lt;/code&gt;, which handles a wider range of inputs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dateutil&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;parser&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parse_date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;date_str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;date_str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Bug 2: Memory Leak in Report Generation
&lt;/h4&gt;

&lt;p&gt;The report generator kept allocating new &lt;code&gt;BytesIO&lt;/code&gt; objects without closing them. I switched to a context manager:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nc"&gt;BytesIO&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;generate_report&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;seek&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# upload or send
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the app was stable, I turned to marketing—pulling recent engagement analytics, refining our outreach strategy, and drafting targeted proposals and social media copy to attract the next wave of clients.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Pull engagement stats&lt;/span&gt;
python analytics/engagement.py &lt;span class="nt"&gt;--start&lt;/span&gt; 2026-10-01 &lt;span class="nt"&gt;--end&lt;/span&gt; 2026-10-30
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output fed into a simple templating system that auto‑generates LinkedIn posts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;post_template&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
🚀 Our latest release has seen a 42% increase in daily active users!
Check out the new features: {features}
#Productivity #AI
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;post_template&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;features&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Real‑time AI summaries, Auto‑grant alerts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Mutants and Mental Resets
&lt;/h3&gt;

&lt;p&gt;Constant context‑switching is draining, so screen breaks are essential. I recharged with the Marvel universe, catching episodes of &lt;em&gt;VisionQuest&lt;/em&gt; and rewatching &lt;em&gt;X‑Men: Dark Phoenix&lt;/em&gt; and &lt;em&gt;The New Mutants&lt;/em&gt;. I also fell down a surprisingly human internet rabbit hole, researching how to make Dutch friends—a quirky contrast to grant applications and automated bug fixes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Looking Ahead
&lt;/h3&gt;

&lt;p&gt;Today was relentless, but the momentum is undeniable. The AI subagents are humming, the grant pipeline is now automated, and WazanCheck runs cleaner than ever. Tomorrow brings more code and more strategic planning; for tonight, the architecture holds.&lt;/p&gt;




</description>
      <category>ai</category>
      <category>python</category>
      <category>automation</category>
      <category>devops</category>
    </item>
    <item>
      <title>Soul in Motion — 5:59 PM | 2026-10-29</title>
      <dc:creator>Dev Rajput</dc:creator>
      <pubDate>Thu, 29 Oct 2026 12:45:59 +0000</pubDate>
      <link>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-559-pm-2026-10-29-5d02</link>
      <guid>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-559-pm-2026-10-29-5d02</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Eli’s launch went live: SEO, Vercel indexing, and automated social‑media pipelines are all green.&lt;/li&gt;
&lt;li&gt;EchoVerse now ingests high‑volume real‑time streams; added a live‑chat front‑end and fixed bottlenecks.&lt;/li&gt;
&lt;li&gt;Daily sprint split between marketing automation and backend data pipelines kept momentum high.&lt;/li&gt;
&lt;li&gt;Breaks were filled with cricket ads and a mix of films to reset focus.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Polishing the Launch for Eli
&lt;/h2&gt;

&lt;p&gt;The first half of the day was all about getting &lt;strong&gt;Eli&lt;/strong&gt; ready for the market.&lt;br&gt;&lt;br&gt;
I started by running a suite of browser‑automation scripts (Selenium + Playwright) to validate the user flow from sign‑up to checkout. The scripts also hit the &lt;strong&gt;AI response logic&lt;/strong&gt; endpoints to ensure the language model was returning the expected confidence scores and fallback handling.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Run end‑to‑end tests&lt;/span&gt;
playwright &lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nt"&gt;--reporter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;dot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the flow was stable, I fixed a handful of broken redirect links that were causing 404s in the analytics dashboard. The redirects were managed in Vercel’s &lt;code&gt;vercel.json&lt;/code&gt;:&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;"redirects"&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/old-path"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/new-path"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"permanent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&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="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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the redirects were in place, I pushed the site to &lt;strong&gt;Google Search Console&lt;/strong&gt; and triggered Vercel’s indexing hook:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.vercel.com/v1/integrations/seo-index &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$VERCEL_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"url":"https://eli.example.com"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With the technical SEO locked down, I fired up the automated social‑media pipelines. These are built on &lt;strong&gt;Zapier&lt;/strong&gt; and &lt;strong&gt;Buffer&lt;/strong&gt; and pull the latest blog posts and product updates from a headless CMS (Sanity). The first batch of posts was queued for the US and EU time zones, ensuring our first major clients see the launch at peak engagement times.&lt;/p&gt;




&lt;h2&gt;
  
  
  EchoVerse and the Real‑Time Challenge
&lt;/h2&gt;

&lt;p&gt;Switching gears to &lt;strong&gt;EchoVerse&lt;/strong&gt; meant tackling a completely different stack. The core requirement was to ingest high‑volume, real‑time data streams from multiple sources (IoT sensors, user events, third‑party APIs) without bottlenecks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Backend Architecture
&lt;/h3&gt;

&lt;p&gt;I chose &lt;strong&gt;Kafka&lt;/strong&gt; as the ingestion layer for its proven horizontal scalability and low latency. The topics are partitioned by region and event type to allow parallel consumption.&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="c1"&gt;# kafka-cluster.yaml&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kafka.strimzi.io/v1beta2&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Kafka&lt;/span&gt;
&lt;span class="na"&gt;metadata&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;echoverse-kafka&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;kafka&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;3.5.0&lt;/span&gt;
    &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
    &lt;span class="na"&gt;listeners&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;plain&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{}&lt;/span&gt;
      &lt;span class="na"&gt;tls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{}&lt;/span&gt;
    &lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;offsets.topic.replication.factor&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
      &lt;span class="na"&gt;transaction.state.log.replication.factor&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
  &lt;span class="na"&gt;zookeeper&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Consumer microservices are written in &lt;strong&gt;Go&lt;/strong&gt; for speed and low memory footprint. They stream data into a &lt;strong&gt;Redis&lt;/strong&gt; cache for real‑time analytics and a &lt;strong&gt;ClickHouse&lt;/strong&gt; cluster for long‑term storage.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;consume&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;consumer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;kafka&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewConsumer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;kafka&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ConfigMap&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s"&gt;"bootstrap.servers"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"kafka:9092"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s"&gt;"group.id"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;          &lt;span class="s"&gt;"echoverse-consumers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s"&gt;"auto.offset.reset"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"earliest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="k"&gt;defer&lt;/span&gt; &lt;span class="n"&gt;consumer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;consumer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ReadMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Error: %v"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;continue&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&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;h3&gt;
  
  
  Front‑End Responsiveness
&lt;/h3&gt;

&lt;p&gt;On the front‑end, I integrated &lt;strong&gt;WebSockets&lt;/strong&gt; via &lt;strong&gt;Socket.IO&lt;/strong&gt; to push updates to the UI in real time. The chat component for live events uses a lightweight &lt;strong&gt;React&lt;/strong&gt; component that subscribes to a &lt;code&gt;/chat&lt;/code&gt; namespace.&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="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;io&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;socket.io-client&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;socket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;io&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://echoverse.example.com&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;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/socket.io&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;chatMessage&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;setMessages&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;msg&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;p&gt;After a few debugging sessions—mostly around backpressure handling and message ordering—the data flowed smoothly, and the live chat was responsive even under a simulated load of 10k concurrent users.&lt;/p&gt;




&lt;h2&gt;
  
  
  Palate Cleansers and Cricket
&lt;/h2&gt;

&lt;p&gt;Long sprints can be draining, so I used the cricket ads for South Africa vs. Australia as a rhythmic backdrop. When I needed a mental reset, I dove into a mix of media:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Manhunt&lt;/strong&gt; – gripping twists to keep adrenaline up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Under the Banner of Heaven&lt;/strong&gt; – a deeper narrative to shift focus.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Taare Zameen Par&lt;/strong&gt; – classic feel for a quick emotional lift.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tropic Thunder&lt;/strong&gt; – pure fun to decompress after debugging.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These breaks helped maintain productivity without burning out.&lt;/p&gt;




&lt;h2&gt;
  
  
  Looking Ahead
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Eli&lt;/strong&gt;: Indexed, SEO‑ready, and actively hunting for clients via automated social‑media posts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EchoVerse&lt;/strong&gt;: Real‑time ingestion pipeline is live; front‑end chat is functional. Next steps include scaling the Kafka cluster and adding a Grafana dashboard for monitoring.&lt;/li&gt;
&lt;li&gt;The constant switch between marketing automation and backend logic is exhausting, but seeing both platforms come to life line by line makes it all worth it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to drop a comment if you’re building a similar real‑time system or need help with Vercel SEO hooks!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>devops</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Soul in Motion — 5:18 PM | 2026-10-28</title>
      <dc:creator>Dev Rajput</dc:creator>
      <pubDate>Wed, 28 Oct 2026 12:07:20 +0000</pubDate>
      <link>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-518-pm-2026-10-28-334h</link>
      <guid>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-518-pm-2026-10-28-334h</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Automated legal review triggers ledger updates via dynamic checklists.&lt;/li&gt;
&lt;li&gt;Browser‑automation scripts scrape analytics, verify contracts, and sync social posts.&lt;/li&gt;
&lt;li&gt;Daily outreach and calendar management are handled by custom scripts.&lt;/li&gt;
&lt;li&gt;Even downtime is productive: movie notes inspire architectural ideas.&lt;/li&gt;
&lt;li&gt;Each automation slice frees time for deeper product work.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Automating the Ledger and Wearing the Founder’s Hats
&lt;/h2&gt;

&lt;p&gt;Building a startup from scratch means you’re the dev, the lawyer, the marketer, and the outreach coordinator all at once. The only way to keep the ship afloat is to automate the repetitive parts of that stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  Locking Down the Legal Logic
&lt;/h3&gt;

&lt;p&gt;I spent the first part of the day deep in the business architecture, focusing on the legal review process. The goal was to make the &lt;em&gt;Eli’s AI disclosure protocols&lt;/em&gt; fully transparent for users and to eliminate manual hand‑offs.&lt;/p&gt;

&lt;p&gt;The trick was to make the project checklists &lt;strong&gt;fully dynamic&lt;/strong&gt;. Whenever a legal PDF is opened, a small trigger fires that updates the ledger in real time. The result is a single source of truth that automatically reflects the latest compliance status.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Pseudo‑command that watches the legal folder&lt;/span&gt;
inotifywait &lt;span class="nt"&gt;-m&lt;/span&gt; /path/to/legal_pdfs &lt;span class="nt"&gt;-e&lt;/span&gt; close_write |
&lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="nb"&gt;read &lt;/span&gt;path action file&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  ./update_ledger.sh &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;update_ledger.sh&lt;/code&gt; parses the PDF metadata, extracts the relevant disclosure sections, and writes a JSON record to the ledger database. No more manual copy‑paste or spreadsheet updates.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Context‑Switching Grind
&lt;/h3&gt;

&lt;p&gt;Once the legal side was locked down, I pivoted to marketing and stakeholder outreach. I had a handful of browser‑automation tools ready to go:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scrape analytics dashboards&lt;/strong&gt; to pull traffic and conversion metrics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify page contracts&lt;/strong&gt; against the latest legal PDFs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sync scheduled posts&lt;/strong&gt; across multiple social platforms.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Example using Playwright to scrape a dashboard
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;playwright.sync_api&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sync_playwright&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;sync_playwright&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chromium&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;headless&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new_page&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://analytics.example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#login&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user@example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#password&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;••••••&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#submit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;metrics&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;locator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#metrics&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;inner_text&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Later in the afternoon, the focus shifted again to partner outreach and daily planning. I ran a set of scripts that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Manage communications&lt;/strong&gt; via a shared inbox API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update the master calendar&lt;/strong&gt; in Google Calendar, ensuring no double‑booking.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Update calendar events from a CSV&lt;/span&gt;
python update_calendar.py partners.csv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key takeaway: a heavily automated, structured approach keeps the chaos organized. Each domain has its own set of scripts, but they all feed into the same central data store.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mutants, Manhunts, and Mental Resets
&lt;/h3&gt;

&lt;p&gt;You can’t keep that level of administrative and technical focus without letting the system cool down. Between a cluttered inbox and organizing Google Drive folders, I leaned heavily on my media library to recharge.&lt;/p&gt;

&lt;p&gt;Today’s cinematic escapes were &lt;strong&gt;Manhunt&lt;/strong&gt; and a double feature of &lt;strong&gt;Spider‑Man: Brand New Day&lt;/strong&gt; and &lt;strong&gt;X‑Men: Days of Future Past&lt;/strong&gt;. I even paused the X‑Men movie several times to take notes when an architectural thought popped up—proof that even when I try to disconnect, the builder’s brain never really turns off.&lt;/p&gt;

&lt;h3&gt;
  
  
  Looking Ahead
&lt;/h3&gt;

&lt;p&gt;The day was a demanding mix of coding, compliance, and outreach. Every repetitive task we managed to automate today buys us crucial time for tomorrow. There’s still a massive amount of work on the horizon, but step by step the fabric of this business is weaving together perfectly.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>devops</category>
      <category>python</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Soul in Motion — 6:33 PM | 2026-10-27</title>
      <dc:creator>Dev Rajput</dc:creator>
      <pubDate>Tue, 27 Oct 2026 13:22:48 +0000</pubDate>
      <link>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-633-pm-2026-10-27-5ahn</link>
      <guid>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-633-pm-2026-10-27-5ahn</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Added localized emergency helplines for Brazil, Portugal, and Latin America; voice models for German &amp;amp; Polish.&lt;/li&gt;
&lt;li&gt;Built an hourly “robot” to monitor the live site’s front door, ensuring security and responsiveness.&lt;/li&gt;
&lt;li&gt;Overhauled financial tracking: real‑time spending limits, session latency metrics, and auto‑generated printable receipts.&lt;/li&gt;
&lt;li&gt;Balanced intense debugging with media breaks (crime dramas, cricket highlights) to stay productive.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Going Global and Locking the Front Door: 48 Hours in the Trenches
&lt;/h2&gt;

&lt;p&gt;Two days of nonstop code, configuration, and a dash of binge‑watching. Building a companion app from scratch forces you to juggle database tuning, UI polish, and the nitty‑gritty of production readiness. Below is a raw look at what that looks like behind the screen.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prepping Eli for the World Stage
&lt;/h3&gt;

&lt;p&gt;The first priority was making sure Eli could speak and help people in the places where help is most needed. I spent the bulk of the day:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Localized Emergency Support&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrated real‑world emergency helplines for &lt;strong&gt;Brazil, Portugal, and Spanish‑speaking Latin America&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Stored the numbers in a &lt;code&gt;helplines&lt;/code&gt; table with &lt;code&gt;country_code&lt;/code&gt;, &lt;code&gt;language&lt;/code&gt;, and &lt;code&gt;number&lt;/code&gt; columns, exposing them via a simple REST endpoint.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Voice Models&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Added &lt;strong&gt;German&lt;/strong&gt; and &lt;strong&gt;Polish&lt;/strong&gt; voice models to the TTS pipeline.
&lt;/li&gt;
&lt;li&gt;Updated the &lt;code&gt;voice_config.yaml&lt;/code&gt; to reference the new model IDs and adjusted the &lt;code&gt;synthesize_audio&lt;/code&gt; function to fall back to English if a locale is unsupported.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recursive UX Feedback&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ran Eli through the very UI we’re building for him.
&lt;/li&gt;
&lt;li&gt;Logged widget placement suggestions and layout preferences directly from the LLM, then iterated on the design in Figma.
&lt;/li&gt;
&lt;li&gt;This loop is a bit meta—Eli is both the product and the tester.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# voice_config.yaml&lt;/span&gt;
&lt;span class="na"&gt;languages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;en&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tts-en"&lt;/span&gt;
  &lt;span class="na"&gt;de&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tts-de"&lt;/span&gt;
  &lt;span class="na"&gt;pl&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tts-pl"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Patrolling the Backend
&lt;/h3&gt;

&lt;p&gt;With the frontend expanding, the backend had to keep pace. Two key changes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hourly Site‑Health Robot&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Deployed a Cloud Scheduler job that triggers a lightweight &lt;code&gt;health_check&lt;/code&gt; script every hour.
&lt;/li&gt;
&lt;li&gt;The script pings the front‑door endpoint, verifies TLS certs, and logs latency to Cloud Monitoring.
&lt;/li&gt;
&lt;/ul&gt;
&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;# health_check.sh&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="nt"&gt;-w&lt;/span&gt; &lt;span class="s2"&gt;"%{http_code}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; https://live.example.com/health
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Financial Tracking Overhaul&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Moved spending limits and session latencies into the database for atomicity.
&lt;/li&gt;
&lt;li&gt;Added a &lt;code&gt;transactions&lt;/code&gt; table with &lt;code&gt;user_id&lt;/code&gt;, &lt;code&gt;amount&lt;/code&gt;, &lt;code&gt;timestamp&lt;/code&gt;, and &lt;code&gt;receipt_generated&lt;/code&gt; flag.
&lt;/li&gt;
&lt;li&gt;Triggered a receipt generation job that creates a PDF in the user’s workspace folder.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;transactions&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;SERIAL&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;user_id&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="nb"&gt;NUMERIC&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nb"&gt;timestamp&lt;/span&gt; &lt;span class="nb"&gt;TIMESTAMP&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="n"&gt;NOW&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="n"&gt;receipt_generated&lt;/span&gt; &lt;span class="nb"&gt;BOOLEAN&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="k"&gt;FALSE&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result: real‑time accuracy, no accidental over‑spending, and a printable receipt for every user.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cricket, Crime, and Cloud Billing
&lt;/h3&gt;

&lt;p&gt;Debugging on Google Cloud can be a marathon. To keep my sanity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Media Breaks&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Watched &lt;em&gt;Manhunt&lt;/em&gt; and &lt;em&gt;Under the Banner of Heaven&lt;/em&gt; for intense crime thrills.
&lt;/li&gt;
&lt;li&gt;Balanced with nostalgic palate cleansers like &lt;em&gt;Taare Zameen Par&lt;/em&gt; and old Rishi Kapoor interviews.
&lt;/li&gt;
&lt;li&gt;During downtime, tuned into Cricbuzz highlights from the India vs. South Africa and West Indies vs. Bangladesh Champions matches—high‑energy distraction that kept my focus sharp.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Billing &amp;amp; Rate‑Limiting&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monitored Cloud Billing dashboards for any sudden spikes.
&lt;/li&gt;
&lt;li&gt;Adjusted rate‑limit scripts to throttle API calls during peak traffic, preventing 429 errors.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# rate_limit.yaml&lt;/span&gt;
&lt;span class="na"&gt;max_requests_per_minute&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;120&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Takeaway
&lt;/h3&gt;

&lt;p&gt;Building this ecosystem is a grind, but seeing the pieces lock together—from global helplines to secure database limits—makes every late‑night session worth it. The backend is solid; tomorrow I’ll focus on making the frontend shine.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>devops</category>
      <category>python</category>
    </item>
    <item>
      <title>Soul in Motion — 3:14 PM | 2026-10-26</title>
      <dc:creator>Dev Rajput</dc:creator>
      <pubDate>Mon, 26 Oct 2026 10:01:53 +0000</pubDate>
      <link>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-314-pm-2026-10-26-3pml</link>
      <guid>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-314-pm-2026-10-26-3pml</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Marketing automation scripts broke, causing a manual debugging marathon.&lt;/li&gt;
&lt;li&gt;Business architecture updates were completed despite automation hiccups.&lt;/li&gt;
&lt;li&gt;Took a mental break with deep dives into Marvel lore and TV series for stress relief.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Friction of Automation
&lt;/h2&gt;

&lt;p&gt;The day kicked off with the marketing ops stack, which is a tight web of scheduled posts and analytics pulls. The automation that usually hands me a tidy email summary of the day’s social reach suddenly stopped firing. I spent the next few hours under the hood, hunting silent errors in the reporting scripts. It was a classic case of “the engine stalls when the data pipeline hits a corner case.” I had to manually tweak routing parameters, re‑trigger the cron jobs, and sift through logs that were, for the most part, silent.&lt;/p&gt;

&lt;p&gt;The lesson? Even the most polished automations can choke on edge conditions. When the script refuses to run, the quickest path to a fix is often to isolate the failing component, run it in isolation, and then re‑integrate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Business Logic and Blueprinting
&lt;/h2&gt;

&lt;p&gt;Mid‑day, I pivoted to the broader business operations layer. Updating the day’s blueprints meant stepping away from the automated tools and re‑working the configurations by hand. When the systems push back—think misaligned schema migrations or stale cache entries—there’s no substitute for a manual “tighten the loose ends” pass. I walked through each service’s configuration, verified environment variables, and made sure the deployment manifests were in sync with the new architecture.&lt;/p&gt;

&lt;p&gt;By the end of the day, the business architecture was updated and secure. The manual intervention paid off: the services now start cleanly, and the new blueprint aligns with the latest feature set.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cinematic Escapes
&lt;/h2&gt;

&lt;p&gt;After a long stretch of debugging, I needed a pressure release. I dove into a deep‑cut Logan rabbit hole, chasing threads about X‑Men’s darkest timeline, Charles Xavier’s inability to help Logan, Magneto’s fate, and Wolverine’s realization that X‑23 was his daughter. The research was intense, but it was a perfect mental palate cleanser.&lt;/p&gt;

&lt;p&gt;When the Marvel lore got too heavy, I switched gears to episodes of &lt;em&gt;The Sopranos&lt;/em&gt; and &lt;em&gt;Under the Banner of Heaven&lt;/em&gt;. Those shows offered rich, analog character studies that contrasted sharply with the rigid frustration of failing marketing code. The switch helped reset my focus and gave me a fresh perspective on the day’s challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrap‑Up
&lt;/h2&gt;

&lt;p&gt;The reporting engine still needs a permanent fix, and the daily chronicle issues linger, but the business architecture is updated and secure. The unresolved code will be waiting tomorrow; for tonight, the terminal is closed.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>devops</category>
      <category>productivity</category>
      <category>debugging</category>
    </item>
    <item>
      <title>Soul in Motion — 9:06 PM | 2026-10-22</title>
      <dc:creator>Dev Rajput</dc:creator>
      <pubDate>Thu, 22 Oct 2026 16:32:40 +0000</pubDate>
      <link>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-906-pm-2026-10-22-md2</link>
      <guid>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-906-pm-2026-10-22-md2</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;3 hrs of Claude Code mod work: AI interaction logic + UI cleanup.&lt;/li&gt;
&lt;li&gt;Mid‑day break with tech tutorials + memes—humor helped reset focus.&lt;/li&gt;
&lt;li&gt;Evening: watched &lt;em&gt;Manhunt&lt;/em&gt; to study pacing, then did maintenance on the Claude Platform dashboard.&lt;/li&gt;
&lt;li&gt;LinkedIn browsing for peer inspiration.&lt;/li&gt;
&lt;li&gt;Balanced day → steady progress, not dramatic spikes.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Morning – Mod Development
&lt;/h2&gt;

&lt;p&gt;I spent about &lt;strong&gt;three hours&lt;/strong&gt; with &lt;strong&gt;Claude Code&lt;/strong&gt; tackling a stubborn goal: making the AI interactions smarter and the interface cleaner. The cycle was the usual: write a feature, run it, break it, debug, repeat. The quiet thrill of finally seeing a tangled idea click into place arrived just as I was starting to doubt it would.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Rough sketch of the interaction loop I was refactoring
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;handle_user_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# 1. Preprocess
&lt;/span&gt;    &lt;span class="n"&gt;cleaned&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;preprocess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# 2. Query Claude
&lt;/span&gt;    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;claude_api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cleaned&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# 3. Postprocess &amp;amp; format
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;format_response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The main pain point was the &lt;strong&gt;state management&lt;/strong&gt; between the UI and the LLM. I moved the state into a small in‑memory store and exposed it via a simple REST endpoint, which let the front‑end stay stateless and the logic stay testable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Example of the new endpoint&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:8000/api/claude &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"input":"Hello"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After a few iterations the UI feels snappier and the AI feels more “aware” of context.&lt;/p&gt;




&lt;h2&gt;
  
  
  Midday – A Needed Reset
&lt;/h2&gt;

&lt;p&gt;I stepped away and let the internet take over. YouTube served up a long stretch of tech tutorials mixed with memes. I stopped pretending it was a distraction—laughing at ridiculous clips and a few comedy streams actually helped my focus more than another hour of staring at code would have. Humor resets the mind in a way discipline can’t.&lt;/p&gt;

&lt;p&gt;I spent a few minutes watching a deep‑dive on &lt;strong&gt;LangChain&lt;/strong&gt; architecture, then a quick clip of a cat doing a backflip. The contrast kept my brain from burning out.&lt;/p&gt;




&lt;h2&gt;
  
  
  Evening – Storytelling and Maintenance
&lt;/h2&gt;

&lt;p&gt;I put on &lt;em&gt;Manhunt&lt;/em&gt; in VLC and worked through more of Season 1. The tension in the latest episode kept me locked in, reminding me how stories teach pacing and suspense—lessons I want to bring back to my own building. In the middle of that, I did a round of maintenance on the Claude Platform dashboard, checking how the platform evolves in response to real needs. Watching that change is a useful mirror for what I hope my projects will achieve.&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="c1"&gt;# Example of a dashboard config update&lt;/span&gt;
&lt;span class="na"&gt;dashboard&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;widgets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;llm-usage"&lt;/span&gt;
      &lt;span class="na"&gt;refresh_interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;60&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user-feedback"&lt;/span&gt;
      &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I also spent a little time on LinkedIn, scrolling through what friends and peers are building. Seeing people I know shipping their own work is quietly motivating; it makes the grind feel shared.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Takeaway
&lt;/h2&gt;

&lt;p&gt;By night the day settled into a balance: real progress in the morning, real rest in the evening, and enough laughter in between to keep both honest. Nothing dramatic, and that’s the point. Steady days like this are what the big moments are built from.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tomorrow, back to the mod.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>llm</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Soul in Motion — 5:01 PM | 2026-10-08</title>
      <dc:creator>Dev Rajput</dc:creator>
      <pubDate>Thu, 08 Oct 2026 11:52:52 +0000</pubDate>
      <link>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-501-pm-2026-10-08-1ih8</link>
      <guid>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-501-pm-2026-10-08-1ih8</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reverted a costly caching strategy in the ELI business project and replaced it with a growth‑oriented cache that increased reads from 0 to &amp;gt;2 000.&lt;/li&gt;
&lt;li&gt;Built an ephemeris API (&lt;code&gt;geo.py&lt;/code&gt;, &lt;code&gt;birthtime.py&lt;/code&gt;) to expose star data for Satya’s astrology front‑end.&lt;/li&gt;
&lt;li&gt;Fixed UI overflow in Living Books and tuned ElevenLabs voice tiers for a more natural narration.&lt;/li&gt;
&lt;li&gt;Started a new open‑source cloud repo, HyperCloud, with a Flask login and a React dashboard prototype.&lt;/li&gt;
&lt;li&gt;Day closed with a clear list of wins: cost control, voice quality, data API, voice tuning, and a new repo seed.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Act I – The Villain Called “Cost”
&lt;/h2&gt;

&lt;p&gt;The ELI business project had a new feature: a conversation‑caching layer intended to cut voice‑to‑text and TTS calls. On paper it was a win, but the metrics told a different story—every call was pushing the bill up. I had to roll back my own PR.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout a49afcd  &lt;span class="c"&gt;# revert the caching logic&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"revert: remove conversation cache"&lt;/span&gt;
git push origin main

git checkout 609653e  &lt;span class="c"&gt;# disable caching entirely&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"turn caching off"&lt;/span&gt;
git push origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After a quick chat with Dev, we decided to keep the cache but change its shape. Instead of trying to &lt;em&gt;fight&lt;/em&gt; growing conversations, we let the cache &lt;em&gt;grow&lt;/em&gt; with them. Commit &lt;code&gt;0179eb3&lt;/code&gt; introduced a sharded, LRU‑style cache that stores conversation histories in a Redis cluster.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout 0179eb3
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"implement growth‑oriented conversation cache"&lt;/span&gt;
git push origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Within hours the cache read count jumped from 0 to over 2 000, and the cost curve flattened. The villain was held at bay—for today.&lt;/p&gt;




&lt;h2&gt;
  
  
  Act II – The Stars as Data
&lt;/h2&gt;

&lt;p&gt;Satya reached out with a wild idea: turn astrology into a data‑driven service. I dug into &lt;code&gt;geo.py&lt;/code&gt; and &lt;code&gt;birthtime.py&lt;/code&gt;, which compute ephemeris data from precise birth details. The scripts use the &lt;code&gt;pyswisseph&lt;/code&gt; library to fetch planetary positions and then expose them via a tiny Flask API.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# geo.py
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;swisseph&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;swe&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_planet_positions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;birth_datetime&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;jd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;swe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;julday&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;birth_datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;birth_datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;birth_datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;day&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;birth_datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hour&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;birth_datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;minute&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;positions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;planet&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;sun&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;moon&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mercury&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;venus&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mars&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;jupiter&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;saturn&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
        &lt;span class="n"&gt;positions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;planet&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;swe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;calc_ut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;swe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__dict__&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;planet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;upper&lt;/span&gt;&lt;span class="p"&gt;()])[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;positions&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We sketched a front page and debated the voice for narrating a chart. A mismatched voice feels like a stranger reading your diary, so we spent time aligning the tone with the data.&lt;/p&gt;




&lt;h2&gt;
  
  
  Act III – Voices of Living Books
&lt;/h2&gt;

&lt;p&gt;Living Books is a platform that reads stories aloud with real human narrators. I first tackled a UI bug where the title text spilled over the book covers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout 14bf9a0
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"fix: prevent title overflow on book covers"&lt;/span&gt;
git push origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, I spent hours syncing the human voices with the text. ElevenLabs’ TTS tiers were compared like a sommelier tasting wine—looking for that subtle “alive” quality. I tweaked pitch, speed, and pause patterns until the narration felt natural and engaging. The same voice tuning principles will carry over to ELI and Satya’s projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  Intermission – The In‑Between
&lt;/h2&gt;

&lt;p&gt;Between tasks the browser wandered: ElevenLabs research, cricket highlights, memes, Netflix in the background. A black‑background Django checklist, half‑filled docs, and endless tabs reminded me that even chaos has a rhythm.&lt;/p&gt;




&lt;h2&gt;
  
  
  Act IV – Nightfall, a New Beginning
&lt;/h2&gt;

&lt;p&gt;Evening brought a fresh repository: &lt;strong&gt;HyperCloud&lt;/strong&gt;, an open‑source cloud storage platform for small teams. After a quick install marathon (Python, Docker, Kubernetes, Git) and a few episodes of &lt;em&gt;Rick and Morty&lt;/em&gt;, I started building with Claude Code as my pair programmer.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Flask login endpoint&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# app.py
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;flask&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;jsonify&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nd"&gt;@app.route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/login&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;methods&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;POST&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;login&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;
    &lt;span class="c1"&gt;# simple auth stub
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;data&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="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;username&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;admin&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;data&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="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;password&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;secret&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;jsonify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;token&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dummy-jwt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;jsonify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unauthorized&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="mi"&gt;401&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;React dashboard prototype&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-react-app hypercloud-dashboard
&lt;span class="nb"&gt;cd &lt;/span&gt;hypercloud-dashboard
npm &lt;span class="nb"&gt;install &lt;/span&gt;axios
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The dashboard currently shows an empty file list, but the skeleton is there: a &lt;code&gt;FileList&lt;/code&gt; component that will later consume the HyperCloud API.&lt;/p&gt;




&lt;h2&gt;
  
  
  Epilogue
&lt;/h2&gt;

&lt;p&gt;The room is still dark, the cursor still blinks, but something has changed. Today I:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduced voice cost, raising cache reads from 0 to &amp;gt;2 000&lt;/li&gt;
&lt;li&gt;Preserved ELI’s voice quality&lt;/li&gt;
&lt;li&gt;Turned star data into a usable API with Satya&lt;/li&gt;
&lt;li&gt;Learned what makes a voice feel alive&lt;/li&gt;
&lt;li&gt;Planted the first commit of HyperCloud&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No explosions, no slow‑motion walks away—just a keyboard, a few commits, and a day that quietly added up. Tomorrow will bring new villains and new chapters. The screen will glow again.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy building.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>devops</category>
      <category>opensource</category>
      <category>react</category>
    </item>
    <item>
      <title>Soul in Motion — 10:09 AM | 2026-09-29</title>
      <dc:creator>Dev Rajput</dc:creator>
      <pubDate>Tue, 29 Sep 2026 04:56:20 +0000</pubDate>
      <link>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-1009-am-2026-09-29-5g2m</link>
      <guid>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-1009-am-2026-09-29-5g2m</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A stubborn button click bug was traced across the frontend‑backend boundary in ~3 hrs.&lt;/li&gt;
&lt;li&gt;Built a data‑labeling ↔ ML platform pipeline using custom scripts; got two incompatible systems to talk.&lt;/li&gt;
&lt;li&gt;Balanced heavy debugging with AI‑assisted quick fixes and scheduled breaks (binge‑watching &lt;em&gt;Scorpion&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;Ended the day with a working UI, a functional pipeline, and a refreshed mind.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The “Trivial” Bug That Took 3 Hours
&lt;/h2&gt;

&lt;p&gt;I started 10:09 AM with a button that did nothing.&lt;br&gt;&lt;br&gt;
The click event fired in the browser, but the expected API call never reached the server.&lt;br&gt;&lt;br&gt;
That’s the classic “between‑the‑layers” problem: the frontend sends a request, the backend never receives it.&lt;/p&gt;
&lt;h3&gt;
  
  
  Tracing the Signal
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Console logs&lt;/strong&gt; – added &lt;code&gt;console.log('clicked')&lt;/code&gt; in the click handler.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network tab&lt;/strong&gt; – verified the request was sent, but the URL was &lt;code&gt;/api/unknown&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Router check&lt;/strong&gt; – the route &lt;code&gt;/api/unknown&lt;/code&gt; didn’t exist.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State inspection&lt;/strong&gt; – the component’s state was &lt;code&gt;null&lt;/code&gt; when the handler ran.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prop drilling&lt;/strong&gt; – the handler was passed down from a parent that never updated its state.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The culprit: a missing &lt;code&gt;useEffect&lt;/code&gt; that should have fetched the endpoint URL from the config.&lt;br&gt;&lt;br&gt;
After adding:&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="nf"&gt;useEffect&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="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/config&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="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;r&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="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setApiUrl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;buttonEndpoint&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;p&gt;the button finally hit &lt;code&gt;/api/submit&lt;/code&gt;. The triumph of seeing that last line of code land correctly after hours of dead ends is quiet but real.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building a Clean Pipeline Between Labeling and ML
&lt;/h2&gt;

&lt;p&gt;The next task was to wire a data‑labeling framework (LabelStudio) with an ML platform (MLflow). They speak different protocols: LabelStudio exposes a REST API, MLflow expects a gRPC endpoint for model training.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Script
&lt;/h3&gt;

&lt;p&gt;I wrote a lightweight Python orchestrator that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pulls labeled data from LabelStudio via its REST API.&lt;/li&gt;
&lt;li&gt;Converts the JSON annotations into the CSV format MLflow expects.&lt;/li&gt;
&lt;li&gt;Calls MLflow’s &lt;code&gt;run&lt;/code&gt; API to trigger training.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;mlflow&lt;/span&gt;

&lt;span class="c1"&gt;# 1. Pull labels
&lt;/span&gt;&lt;span class="n"&gt;labels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&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="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://labelstudio.example.com/api/v1/projects/42/data&lt;/span&gt;&lt;span class="sh"&gt;'&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="c1"&gt;# 2. Convert
&lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;train.csv&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;newline&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;writer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;image&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;label&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;label&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;

&lt;span class="c1"&gt;# 3. Trigger MLflow
&lt;/span&gt;&lt;span class="n"&gt;mlflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_tracking_uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://mlflow.example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;mlflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;uri&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;models/ResNet50&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;entry_point&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;train&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;parameters&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data_path&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;train.csv&lt;/span&gt;&lt;span class="sh"&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;p&gt;The script was fiddly—handling pagination, rate limits, and ensuring the CSV schema matched the MLflow model’s expectations—but once it ran, the two systems spoke the same language.&lt;/p&gt;




&lt;h2&gt;
  
  
  Balancing Work, AI Assistance, and Breaks
&lt;/h2&gt;

&lt;p&gt;I didn’t let the day get too long. After the button fix, I scheduled a 30‑minute break to binge‑watch &lt;em&gt;Scorpion&lt;/em&gt;. Each episode ended on a cliffhanger, pulling me straight into the next. Between those breaks I:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used ChatGPT to generate quick snippets for error handling.&lt;/li&gt;
&lt;li&gt;Ran &lt;code&gt;curl&lt;/code&gt; commands to test endpoints while the browser was idle.&lt;/li&gt;
&lt;li&gt;Sketched a diagram of the data flow in a whiteboard app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI assistance was a speed‑up, not a replacement. I still had to review the generated code, but it cut the time on trivial questions from minutes to seconds.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrap‑Up
&lt;/h2&gt;

&lt;p&gt;By 5 PM:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The button worked reliably.&lt;/li&gt;
&lt;li&gt;LabelStudio and MLflow were integrated via a clean pipeline.&lt;/li&gt;
&lt;li&gt;I had watched enough &lt;em&gt;Scorpion&lt;/em&gt; to feel my brain had actually rested.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not every day needs a dramatic arc. Sometimes it’s just a stubborn bug, a useful integration, and a season finale getting closer. Tomorrow’s already lined up—stay tuned for more.&lt;/p&gt;




</description>
      <category>javascript</category>
      <category>react</category>
      <category>node</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Soul in Motion — 12:48 AM | 2026-09-27</title>
      <dc:creator>Dev Rajput</dc:creator>
      <pubDate>Sat, 26 Sep 2026 20:19:41 +0000</pubDate>
      <link>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-1248-am-2026-09-27-1b4c</link>
      <guid>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-1248-am-2026-09-27-1b4c</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Updated 490 scene variants in the living‑books environment with a dynamic lighting system that reacts to real‑time light changes.&lt;/li&gt;
&lt;li&gt;Rebuilt library furniture from scratch, adding realistic wood textures, dust particles, and spatial physics for deeper floor transitions.&lt;/li&gt;
&lt;li&gt;Implemented user‑controlled library decoration and personal book shelving for ownership.&lt;/li&gt;
&lt;li&gt;Ran a business audit on &lt;code&gt;revenue‑assets‑audit.md&lt;/code&gt;, &lt;code&gt;builds‑not‑ships.md&lt;/code&gt;, and &lt;code&gt;first‑sale.md&lt;/code&gt; to keep monetization on track.&lt;/li&gt;
&lt;li&gt;Hooked up &lt;code&gt;earth_api.py&lt;/code&gt; and &lt;code&gt;ManifestEarth.h&lt;/code&gt; to trigger physical world effects from in‑world interactions.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Breathing Life into the Grid
&lt;/h2&gt;

&lt;p&gt;I spent most of the day locked in the &lt;strong&gt;living‑books&lt;/strong&gt; environment, turning static scenes into something that feels alive. The core of the work was a massive update that touches all &lt;strong&gt;490 scene variants&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
The key change: a &lt;strong&gt;dynamic lighting system&lt;/strong&gt; that makes every environment shift and react to light in real time.&lt;/p&gt;
&lt;h3&gt;
  
  
  Lighting Pipeline
&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;# Build the new lighting assets&lt;/span&gt;
python scripts/generate_lighting.py &lt;span class="nt"&gt;--scenes&lt;/span&gt; all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The script now outputs a set of light maps that are baked into each scene. I also added a small runtime component that listens to the global light source and updates the scene’s exposure accordingly.&lt;/p&gt;
&lt;h3&gt;
  
  
  Furniture Overhaul
&lt;/h3&gt;

&lt;p&gt;I rebuilt the library furniture from scratch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Realistic wooden bookcases&lt;/strong&gt; with high‑resolution wood grain textures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Textured boards&lt;/strong&gt; that show subtle wear and dust.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dust particles&lt;/strong&gt; that catch the light, adding a subtle depth cue.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The assets are now stored in &lt;code&gt;assets/furniture/&lt;/code&gt; and loaded via the scene loader. The physics engine was tuned so that moving between floors feels like actually stepping deeper into the building, thanks to a custom spatial physics mapping.&lt;/p&gt;
&lt;h3&gt;
  
  
  User‑Driven Customization
&lt;/h3&gt;

&lt;p&gt;The biggest UX win was giving users control over their library:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Decorate&lt;/strong&gt;: Drag‑and‑drop furniture items.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assign personal books&lt;/strong&gt;: Users can pin their own books to a dedicated shelf.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This feature was implemented by extending the &lt;code&gt;LibraryManager&lt;/code&gt; class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LibraryManager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;add_book&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;book_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;shelf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# Persist the assignment in the user profile
&lt;/span&gt;        &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update_user_profile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;shelf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;book_id&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the library feels personal, not just a static showcase.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Business Audit &amp;amp; Manifest
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Financial &amp;amp; Strategic Audit
&lt;/h3&gt;

&lt;p&gt;I spent a few hours in the &lt;code&gt;C:\&lt;/code&gt; directory running audits on the key markdown files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Review revenue assets&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;revenue‑assets‑audit.md

&lt;span class="c"&gt;# Check build vs. ship metrics&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;builds‑not‑ships.md

&lt;span class="c"&gt;# First sale analysis&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;first‑sale.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The audit helped keep the monetization trajectory clear. I also answered user queries about subscription structures and the upcoming &lt;strong&gt;GPT‑6 Astra&lt;/strong&gt; capabilities, ensuring the roadmap aligns with revenue goals.&lt;/p&gt;

&lt;h3&gt;
  
  
  Manifest Project
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Manifest&lt;/strong&gt; project is highly experimental. I wired up &lt;code&gt;earth_api.py&lt;/code&gt; and &lt;code&gt;ManifestEarth.h&lt;/code&gt; to create a bridge between the virtual world and the physical one.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# earth_api.py
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;trigger_physical_effect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;effect_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;intensity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Send command to the physical device
&lt;/span&gt;    &lt;span class="nf"&gt;send_to_hardware&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;effect_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;intensity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ManifestEarth.h&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;triggerEffect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;effectId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;intensity&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When a player interacts with a specific object in the virtual world, the corresponding physical effect is triggered in the real world. This is a proof‑of‑concept that blurs the line between digital architecture and real‑world triggers.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Champions League Anchor
&lt;/h2&gt;

&lt;p&gt;After a brief break exploring the &lt;strong&gt;kathaverse&lt;/strong&gt; architecture, I needed to step away from the screen. I opened Sony LIV and watched the UEFA Champions League match—&lt;strong&gt;Porto vs. Man City&lt;/strong&gt;. Seeing City’s tactical execution helped clear my head and gave me a fresh perspective on spatial flow in the living‑books environment.&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;The living‑books environment is evolving into something unique. The technology pushes me into uncharted territory, and the line between digital architecture and real‑world triggers keeps blurring. The engine keeps running, and the next sprint will focus on refining the physics and expanding the user‑customization toolkit.&lt;/p&gt;

</description>
      <category>python</category>
      <category>automation</category>
      <category>devops</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Soul in Motion — 5:28 PM | 2026-09-21</title>
      <dc:creator>Dev Rajput</dc:creator>
      <pubDate>Mon, 21 Sep 2026 12:21:27 +0000</pubDate>
      <link>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-528-pm-2026-09-21-1pjk</link>
      <guid>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-528-pm-2026-09-21-1pjk</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Refactored the &lt;strong&gt;Soul in Motion&lt;/strong&gt; site’s color scheme and added subtle text motion inspired by a peer’s design.&lt;/li&gt;
&lt;li&gt;Tackled a personal celestial distance visualizer, resolving cascading bugs from interactive elements.&lt;/li&gt;
&lt;li&gt;Cleaned up the local filesystem, clearing orphaned folders and gaining mental clarity.&lt;/li&gt;
&lt;li&gt;Drawn design inspiration from bold, unconventional sites and &lt;em&gt;Under the Banner of Heaven&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Ended the day with progress on both the company site and the side project, feeling satisfied with incremental wins.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Morning: Ripping Apart the Soul in Motion Palette
&lt;/h2&gt;

&lt;p&gt;I started the day staring at the black‑and‑red combo that had been stuck on the &lt;strong&gt;Soul in Motion&lt;/strong&gt; homepage for months. The gut feeling was that it was &lt;em&gt;stale&lt;/em&gt;—not just a color clash but a visual dead‑weight. Instead of a quick palette swap, I decided to inject &lt;strong&gt;motion&lt;/strong&gt; into the text itself, giving the page a subtle personality.&lt;/p&gt;

&lt;p&gt;I pulled up a screenshot from a recent design review that highlighted an older layout. My goal was to make sure the new motion didn’t just look good in isolation but actually &lt;em&gt;fit&lt;/em&gt; with the rest of the UI. The tension between “this looks striking” and “this is usable” is a constant in front‑end work, and I kept circling back to that balance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Implementation Snapshot
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Simple keyframes for subtle horizontal text motion */&lt;/span&gt;
&lt;span class="k"&gt;@keyframes&lt;/span&gt; &lt;span class="n"&gt;slide&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="o"&gt;%,&lt;/span&gt; &lt;span class="err"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="err"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;5px&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;span class="nc"&gt;.text-move&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;animation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;slide&lt;/span&gt; &lt;span class="m"&gt;4s&lt;/span&gt; &lt;span class="n"&gt;ease-in-out&lt;/span&gt; &lt;span class="n"&gt;infinite&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;p&gt;I wrapped the headline text in a &lt;code&gt;div.text-move&lt;/code&gt; and tweaked the timing until it felt natural. The result is a gentle, almost imperceptible glide that adds life without distracting from the content.&lt;/p&gt;




&lt;h2&gt;
  
  
  Afternoon: Debugging the Celestial Distance Visualizer
&lt;/h2&gt;

&lt;p&gt;The side project was a visualization of distances between celestial bodies. The goal was to make the data &lt;em&gt;intuitive&lt;/em&gt;, not a wall of numbers. Unfortunately, adding a tiny interactive element broke three others. A ghost of a removed element lingered, and a quiet button caused chaos downstream.&lt;/p&gt;

&lt;p&gt;I spent the afternoon chasing these cascading bugs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ghost Element&lt;/strong&gt; – A hidden &lt;code&gt;div&lt;/code&gt; still existed in the DOM, causing layout shifts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Button Cascade&lt;/strong&gt; – Clicking the “Show Details” button triggered a re‑render that inadvertently reset the entire state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Sync&lt;/strong&gt; – The new slider was not debounced, leading to rapid state changes that overloaded the rendering loop.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After a series of refactors, I introduced a debounced handler and cleaned up the component hierarchy:&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="c1"&gt;// debounce.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;debounce&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;func&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;wait&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;args&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="nf"&gt;clearTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;timeout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;func&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;wait&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;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// distance-visualizer.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;debounce&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./debounce&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;handleSliderChange&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;debounce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;value&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="nf"&gt;updateDistances&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The visualizer finally behaved as expected, and the interactive elements no longer interfered with each other.&lt;/p&gt;




&lt;h2&gt;
  
  
  Inspiration Hunt
&lt;/h2&gt;

&lt;p&gt;While the code was running, I opened a few sites known for bold, unconventional design—think &lt;em&gt;Awwwards&lt;/em&gt; winners and experimental UI showcases. I took mental notes on layout tricks and motion details that could be adapted for the company site later.&lt;/p&gt;

&lt;p&gt;I also let &lt;em&gt;Under the Banner of Heaven&lt;/em&gt; play in the background. The vivid scenes made me pause and question the intentionality of my own work. It’s a reminder that design is as much about narrative as it is about pixels.&lt;/p&gt;




&lt;h2&gt;
  
  
  File System Clean‑Up
&lt;/h2&gt;

&lt;p&gt;A small but surprisingly satisfying task: I hunted through my hard drive for folders that had stopped showing up where they should, cleared out the junk, and felt a wave of relief. Not every win needs to be complicated, but a tidy workspace can boost productivity and reduce cognitive load.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrap‑Up
&lt;/h2&gt;

&lt;p&gt;By the end of the day, I had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A redesigned homepage with subtle text motion.&lt;/li&gt;
&lt;li&gt;A stubborn side project finally behaving.&lt;/li&gt;
&lt;li&gt;A cleaner hard drive.&lt;/li&gt;
&lt;li&gt;A head full of borrowed inspiration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both the company site and the distance visualizer are closer to completion than they were this morning. That, for me, is enough.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Stay tuned for the next update.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>css</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Soul in Motion — 6:17 PM | 2026-09-18</title>
      <dc:creator>Dev Rajput</dc:creator>
      <pubDate>Fri, 18 Sep 2026 13:12:13 +0000</pubDate>
      <link>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-617-pm-2026-09-18-2fnc</link>
      <guid>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-617-pm-2026-09-18-2fnc</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Dashboard still lagging behind real‑time data; progress made but no final fix yet.&lt;/li&gt;
&lt;li&gt;Re‑installed unnecessary components to isolate a stale cache issue.&lt;/li&gt;
&lt;li&gt;Voice‑recognition for Soulvoice improved; false positives reduced by tightening keyword spotting.&lt;/li&gt;
&lt;li&gt;Developed a structured play parser that correctly tokenizes lines and preserves character voices.&lt;/li&gt;
&lt;li&gt;Small wins across the day; no single breakthrough, but cumulative progress.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A Day in the Life of a Builder – September 4
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Dashboard Dilemma
&lt;/h3&gt;

&lt;p&gt;The dashboard was supposed to surface real‑time metrics, but it kept showing yesterday’s numbers. I started by inspecting the data pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check the cache expiration header&lt;/span&gt;
curl &lt;span class="nt"&gt;-I&lt;/span&gt; https://api.myapp.com/metrics
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The header returned &lt;code&gt;Cache-Control: max-age=86400&lt;/code&gt;, which explains why the data was stale. I removed the caching middleware from the Express route:&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="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;/metrics&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="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="c1"&gt;// Previously: res.set('Cache-Control', 'max-age=86400');&lt;/span&gt;
  &lt;span class="c1"&gt;// Now: no caching header&lt;/span&gt;
  &lt;span class="nf"&gt;fetchMetrics&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;json&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="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that, I re‑installed the &lt;code&gt;node-cache&lt;/code&gt; package, which had been flagged as “unnecessary” in the &lt;code&gt;package.json&lt;/code&gt;. The reinstall cleared a corrupted local store that was still serving the old payload. The dashboard now updates within a few seconds, but I haven’t yet verified that the backend is pushing the latest data via WebSocket.&lt;/p&gt;

&lt;h3&gt;
  
  
  Recurring Bug in the Feature Toggle Service
&lt;/h3&gt;

&lt;p&gt;Midday, a bug I thought I’d fixed in the feature toggle service resurfaced. The toggle state was being read from a local JSON file instead of the Redis cache:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# toggle_service.py
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_toggle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Previously: return local_toggles[name]
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;redis_client&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="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I added a log statement to confirm the source:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Toggle &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; fetched from &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The logs revealed that the fallback to the local file was still active when Redis returned &lt;code&gt;None&lt;/code&gt;. I updated the fallback logic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;local_toggles&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="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the service consistently reads from Redis, but the root cause—an uninitialized Redis key—remains to be addressed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Voice Recognition Tweaks for Soulvoice
&lt;/h3&gt;

&lt;p&gt;The voice assistant’s wake‑word detection had a high false‑positive rate. I tightened the sensitivity threshold in the keyword spotting model:&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="c1"&gt;# config.yaml&lt;/span&gt;
&lt;span class="na"&gt;wake_word&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;sensitivity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.75&lt;/span&gt;  &lt;span class="c1"&gt;# increased from 0.6&lt;/span&gt;
  &lt;span class="na"&gt;model_path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/models/wake_word.bin&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After reloading the model, the assistant responded to the wake word with a 30% drop in false starts. I also added a short silence buffer before accepting a command:&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="nx"&gt;audioProcessor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;speechEnd&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;silenceDuration&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;processCommand&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;p&gt;The result: a more human‑like pause before the assistant starts listening.&lt;/p&gt;

&lt;h3&gt;
  
  
  Structured Play Parser
&lt;/h3&gt;

&lt;p&gt;The highlight of the day was finally getting a parser that understands the structure of Shakespearean plays. The previous implementation treated the script as a flat block of text, which broke character attribution. I built a simple lexer that tokenizes the script into scenes, acts, and lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;

&lt;span class="n"&gt;SCENE_RE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;^\s*Scene\s+\d+&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MULTILINE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ACT_RE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;^\s*Act\s+\w+&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MULTILINE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;LINE_RE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;^\s*(\w+):\s*(.+)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MULTILINE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parse_script&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;acts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ACT_RE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;parsed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;act&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;acts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:]:&lt;/span&gt;
        &lt;span class="n"&gt;scenes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;SCENE_RE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;act&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;scene&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;scenes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:]:&lt;/span&gt;
            &lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;LINE_RE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;act&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;act&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;scene&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;lines&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;parsed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running this on &lt;em&gt;Macbeth&lt;/em&gt;, &lt;em&gt;Othello&lt;/em&gt;, and &lt;em&gt;Hamlet&lt;/em&gt; produced a structured JSON where each line is paired with its speaker. Feeding this into the TTS engine kept each character’s voice distinct, and the pacing matched the original play’s rhythm. The first test run—narrating &lt;em&gt;Hamlet&lt;/em&gt;—went through without a single misattributed line.&lt;/p&gt;

&lt;h3&gt;
  
  
  Breaks and Side‑Projects
&lt;/h3&gt;

&lt;p&gt;I let the day wind down with a few AI‑and‑coding rabbit holes that started with a single search for “transformer fine‑tuning” and ended up exploring a new open‑source dataset for voice cloning. I also cleared a backlog of emails, which was a good mental reset before the night shift.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reflections
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard&lt;/strong&gt;: Still not fully fixed; the real-time push mechanism needs a final tweak.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recurring bug&lt;/strong&gt;: Diagnosed, but the underlying Redis key issue is pending.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Soulvoice&lt;/strong&gt;: Wake‑word detection is noticeably more reliable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Play parser&lt;/strong&gt;: Works on the first real test; feels like a quiet triumph.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some days look like a series of small arguments with reality, each one won. Fingers crossed the rest sorts itself out before the next release. Stay tuned.&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>devops</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Soul in Motion — 6:16 PM | 2026-09-17</title>
      <dc:creator>Dev Rajput</dc:creator>
      <pubDate>Thu, 17 Sep 2026 13:07:58 +0000</pubDate>
      <link>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-616-pm-2026-09-17-2m1i</link>
      <guid>https://dev.to/dev_rajput_2d46f92f8a3418/soul-in-motion-616-pm-2026-09-17-2m1i</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Built an interactive &lt;em&gt;Frankenstein&lt;/em&gt; demo that animates scenes based on the text, including subtle air‑visualization.&lt;/li&gt;
&lt;li&gt;Expanded the concept into a shelf‑level platform, deploying a 10‑chapter book with scene sequencing and mood‑based weather.&lt;/li&gt;
&lt;li&gt;Tackled plumbing: data ingestion, scene orchestration, and secure hosting on a cloud platform.&lt;/li&gt;
&lt;li&gt;Parallel work: concise product explanations, Kathaverse short‑story scaffolding, comic frame transitions, and personal media breaks.&lt;/li&gt;
&lt;li&gt;All projects progressed incrementally; each small fix added realism and cohesion.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  From Page to Space: Making &lt;em&gt;Frankenstein&lt;/em&gt; Breathable
&lt;/h2&gt;

&lt;p&gt;The core idea was simple: turn a static text into a living environment.&lt;br&gt;&lt;br&gt;
I started with a &lt;strong&gt;react‑three-fiber&lt;/strong&gt; scene that loads the book’s JSON representation, then maps each chapter to a &lt;code&gt;Scene&lt;/code&gt; component. The component adjusts lighting, background audio, and particle effects based on metadata extracted from the text (e.g., “dark, stormy night”).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Scene&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;chapter&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="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;mood&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;weather&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parseMetadata&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chapter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ambientLight&lt;/span&gt; &lt;span class="na"&gt;intensity&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;mood&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dark&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;audio&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;weatherAudio&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;weather&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;loop&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;AirParticles&lt;/span&gt; &lt;span class="na"&gt;visible&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;chapter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;air&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;&amp;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;h3&gt;
  
  
  The Invisible Air Effect
&lt;/h3&gt;

&lt;p&gt;The “air becomes visible” trick was a debugging win. I added a low‑opacity &lt;strong&gt;cloud&lt;/strong&gt; particle system that only activates when the text mentions “air” or “wind.” It’s almost imperceptible, but it grounds the reader in the environment.&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;function&lt;/span&gt; &lt;span class="nf"&gt;AirParticles&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;visible&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;visible&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;points&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;bufferGeometry&lt;/span&gt; &lt;span class="nx"&gt;attach&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;geometry&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;{...&lt;/span&gt;&lt;span class="nx"&gt;cloudGeometry&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;pointsMaterial&lt;/span&gt; &lt;span class="nx"&gt;attach&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;material&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#fff&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;opacity&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;transparent&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/points&lt;/span&gt;&lt;span class="err"&gt;&amp;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;p&gt;The challenge was keeping the particles from over‑rendering. I throttled updates to once per second and used GPU instancing to keep the frame rate above 60 fps.&lt;/p&gt;




&lt;h2&gt;
  
  
  Scaling Up: From One Book to a Shelf
&lt;/h2&gt;

&lt;p&gt;After polishing the single‑book demo, I built a &lt;strong&gt;shelf&lt;/strong&gt; abstraction. Each book is a &lt;code&gt;ShelfItem&lt;/code&gt; that holds its own scene graph, metadata, and a small REST API for fetching the next chapter.&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="c1"&gt;# shelf.yaml&lt;/span&gt;
&lt;span class="na"&gt;books&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;frankenstein&lt;/span&gt;
    &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Frankenstein"&lt;/span&gt;
    &lt;span class="na"&gt;chapters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12&lt;/span&gt;
    &lt;span class="na"&gt;entry&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/books/frankenstein/chapters/1&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;great_expectations&lt;/span&gt;
    &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Great&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Expectations"&lt;/span&gt;
    &lt;span class="na"&gt;chapters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;9&lt;/span&gt;
    &lt;span class="na"&gt;entry&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/books/great_expectations/chapters/1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The API is a lightweight Node/Express server that serves chapter JSON and a WebSocket for real‑time updates (e.g., when a user marks a bookmark).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;express ws
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;app&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;WebSocket&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;ws&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;wss&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;WebSocket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;server&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="p"&gt;});&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;/books/:id/chapters/:num&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="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="nx"&gt;res&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="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`./data/&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;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/chapter&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;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;num&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.json`&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;wss&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;connection&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ws&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// broadcast bookmark updates&lt;/span&gt;
    &lt;span class="nx"&gt;wss&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clients&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&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;h3&gt;
  
  
  Deployment Pipeline
&lt;/h3&gt;

&lt;p&gt;I containerized the stack with Docker and pushed it to a &lt;strong&gt;DigitalOcean App Platform&lt;/strong&gt; instance. The pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;docker build -t mybooks:latest .&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker push registry.digitalocean.com/myorg/mybooks:latest&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Deploy via the DO dashboard, exposing port 80.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The only real plumbing hurdle was ensuring the WebSocket endpoint survived the platform’s HTTP load balancer. I added a &lt;code&gt;proxy_pass&lt;/code&gt; rule in the Nginx config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/ws/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://backend:3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;"upgrade"&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;
  
  
  Translating Complexity into Clarity
&lt;/h2&gt;

&lt;p&gt;Parallel to the technical work, I spent time crafting a &lt;strong&gt;one‑pager&lt;/strong&gt; that explains the platform to non‑technical stakeholders. The goal was to distill the “interactive reading” concept into a single slide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Problem&lt;/strong&gt;: Static books lack immersion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solution&lt;/strong&gt;: A web‑based environment that reacts to narrative cues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benefits&lt;/strong&gt;: Higher engagement, new monetization via premium scenes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I used a simple diagram built in Figma, then exported it as an SVG and embedded it directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"assets/interactive-reading.svg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Interactive Reading Flow"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Kathaverse: Minimalist Short Stories
&lt;/h2&gt;

&lt;p&gt;In the &lt;strong&gt;Kathaverse&lt;/strong&gt; project, I experimented with ultra‑short stories composed of a handful of scenes. Each scene is a JSON snippet:&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;"scene"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"A lone lantern flickers in the dark alley."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"audio"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dark_alley.mp3"&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;p&gt;The renderer stitches them together on the fly, using a simple state machine to transition between scenes. The key insight: &lt;em&gt;you don’t need a complex engine to evoke emotion—just the right order of small, well‑crafted moments.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Comic Strip Smoothness
&lt;/h2&gt;

&lt;p&gt;I revisited an old comic strip project to tighten frame transitions. Using &lt;strong&gt;GSAP&lt;/strong&gt; I added a subtle easing function that guides the eye:&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="nx"&gt;gsap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.frame&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;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;power2.out&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;stagger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result is a fluid flow that feels “right” without being obvious. Small tweaks like this accumulate into a polished experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  Personal Recharge
&lt;/h2&gt;

&lt;p&gt;Between code and design, I let myself unwind with &lt;em&gt;Scorpion&lt;/em&gt; episodes and a playlist of Bad Bunny &amp;amp; Jhay Cortez. The music helped clear mental clutter, making the next debugging session feel fresh.&lt;/p&gt;




&lt;h2&gt;
  
  
  Day in Review
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frankenstein&lt;/strong&gt;: Scene orchestration, air‑visualization, particle throttling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shelf Platform&lt;/strong&gt;: API, WebSocket, Docker, DO deployment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communication&lt;/strong&gt;: One‑pager, Figma diagram.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kathaverse&lt;/strong&gt;: Minimalist story engine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comic&lt;/strong&gt;: GSAP frame easing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self‑care&lt;/strong&gt;: Media breaks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each task, though distinct, fed into a common goal: making narrative feel alive. The day felt cohesive because every small improvement added a layer of realism.&lt;/p&gt;




&lt;p&gt;Stay tuned for the next post where I’ll dive into the analytics layer—tracking how users interact with the scenes and how that data can inform future story design.&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
