<?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: Krishna Paul</title>
    <description>The latest articles on DEV Community by Krishna Paul (@krishnapaul).</description>
    <link>https://dev.to/krishnapaul</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F399079%2F69eaaf5d-e20b-4ab0-9e57-842b9098ecdd.jpeg</url>
      <title>DEV Community: Krishna Paul</title>
      <link>https://dev.to/krishnapaul</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/krishnapaul"/>
    <language>en</language>
    <item>
      <title>Introducing Gati — The Zero-Ops Backend Framework for the AI Era</title>
      <dc:creator>Krishna Paul</dc:creator>
      <pubDate>Sat, 22 Nov 2025 23:33:47 +0000</pubDate>
      <link>https://dev.to/krishnapaul/introducing-gati-the-zero-ops-backend-framework-for-the-ai-era-4jde</link>
      <guid>https://dev.to/krishnapaul/introducing-gati-the-zero-ops-backend-framework-for-the-ai-era-4jde</guid>
      <description>&lt;h1&gt;
  
  
  🚀 &lt;strong&gt;Introducing Gati — The Zero-Ops Backend Framework for the AI Era&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Build faster. Break nothing. Deploy everywhere.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Modern backend development shouldn’t feel like wrestling infrastructure, gluing libraries, debugging traffic flows, or worrying whether deploying a new API will break production for your customers.&lt;/p&gt;

&lt;p&gt;Yet — it still does.&lt;/p&gt;

&lt;p&gt;For startups, solo developers, agencies, and even mid-sized teams, backend engineering is increasingly fragmented:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Too many moving parts&lt;/li&gt;
&lt;li&gt;Too much DevOps overhead&lt;/li&gt;
&lt;li&gt;Too many “gotchas” with deployment&lt;/li&gt;
&lt;li&gt;Too much risk when shipping updates&lt;/li&gt;
&lt;li&gt;Too much manual work for scaling, versioning &amp;amp; observability&lt;/li&gt;
&lt;li&gt;Too much pressure to integrate AI, queues, modules, caching, security… manually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Gati&lt;/strong&gt; was born to change that.&lt;/p&gt;

&lt;p&gt;Gati (गति) means &lt;em&gt;speed, motion, progress&lt;/em&gt; — and the framework embodies exactly that:&lt;br&gt;
A backend that &lt;strong&gt;evolves, scales, and adapts automatically&lt;/strong&gt;, letting developers focus on what they actually love: &lt;strong&gt;writing logic and building great products.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Welcome to a new era of backend development.&lt;/p&gt;


&lt;h1&gt;
  
  
  🌟 &lt;strong&gt;What is Gati?&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Gati is a &lt;strong&gt;TypeScript-first, fully modular, self-managed backend runtime&lt;/strong&gt; designed for an AI-accelerated world.&lt;/p&gt;

&lt;p&gt;It combines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a flexible runtime&lt;/li&gt;
&lt;li&gt;an auto-versioning deployment engine&lt;/li&gt;
&lt;li&gt;a unified module &amp;amp; plugin ecosystem&lt;/li&gt;
&lt;li&gt;a powerful real-time playground&lt;/li&gt;
&lt;li&gt;and several developer experience innovations…&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…into a single, elegant platform.&lt;/p&gt;

&lt;p&gt;You write &lt;strong&gt;simple TypeScript handlers&lt;/strong&gt;.&lt;br&gt;
Gati handles &lt;strong&gt;everything else&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No YAML.&lt;br&gt;
No pipelines.&lt;br&gt;
No infra chaos.&lt;br&gt;
No downtime.&lt;br&gt;
No backward-incompatible deployments.&lt;/p&gt;

&lt;p&gt;Just &lt;strong&gt;code → deploy → evolve&lt;/strong&gt;.&lt;/p&gt;


&lt;h1&gt;
  
  
  🧠 &lt;strong&gt;Why Gati?&lt;/strong&gt;
&lt;/h1&gt;
&lt;h2&gt;
  
  
  1. Zero-Ops Backend
&lt;/h2&gt;

&lt;p&gt;Forget DevOps ceremonies.&lt;br&gt;
Gati takes raw source code and automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;watches your code&lt;/li&gt;
&lt;li&gt;analyzes changes&lt;/li&gt;
&lt;li&gt;generates schemas, manifests &amp;amp; types&lt;/li&gt;
&lt;li&gt;spins up versions&lt;/li&gt;
&lt;li&gt;manages rolling updates&lt;/li&gt;
&lt;li&gt;drains old API versions&lt;/li&gt;
&lt;li&gt;deploys with zero downtime&lt;/li&gt;
&lt;li&gt;updates your cloud infrastructure&lt;/li&gt;
&lt;li&gt;syncs everything with your Gati Cloud account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A single &lt;code&gt;gati deploy&lt;/code&gt; is all you need.&lt;/p&gt;


&lt;h2&gt;
  
  
  2. Timescape — API Versioning Solved Forever
&lt;/h2&gt;

&lt;p&gt;Classic versioning is painful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Breaking changes break clients&lt;/li&gt;
&lt;li&gt;You must maintain v1, v2, v3… manually&lt;/li&gt;
&lt;li&gt;Deprecation is slow or impossible&lt;/li&gt;
&lt;li&gt;Rollouts risk production downtime&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Timescape changes the rules.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Timescape automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;detects breaking changes&lt;/li&gt;
&lt;li&gt;creates versioned handler copies&lt;/li&gt;
&lt;li&gt;handles traffic per-version&lt;/li&gt;
&lt;li&gt;drains old versions safely&lt;/li&gt;
&lt;li&gt;generates transformers for backward compatibility&lt;/li&gt;
&lt;li&gt;decommissions versions when no clients use them&lt;/li&gt;
&lt;li&gt;logs evolution visually in the playground&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your API evolves &lt;strong&gt;smoothly, safely, endlessly&lt;/strong&gt; — without breaking existing clients.&lt;/p&gt;

&lt;p&gt;This is backend evolution done right.&lt;/p&gt;


