Technology
Opinionated, boring, modern. We deviate only when a project genuinely needs it. Here's every layer we touch, and why.
We pick the model per step, not per project. Claude for reasoning and long context. GPT-4o for tool use and realtime voice. Gemini for cost + multimodal. Llama + Mistral for on-prem and fine-tuned workloads.
For simple chains, LangChain. For stateful multi-step agents, LangGraph. For long-running durable workflows, Temporal. For everything in between, our own thin orchestration layer — because the frameworks all get something wrong at scale.
pgvector gets 90% of projects over the line — same DB, same backups, same auth. We move to Pinecone or Weaviate only when shard-level tenant isolation or >10M-doc latency forces it.
Fly.io for anything that wants to live close to users. AWS for enterprise compliance. GCP for data warehouses. Vercel for public-facing frontends. Terraform for anything we want to recreate.
Next.js App Router, TypeScript, TanStack Query, Tailwind, shadcn/ui, Zod validation shared with the backend. The goal: delete a column in Postgres, have the TypeScript compiler yell at you from the frontend.
We write the rubric before the agent. LangSmith and Braintrust for offline evals. Helicone for live cost and latency. Custom judge models for anything with subjective outputs.
We publish architecture memos for most projects. Book a call and we'll share the relevant ones.