Build Custom / Stack

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.

Web applications

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.

Next.js 15
App Router, server components
React 19
UI framework
TypeScript
Typed everywhere
Tailwind CSS 4
Design system
Vite
Build tool where Next isn't the fit
Desktop applications

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.

Electron
Cross-platform desktop shell
Swift
Native macOS integrations
TypeScript
Renderer + main process
React
Desktop UI, same components as web
Mobile applications

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.

React Native
Cross-platform UI
Expo
Build + deployment pipeline
Swift
Native iOS when required
Kotlin
Native Android when required
Backend services + APIs

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.

Python 3.12
Primary backend language
FastAPI
Async API framework
Node.js
Frontend-adjacent backend
TypeScript
Same language across the stack
Data + storage

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.

PostgreSQL 16
Primary relational store
Supabase
Hosted Postgres + auth + RLS
Redis
Cache + rate limits + queues
SQLite
Local-first storage
AI + models

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.

Anthropic Claude
Reasoning, tools, long context
OpenAI
Alternate models + Whisper + vision
Hugging Face
Open-weight models, embeddings
Instructor + Pydantic
Structured outputs from LLMs
Infrastructure + deploy

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.

AWS (EC2, ECR, S3, RDS)
Full stack cloud
Docker
Application packaging
GitHub Actions
CI/CD
Cloudflare
DNS + edge protection
Quality + observability

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.

Pytest
Backend unit + integration
Playwright
End-to-end browser tests
Sentry
Runtime errors, session replay
CloudWatch
Infra logs + alarms
Integrations we plug into

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.

Stripe
Payments + billing
Google Workspace
Auth + Docs + Calendar
Twilio
SMS + voice
OpenAPI clients
For any API with a spec

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.