&lt;h2&gt;
  
  
  3. Local &amp;amp; Global Context — Clean, Functional DX
&lt;/h2&gt;

&lt;p&gt;Gati provides a beautifully simple handler signature:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handler&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="nx"&gt;lctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;gctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// your logic goes here&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;lctx&lt;/code&gt; = per-request state &amp;amp; lifecycle hooks&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gctx&lt;/code&gt; = global modules, caches, DBs, queues &amp;amp; plugin APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No decorators.&lt;br&gt;
No magic.&lt;br&gt;
No framework-heavy abstractions.&lt;/p&gt;

&lt;p&gt;Just functional, readable, TypeScript-native code.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Modular Architecture — Polyglot by Design
&lt;/h2&gt;

&lt;p&gt;Everything in Gati is a &lt;strong&gt;module&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;database clients&lt;/li&gt;
&lt;li&gt;queue drivers&lt;/li&gt;
&lt;li&gt;AI models&lt;/li&gt;
&lt;li&gt;caching layers&lt;/li&gt;
&lt;li&gt;external API connectors&lt;/li&gt;
&lt;li&gt;WASM functions&lt;/li&gt;
&lt;li&gt;Node modules&lt;/li&gt;
&lt;li&gt;Docker images&lt;/li&gt;
&lt;li&gt;even binary executables&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modules are isolated, polyglot, typed, and hot-swappable.&lt;/p&gt;

&lt;p&gt;You can share modules through the upcoming &lt;strong&gt;Gati Registry&lt;/strong&gt; — and monetize them.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Plugin Ecosystem — Extend the Runtime
&lt;/h2&gt;

&lt;p&gt;Plugins can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;add new types, validators &amp;amp; transformers&lt;/li&gt;
&lt;li&gt;define new module clients&lt;/li&gt;
&lt;li&gt;inject before/after hooks&lt;/li&gt;
&lt;li&gt;integrate with AI tools&lt;/li&gt;
&lt;li&gt;enhance observability&lt;/li&gt;
&lt;li&gt;add new cloud providers&lt;/li&gt;
&lt;li&gt;add authentication frameworks&lt;/li&gt;
&lt;li&gt;add gateways, queues, caches, databases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the best part:&lt;br&gt;
Anyone can publish plugins — making Gati a community-driven ecosystem like npm, but purpose-built for backend development.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Gati Playground — See Your Backend
&lt;/h2&gt;

&lt;p&gt;Backend development has always been dark and opaque.&lt;br&gt;
Gati brings &lt;strong&gt;first-class visual observability&lt;/strong&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔ API Studio
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Test APIs&lt;/li&gt;
&lt;li&gt;Run load/stress tests&lt;/li&gt;
&lt;li&gt;Generate TS/JS SDKs&lt;/li&gt;
&lt;li&gt;Manage mock datasets&lt;/li&gt;
&lt;li&gt;Explore versioned APIs&lt;/li&gt;
&lt;li&gt;See schema diffs&lt;/li&gt;
&lt;li&gt;Replay request flows&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✔ Network Mode (2D Visualization)
&lt;/h3&gt;

&lt;p&gt;See real-time traffic flowing through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ingress&lt;/li&gt;
&lt;li&gt;version routers&lt;/li&gt;
&lt;li&gt;handlers&lt;/li&gt;
&lt;li&gt;modules&lt;/li&gt;
&lt;li&gt;plugins&lt;/li&gt;
&lt;li&gt;queues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With latency, health &amp;amp; throughput highlighted visually.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔ Lifecycle Mode (3D Tracing)
&lt;/h3&gt;

&lt;p&gt;Walk through a single request in 3D:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;every handler&lt;/li&gt;
&lt;li&gt;every hook&lt;/li&gt;
&lt;li&gt;every module call&lt;/li&gt;
&lt;li&gt;every internal event&lt;/li&gt;
&lt;li&gt;snapshots &amp;amp; state transitions&lt;/li&gt;
&lt;li&gt;debug gates to pause mid-flight&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s like Chrome DevTools…&lt;br&gt;
but for distributed backend systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Gati Registry — The Backend App Store
&lt;/h2&gt;

&lt;p&gt;Gati Registry (coming soon) will host:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modules&lt;/li&gt;
&lt;li&gt;Plugins&lt;/li&gt;
&lt;li&gt;AI models&lt;/li&gt;
&lt;li&gt;Agents&lt;/li&gt;
&lt;li&gt;Starters &amp;amp; templates&lt;/li&gt;
&lt;li&gt;Versioned manifests&lt;/li&gt;
&lt;li&gt;Pricing tiers&lt;/li&gt;
&lt;li&gt;Marketplace &amp;amp; revenue-sharing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Imagine:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“npm, Docker Hub, HuggingFace, and Terraform registry — combined, but designed specifically for backend apps.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s the Gati Registry.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. AI-Enabled Backend Development
&lt;/h2&gt;

&lt;p&gt;Gati is built for the AI era:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI agents can be plugged into runtime&lt;/li&gt;
&lt;li&gt;Agents can observe requests and act&lt;/li&gt;
&lt;li&gt;Models can run inside modules via WASM or containers&lt;/li&gt;
&lt;li&gt;Auto-migration tools can assist Express.js/NestJS projects&lt;/li&gt;
&lt;li&gt;Playground integrates tracing + LLM explanations&lt;/li&gt;
&lt;li&gt;Auto-generated transformers for backward compatibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gati is not just AI-friendly —&lt;br&gt;
it is &lt;strong&gt;AI-native&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  💡 &lt;strong&gt;Who is Gati for?&lt;/strong&gt;
&lt;/h1&gt;

&lt;h3&gt;
  
  
  🧑‍💻 Solo Developers
&lt;/h3&gt;

&lt;p&gt;Ship production backends with zero DevOps.&lt;br&gt;
Focus entirely on product &amp;amp; users.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 Startups
&lt;/h3&gt;

