Tools we deliver in.
A snapshot of the stack we use day-to-day. We're language-agnostic in principle, opinionated in practice.
Frontend
Modern web experiences with strict performance budgets.
- TypeScript
- React
- Next.js
- Tailwind CSS
- Vue
- Svelte
- Astro
- Storybook
Backend
Type-safe services with strong domain modeling.
- Node.js
- Go
- Python
- Rust
- Elixir
- Java / Kotlin
- C#
Mobile
Native and cross-platform with App Store-ready polish.
- Swift
- SwiftUI
- Kotlin
- Jetpack Compose
- React Native
- Expo
- Flutter
Cloud
Multi-cloud capability with managed-service preference.
- AWS
- GCP
- Azure
- Cloudflare
- Vercel
- Fly.io
- Supabase
Data
Operational and analytical stores, plus the pipelines between them.
- Postgres
- MySQL
- Redis
- Kafka
- Snowflake
- BigQuery
- ClickHouse
- DuckDB
AI / ML
Model providers, training tooling, and retrieval infrastructure.
- OpenAI
- Anthropic
- PyTorch
- vLLM
- LangGraph
- Pinecone
- pgvector
- Hugging Face
DevOps
Infrastructure as code, CI/CD, and observability.
- Terraform
- Pulumi
- Kubernetes
- GitHub Actions
- Datadog
- Grafana
- OpenTelemetry
- Sentry
How we pick
We choose tools that the client's team can run after we leave — not what's hot this week.
For most product engagements we default to TypeScript and Next.js on the web, with Go or Python on the backend. The reason is boring: the hiring market for these languages is broad, the runtimes are durable, and the tooling has stabilized.
We deviate when the work demands it. Rust shows up in performance-critical infrastructure. Elixir is a fit for high-fanout real-time systems. Kotlin or Swift are non-negotiable when native mobile UX matters.
What we don't do: choose tools because we want to learn them. The project isn't a training exercise.
Want to talk stack?
Tell us where you are today — we'll come back with a recommendation that fits the work and your team.