HomePlatformProductsLabsBuildCompanyContactStart a Project →
Platform Technology Stack
⚡ PRODUCTION-TESTED SINCE 2016

We Don't Choose

Technologies.

We Choose Tradeoffs.

Every technology in our stack was chosen with a specific reason — and a specific tradeoff we consciously accepted. We will explain both. We will also tell you when we would choose differently, and what we do not use and why.

Next.js
Primary frontend framework
6
Live products on this stack
2016
Stack decisions refined since
0
Abandoned codebases
GET / → Next.js → API → Postgres → Response 200
200 OK
FRONTEND
Browser rendering
Next.js 15
React 19
Tailwind CSS
GSAP
STATE / FETCH
Client data layer
TanStack Query
Zustand
SWR
API LAYER
Request routing
Next.js API Routes
REST
tRPC (select)
BACKEND
Business logic
Node.js
Auth
PDF engine
AI / Gemini
DATABASE
Persistence layer
PostgreSQL
MySQL
JSON flat files
INFRASTRUCTURE
Deployment & delivery
cPanel / VPS
Docker
PM2
Cloudflare
Stack simulation — live request flow
The Full Stack

Every Layer. Every Choice.

Every Reason.

Technology decisions without rationale are just opinions. Every choice below has a documented reason and a documented tradeoff. We will tell you both.

L.01
L.01

Frontend

Primary:
Next.js 15
Why

Server-side rendering, file-based routing, and API routes in a single framework. React Server Components give us partial hydration — pages load fast even with large data sets because most computation happens at build time or request time on the server.

Tradeoff

Next.js adds build complexity and cold start considerations on shared hosting. We have solved this with PM2 process management and careful route configuration — but it requires more infrastructure knowledge than a pure static site.

Also Used:
React 19
Tailwind CSS
GSAP
→ Used in NextGirl, AskBLR, MNCJob, FreeBill, FinCalc
L.02
L.02

Animation

Primary:
GSAP (GreenSock)
Why

GSAP is the only animation library that gives frame-accurate control over complex entrance sequences, scroll-driven animations, and SVG path drawing. Framer Motion is good for component-level transitions — GSAP is for page-level choreography, which is what the CipherBitz site and our client products require.

Tradeoff

GSAP's imperative API does not fit naturally in React's declarative model. We manage this with useEffect hooks, proper ref handling, and cleanup on unmount. Requires discipline — can cause memory leaks if handled carelessly.

Also Used:
CSS Animations
Framer Motion
Lottie
→ Used in CipherBitz.com, NextGirl homepage
L.03
L.03

State & Data

Primary:
TanStack Query
Why

Server state and client state are different problems. TanStack Query handles server state — caching, background refetching, stale-while-revalidate — without requiring a global store. For most product UIs, this eliminates the need for Redux entirely.

Tradeoff

TanStack Query adds a learning curve for engineers used to simple fetch calls. It also introduces cache invalidation complexity in optimistic update scenarios. We document cache key conventions per project to prevent stale state bugs.

Also Used:
Zustand
React Context
SWR
→ Used in FreeBill invoice builder, MNCJob filters
L.04
L.04

Backend

Primary:
Node.js + Next.js API Routes
Why

Co-locating API routes in the Next.js project eliminates a separate backend deployment for most products. For compute-heavy operations — PDF generation, AI calls, email sending — we keep logic in dedicated API route handlers that can be independently scaled or extracted to microservices when needed.

Tradeoff

Next.js API routes run in a serverless-like model that does not maintain persistent connections well. For long-running processes (batch jobs, WebSocket connections), we use a separate Node.js PM2 process — adding deployment complexity.

Also Used:
n8n (automation)
Google Gemini API
Nodemailer
→ Used in FreeBill PDF engine, AskBLR AI chatbot
L.05
L.05

Database

Primary:
PostgreSQL
Why

PostgreSQL is the default for structured relational data with complex queries. Full ACID compliance, excellent JSON support for semi-structured fields, and a query planner that handles complex joins reliably. For products with flat content structures (NammaHubballi listings), MySQL suffices.

Tradeoff

PostgreSQL requires more careful schema design upfront than NoSQL alternatives. We invest time in schema review before any migration — this slows initial development by 10–15% but prevents the schema chaos we have seen in MongoDB-based projects.

Also Used:
MySQL
SQLite (dev)
Prisma ORM
→ Used in MNCJob job listings, FreeBill data
L.06
L.06

Infrastructure

Primary:
cPanel + VPS + Cloudflare
Why

Most product requirements are fully served by shared or VPS hosting with a Cloudflare CDN layer. We deliberately avoid cloud-native complexity (Kubernetes, ECS, Lambda) until traffic requires it — over-engineering infrastructure is a common cause of unnecessary monthly burn in early products.

Tradeoff

cPanel hosting has less scalability headroom than cloud-native solutions. We plan migration paths to cloud infrastructure at defined traffic thresholds — typically 10k+ daily active users or sustained high compute requirements.