&lt;p&gt;Move fast without breaking production.&lt;br&gt;
Iterate APIs without fear.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧩 Agencies / Service Companies
&lt;/h3&gt;

&lt;p&gt;Build and deploy dozens of backends reliably and consistently.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⛏️ Enterprise Teams
&lt;/h3&gt;

&lt;p&gt;Gain visibility, reliability, stronger contracts, and multi-cloud portability.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧬 AI Developers
&lt;/h3&gt;

&lt;p&gt;Deploy AI inference modules, agents, and models without infrastructure overhead.&lt;/p&gt;

&lt;h3&gt;
  
  
  🗃️ Open Source Contributors
&lt;/h3&gt;

&lt;p&gt;Help build core modules, plugins, models — or earn on the marketplace.&lt;/p&gt;




&lt;h1&gt;
  
  
  🔥 &lt;strong&gt;What makes Gati different?&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Most frameworks solve "backend functionality."&lt;br&gt;
Gati solves &lt;strong&gt;backend evolution&lt;/strong&gt;, &lt;strong&gt;observability&lt;/strong&gt;, and &lt;strong&gt;zero-ops deployment&lt;/strong&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Gati&lt;/th&gt;
&lt;th&gt;Express&lt;/th&gt;
&lt;th&gt;NestJS&lt;/th&gt;
&lt;th&gt;FastAPI&lt;/th&gt;
&lt;th&gt;Firebase&lt;/th&gt;
&lt;th&gt;Supabase&lt;/th&gt;
&lt;th&gt;AWS CDK&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Zero-Ops Deployment&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automatic API Versioning&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auto Schema Diff / Transformers&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Polyglot Modules&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visual Network Playground&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unified Request Lifecycle&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plugin Ecosystem&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI-Native Integrations&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Gati is not just another backend framework.&lt;br&gt;
It is a &lt;strong&gt;backend development platform&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  🌍 &lt;strong&gt;The Future of Gati&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Here’s what’s coming next:&lt;/p&gt;

&lt;h3&gt;
  
  
  🏗️ Gati Dev Cloud
&lt;/h3&gt;

&lt;p&gt;Deploy anywhere — Gati Cloud, AWS, GCP, Azure, DigitalOcean — using a single login experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧱 Gati Registry
&lt;/h3&gt;

&lt;p&gt;Modules, plugins, AI models, agents, templates — free and commercial.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ Gati Studio
&lt;/h3&gt;

&lt;p&gt;Official desktop IDE plugins&lt;br&gt;
VSCode integration&lt;br&gt;
Schema autocomplete&lt;br&gt;
Playground built-in&lt;br&gt;
Real-time debugging&lt;/p&gt;

&lt;h3&gt;
  
  
  🧬 AI-assisted migration tools
&lt;/h3&gt;

&lt;p&gt;Auto-migrate Express, NestJS, Django, FastAPI into Gati handlers.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔗 Multi-runtime backend
&lt;/h3&gt;

&lt;p&gt;Core runtime available in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Rust&lt;/li&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks to language-neutral contracts.&lt;/p&gt;




&lt;h1&gt;
  
  
  🏁 &lt;strong&gt;Conclusion — A Backend That Evolves With You&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Gati is designed to make backend development:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fast&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Safe&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fun&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modular&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI-powered&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero-Ops&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It lets you &lt;strong&gt;ship without fear&lt;/strong&gt;, iterate faster than ever, and build production-grade systems without an army of DevOps engineers.&lt;/p&gt;

&lt;p&gt;Gati’s philosophy:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Developers should write logic, not infrastructure.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If that resonates with you —&lt;br&gt;
&lt;strong&gt;welcome to the next generation of backend development.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;More is coming soon.&lt;br&gt;
Stay tuned — and stay fast. ⚡&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>microservices</category>
      <category>cloudnative</category>
      <category>news</category>
    </item>
    <item>
      <title>Introducing Gati: The Backend That Builds, Scales, and Evolves Itself</title>
      <dc:creator>Krishna Paul</dc:creator>
      <pubDate>Sat, 22 Nov 2025 17:17:38 +0000</pubDate>
      <link>https://dev.to/krishnapaul/introducing-gati-the-backend-that-builds-scales-and-evolves-itself-1165</link>
      <guid>https://dev.to/krishnapaul/introducing-gati-the-backend-that-builds-scales-and-evolves-itself-1165</guid>
      <description>&lt;h2&gt;
  
  
  Introducing Gati: The Backend That Builds, Scales, and Evolves Itself
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Gati is a next-generation TypeScript framework that eliminates infrastructure complexity. Write handlers, deploy to Kubernetes, and let the framework handle routing, scaling, versioning, and cloud infrastructure automatically. M1 and M2 are complete, and we're now live on npm! 🎉&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem We're Solving
&lt;/h2&gt;

&lt;p&gt;Modern backend development is powerful, but painful. Developers spend more time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔧 Fighting infrastructure and deployment pipelines&lt;/li&gt;
&lt;li&gt;📝 Writing boilerplate for routing, middleware, and validation&lt;/li&gt;
&lt;li&gt;🐛 Debugging version conflicts and breaking changes&lt;/li&gt;
&lt;li&gt;☁️ Wrestling with DevOps, Docker, and Kubernetes&lt;/li&gt;
&lt;li&gt;🔄 Maintaining backward compatibility manually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...than actually building features that matter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if your backend could handle all of this automatically?&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Meet Gati
&lt;/h2&gt;

&lt;p&gt;Gati (Sanskrit: गति, meaning "motion" or "progress") is a TypeScript framework that takes the chaotic world of distributed systems, deployment pipelines, API versioning, and scaling—and transforms it into something &lt;strong&gt;automated, intelligent, and developer-first&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Core Philosophy
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// That's it—just write your handler&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;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;gctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lctx&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="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;gctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;modules&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;db&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findById&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="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;user&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// ✅ Automatically available at /api/users/:id&lt;/span&gt;
&lt;span class="c1"&gt;// ✅ Auto-scales with Kubernetes&lt;/span&gt;
&lt;span class="c1"&gt;// ✅ Type-safe with full IntelliSense&lt;/span&gt;
&lt;span class="c1"&gt;// ✅ Hot reload in development&lt;/span&gt;
&lt;span class="c1"&gt;// ✅ Production-ready deployment&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Let developers write business logic. Let Gati handle everything else.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What Makes Gati Different?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🧠 Business Logic Only
&lt;/h3&gt;

