Executive view
Choose the integrated stack for new web products.
Our default recommendation is Next.js with PostgreSQL because it keeps the product surface cohesive: React UI, server operations, validation, typed data access, and tests can live in one TypeScript codebase. That continuity helps people and coding agents understand a change across the full request path, while PostgreSQL supplies durable relational integrity without database-engine license fees.
Add Redis for measured transient-state or caching needs, and use Kubernetes when multiple application and worker containers need coordinated production delivery. Existing .NET, Angular, or SQL Server investments can remain behind stable boundaries and move incrementally; they should not determine the default for a new product without a business reason.
01 / AI-assisted development
Why Next.js is our choice for AI-assisted development.
A feature can move through React UI, shared types, input validation, server operations, typed PostgreSQL access, and tests without translating between separate Angular and C# web and API projects. That makes the implementation path easier to inspect, change, and verify for both an engineer and a coding agent.
One language
TypeScript carries product concepts across UI, server logic, data tools, and tests.
One feature trail
An agent can follow a field from the component through validation and persistence to its checks.
Fast local evidence
The development loop can surface type, build, runtime, route, and test feedback close to the change.
Next.js 16.2 and later bundle version-matched documentation so an agent can use the framework guidance that matches the installed package; earlier versions require separate setup. On Next.js 16 and later, a configured next-devtools-mcp connection can provide live build, runtime, and type errors, routes, page and Server Action metadata, and development logs. These mechanisms improve context and reduce avoidable translation work, though outcomes still depend on the codebase, tools, and review. Next.js AI agent guide Next.js MCP guide
Angular also documents AI-assisted development workflows and remains a capable framework. Our recommendation rests on the shorter feature path created by one integrated Next.js application, not on exclusive access to AI tooling. Angular AI development guide
02 / Reference architecture
Keep responsibilities visible from browser to record.
Next.js renders the React interface and owns the server boundary for authentication checks, input validation, domain operations, and response shaping. Its backend-for-frontend capabilities coordinate web-specific work, while the framework documentation defines limitations for some backend patterns. Next.js backend-for-frontend guide
PostgreSQL stores durable business state. External identity providers and integrations connect through server-owned adapters. Background workers appear only when work must outlive a request, retry independently, or run on a schedule. Redis stays outside the core path until a real need for shared transient state, caching, or selected queue infrastructure is demonstrated.
A write
The browser submits intent. The server authenticates the actor, validates input, applies domain rules, writes a transaction to PostgreSQL, and returns the result. Side effects that can wait are recorded for a worker rather than holding the request open.
A read
The server checks access, runs a measured query, and shapes only the data the interface needs. A cache may serve repeat reads later, but PostgreSQL remains authoritative and the application defines freshness.
03 / Technology decisions
Choose each tool for a specific responsibility.
Next.js for an integrated product surface
React components, routing, server rendering, server operations, and shared types live in one TypeScript codebase. Teams can deliver a feature without coordinating separate web and API releases for routine product work, while browser/server boundaries remain explicit: interactive code goes to the browser only when needed, and secrets, authorization, and data access stay on the server. Next.js can run as a Node.js server or Docker container, with Vercel remaining one hosting option. Next.js self-hosting guide
PostgreSQL for durable truth
Relational constraints, transactions, indexes, and mature tooling make PostgreSQL a strong general-purpose system of record. Its permissive PostgreSQL License supports commercial use. PostgreSQL license
Prisma can provide typed data access and migration files, but it is an optional data tool, not an automatic Next.js feature. SQL changes still require review, tested roll-forward and recovery plans, and CI or release orchestration. Moving to another database is a migration project, not a connection-string swap.
Redis as an optional accelerator
Start with sound SQL, appropriate indexes, query measurement, and application profiling. Consider Redis when repeated expensive reads or shared transient state produce a measured constraint, or when chosen queue infrastructure depends on it.
The application must define TTLs, invalidation, and cache scope per user or tenant. It must also define failure behavior. Read caches may be bypassed with load limits, while queues, authentication state, and rate limits need their own safe policies. Installing Redis does not automatically create shared Next.js caching or safe queues. PostgreSQL remains authoritative.
Licensing depends on the exact version and service. Redis 8 is offered under AGPLv3, RSALv2, or SSPLv1, so teams should review the terms that match their distribution and hosting model. Redis licensing
04 / Delivery advantages
Our default reduces delivery friction at every layer.
For a new web product, the integrated stack gives the team fewer boundaries to translate, deploy, and diagnose. Each advantage maps to a practical delivery effect.
| Layer | Our advantage | Delivery effect |
|---|---|---|
| Web | One Next.js application UI, server operations, shared types, and tests stay connected. | Fewer handoffs A feature can move from screen to server without a separate web-to-API translation layer. |
| UI | React components Product behavior and presentation share reusable primitives. | Consistent change Teams can update common interactions once and verify them in context. |
| Data | PostgreSQL Relational constraints and transactions protect durable truth without database-engine license fees. | Typed evolution Prisma can add typed access and reviewable migrations while PostgreSQL enforces integrity. |
Next.js and ASP.NET Core
We recommend Next.js for new product work because React and TypeScript cover the web surface and its server orchestration in one application. Compared with a separate Angular web project and C# API, routine features require fewer cross-language contracts and coordinated releases.
ASP.NET Core is free, open source, and cross-platform, with strong support for C# domain models, APIs, and services. Keep mature .NET services where they already create value, and let a Next.js front end call stable APIs during incremental modernization. ASP.NET Core overview
React with Next.js and Angular
React with Next.js gives a product team one integrated route, rendering, and server-operation model. That keeps a coding agent's working context closer to the feature it is changing.
Angular supports server-side rendering and AI-assisted workflows, and its framework conventions can suit established teams. Keep it where existing expertise and applications outweigh migration cost; choose Next.js as the cleaner starting point for a new integrated product. Angular overview
PostgreSQL and SQL Server
We recommend PostgreSQL for new products because relational integrity, transactions, and a broad open ecosystem come without database-engine license fees. SQL Server remains useful where T-SQL expertise, reporting workflows, Microsoft tooling, or established operations already matter.
SQL Server Developer is free for nonproduction development and testing, Express is free with constraints, and Standard or Enterprise editions are generally paid. Exact editions and service terms should be evaluated for the intended workload. SQL Server editions
05 / Kubernetes in production
Ship with control. Scale with confidence.
Kubernetes gives the containerized Next.js application and background workers a consistent production control plane. Configured liveness and readiness checks restart unhealthy containers and keep unready instances out of traffic. Deployments maintain requested pod replicas, run controlled updates, and can roll back the application version managed by the Deployment. Kubernetes self-healing Kubernetes Deployments
With useful resource and application metrics configured, Horizontal Pod Autoscaling can adjust replica counts as demand changes. The team still owns capacity policy, observability, and validation of scaling behavior. Horizontal Pod Autoscaling
Keep PostgreSQL and Redis data services outside the application Deployment, usually as managed services with explicit network access. Kubernetes does not remove responsibility for schema migrations, cache policy, backups, or tested restores. A simpler container service remains a legitimate starting point until multiple workloads, scaling policy, or an established platform make Kubernetes worth operating.
06 / Maintainability
Modular first, distributed only when earned.
Organize the application around business capabilities, not framework folders alone. Each module should make its inputs, domain rules, persistence, and external contracts easy to find. Shared UI primitives keep interaction patterns consistent without turning every screen into a configuration system.
Readable names, short execution paths, explicit validation, and colocated tests help engineers and coding agents follow a change. Extract a worker or service when it needs independent scaling, deployment, security boundaries, or ownership. Keep proven .NET APIs or SQL Server integrations behind stable adapters until a migration has a clear business case.
07 / Production ownership
The architecture includes how it is operated.
- DataReview and orchestrate migrations, automate backups, test restores, tune connection pooling, and grant least privilege.
- ApplicationKeep secrets server-side, enforce authorization and input validation, and maintain tests, dependency scanning, and patching.
- RuntimePublish health checks, useful logs and metrics, alert on user-impacting failures, and rehearse recovery.
- ScaleWhen adding application instances, deliberately coordinate deployments and decide which sessions, caches, and transient state must be shared.
Hosting, monitoring, upgrades, and engineering still require ownership. Budget for them from the beginning and keep the operating model as direct as the application model.
Primary references
Read the source material.
- 01 / Next.js self-hosting
- 02 / Next.js backend for frontend
- 03 / Next.js AI agents
- 04 / Next.js MCP
- 05 / Angular overview
- 06 / Angular AI development
- 07 / ASP.NET Core overview
- 08 / PostgreSQL license
- 09 / SQL Server editions
- 10 / Redis licensing
- 11 / Kubernetes self-healing
- 12 / Kubernetes Deployments
- 13 / Kubernetes autoscaling