Also Used:
Docker
PM2
n8n (self-hosted)
Cloudflare Workers (select)
→ Used in All 6 products deployed and running
Our Engineering Opinions

We Have Strong Opinions.

Here Are Four Of Them.

These are not preferences. They are positions we hold after building six live products. We will argue for them and we will also tell you when we are wrong.

OP.01

Next.js is the right default for most products.

React with file-based routing, API routes, SSR, SSG, ISR, and image optimisation in one framework is the highest leverage starting point for most product builds today. We have tried Vite+React, plain CRA, and Remix — and we return to Next.js for client work every time. The ecosystem, the documentation, and the Vercel-backed maintenance cadence make it the lowest-risk choice for a product that must still be maintained in three years.

When We Are Wrong

When the product is a highly interactive single-page app with no SEO requirement — a dashboard or internal tool — Vite + React without the Next.js overhead is correct.

OP.02

You don't need Kubernetes until you do.

We have seen early-stage products spend ₹80,000/month on AWS infrastructure for products with 200 daily active users. A ₹4,000/month VPS with Cloudflare in front of it handles most product loads until you have a real scaling problem. Over-engineering infrastructure is vanity — it signals technical sophistication while wasting early revenue on compute you do not need.

When We Are Wrong

When the product requires horizontal autoscaling from day one — real-time features, ML inference, or regulatory data residency requirements — cloud-native is correct from the start.

OP.03

Database schema designed wrong never recovers cheaply.

The most expensive engineering decisions we make happen before a single line of application code is written — they happen in the schema review. A poorly normalised table structure in a product that grows to 500k records requires painful, risky migrations. We spend more time in schema review than most teams expect — and that investment pays back in every migration we do not need to write.

When We Are Wrong

Rapid prototypes and throwaway MVPs benefit from looser schema discipline. If the goal is to validate an idea in two weeks, schema rigour should be deferred — explicitly, with a documented refactor plan.

OP.04

Technical SEO is a first-class engineering concern.

Schema markup, Core Web Vitals, crawl budget, canonical strategy, and server-side rendering are engineering problems — not marketing problems. The products in our portfolio that rank well do so because SEO decisions were made at the architecture level, not bolted on after launch. A product built with SEO as an afterthought requires a rewrite to fix properly — you cannot retrofit server-side rendering into a client-side app cheaply.

When We Are Wrong

For B2B SaaS products behind authentication, or internal tools with no public indexing requirement, SEO architecture is irrelevant and should not drive frontend decisions.

What We Do Not Use — And Why

The Technologies We

Deliberately Avoid.

What a team does not use is as revealing as what it does. Here is our no-list — with honest reasons.

MongoDB

We Don't Use This

Schema-less databases accumulate inconsistency silently. We have inherited MongoDB codebases where field names changed across documents, types drifted, and queries became unreliable. For product data with relationships, PostgreSQL's schema constraint is a feature, not a limitation.

When We Would Use It:

Content-heavy CMS projects with highly variable document structures and no relational joins. Blogging platforms. Not product backends.

Redux

We Don't Use This

TanStack Query handles server state. Zustand handles UI state. Redux adds boilerplate, reducer pattern complexity, and action verbosity that we cannot justify for the state complexity of the products we build. The only redeeming feature of Redux is DevTools — and Zustand has those too.

When We Would Use It:

Extremely complex collaborative real-time applications where predictable state time-travel debugging is genuinely needed. Not typical product builds.

PHP / Laravel (new builds)

We Don't Use This

We maintain WordPress and NammaHubballi in PHP. But new product builds in PHP in 2026 have no advantage over Next.js except familiarity for PHP developers. We do not start new products in PHP.

When We Would Use It:

WordPress plugin development, WooCommerce customisation, and maintenance of existing PHP codebases. We do this — we just don't start new projects here.

AWS / GCP / Azure (as default)

We Don't Use This

Cloud provider complexity is not free. IAM policies, S3 bucket configs, VPC setup, and billing surprises add engineering overhead that is not justified until a product has a genuine scaling problem. We start on VPS + Cloudflare and migrate when there is a real reason.

When We Would Use It:

ML inference workloads, regulated data environments requiring specific residency, and products that will scale to millions of requests before the first year of launch.

GraphQL (as default)

We Don't Use This

REST API routes with typed interfaces cover 95% of product requirements at a fraction of the GraphQL setup cost. GraphQL's benefits — flexible queries, schema introspection, reduced over-fetching — materialise in large APIs serving many clients. Single-product APIs rarely need it.

When We Would Use It:

Products with multiple client types (web + mobile + partner API) that each require different response shapes from the same data layer.

WordPress (new product builds)

We Don't Use This

NammaHubballi is WordPress — we operate it daily. We understand the platform. But WordPress is a CMS, not a product framework. Plugin dependency chains, PHP version conflicts, and database query performance at scale are problems we do not want to own for new product builds. Next.js gives us control.