&lt;p&gt;No more infrastructure code. No Docker files. No Kubernetes manifests. No CI/CD pipelines. Just write handlers, and Gati generates everything else.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/handlers/posts/[id].ts&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;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;gctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lctx&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="nx"&gt;post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;gctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;modules&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;db&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findById&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="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;post&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;That's it. Gati handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File-based routing&lt;/li&gt;
&lt;li&gt;Request validation&lt;/li&gt;
&lt;li&gt;Error handling&lt;/li&gt;
&lt;li&gt;Logging and tracing&lt;/li&gt;
&lt;li&gt;Deployment manifests&lt;/li&gt;
&lt;li&gt;Auto-scaling policies&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📦 Cloud-Pluggable Architecture
&lt;/h3&gt;

&lt;p&gt;Deploy anywhere with zero configuration changes:&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;# Deploy to local Kubernetes&lt;/span&gt;
gati deploy dev &lt;span class="nt"&gt;--local&lt;/span&gt;

&lt;span class="c"&gt;# Deploy to AWS EKS&lt;/span&gt;
gati deploy prod &lt;span class="nt"&gt;--cloud&lt;/span&gt; aws

&lt;span class="c"&gt;# Deploy to GCP GKE&lt;/span&gt;
gati deploy prod &lt;span class="nt"&gt;--cloud&lt;/span&gt; gcp

&lt;span class="c"&gt;# Deploy to Azure AKS&lt;/span&gt;
gati deploy prod &lt;span class="nt"&gt;--cloud&lt;/span&gt; azure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One command. Any cloud. Zero DevOps.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ Lightning-Fast Development
&lt;/h3&gt;

&lt;p&gt;Hot reload in &lt;strong&gt;50-200ms&lt;/strong&gt;. Change your code, see it live instantly.&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 development server&lt;/span&gt;
pnpm dev

&lt;span class="c"&gt;# Changes reflect in &amp;lt; 200ms&lt;/span&gt;
&lt;span class="c"&gt;# No restart needed&lt;/span&gt;
&lt;span class="c"&gt;# Full type safety maintained&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎮 Visual Debugging
&lt;/h3&gt;

&lt;p&gt;Built-in Playground with three visualization modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API Mode&lt;/strong&gt; — Postman on steroids with version switching&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network Mode&lt;/strong&gt; — 2D map of your distributed backend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tracking Mode&lt;/strong&gt; — 3D visualization of request lifecycle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Debug your backend like never before.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔄 API Versioning (Coming M3)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Timescape&lt;/strong&gt; will revolutionize API versioning:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Ship breaking changes without fear&lt;/span&gt;
&lt;span class="c1"&gt;// Old clients continue working&lt;/span&gt;
&lt;span class="c1"&gt;// New clients get new features&lt;/span&gt;
&lt;span class="c1"&gt;// Automatic data transformations&lt;/span&gt;
&lt;span class="c1"&gt;// Zero-downtime deployments&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;"I want the API as it was last Friday" → Just works.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Available Today?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ M1 &amp;amp; M2 Complete (November 2025)
&lt;/h3&gt;

&lt;p&gt;We've shipped a production-ready foundation:&lt;/p&gt;

&lt;h4&gt;
  
  
  Core Runtime
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Handler execution engine&lt;/li&gt;
&lt;li&gt;File-based routing with auto-discovery&lt;/li&gt;
&lt;li&gt;Global and local context management&lt;/li&gt;
&lt;li&gt;Module system for reusable logic&lt;/li&gt;
&lt;li&gt;Middleware pipeline&lt;/li&gt;
&lt;li&gt;Structured logging (Pino)&lt;/li&gt;
&lt;li&gt;Request tracing&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Development Experience
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Project scaffolding with &lt;code&gt;npx gatic create&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Hot reload (50-200ms)&lt;/li&gt;
&lt;li&gt;Development server&lt;/li&gt;
&lt;li&gt;TypeScript-first with full type safety&lt;/li&gt;
&lt;li&gt;Comprehensive error handling&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Deployment
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Local Kubernetes (kind)&lt;/li&gt;
&lt;li&gt;AWS EKS deployment&lt;/li&gt;
&lt;li&gt;GCP GKE deployment&lt;/li&gt;
&lt;li&gt;Azure AKS deployment&lt;/li&gt;
&lt;li&gt;Auto-scaling (HPA)&lt;/li&gt;
&lt;li&gt;Load balancing (Ingress)&lt;/li&gt;
&lt;li&gt;Health checks&lt;/li&gt;
&lt;li&gt;Rolling updates&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Infrastructure
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Automated CI/CD pipeline&lt;/li&gt;
&lt;li&gt;npm publishing workflow&lt;/li&gt;
&lt;li&gt;Documentation deployment&lt;/li&gt;
&lt;li&gt;Comprehensive test suite&lt;/li&gt;
&lt;li&gt;9 packages published to npm&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📦 Published Packages
&lt;/h3&gt;

&lt;p&gt;All packages are live on npm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;@gati-framework/core&lt;/code&gt; - Core types and configuration&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@gati-framework/runtime&lt;/code&gt; - Runtime execution engine&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@gati-framework/cli&lt;/code&gt; - Development and deployment tools&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gatic&lt;/code&gt; - Project scaffolding command&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@gati-framework/cloud-aws&lt;/code&gt; - AWS EKS deployment&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@gati-framework/cloud-gcp&lt;/code&gt; - GCP GKE deployment&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@gati-framework/cloud-azure&lt;/code&gt; - Azure AKS deployment&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@gati-framework/playground&lt;/code&gt; - Visual debugging interface&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Get Started in 5 Minutes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Create Your First Gati App
&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;# Create a new project&lt;/span&gt;
npx gatic create my-app

