The nitty gritty. Everything we build with.
If you're the type who reads a website for the technology page, this is for you. Every framework, language, library, and platform we build custom software with. In production today, running for real clients.
React 19 + TypeScript on Next.js 15. Tailwind for design.
Every custom system we ship has a web surface. Next.js on Vercel or on our own AWS. React 19 with server components where they help. TypeScript everywhere, so a refactor doesn't quietly break a page. Tailwind for design tokens the whole team can read.
Electron for cross-platform, native shells where it matters.
For desktop, Electron gives us a web codebase that ships to macOS, Windows, and Linux with one team. When we need real OS integration (background capture, accessibility, notifications), we drop into native APIs. WorkRecall and VIP Email Notifications both run on macOS today.
React Native + Expo for most. Native Swift or Kotlin when the app demands it.
React Native with Expo covers most business apps: one codebase, two stores, fast to iterate. When an app needs performance-critical native code (media, sensors, background services), we ship native Swift for iOS and Kotlin for Android alongside.
Python + FastAPI for most. Node when the ecosystem calls for it.
Python with FastAPI is our default: typed request models, async by design, OpenAPI docs for free, and the same language our AI, data, and scripting live in. Node/TypeScript when the frontend team owns the server too, or when a library ecosystem (Stripe, headless CMS) makes it the cleaner call.
PostgreSQL for anything relational. Supabase when it accelerates delivery.
PostgreSQL is the default relational store. Supabase when we want auth, row-level security, and a hosted Postgres in one package. Redis for caching and rate limits. SQLite for local-first apps (WorkRecall stores 16 GB of activity data on it). S3 + Glacier for files and archives.
Claude and OpenAI in the build loop and in the product.
Claude (Anthropic) is our default when we need reasoning quality: long-context work, structured extraction, and agent tools. OpenAI when a model tier or latency profile fits better. Hugging Face for open-weight models we run ourselves. AI is not a feature bolted on. It's built into the workflow and the shipped product.
AWS by default. Docker packaging. GitHub Actions ships it.
Docker packages the application. GitHub Actions builds, tests, and pushes to ECR. EC2 (or ECS Fargate when scaling matters) runs it. CloudFront + Cloudflare in front. Route 53 for DNS. Every deploy is one command to roll forward or back. Infrastructure lives in Terraform when the project is complex enough to warrant it.
Tests that actually run. Errors that actually page.
Pytest for backend, Vitest/Playwright for frontend. Playwright for end-to-end browser tests. Sentry for runtime errors with source maps. CloudWatch for infrastructure logs and alarms. Custom health checks and dashboards inside Mission Control when the client-facing view matters.
Whatever your business already runs on.
Custom software integrates with the tools your team is already using. Stripe for payments. QuickBooks for accounting. HubSpot, Salesforce, or Zoho for CRM. Google Workspace for identity. Twilio for SMS and voice. CallTrackingMetrics for call attribution. If your stack has an API, we speak to it.
If you got this far, you probably have a real problem to solve.
Discovery call is 30 minutes. Bring the workflow that's stuck, we'll bring an honest read on whether custom is the right answer and what the build would look like.