Stack Compatibility Matrix
Verified Stack Combinations
Fullstack TypeScript (Primary Stack — Denis/KeiSei)
Frontend: Next.js 14+ (App Router) + React 18+ + Zustand + Tailwind CSS
Backend: NestJS 10+ + Prisma ORM + PostgreSQL + Redis
Queue: BullMQ + Redis
Bot: Grammy (Telegram)
Storage: MinIO (S3-compatible)
Auth: NextAuth 5 / Passport.js
Search: pgvector (vector similarity)
Deploy: Docker Compose + nginx reverse proxy + certbot SSL
AI/ML Stack
API: OpenAI SDK + Anthropic SDK + Google Generative AI
Embeddings: text-embedding-3-small (OpenAI) / pgvector storage
RAG: Custom chunking + embeddings + vector search
Images: Gemini nano-banana-pro / imagen-4.0-ultra
Video: Veo 3.1 / Kling 3.0 via Fal.ai
Batch: Anthropic Batch API (max_tokens=8192, batch_size=25)
Game Dev Stack
Engine: Phaser 3.90 + TypeScript + Vite
Emulation: Nostalgist.js (snes9x core)
Assets: DALL-E 3 (sprites) + procedural generation
Systems Programming Stack
Kernel: C + eBPF
Userspace: Go
Training: Python + WGAN-GP
Pattern: Event Stream → Ring Buffer → Feature Extraction → MicroML → Decision
Technology Compatibility Rules
Node.js Version Constraints
| Package |
Min Node |
Notes |
| Next.js 14+ |
18.17+ |
App Router requires 18.17+ |
| NestJS 10+ |
16+ |
|
| Prisma 5+ |
16.13+ |
|
| BullMQ 5+ |
18+ |
|
| Grammy 1.x |
16+ |
|
Database Compatibility
| ORM |
PostgreSQL |
MySQL |
SQLite |
MongoDB |
| Prisma |
Full |
Full |
Full |
Full |
| TypeORM |
Full |
Full |
Full |
Full |
| Drizzle |
Full |
Full |
Full |
No |
| Sequelize |
Full |
Full |
Full |
No |
| Knex |
Full |
Full |
Full |
No |
pgvector Requirements
- PostgreSQL 15+ recommended (14+ minimum)
- Prisma: use
$queryRawUnsafe for ::vector cast (not $queryRaw)
- Index type: IVFFlat (fast, approximate) or HNSW (slower build, faster query)
- Dimension limit: 2000 (OpenAI ada-002 = 1536, text-embedding-3-small = 1536)
Next.js + NestJS Integration Rules
NEXT_PUBLIC_* vars baked at BUILD time — not runtime
- Docker Compose reads
.env NOT .env.production
- Behind nginx: set
AUTH_TRUST_HOST=true for NextAuth
- API routes:
export const dynamic = "force-dynamic" (no DB at build)
- Mixed content: always use domain URL, never IP:port
Docker Networking
- Shared network: all services can resolve by container name
- Port mapping:
host:container — host port must be free
- DNS: container names as hostnames (e.g.,
tip-postgres, tip-redis)
- Health checks: always add for DB and Redis before app starts
CSS Framework Compatibility
| Framework |
React |
Vue |
Svelte |
Angular |
| Tailwind CSS |
Full |
Full |
Full |
Full |
| styled-components |
Full |
No |
No |
No |
| Emotion |
Full |
No |
No |
No |
| CSS Modules |
Full |
Full |
Full |
Full |
Anti-Compatible Combinations (DO NOT MIX)
| Bad Combo |
Why |
Use Instead |
| TypeORM + Prisma in same project |
Conflicting migration systems |
Pick one ORM |
| Express + NestJS (raw) |
NestJS wraps Express internally |
Use NestJS decorators |
| Redux + Zustand in same project |
Two state managers fighting |
Pick one |
| Mongoose + Prisma MongoDB |
Two ODMs, schema conflicts |
Pick one |
| Webpack + Vite in same project |
Two bundlers |
Vite (modern) or Webpack (legacy) |
| npm + pnpm in same project |
Lock file conflicts |
Pick one package manager |
| .env.local + .env.production + .env |
Loading order confusion |
Use .env only in Docker |
Migration Paths
Express → NestJS
- Create NestJS project alongside
- Move routes → controllers one by one
- Move middleware → guards/interceptors
- Move services → injectable providers
- Test each migration step
Redux → Zustand
- Create Zustand store matching Redux state shape
- Replace
useSelector → Zustand selectors
- Replace
dispatch(action) → store methods
- Remove Redux boilerplate (reducers, action creators)
Pages Router → App Router (Next.js)
- Move
pages/api/* → app/api/*/route.ts
- Move
pages/*.tsx → app/*/page.tsx
- Add
'use client' to interactive components
- Replace
getServerSideProps → server components
- Replace
getStaticProps → generateStaticParams
Web Creation Stack (March 2026)
Framework Selection
| Framework |
Use When |
Zero JS |
Islands |
| Astro 6 |
Marketing, content, portfolios (DEFAULT) |
Yes |
Yes |
| Next.js 16 |
Full-stack React apps, dashboards |
No |
No |
| SvelteKit 5 |
Animation-heavy, mobile-first |
Compiles |
No |
- Astro acquired by Cloudflare (Jan 2026) — first-class Workers integration
- Next.js 16: Turbopack default, React Compiler stable, PPR
- SvelteKit: 50%+ less JS than Next.js
Animation & Motion
| Library |
Version |
Size |
Use When |
| GSAP |
3.14+ |
~28KB |
ScrollTrigger, pin, scrub, timeline (100% FREE — Webflow) |
| Motion |
12.x |
~18KB |
React animations, layout, gestures |
| Lenis |
1.3+ |
~14KB |
Smooth scroll (industry standard) |
| AutoAnimate |
0.9 |
~2KB |
Zero-config FLIP animations |
| Rive |
runtime ~78KB |
WASM |
Interactive animations (state machines) |
| Lottie (dotlottie) |
v3 |
varies |
After Effects animations |
3D & Visual Effects
| Library |
Size |
Use When |
| Three.js + R3F |
~150KB |
Full 3D scenes, scroll-linked |
| Spline |
embed |
No-code 3D (limited precision) |
| curtains.js |
~30KB |
DOM-synced WebGL (image distortion) |
| OGL |
~8KB |
Minimal WebGL, custom shaders |
| tsParticles |
config |
Particle effects (<1000 particles) |
Asset Pipeline
| Tool |
Purpose |
| Sharp.js |
Image processing (AVIF/WebP/responsive) |
| glyphhanger |
Font subsetting (60%+ reduction) |
| FFmpeg |
Video encoding, frame extraction |
| nano-banana |
AI image generation (Gemini) |
Deployment
| Platform |
Free Tier |
Best For |
| Cloudflare Pages |
Unlimited BW, 500 builds/mo |
DEFAULT |
| Vercel |
100GB BW, 100 deploys/day |
Next.js apps |
| Netlify |
100GB BW, 300 build min |
Static + forms |
RAG / Embeddings
| Component |
Default |
Alternative |
| Vector DB |
LanceDB (embedded, free) |
Qdrant, Pinecone |
| Embeddings |
OpenAI text-embedding-3-small ($0.02/MTok) |
Gemini 2 (multimodal), Voyage (domain) |
| PDF parsing |
PyMuPDF4LLM (Python) |
pdf-parse (Node.js) |
| Chunking |
Recursive 512tok/50overlap |
Semantic, hierarchical |
Forms & Validation
| Library |
Version |
Notes |
| react-hook-form |
v7 |
Production. v8 beta — AVOID |
| Zod |
v4 |
Schema shared client+server (SSOT) |
| Turnstile |
- |
Free CAPTCHA, unlimited (Cloudflare) |
CSS (Tailwind v4)
@theme directive replaces tailwind.config.ts
- OKLCH color space for perceptually uniform palettes
- CSS-first configuration
Anti-Compatible (Web Creation)
| Bad Combo |
Why |
Use Instead |
| GSAP + CSS scroll-timeline for same element |
Competing scroll handlers |
Pick one per section |
| Lenis + native smooth scroll (scroll-behavior) |
Double smooth-scrolling |
Lenis only |
| Motion + GSAP in same component |
Two animation systems fighting |
Pick one per component |
| react-hook-form v7 + v8 in same project |
Breaking API changes |
Stick to v7 |
| Astro + full React hydration |
Defeats zero-JS purpose |
Use Astro islands (client:*) |
Version Lock Warnings
When you see these in package.json, flag immediately:
"react": "^17" with Next.js 14+ → needs React 18+
"prisma": "^4" with Node 20+ → upgrade to Prisma 5+
"next-auth": "^4" with App Router → consider NextAuth 5 beta
"bullmq": "^3" with Redis 7+ → upgrade to BullMQ 5+
"gsap": "^3.11" → upgrade to 3.14+ (all plugins now free)
"framer-motion" → renamed to motion (npm install motion)
- Any
"*" version → pin immediately