&lt;span class="c"&gt;# Navigate to your project&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;my-app

&lt;span class="c"&gt;# Start development server&lt;/span&gt;
pnpm dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your API is now running at &lt;code&gt;http://localhost:3000&lt;/code&gt; 🎉&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Write Your First Handler
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/handlers/hello.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Handler&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;@gati-framework/runtime&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&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;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Handler&lt;/span&gt; &lt;span class="o"&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="nx"&gt;gctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lctx&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="nx"&gt;name&lt;/span&gt; &lt;span class="o"&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;query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;World&lt;/span&gt;&lt;span class="dl"&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="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Hello, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&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;Available at: &lt;code&gt;GET /api/hello?name=Gati&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Deploy to Kubernetes
&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;# Deploy to local Kubernetes cluster&lt;/span&gt;
gati deploy dev &lt;span class="nt"&gt;--local&lt;/span&gt;

&lt;span class="c"&gt;# Your API is now running in Kubernetes!&lt;/span&gt;
&lt;span class="c"&gt;# With auto-scaling, health checks, and monitoring&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. You're production-ready.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Coming Next?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🚧 M3 - Timescape &amp;amp; Type System (November 2025) - IN PROGRESS
&lt;/h3&gt;

&lt;p&gt;I'm currently working on the revolutionary API versioning and type system:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Timescape Versioning:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Timestamp-based version routing&lt;/li&gt;
&lt;li&gt;Automatic schema diffing&lt;/li&gt;
&lt;li&gt;Bidirectional data transformers&lt;/li&gt;
&lt;li&gt;Parallel version execution&lt;/li&gt;
&lt;li&gt;Zero-downtime version deployments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Module System:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enhanced module contracts&lt;/li&gt;
&lt;li&gt;Module interfaces and types&lt;/li&gt;
&lt;li&gt;Dependency management&lt;/li&gt;
&lt;li&gt;Isolated module execution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Type System:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Branded types with constraints&lt;/li&gt;
&lt;li&gt;Contract-based validation&lt;/li&gt;
&lt;li&gt;Runtime type checking&lt;/li&gt;
&lt;li&gt;Schema generation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ship breaking changes without fear.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🔌 M4 - Module Registry &amp;amp; Marketplace (February 2026)
&lt;/h3&gt;

&lt;p&gt;Public module registry and marketplace for sharing and discovering modules:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module Registry:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Public npm-like registry for Gati modules&lt;/li&gt;
&lt;li&gt;Semantic versioning&lt;/li&gt;
&lt;li&gt;Dependency resolution&lt;/li&gt;
&lt;li&gt;Module discovery and search&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Marketplace:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browse and install community modules&lt;/li&gt;
&lt;li&gt;Module ratings and reviews&lt;/li&gt;
&lt;li&gt;Usage statistics&lt;/li&gt;
&lt;li&gt;Revenue sharing for module authors (70/30 split)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Module Types:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Database connectors (PostgreSQL, MongoDB, MySQL, etc.)&lt;/li&gt;
&lt;li&gt;Authentication providers (OAuth, JWT, SAML, etc.)&lt;/li&gt;
&lt;li&gt;Cache systems (Redis, Memcached, etc.)&lt;/li&gt;
&lt;li&gt;Queue systems (RabbitMQ, Kafka, etc.)&lt;/li&gt;
&lt;li&gt;AI/ML integrations (OpenAI, Anthropic, etc.)&lt;/li&gt;
&lt;li&gt;Custom business logic modules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Install modules like npm packages:&lt;/strong&gt;&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;# Install a database module&lt;/span&gt;
gati module &lt;span class="nb"&gt;install&lt;/span&gt; @gati-modules/postgres

&lt;span class="c"&gt;# Install an auth module&lt;/span&gt;
gati module &lt;span class="nb"&gt;install&lt;/span&gt; @gati-modules/oauth

&lt;span class="c"&gt;# Search for modules&lt;/span&gt;
gati module search redis
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Build and publish your own modules, earn from the marketplace!&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📊 M5 - Control Panel (Q1 2026)
&lt;/h3&gt;

&lt;p&gt;Live monitoring and configuration dashboard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time metrics and logs&lt;/li&gt;
&lt;li&gt;Configuration management&lt;/li&gt;
&lt;li&gt;Version management&lt;/li&gt;
&lt;li&gt;Deployment controls&lt;/li&gt;
&lt;li&gt;Performance insights&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Observe and control your backend visually.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ M6 - SDK Generation (Q1 2026)
&lt;/h3&gt;

&lt;p&gt;Auto-generated typed clients:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gati generate sdk &lt;span class="nt"&gt;--platform&lt;/span&gt; typescript
gati generate sdk &lt;span class="nt"&gt;--platform&lt;/span&gt; python
gati generate sdk &lt;span class="nt"&gt;--platform&lt;/span&gt; go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Type-safe clients for any platform, automatically.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ☁️ M7 - CDN &amp;amp; SSL (Q2 2026)
&lt;/h3&gt;

&lt;p&gt;Global distribution and security:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatic CDN integration&lt;/li&gt;
&lt;li&gt;SSL/TLS provisioning&lt;/li&gt;
&lt;li&gt;Multi-region deployment&lt;/li&gt;
&lt;li&gt;Edge caching&lt;/li&gt;
&lt;li&gt;DDoS protection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Global scale, zero configuration.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Built Gati
&lt;/h2&gt;

&lt;p&gt;As a developer, I was tired of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spending 70% of my time on infrastructure&lt;/li&gt;
&lt;li&gt;Fearing API changes that might break production&lt;/li&gt;
&lt;li&gt;Writing the same boilerplate over and over&lt;/li&gt;
&lt;li&gt;Fighting with Docker, Kubernetes, and cloud providers&lt;/li&gt;
&lt;li&gt;Maintaining complex CI/CD pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;I wanted to focus on building features, not fighting infrastructure.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gati is my answer. A framework that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Understands your code&lt;/strong&gt; and generates everything else&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handles versioning&lt;/strong&gt; so you can ship fearlessly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploys anywhere&lt;/strong&gt; with zero configuration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scales automatically&lt;/strong&gt; based on demand&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Provides visibility&lt;/strong&gt; into every request&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Real-World Example
&lt;/h2&gt;

