Tech Stack
Status: Accepted Owner: @bilal Last Updated: 2026-02-15
Overview
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router) |
| Frontend | React 19, Tailwind CSS 4, shadcn/ui, Apollo Client 4 |
| Backend | Prisma 6, Pothos (GraphQL schema), GraphQL Yoga 5 |
| Database | Supabase PostgreSQL 16 + pgvector |
| Auth | Supabase Auth (SSR, JWT) |
| Storage | Supabase Storage |
| AI (primary) | Claude (Anthropic) |
| AI (fallback) | OpenAI, Kimi, GLM |
| AI (embeddings) | OpenAI text-embedding-3-small (1536 dim) |
| Twilio + Meta WhatsApp Cloud API | |
| Voice | VAPI / Retell |
| SMS | Twilio |
| SendGrid | |
| Testing | Vitest |
| CI | GitHub Actions |
| Package manager | pnpm |
LLM Providers
| Provider | Model | Role |
|---|---|---|
| Claude (Anthropic) | claude-sonnet-4 | Primary generation + tool use |
| OpenAI | gpt-4o | Fallback generation |
| OpenAI | text-embedding-3-small | Embeddings (1536 dim) |
| Kimi (Moonshot) | moonshot-v1-8k | Experimental |
| GLM (Zhipu) | glm-4-flash | Experimental |
Automatic fallback chain: Claude → OpenAI → Kimi → GLM → raw chunks.
Development Principles
- Data model first — Schema before implementation
- Modular monolith — Single Next.js app, structured by domain
- GraphQL over REST — Flexible queries, end-to-end type safety
- Minimal DevOps —
dev→prod, no staging initially
Non-Functional Requirements
| Category | Requirement |
|---|---|
| Performance | Dashboard load < 1.5s, API < 500ms |
| Reliability | Zero dropped issues, retry queue for notifications |
| Security | JWT auth, full RLS, prompt injection protection |
| Scalability | 3,000+ properties |
| Availability | 99.5% uptime target |
Future Considerations
- Multi-region (Supabase supports regional deployment)
- Mobile app (React Native + Apollo Client)
- GraphQL Federation (if monolith needs extraction)
- Vector store migration (abstraction ready for Qdrant/Pinecone)
See also: System Design, RAG Pipeline