Back / Ctrl+Space

NestJS • Next.js • Prisma • GraphQL • LangGraph • TanStack

Playground

A personal full-stack and AI lab in one monorepo: a production-shaped NestJS API, a Next.js client focused on performance and real integrations, and a separate Python space for LangGraph agents, tools, and notebooks. The point is not to ship a clone of a tutorial—it's to connect ideas end-to-end and keep a paper trail of decisions.

I document what I build in Notion and Markdown (including notes under client/docs). I lean on official docs and release notes—there is no magic, only reading carefully and iterating.

What lives in the repo

Same mental model as shipping a small product: backend contracts, a client that consumes them, and experiments that don't belong in production—but still follow clear structure.

Backend (NestJS)

GraphQL, REST, Socket.IO, Prisma/PostgreSQL, JWT and OAuth flows, Swagger, and AI modules (Vercel AI SDK, Gemini, code execution, file analysis). Observability hooks like Sentry sit where a real API would.

Client (Next.js)

App Router, TanStack Query/Table/Virtual/Form, GraphQL + WebSocket clients, chat and realtime demos, auth UX, and performance routes (virtualized lists, bundle-aware patterns). The UI is a place to stress-test ideas, not only paint screens.

LangGraph (Python)

Notebooks for graphs, state, and routing; scripts for ReAct-style agents, memory, tools, and RAG. Isolated from the TypeScript apps so I can learn graph-based LLM workflows without mixing runtimes.

10k users performance: the difference between the 3 approaches

The section in client/features/performance.tsx compares the same data volume with three rendering strategies so the impact is easy to see in practice.

Bad performance

Fetches and renders all 10k users immediately. This increases initial render time, mounts too many DOM nodes, and hurts responsiveness.

react-window

Virtualizes rows so only visible items are mounted. It reduces work and memory usage, improving scroll and interaction.

TanStack Virtualized

Also virtualized, with strong control and composability. It keeps large lists smooth while integrating well with richer UI patterns.

Result: both virtualized versions perform much better than the non-virtualized 10k baseline.

Proof: bundle analysis, Web Vitals, and Lighthouse

These screenshots document the optimization impact and overall quality status across the app.

Client bundle analyzer (before vs after)

Client bundle treemap before optimization
Before optimization.
Client bundle treemap after optimization
After optimization.

Node.js bundle analyzer (before vs after)

Node.js bundle treemap before optimization
Before optimization.
Node.js bundle treemap after optimization
After optimization.

Overall page health

Web Vitals output with good FCP, TTFB, LCP, and CLS values
Web Vitals across pages are in the good range.
Lighthouse results all green for performance, accessibility, best practices, and SEO
Lighthouse is green across all categories.

Repository layout

The monorepo is intentionally split so each runtime stays focused. The root README is the source of truth for folders and capabilities.

backend/     → NestJS API (REST, GraphQL, WebSockets, Prisma, AI modules)
client/      → Next.js App Router, TanStack, chat, demos, docs
LangGraph/   → Python notebooks + agents (graphs, tools, RAG)

AI section approach

The AI card in client/features/live-stream.tsx links to three focused routes so each capability can be tested independently.

Admin

Database-focused tools to fetch, search, update, and delete users from the app with controlled server-side actions.

Realtime Voice Chat

Realtime conversation flow for general chat, focused on streaming UX and live interactions.

ChatEGY

Tool-driven assistant workflows: deep search, code execution, and file analysis (for images and PDF inputs).

API route design (`/api/chat`)

In client/app/api/chat/route.ts, I use @tanstack/ai with an OpenAI adapter and stream the response as Server-Sent Events. The route is force-dynamic, validates environment configuration early, and exposes explicit tools (get user data, update, delete, search, totals) so model output can trigger concrete server actions safely.

Source and app

Explore the code or jump back into the running client.

Tools and libraries (high level)

TypeScriptNestJSNext.jsReactPrismaPostgreSQLGraphQLApolloSocket.IOTanStack QueryTanStack TableTanStack VirtualZodZustandVercel AI SDKLangGraphLangChainSentryTailwind CSSDockerPythonFastAPI

Deployment and containerization

The project is containerized with Docker, and images are published to Docker Hub.

Docker Hub: mosayed2002