&lt;p&gt;Here's a complete user management API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/handlers/users/index.ts&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;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;gctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lctx&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="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;gctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;modules&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;db&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;users&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="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;users&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// src/handlers/users/[id].ts&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;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;gctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lctx&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="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;gctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;modules&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;db&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findById&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="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;user&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="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;404&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="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User not found&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;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;user&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// src/handlers/users/create.ts&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;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;gctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lctx&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="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;gctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;modules&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;db&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;users&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="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;201&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;user&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;&lt;strong&gt;That's it.&lt;/strong&gt; Three files. Zero configuration. Production-ready.&lt;/p&gt;

&lt;p&gt;Gati automatically provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Routes: &lt;code&gt;GET /api/users&lt;/code&gt;, &lt;code&gt;GET /api/users/:id&lt;/code&gt;, &lt;code&gt;POST /api/users/create&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;✅ Request validation&lt;/li&gt;
&lt;li&gt;✅ Error handling&lt;/li&gt;
&lt;li&gt;✅ Logging and tracing&lt;/li&gt;
&lt;li&gt;✅ Auto-scaling&lt;/li&gt;
&lt;li&gt;✅ Health checks&lt;/li&gt;
&lt;li&gt;✅ Deployment manifests&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Community &amp;amp; Open Source
&lt;/h2&gt;

&lt;p&gt;Gati is &lt;strong&gt;MIT licensed&lt;/strong&gt; and open source. As a solo developer, I'm building this in the open and &lt;strong&gt;actively looking for contributors and testers&lt;/strong&gt;!&lt;/p&gt;

&lt;h3&gt;
  
  
  I Believe In
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🌍 &lt;strong&gt;Community-driven development&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;📖 &lt;strong&gt;Comprehensive documentation&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🤝 &lt;strong&gt;Welcoming contributors&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;Rapid iteration&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;💡 &lt;strong&gt;Transparent roadmap&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How You Can Help
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;I'm looking for:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧪 &lt;strong&gt;Beta Testers&lt;/strong&gt; - Try Gati in your projects and share feedback&lt;/li&gt;
&lt;li&gt;👨‍💻 &lt;strong&gt;Contributors&lt;/strong&gt; - Help build M3 features (Timescape, modules, types)&lt;/li&gt;
&lt;li&gt;📚 &lt;strong&gt;Technical Writers&lt;/strong&gt; - Improve documentation and tutorials&lt;/li&gt;
&lt;li&gt;🎨 &lt;strong&gt;Designers&lt;/strong&gt; - UI/UX for the upcoming Control Panel&lt;/li&gt;
&lt;li&gt;🌍 &lt;strong&gt;Community Builders&lt;/strong&gt; - Help spread the word&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Get Involved
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;⭐ &lt;a href="https://github.com/krishnapaul242/gati" rel="noopener noreferrer"&gt;Star on GitHub&lt;/a&gt; - Show your support&lt;/li&gt;
&lt;li&gt;📖 &lt;a href="https://krishnapaul242.github.io/gati/" rel="noopener noreferrer"&gt;Read the docs&lt;/a&gt; - Learn how to use Gati&lt;/li&gt;
&lt;li&gt;💬 &lt;a href="https://github.com/krishnapaul242/gati/discussions" rel="noopener noreferrer"&gt;Join discussions&lt;/a&gt; - Share ideas&lt;/li&gt;
&lt;li&gt;🐛 &lt;a href="https://github.com/krishnapaul242/gati/issues" rel="noopener noreferrer"&gt;Report issues&lt;/a&gt; - Help improve quality&lt;/li&gt;
&lt;li&gt;🤝 &lt;a href="https://krishnapaul242.github.io/gati/contributing/" rel="noopener noreferrer"&gt;Contribute&lt;/a&gt; - Build with me&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Every contribution matters!&lt;/strong&gt; Whether it's code, docs, testing, or just spreading the word - I appreciate all help.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Vision
&lt;/h2&gt;

&lt;p&gt;My goal is to make Gati &lt;strong&gt;the backend framework that builds, scales, and evolves itself&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I'm building a future where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Developers write only business logic&lt;/li&gt;
&lt;li&gt;✅ APIs never break (Timescape - coming Nov 2025)&lt;/li&gt;
&lt;li&gt;✅ Deployment is one command&lt;/li&gt;
&lt;li&gt;✅ Scaling is automatic&lt;/li&gt;
&lt;li&gt;✅ Monitoring is visual&lt;/li&gt;
&lt;li&gt;✅ Infrastructure is invisible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Backend development should be about solving problems, not fighting tools.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Current Progress
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;M1 Complete&lt;/strong&gt; - Core runtime and handler engine&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;M2 Complete&lt;/strong&gt; - Cloud deployment and CI/CD&lt;/li&gt;
&lt;li&gt;🚧 &lt;strong&gt;M3 In Progress&lt;/strong&gt; - Timescape, modules, and type system (Nov 2025)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Want to be part of this journey?&lt;/strong&gt; I'm looking for contributors!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more about the Module Registry:&lt;/strong&gt; &lt;a href="https://github.com/krishnapaul242/gati/tree/main/apps/gati-registry" rel="noopener noreferrer"&gt;Gati Registry Documentation&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try Gati Today
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Get started in 5 minutes&lt;/span&gt;
npx gatic create my-app
&lt;span class="nb"&gt;cd &lt;/span&gt;my-app
pnpm dev

&lt;span class="c"&gt;# Deploy to Kubernetes&lt;/span&gt;
gati deploy dev &lt;span class="nt"&gt;--local&lt;/span&gt;

