The Full-Stack AI Tech Stack That Actually Ships
The exact tech stack we use at Recruitly.io. React 19 SSR, polyglot databases, Python AI engine. Battle-tested on millions of users.
The Stack
Frontend āāā ReactJS 19 with Zustand + Next.js with 100% SSR (Just like JSPs) āāā ShadCN for UI + Ant Components where required āāā Firebase Authentication (Google Workspace and Microsoft 365 auth) Backend & Middleware āāā NodeJS with Express.js/Fastify + Pact.js for Contract Testing āāā MongoDB for data (Firebase's MongoDB compatibility) āāā Firebase for activity logs, person and company global data, emails āāā Elasticsearch for full-text and faceted searches āāā Qdrant for semantic searches and AI matches āāā BullMQ for queues/background jobs/batch tasks āāā Redis as BullMQ Storage and Application Cache āāā AWS S3 for File Storage with Uppy.io for client uploads AI Engine (Python) āāā Composio - Core AI middleware for external app integration āāā LangChain - AI agent reasoning & action execution āāā LlamaIndex - Fetching structured/unstructured CRM & external data āāā Qdrant (Vector DB) - AI agent memory & semantic search āāā BullMQ (Redis-based) - AI task/job queueing āāā Temporal.io - Complex multi-step workflow automation āāā (Optional) LangGraph - Only if Composio lacks multi-agent orchestration CI/CD & Monitoring āāā GitHub Actions + Docker-based deployments āāā Highlight.io for monitoring ReactJS Client + NodeJS Backend errors āāā Coralogix for audit logging Web Infrastructure & Security āāā Cloudflare āāā Traefik with Cloudflare Tunnels āāā Bunny CDN (for serving static content)
Frontend: Modern React with SSR
React 19 + Next.js SSR
We configure Next.js for 100% server-side rendering. Every page is rendered on the server, just like the old JSP days. No client-side hydration complexity. No loading spinners. Just HTML that works instantly.
Why? Because LLMs need context. When an AI agent accesses a page, it gets the full content immediately. Plus, users see content in milliseconds, not seconds.
Zustand for State Management
378 bytes. That's the entire Zustand state management library. No providers, no boilerplate, no complexity. Just a simple store that works.
const useStore = create((set) => ({
user: null,
setUser: (user) => set({ user }),
clearUser: () => set({ user: null })
}));
// That's it. Use it anywhere.ShadCN + Ant Design
ShadCN gives us copy-paste components we own. No black box. Ant Design fills the gaps with battle-tested complex components. Both work with Tailwind. No fighting CSS-in-JS.
Backend: Polyglot Persistence Done Right
The Database Strategy
One database for everything is a lie. We use four, each optimized for its purpose:
MongoDB (via Firebase)
Core business data. Documents match AI's nested JSON outputs perfectly. Firebase's new MongoDB compatibility gives us the best of both worlds.
Firebase Realtime Database
Activity logs, global data, real-time updates. WebSocket infrastructure built-in.
Elasticsearch
Full-text search with facets. Users expect Google-quality search. Elasticsearch delivers it.
Qdrant
Vector search for AI. Qdrant appears twice in our stack - backend for product search, AI engine for agent memory.
Queue Architecture
BullMQ handles all async processing. Built on Redis, battle-tested at scale. Handles retries, dead letter queues, and distributed processing out of the box.
Contract Testing with Pact
Frontend and backend teams can work independently. Pact ensures they stay in sync. No more "works on my machine" with API integrations.
AI Engine: Python Where It Matters
Node.js runs the web layer. Python runs the AI. Stop fighting this natural division.
Composio: The Hidden Gem
Composio handles integrations with 100+ external apps. OAuth flows, API abstractions, webhook management - all solved. Your AI agents can interact with Slack, Gmail, CRMs without writing integration code.
LangChain + LlamaIndex
LangChain for agent orchestration and reasoning loops. LlamaIndex for data ingestion and retrieval. They complement each other perfectly. Use both.
Temporal for Complex Workflows
When workflows span days or weeks with human approvals, Temporal handles the state. Survives restarts, handles retries, provides perfect audit trails.
Infrastructure: Simple but Bulletproof
Everything Through Cloudflare
DDoS protection, WAF, caching, tunnels - Cloudflare handles it all. Zero exposed ports. Everything goes through their network.
Traefik + Cloudflare Tunnels
No public IPs. No open ports. Traefik routes internally, Cloudflare Tunnels expose services securely. Sleep well at night.
Bunny CDN
10x cheaper than CloudFront. Same performance. Bunny CDN includes automatic image optimization.
Monitoring: See Everything
Highlight.io
Highlight.io provides session replay + error tracking in one tool. See exactly what users did before the error. Invaluable for debugging AI interactions.
Coralogix
Coralogix provides ML-powered log analysis. Finds anomalies before users complain. Compliance-ready audit trails built in.
Why This Stack Works
Speed to Market
Every choice optimizes for shipping. No over-engineering. No resume-driven development.
Scale Without Pain
Each component has scaled to millions of users. No rewrites needed.
Developer Experience
Tools developers actually enjoy using. Happy developers ship faster.
AI-First Architecture
Not retrofitted for AI. Built with AI workloads in mind from day one.
The Bottom Line
This stack ships. We know because we ship with it daily at Recruitly.io. Every choice is validated in production with real users and real scale.
Copy it. Adapt it. Ship it.
Need help implementing this stack?
We've done it 50+ times. Let's get you to production.
Schedule Architecture Review