<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Home on Gaurav.dev</title><link>/</link><description>Recent content in Home on Gaurav.dev</description><generator>Hugo</generator><language>en-US</language><copyright>© 2026 Gaurav. Built with care and clean code.</copyright><lastBuildDate>Thu, 24 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="/index.xml" rel="self" type="application/rss+xml"/><item><title>How to Choose a Modern Web Stack Without Regretting It</title><link>/posts/choosing-modern-web-stack/</link><pubDate>Thu, 24 Sep 2026 00:00:00 +0000</pubDate><guid>/posts/choosing-modern-web-stack/</guid><description>&lt;p&gt;The best technology stack is rarely the one with the longest feature list. It is the one your team can operate confidently while the product changes around it.&lt;/p&gt;&#10;&lt;h2 id="start-with-constraints"&gt;Start with constraints&lt;/h2&gt;&#10;&lt;p&gt;Before comparing frameworks, write down the facts: expected traffic, search requirements, real-time behaviour, integrations, compliance, team experience, delivery date, and operating budget. These constraints eliminate more options than a benchmark ever will.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Next.js&lt;/strong&gt; is a strong default for content-rich products that also need application behaviour. It offers flexible rendering, a broad React ecosystem, and a straightforward path to full-stack TypeScript. Its flexibility also means the team must be disciplined about caching and server/client boundaries.&lt;/p&gt;</description></item><item><title>A Production Checklist for Next.js Applications</title><link>/posts/nextjs-production-checklist/</link><pubDate>Fri, 18 Sep 2026 00:00:00 +0000</pubDate><guid>/posts/nextjs-production-checklist/</guid><description>&lt;p&gt;A successful &lt;code&gt;next build&lt;/code&gt; proves that the application compiles. It does not prove that the product is ready for real users, crawlers, traffic spikes, or a difficult incident.&lt;/p&gt;&#10;&lt;h2 id="rendering-and-caching"&gt;Rendering and caching&lt;/h2&gt;&#10;&lt;p&gt;Confirm the rendering strategy for every important route. Static content should not become dynamic because a convenience API reads request state. Dynamic pages need explicit cache behaviour, and revalidation should match how quickly the underlying data can change. Test authenticated and anonymous paths separately.&lt;/p&gt;</description></item><item><title>Designing a Laravel API That Can Grow</title><link>/posts/laravel-api-at-scale/</link><pubDate>Sat, 12 Sep 2026 00:00:00 +0000</pubDate><guid>/posts/laravel-api-at-scale/</guid><description>&lt;p&gt;Laravel makes the first version of an API pleasantly fast. The architectural work is making the hundredth feature just as understandable as the first.&lt;/p&gt;&#10;&lt;h2 id="keep-transport-separate-from-business-rules"&gt;Keep transport separate from business rules&lt;/h2&gt;&#10;&lt;p&gt;Controllers should translate HTTP into an application request and translate the result back. Validation belongs in request objects; serialisation belongs in resources. Business decisions should live in focused application services or domain objects that can run without pretending an HTTP request exists.&lt;/p&gt;</description></item><item><title>Django or FastAPI? Choosing the Right Python API Foundation</title><link>/posts/python-api-django-fastapi/</link><pubDate>Sun, 06 Sep 2026 00:00:00 +0000</pubDate><guid>/posts/python-api-django-fastapi/</guid><description>&lt;p&gt;Django and FastAPI can both power serious APIs. The more useful question is not which framework is faster; it is which one removes the most risk from your particular product.&lt;/p&gt;&#10;&lt;h2 id="choose-django-for-an-integrated-product-platform"&gt;Choose Django for an integrated product platform&lt;/h2&gt;&#10;&lt;p&gt;Django brings an ORM, migrations, authentication, administration, security defaults, and a mature ecosystem. It shines when the API sits inside a business application with users, permissions, editorial workflows, relational data, and operational staff.&lt;/p&gt;</description></item><item><title>PostgreSQL Performance: Fix the Model Before Adding Hardware</title><link>/posts/postgresql-performance-basics/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><guid>/posts/postgresql-performance-basics/</guid><description>&lt;p&gt;When a PostgreSQL-backed application slows down, larger infrastructure can hide the symptom while preserving the cause. A better response starts with evidence.&lt;/p&gt;&#10;&lt;h2 id="find-the-expensive-work"&gt;Find the expensive work&lt;/h2&gt;&#10;&lt;p&gt;Enable and review query statistics, then rank statements by total time—not only average duration. A moderately slow query executed thousands of times may cost more than one dramatic report. Correlate database behaviour with application endpoints, background jobs, and recent releases.&lt;/p&gt;&#10;&lt;p&gt;Use &lt;code&gt;EXPLAIN (ANALYZE, BUFFERS)&lt;/code&gt; on a safe environment with representative data. Look for large row-estimate errors, sequential scans over selective predicates, repeated nested operations, sorting that spills to disk, and far more rows removed than returned.&lt;/p&gt;</description></item><item><title>A DevOps Pipeline a Small Team Can Actually Operate</title><link>/posts/devops-pipeline-small-team/</link><pubDate>Mon, 24 Aug 2026 00:00:00 +0000</pubDate><guid>/posts/devops-pipeline-small-team/</guid><description>&lt;p&gt;A good delivery pipeline makes the safe path the easy path. For a small team, it should also remain boring enough that anyone can diagnose it during a difficult release.&lt;/p&gt;&#10;&lt;h2 id="start-with-one-repeatable-path"&gt;Start with one repeatable path&lt;/h2&gt;&#10;&lt;p&gt;Every change should run formatting, static analysis, unit tests, dependency checks, and a production build in clean infrastructure. Cache dependencies carefully, but never in a way that changes correctness. Pull requests should show the same checks that protect the main branch.&lt;/p&gt;</description></item><item><title>DevSecOps Without Turning Delivery Into a Queue</title><link>/posts/devsecops-without-slowing-delivery/</link><pubDate>Tue, 18 Aug 2026 00:00:00 +0000</pubDate><guid>/posts/devsecops-without-slowing-delivery/</guid><description>&lt;p&gt;Security slows delivery when it arrives late, lacks context, or reports more noise than risk. DevSecOps works when teams receive useful feedback while a change is still cheap to fix.&lt;/p&gt;&#10;&lt;h2 id="define-what-matters"&gt;Define what matters&lt;/h2&gt;&#10;&lt;p&gt;Begin with a lightweight threat model. Identify valuable assets, trust boundaries, likely abuse, third parties, and consequences. This gives scanning and review a purpose. A public marketing site and a healthcare workflow should not share the same controls or release gates.&lt;/p&gt;</description></item><item><title>Taking a RAG Feature From Demo to Dependable Product</title><link>/posts/rag-ai-feature-production/</link><pubDate>Wed, 12 Aug 2026 00:00:00 +0000</pubDate><guid>/posts/rag-ai-feature-production/</guid><description>&lt;p&gt;A retrieval-augmented generation demo can look convincing after an afternoon. A dependable feature requires a clear job, controlled knowledge, measurable quality, and graceful failure.&lt;/p&gt;&#10;&lt;h2 id="define-the-contract"&gt;Define the contract&lt;/h2&gt;&#10;&lt;p&gt;Write down what the feature may answer, which sources are authoritative, how fresh they must be, and what it should do when evidence is missing. Decide whether the product is offering discovery, summarisation, a draft, or a final answer. These are different risk levels.&lt;/p&gt;</description></item><item><title>Your Data Platform Should Start With Decisions, Not Tools</title><link>/posts/data-platform-starts-with-metrics/</link><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><guid>/posts/data-platform-starts-with-metrics/</guid><description>&lt;p&gt;Teams often buy a warehouse and a visualisation tool, connect every source, and discover that nobody agrees what the dashboard means. A useful data platform starts at the other end: the decisions people need to make.&lt;/p&gt;&#10;&lt;h2 id="map-questions-to-action"&gt;Map questions to action&lt;/h2&gt;&#10;&lt;p&gt;List recurring decisions by audience. Which customers need attention? Which acquisition channel deserves budget? Is a release improving activation? For each, define the owner, cadence, action, and acceptable delay. This establishes valuable data products and realistic freshness requirements.&lt;/p&gt;</description></item><item><title>Technical SEO Is an Engineering Quality Practice</title><link>/posts/technical-seo-engineering/</link><pubDate>Thu, 30 Jul 2026 00:00:00 +0000</pubDate><guid>/posts/technical-seo-engineering/</guid><description>&lt;p&gt;Technical SEO is often reduced to metadata. In practice, it is the work of making valuable content discoverable, understandable, fast, and stable for both people and search systems.&lt;/p&gt;&#10;&lt;h2 id="make-discovery-intentional"&gt;Make discovery intentional&lt;/h2&gt;&#10;&lt;p&gt;Important pages need crawlable links in a clear information hierarchy. Generate accurate sitemaps, keep robots directives deliberate, and use canonical URLs to express the preferred version of duplicate or parameterised content. Redirect moved pages once, directly, and preserve meaning.&lt;/p&gt;</description></item><item><title>Flask, FastAPI, or Bottle: Choosing a Python Microframework</title><link>/posts/flask-fastapi-bottle-python-api/</link><pubDate>Fri, 24 Jul 2026 00:00:00 +0000</pubDate><guid>/posts/flask-fastapi-bottle-python-api/</guid><description>&lt;p&gt;Python gives API teams an unusual amount of choice. Flask, FastAPI, and Bottle can all expose an HTTP endpoint in a few lines, but they optimise for different kinds of simplicity. Choosing well means looking beyond the first route and asking how the service will be validated, tested, deployed, and changed.&lt;/p&gt;&#10;&lt;h2 id="flask-flexible-and-proven"&gt;Flask: flexible and proven&lt;/h2&gt;&#10;&lt;p&gt;Flask is the dependable general-purpose option. Its request model is easy to understand, its extension ecosystem is mature, and experienced Python developers can recognise a Flask application quickly. It works especially well for internal tools, integration services, conventional REST APIs, and products that need freedom without inventing the entire HTTP layer.&lt;/p&gt;</description></item><item><title>Express, Koa, or Hono for Your Next TypeScript API?</title><link>/posts/express-koa-hono-typescript-api/</link><pubDate>Sat, 18 Jul 2026 00:00:00 +0000</pubDate><guid>/posts/express-koa-hono-typescript-api/</guid><description>&lt;p&gt;Express shaped the Node.js API ecosystem. Koa refined its middleware model, while Hono brought a compact, standards-oriented approach to edge and multi-runtime applications. All three can serve a TypeScript API, but their strengths appear under different constraints.&lt;/p&gt;&#10;&lt;h2 id="express-optimise-for-familiarity"&gt;Express: optimise for familiarity&lt;/h2&gt;&#10;&lt;p&gt;Express remains the lowest-risk choice when hiring reach, middleware availability, and compatibility dominate the decision. Its programming model is widely understood, integrations are plentiful, and almost every hosting platform can run it without explanation.&lt;/p&gt;</description></item><item><title>Slim and Lumen: Focused PHP Services Beyond the Monolith</title><link>/posts/slim-lumen-php-microservices/</link><pubDate>Sun, 12 Jul 2026 00:00:00 +0000</pubDate><guid>/posts/slim-lumen-php-microservices/</guid><description>&lt;p&gt;PHP teams do not need to abandon their language or operational knowledge to build focused services. Slim and Lumen offer smaller HTTP foundations than a traditional full-stack application, but they represent different relationships with the surrounding ecosystem.&lt;/p&gt;&#10;&lt;h2 id="slim-standards-oriented-composition"&gt;Slim: standards-oriented composition&lt;/h2&gt;&#10;&lt;p&gt;Slim is a strong option for a small REST API, webhook receiver, integration boundary, or internal service. It embraces common PHP-FIG interfaces for requests, responses, middleware, and containers, making components easier to replace and reuse. The framework gives you routing and middleware without dictating the database or application architecture.&lt;/p&gt;</description></item><item><title>Sinatra or Roda: Small Ruby APIs With Clear Boundaries</title><link>/posts/sinatra-roda-ruby-api/</link><pubDate>Mon, 06 Jul 2026 00:00:00 +0000</pubDate><guid>/posts/sinatra-roda-ruby-api/</guid><description>&lt;p&gt;Ruby is often associated with a full Rails application, but it is equally capable of powering compact services. Sinatra and Roda keep the HTTP layer small while preserving Ruby’s strength: code that communicates intent clearly.&lt;/p&gt;&#10;&lt;h2 id="sinatra-direct-and-approachable"&gt;Sinatra: direct and approachable&lt;/h2&gt;&#10;&lt;p&gt;Sinatra maps naturally from an HTTP verb and path to a block of behaviour. That directness makes it productive for prototypes, internal utilities, webhook handlers, and small APIs. A developer can read a short Sinatra application from top to bottom and understand its public surface quickly.&lt;/p&gt;</description></item><item><title>Fiber or Axum for Performance-Critical Services?</title><link>/posts/fiber-axum-performance-services/</link><pubDate>Tue, 30 Jun 2026 00:00:00 +0000</pubDate><guid>/posts/fiber-axum-performance-services/</guid><description>&lt;p&gt;Go and Rust are compelling when a service has demanding latency, throughput, memory, or reliability constraints. Fiber and Axum provide productive HTTP layers for those ecosystems, but choosing between them is a broader decision than comparing router benchmarks.&lt;/p&gt;&#10;&lt;h2 id="fiber-operational-simplicity-with-go"&gt;Fiber: operational simplicity with Go&lt;/h2&gt;&#10;&lt;p&gt;Fiber offers an Express-inspired API on top of Go’s &lt;code&gt;fasthttp&lt;/code&gt; ecosystem. Teams coming from JavaScript can become productive quickly, while Go provides straightforward compilation, deployment, concurrency, and tooling. A single binary with predictable runtime behaviour is valuable for containers, edge nodes, and operationally lean teams.&lt;/p&gt;</description></item><item><title>Next.js, Remix, and the T3 Stack: Three Different Decisions</title><link>/posts/nextjs-remix-t3-stack/</link><pubDate>Wed, 24 Jun 2026 00:00:00 +0000</pubDate><guid>/posts/nextjs-remix-t3-stack/</guid><description>&lt;p&gt;Next.js, Remix, and the T3 Stack are often compared as if they were equivalent products. They are not. Next.js and Remix provide different models for building React applications, while T3 is an opinionated combination of tools—typically Next.js, TypeScript, tRPC, Prisma, and an authentication solution. Understanding that distinction makes the choice much easier.&lt;/p&gt;&#10;&lt;h2 id="nextjs-a-broad-product-platform"&gt;Next.js: a broad product platform&lt;/h2&gt;&#10;&lt;p&gt;Next.js supports static content, server rendering, server components, route handlers, streaming, and client-side interaction within one ecosystem. It is a strong fit when a product combines marketing pages, authenticated application experiences, search visibility, and a large React component ecosystem.&lt;/p&gt;</description></item><item><title>Building a Python Full Stack for Generative AI Products</title><link>/posts/python-full-stack-generative-ai/</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid>/posts/python-full-stack-generative-ai/</guid><description>&lt;p&gt;An AI product is still a product. It needs authentication, permissions, billing, data ownership, reliable jobs, observable failures, and an interface that helps users judge uncertain results. A practical Python full stack handles those concerns without forcing model code into every layer.&lt;/p&gt;&#10;&lt;h2 id="choose-the-application-centre"&gt;Choose the application centre&lt;/h2&gt;&#10;&lt;p&gt;Use Django when the product needs an integrated business platform: relational workflows, administration, users, permissions, and substantial back-office operations. Django’s conventions reduce the number of infrastructure decisions and give operations teams useful interfaces early.&lt;/p&gt;</description></item><item><title>Flutter or React Native: Choosing a Cross-Platform Mobile Stack</title><link>/posts/flutter-react-native-mobile-stack/</link><pubDate>Fri, 12 Jun 2026 00:00:00 +0000</pubDate><guid>/posts/flutter-react-native-mobile-stack/</guid><description>&lt;p&gt;Flutter and React Native can both deliver serious Android and iOS products from a shared codebase. The meaningful choice is not which framework can draw a screen. It is which one fits the product’s interface, native dependencies, team skills, release process, and expected lifetime.&lt;/p&gt;&#10;&lt;h2 id="flutter-one-controlled-rendering-system"&gt;Flutter: one controlled rendering system&lt;/h2&gt;&#10;&lt;p&gt;Flutter uses Dart and renders its own widget system. This gives teams precise, consistent control across platforms and makes highly branded interfaces, complex motion, and custom visual systems predictable. The development loop is fast, tooling is cohesive, and a well-designed component library can produce consistent results across a large application.&lt;/p&gt;</description></item><item><title>Supabase and Prisma: Useful Shortcuts, Different Responsibilities</title><link>/posts/supabase-prisma-managed-backend/</link><pubDate>Sat, 06 Jun 2026 00:00:00 +0000</pubDate><guid>/posts/supabase-prisma-managed-backend/</guid><description>&lt;p&gt;Supabase and Prisma frequently appear in modern TypeScript stacks, but they solve different problems. Supabase is a managed backend platform centred on PostgreSQL, authentication, storage, realtime capabilities, and server-side functions. Prisma is an ORM and database toolkit that gives application code a typed data client and migration workflow. They can complement each other, but neither removes the need to design the database.&lt;/p&gt;&#10;&lt;h2 id="what-supabase-accelerates"&gt;What Supabase accelerates&lt;/h2&gt;&#10;&lt;p&gt;Supabase can eliminate weeks of commodity platform work. A team can provision PostgreSQL, authenticate users, store files, subscribe to changes, and expose controlled data access quickly. This is valuable for prototypes, internal products, SaaS applications, and teams that want managed operations without giving up relational data.&lt;/p&gt;</description></item><item><title>Containers, Serverless, or Edge: Put Each Workload in the Right Place</title><link>/posts/containers-serverless-edge-deployment/</link><pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate><guid>/posts/containers-serverless-edge-deployment/</guid><description>&lt;p&gt;Modern applications rarely need one universal deployment model. A web frontend, webhook handler, scheduled pipeline, inference service, and long-running worker behave differently. Containers, serverless functions, and edge runtimes are tools for placing those workloads where their operational characteristics fit.&lt;/p&gt;&#10;&lt;h2 id="containers-a-portable-unit-of-execution"&gt;Containers: a portable unit of execution&lt;/h2&gt;&#10;&lt;p&gt;Docker packages an application with its runtime and system dependencies, making development, CI, and production more consistent. Containers suit APIs, workers, scheduled jobs, and services with predictable resource needs. They allow control over process behaviour, networking, files, and dependencies without coupling the application completely to one platform.&lt;/p&gt;</description></item><item><title>About</title><link>/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/about/</guid><description>&lt;h2 id="engineering-that-stays-useful-after-launch"&gt;Engineering that stays useful after launch&lt;/h2&gt;&#10;&lt;p&gt;I’m Gaurav, an independent full-stack engineer who helps founders, product teams, and established businesses turn difficult ideas into dependable software. I specialise in modern, decoupled architectures: focused APIs, type-safe web applications, cross-platform mobile products, data systems, AI services, and the cloud infrastructure behind them.&lt;/p&gt;&#10;&lt;p&gt;My default is practical: choose proven technology, keep the architecture as simple as the problem allows, document the decisions, and leave the codebase healthier than I found it.&lt;/p&gt;</description></item><item><title>Hire me</title><link>/contact/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contact/</guid><description>&lt;h2 id="lets-make-the-next-release-count"&gt;Let’s make the next release count&lt;/h2&gt;&#10;&lt;p&gt;I take on focused builds, product rescue work, platform modernisation, and ongoing engineering partnerships. A useful first message includes:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;what you are building and who it serves;&lt;/li&gt;&#10;&lt;li&gt;where the project stands today;&lt;/li&gt;&#10;&lt;li&gt;the outcome or deadline that matters most;&lt;/li&gt;&#10;&lt;li&gt;your preferred engagement model and approximate budget range.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Email &lt;strong&gt;&lt;a href="mailto:kumargaurav81@outlook.com"&gt;kumargaurav81@outlook.com&lt;/a&gt;&lt;/strong&gt; with the subject “Project enquiry”. I’ll reply within two business days with useful next steps—even when I’m not the right fit.&lt;/p&gt;</description></item><item><title>Services</title><link>/services/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/services/</guid><description>&lt;h2 id="modern-systems-without-unnecessary-weight"&gt;Modern systems without unnecessary weight&lt;/h2&gt;&#10;&lt;p&gt;I build with small, composable services when a full-stack framework would add friction, and use integrated stacks when their conventions accelerate the product. Choose a focused engagement or combine capabilities around an outcome.&lt;/p&gt;&#10;&lt;h3 id="microframework-api-engineering"&gt;Microframework API engineering&lt;/h3&gt;&#10;&lt;div class="capability-grid framework-grid"&gt;&#10;&lt;article&gt;&lt;h4&gt;Python APIs&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;Flask&lt;/strong&gt; and &lt;strong&gt;FastAPI&lt;/strong&gt; for data-driven, typed, async, and AI-adjacent services; &lt;strong&gt;Bottle&lt;/strong&gt; for truly minimal zero-dependency applications.&lt;/p&gt;&lt;/article&gt;&#10;&lt;article&gt;&lt;h4&gt;JavaScript &amp; TypeScript APIs&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;Express&lt;/strong&gt; for its mature ecosystem, &lt;strong&gt;Koa&lt;/strong&gt; for composed middleware, and &lt;strong&gt;Hono&lt;/strong&gt; for fast edge-native services.&lt;/p&gt;</description></item></channel></rss>