&lt;span class="c"&gt;# You're production-ready! 🚀&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Resources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;📖 &lt;strong&gt;Documentation:&lt;/strong&gt; &lt;a href="https://krishnapaul242.github.io/gati/" rel="noopener noreferrer"&gt;krishnapaul242.github.io/gati&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💻 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/krishnapaul242/gati" rel="noopener noreferrer"&gt;github.com/krishnapaul242/gati&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;npm:&lt;/strong&gt; &lt;a href="https://www.npmjs.com/org/gati-framework" rel="noopener noreferrer"&gt;@gati-framework&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;Discussions:&lt;/strong&gt; &lt;a href="https://github.com/krishnapaul242/gati/discussions" rel="noopener noreferrer"&gt;GitHub Discussions&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Community Support
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/krishnapaul242/gati/stargazers" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fgithub%2Fstars%2Fkrishnapaul242%2Fgati%3Fstyle%3Dsocial" alt="GitHub stars" width="76" height="20"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;See who's supporting Gati: &lt;a href="https://github.com/krishnapaul242/gati/stargazers" rel="noopener noreferrer"&gt;View Stargazers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Be part of the community!&lt;/strong&gt; Star the repo to show your support and stay updated.&lt;/p&gt;




&lt;h2&gt;
  
  
  Join Me on This Journey
&lt;/h2&gt;

&lt;p&gt;Backend development is changing. Infrastructure is becoming invisible. Deployment is becoming automatic. APIs are becoming unbreakable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'm building Gati to lead this transformation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As a solo developer, I'm just getting started, and I'd love for you to be part of this journey.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Get Started
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🚀 &lt;strong&gt;Try Gati&lt;/strong&gt; - Build something with it&lt;/li&gt;
&lt;li&gt;⭐ &lt;strong&gt;&lt;a href="https://github.com/krishnapaul242/gati/stargazers" rel="noopener noreferrer"&gt;Star on GitHub&lt;/a&gt;&lt;/strong&gt; - Show your support&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;Share feedback&lt;/strong&gt; - Tell me what you think&lt;/li&gt;
&lt;li&gt;🤝 &lt;strong&gt;Contribute&lt;/strong&gt; - Help build features&lt;/li&gt;
&lt;li&gt;📢 &lt;strong&gt;Spread the word&lt;/strong&gt; - Tell other developers&lt;/li&gt;
&lt;li&gt;🧪 &lt;strong&gt;Beta test&lt;/strong&gt; - Try M3 features when ready&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Together, we can build the future of backend development.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Special Call for Contributors
&lt;/h3&gt;

&lt;p&gt;I'm actively working on &lt;strong&gt;M3 (Timescape &amp;amp; Type System)&lt;/strong&gt; and would love help with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Testing Timescape versioning features&lt;/li&gt;
&lt;li&gt;Building module system components&lt;/li&gt;
&lt;li&gt;Implementing type system contracts&lt;/li&gt;
&lt;li&gt;Writing documentation and examples&lt;/li&gt;
&lt;li&gt;Designing the Module Registry UI (Feb 2026)&lt;/li&gt;
&lt;li&gt;Designing the Control Panel UI (Q1 2026)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Interested?&lt;/strong&gt; Reach out via &lt;a href="https://github.com/krishnapaul242/gati/discussions" rel="noopener noreferrer"&gt;GitHub Discussions&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module Registry Specs:&lt;/strong&gt; &lt;a href="https://github.com/krishnapaul242/gati/tree/main/apps/gati-registry" rel="noopener noreferrer"&gt;apps/gati-registry&lt;/a&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>microservices</category>
      <category>cloudnative</category>
      <category>news</category>
    </item>
    <item>
      <title>Managing Access Tokens in React or React Native with Axios and Context API.</title>
      <dc:creator>Krishna Paul</dc:creator>
      <pubDate>Sat, 19 Feb 2022 11:50:56 +0000</pubDate>
      <link>https://dev.to/krishnapaul/managing-access-tokens-in-react-or-react-native-with-axios-and-context-api-4104</link>
      <guid>https://dev.to/krishnapaul/managing-access-tokens-in-react-or-react-native-with-axios-and-context-api-4104</guid>
      <description>&lt;p&gt;When I started developing Stateful Applications in React or React Native, I had to balance the ease of development as well as usefulness of the functionality while dealing with the statefulness especially while calling APIs.&lt;br&gt;
