The full stack we use on our own chatbot (and why it's boring)
Next.js + FastAPI + MySQL + Ollama + Apache + systemd. Nothing on this list is new. That's the argument.
People ask what's under the hood of recent AI-adjacent side projects. The honest answer is: nothing new. Every layer is technology that was boring in 2023. Here's the whole stack and why each choice stayed.
Frontend
- Next.js 14 — App Router, TypeScript
- Tailwind CSS — no component library, no design-system framework
react-markdown+remark-gfm— for anywhere markdown renders
Backend (when a Next.js route isn't enough)
- FastAPI — Python 3.12, async
- MySQL — transactional data (users, bookings, leads)
- ClickHouse — when there's actual analytics volume
AI layer
- Ollama — inference daemon
- OpenAI SDK pointed at Ollama — same contract, different endpoint
Infrastructure
- Ubuntu 24.04 on a standard VPS
- Apache 2 — reverse proxy,
ProxyPass / flushpackets=onfor streaming endpoints - systemd — process management
- Let's Encrypt — TLS
What's deliberately absent
- No Vercel / Netlify / Cloudflare Workers. Every vendor dependency is an unknown cost curve and an inherited obligation for whoever maintains the site next.
- No Kubernetes. One VPS + systemd is enough for 99% of what small technical operations need. The complexity of k8s only pays off at a scale most sites never reach.
- No GraphQL. REST is simpler and every developer already reads it.
- No frontend state library beyond React's hooks. If the app needs Redux, it probably needs a refactor instead.
Why "boring"
The people who will maintain a system at month 30 — when the original builder is on something else — have no context for exotic choices. Every load-bearing exotic library is a future landmine.
Tailwind + Next.js + FastAPI + MySQL has been a mainstream stack since 2023. Tutorials exist. Stack Overflow has answers. Any junior developer can read it. That's the feature, not a limitation.
When exotic becomes correct
Reach for newer tooling when the boring stack genuinely fails: real-time sub-100ms collaborative editing, 10M+ concurrent connections, GPU-heavy ML pipelines, edge-of-network personalization at scale. None of these describe "a website with a chatbot and a booking form."
The discipline is knowing when you're actually in that territory versus choosing novelty because it's novel.
— Alex Kargin. More engineering writing at kargin-utkin.com.