When We Would Use It:

Local business directories, blogs, portfolio sites, and content-heavy sites where the WP ecosystem saves 6–8 weeks of build time. We still build and maintain these.

Stack in Production

The Same Stack Runs

All Six Products. Today.

Not described on a slide deck. Running in production, serving real users, being maintained and scaled right now.

FreeBill

BUSINESS SAAS
Frontend
Next.js 15 + Tailwind CSS
Backend
Next.js API Routes + Node.js
Database
PostgreSQL
Infra
VPS + PM2 + Cloudflare
Special
PDF generation engine (custom)
Performance Snapshot
LCP
0.0s
FID
<50ms
CLS
0.01
Live in production →

AskBLR

AI CITY INTELLIGENCE
Frontend
Next.js 15 + Tailwind CSS
AI
Google Gemini API + prompt cache
Backend
Next.js API Routes
Database
PostgreSQL + JSON local data
Infra
VPS + Cloudflare CDN
Performance Snapshot
LCP
0.0s
FID
<80ms
CLS
0.02
Live in production →

NextGirl

AI FASHION COMMERCE
Frontend
Next.js 15 + Tailwind CSS + GSAP
AI
Google Gemini (styling engine)
Commerce
WooCommerce REST API
Database
MySQL (WooCommerce)
Infra
cPanel + Cloudflare
Performance Snapshot
LCP
0.0s
FID
<100ms
CLS
0.03
Live in production →
How We Engineer

Five Engineering Principles.

Applied To Every Project.

These are the non-negotiables. Every codebase we write, every schema we design, and every deployment we configure follows these five principles — or we explain in writing why we deviated.

1

Choose boring technology first.

The most exciting technology is rarely the right technology. We default to well-understood, well-documented, well-maintained tools — and only adopt newer technologies when there is a specific problem that existing tools cannot solve well. This reduces onboarding time, bug surface area, and the risk of a dependency becoming unmaintained two years into a product.

→ Applied in: All six products — Next.js, PostgreSQL, Tailwind, cPanel hosting
2

Performance is a first-class feature — not an optimisation.

Core Web Vitals, image optimisation, font loading strategy, and JavaScript bundle size are designed into the product from day one — not measured and fixed after launch. A product that loads in 1.2s converts differently from one that loads in 3.4s. We treat every millisecond of LCP as a product decision.

→ Applied in: FreeBill (1.1s LCP), FinCalc (schema-rich fast pages), AskBLR (AI response caching)
3

Schema review before any application code.

Every project begins with a schema design session — tables, relationships, indexes, constraints, and naming conventions documented and reviewed before any ORM models or API routes are written. A schema decision reversed after 50,000 rows of data is a migration. A schema decision made correctly on day one is invisible — as it should be.

→ Applied in: MNCJob (complex job/company/application relations), FreeBill (invoice + line items + tax logic)
4

Deploy to production on day one.

Every project is deployed to a live URL on day one of development — even if it only shows a placeholder. This prevents the 'it works locally' problem, surfaces infrastructure configuration issues early, and creates a real URL for stakeholder review at every stage. Development that only runs on localhost is not done.

→ Applied in: Standard practice across all product builds — no exceptions
5

Document why — not what — in code comments.

What the code does is readable from the code. Why a specific decision was made is not. Every non-obvious architectural choice — a denormalised table, a specific cache strategy, a deliberate deviation from a pattern — gets a comment explaining the reason. Future engineers (and our future selves) deserve to understand the decision, not just inherit it.

→ Applied in: All codebases — enforced in code review
How to Start

Three Ways to Build

On This Stack.

MOST POPULAR

Full Product Build

Your product built on our production-tested stack — Next.js, PostgreSQL, Cloudflare, designed and deployed with the same engineering principles and patterns that run our six live products. You get a decade of stack refinement from day one.

4–16 weeks
Schema review before any code written
Deployed to production from day one
Core Web Vitals green before handoff
Architecture decisions documented
Start Building →
START HERE

Technical Stack Audit

Already have a product but suspect the stack is causing performance issues, maintenance headaches, or scaling concerns? A structured 5-day technical audit with a written report and a prioritised refactor roadmap.

5 days
Full stack review — framework to infra
Core Web Vitals and performance audit
Database schema and query analysis
Written refactor roadmap with effort scoring
Book Stack Audit →
FOR TEAMS

Technical Advisory

For technical teams who need a second opinion — on a stack decision, a schema design, an infrastructure choice, or an architecture direction. Monthly retainer with async review and structured opinion sessions.

Monthly retainer
Async code and schema review
Monthly architecture decision session
Honest technical opinion — not validation
No sales agenda — just engineering judgment
Discuss Advisory →
The stack is documented. The tradeoffs are honest.

What Are You

Building Next?

Tell us what your product is, what stack you are currently on (or starting from), and what is causing the most pain. We will tell you what we would choose, what we would avoid, and why — honestly, without a sales agenda.