I started with using redux and it was easy but with extra boilerplate code to be written with it. Here comes Context API, I have not used Context API before. However, for this application, it seems perfect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits of using this approach&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Less code to write, less code to be tested, less prone to errors.&lt;/li&gt;
&lt;li&gt;The main changes happens at only one place.&lt;/li&gt;
&lt;li&gt;Ability to cover more functionalities.&lt;/li&gt;
&lt;li&gt;Faster than redux approach.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Limitations of using this approach&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Code newbies might have hard time understanding it at first.&lt;/li&gt;
&lt;li&gt;Some scenarios might be difficult to debug.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Process&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create and export a function which manipulates default axios options.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&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;HOST&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.example.com/v1&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;basicToken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cGXysWJlcJhdsSJdIUP873mVzaFYxLTEyM1NlY3JldA&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&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;configureAxiosHeaders&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;basicToken&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaults&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;baseURL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;HOST&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaults&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;common&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bearer &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaults&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;common&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/x-www-form-urlencoded&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Configured Axios&lt;/span&gt;&lt;span class="dl"&gt;"&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;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&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;ol&gt;
&lt;li&gt;Create a React Context.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEffect&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="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;AsyncStorage&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@react-native-async-storage/async-storage&lt;/span&gt;&lt;span class="dl"&gt;"&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;TokenDetails&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="s2"&gt;../redux/slices/user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&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;configureAxiosHeaders&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="s2"&gt;../api/config&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;AuthContextProps&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TokenDetails&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;setAuth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TokenDetails&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&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;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// Create a context&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AuthContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createContext&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;AuthContextProps&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;auth&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="na"&gt;setAuth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&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;AuthProvider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FC&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;children&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;auth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setAuthState&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;TokenDetails&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&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="c1"&gt;// Get current auth state from AsyncStorage&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getAuthState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;authDataString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;AsyncStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;auth&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;authDataString&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;authDataString&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="na"&gt;authData&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TokenDetails&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;authDataString&lt;/span&gt; &lt;span class="o"&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;JSON&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="nx"&gt;authDataString&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&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="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;status&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
          &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;error_description&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
          &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;access_token&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
          &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;refresh_token&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;String&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="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;error_code&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
          &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user_id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
          &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;login_logid&lt;/span&gt;&lt;span class="dl"&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;parseInt&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="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;accessTokenExpiresAt&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
          &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;refreshTokenExpiresAt&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
          &lt;span class="nl"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&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="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;authDataString&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="c1"&gt;// Configure axios headers&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;authData&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;configureAxiosHeaders&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;authData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;access_token&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
          &lt;span class="nf"&gt;setAuthState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;authData&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
          &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;authData&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nf"&gt;setAuthState&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;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;authData is null&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="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Caught Auth Exception&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;setAuthState&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="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="c1"&gt;// Update AsyncStorage &amp;amp; context state&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;setAuth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TokenDetails&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&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;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Try Setting Authentication&lt;/span&gt;&lt;span class="dl"&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;auth&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Setting Authentication to null&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;AsyncStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;removeItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;auth&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;setAuthState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Set Authentication&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;auth&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;AsyncStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;auth&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
        &lt;span class="c1"&gt;// Configure axios headers&lt;/span&gt;
        &lt;span class="nf"&gt;configureAxiosHeaders&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;access_token&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;setAuthState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Setting done.&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="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Caught Auth Exception&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&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;getAuthState&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="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="nc"&gt;AuthContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setAuth&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="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;AuthContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&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;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;AuthContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;AuthProvider&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Using it in sign in page when sign in is successful.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;setAuth&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;calling this function will update the Context State and provide the state to other components. &lt;/p&gt;

&lt;p&gt;While in step 1, we have automatically have the state replaced when setAuth is called with new props. Due to the configuring of default axios options, it automatically use the latest available token provided in Auth Context State.&lt;/p&gt;

&lt;p&gt;That's all for today, I didn't explain the code in step 2 because the code is readable enough already.&lt;br&gt;
Thank You for reading this post.&lt;/p&gt;

</description>
      <category>react</category>
      <category>reactnative</category>
      <category>codenewbie</category>
      <category>security</category>
    </item>
    <item>
      <title>Managing freelance project as solo developer.</title>
      <dc:creator>Krishna Paul</dc:creator>
      <pubDate>Sun, 06 Dec 2020 16:33:09 +0000</pubDate>
      <link>https://dev.to/krishnapaul/managing-freelance-project-as-solo-developer-3i86</link>
      <guid>https://dev.to/krishnapaul/managing-freelance-project-as-solo-developer-3i86</guid>
      <description>&lt;p&gt;So, you convinced a client and bagged a project. You're really excited about this project and ready to dive into code.&lt;br&gt;
But wait, Hold your horses. Diving directly into code is not a good idea especially when you are new. &lt;/p&gt;

&lt;h3&gt;
  
  
  Here are some tips to start your project:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. &lt;strong&gt;Write a Project Proposal&lt;/strong&gt;:
&lt;/h4&gt;

&lt;p&gt;A project proposal is very important before beginning the coding. &lt;br&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Because it documents the deliverables, basic functionalities, estimated time, estimated cost and a description of the project. &lt;br&gt;
&lt;strong&gt;Any Problem here?&lt;/strong&gt; Yes, before specifying the deliverables, you must make sure you have the skills and tools to deliver those. We all learn continuously, but you should not promise something which you have never done before. Basic functionalities are tricky, some functionalities require much more effort than others. Try to keep them as level as you can. The most tricky part is estimation of cost and time. For this part, you need prior experience of something similar. Only then you could predict closely.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Prepare a basic structure of the project:
&lt;/h4&gt;

&lt;p&gt;You have to divide the project in multiple parts, where each part is independent as much as possible. Do this recursively to each part until you get file level granularity. &lt;br&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Because without such vision, your project would most likely fail to finish on time. &lt;br&gt;
&lt;strong&gt;Any Problems Here?&lt;/strong&gt; Yes, You would surely miss something (probably many things). Still, some vision is better than no vision. With such vision, future increments will be easier.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Always use source control:
&lt;/h4&gt;

&lt;p&gt;Whether you like GitHub, GitLab, Azure DevOps or some other service, but you should use source control. Always maintain a main/master branch where your code is properly tested and working. Do all other enhancement in another branch and merge on successful testing. &lt;br&gt;
&lt;strong&gt;Why?&lt;/strong&gt; If your code breaks on some change and you forgot the change, you will have something to fallback and start again. &lt;br&gt;
&lt;strong&gt;Any Problem Here?&lt;/strong&gt; Most of new developers find it to be unnecessary overhead. But if you really do it, it will help you out.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Use a Project Management Tool:
&lt;/h4&gt;

&lt;p&gt;Adding issues, assigning yourselves, working on them and closing them. This would look like waste of time at first. But this helps in the development a lot. &lt;br&gt;
&lt;strong&gt;How?&lt;/strong&gt; By tracking issues and continuously adding them, you can estimate the time and effort required in the project. Your knowledge about the timeline grows and you will be better equipped when the next project comes. &lt;br&gt;
&lt;strong&gt;Any Problems Here?&lt;/strong&gt; Keep the issues as unit as possible. Big features should be milestones and issues are the stepping stones to reach there.&lt;/p&gt;

&lt;p&gt;Solo development is difficult, you will loose the motivation sometimes, especially when you see no sign of progress. Hence, follow these tips to see the progress and the vision as well.&lt;/p&gt;

</description>
      <category>management</category>
      <category>productivity</category>
      <category>codenewbie</category>
      <category>cowboy</category>
    </item>
  </channel>
</rss>
